free_member($member_id); $mod_divert->create_member($member_id); $mod_divert->divert_member($member_id, $minfo->available_predeposit(), $minfo->freeze_predeposit()); [$succ, $available_amounts, $freeze_amounts] = $mod_divert->stat_member($member_id); if (round($available_amounts - $minfo->available_predeposit(), 4) == 0.0000) { Log::record("available_predeposit = {$available_amounts} is ok", Log::DEBUG); } else { Log::record("available_predeposit = {$available_amounts} is fail", Log::ERR); } if (round($freeze_amounts - $minfo->freeze_predeposit(), 4) == 0.0000) { Log::record("freeze_predeposit = {$freeze_amounts} is ok", Log::DEBUG); } else { Log::record("freeze_predeposit = {$freeze_amounts} is fail", Log::ERR); } } #重设离散账号维度 public function resize_member($member_id) { $trans = null; try { $mod_divert = Model('account_divert'); $trans = new trans_wapper($mod_divert,__METHOD__); [$succ,$available_amounts,$freeze_amounts] = $mod_divert->check_member($member_id); if(!$succ) { $mod_divert->free_member($member_id); $mod_divert->create_member($member_id); $mod_divert->divert_member($member_id,$available_amounts,$freeze_amounts); } $trans->commit(); return true; } catch (Exception $ex) { $trans->rollback(); Log::record($ex->getMessage(), Log::ERR); return false; } } public function init_merchant($mchid) { $trans = null; try { $mchinfo = Model('merchant')->getMerchantInfo(['mchid' => $mchid]); $member_id = intval($mchinfo['admin_id']); $mod_divert = Model('account_divert'); $minfo = new member_info($member_id); $trans = new trans_wapper($mod_divert, __METHOD__); $mod_divert->free_member($member_id); $mod_divert->create_member($member_id); $mod_divert->divert_member($member_id, $minfo->available_predeposit(), $minfo->freeze_predeposit()); $trans->commit(); return true; } catch (Exception $ex) { $trans->rollback(); Log::record($ex->getMessage(), Log::ERR); return false; } } public function init_merchants() { $mids = $this->unique_mchmids(); foreach ($mids as $mid) { $trans = null; try { $mod_divert = Model(''); $trans = new trans_wapper($mod_divert,__METHOD__); $this->init_member($mid); $trans->commit(); } catch (Exception $ex) { $trans->rollback(); Log::record($ex->getMessage(), Log::ERR); } } } private function unique_mchmids() { $mids = []; $i = 0; while (true) { $start = $i * 100; $items = Model('')->table('merchant')->field('admin_id')->where(['mchid' => ['gt',0]])->order('mchid asc')->limit("{$start},100")->select(); if(empty($items)) { break; } $i++; foreach ($items as $item) { $mids[] = intval($item['admin_id']); } } $mids = array_unique($mids); return $mids; } public function update_account($time) { $mod_divert = Model('account_divert'); $mids = $mod_divert->need_upmembers($time); foreach ($mids as $mid) { [$succ, $available_amounts, $freeze_amounts] = $mod_divert->stat_member($mid); if($succ) { Model('member')->editMember(['member_id' => $mid],['available_predeposit' => $available_amounts,'freeze_predeposit' => $freeze_amounts]); } } } //为每个通道创建一个充值监控账户 public function init_channels_account() { $noaccounters = function () { $result = []; $i = 0; while (true) { $start = $i * 100; $items = Model('')->table('refill_provider')->field('*')->where(['provider_id' => ['gt',0]])->order('provider_id asc')->limit("{$start},100")->select(); if(empty($items)) { break; } $i++; foreach ($items as $item) { $account_id = intval($item['account_id']); if($account_id <= 0 ) { $result[] = ['provider_id' => $item['provider_id'], 'name' => $item['name']]; } } } return $result; }; $method = __METHOD__; $account_creater = function ($provider) use ($method) { $model_member = Model('member'); $trans = new trans_wapper($model_member,$method); try { $chname = $provider['name']; $member_info = []; $member_info['member_name'] = "{$chname}-refill"; $member_info['member_passwd'] = md5($chname); $insert_id = $model_member->addMember($member_info); if($insert_id <= 0) { $trans->rollback(); return false; } else { $mod_provider = Model('refill_provider'); $mod_provider->editProvider(['account_id' => $insert_id],['provider_id' => $provider['provider_id']]); $trans->commit(); return true; } } catch (Exception $ex) { $trans->rollback(); Log::record($ex->getMessage(),Log::DEBUG); return false; } }; $providers = $noaccounters(); foreach ($providers as $provider) { $ret = $account_creater($provider); if($ret) { Log::record("{$provider['name']} create account success",Log::DEBUG); } else { Log::record("{$provider['name']} create account fail",Log::DEBUG); } } } public function init_channels() { $mids = $this->unique_chmids(); foreach ($mids as $mid) { $trans = null; try { $mod_divert = Model(''); $trans = new trans_wapper($mod_divert,__METHOD__); $this->init_member($mid); $trans->commit(); } catch (Exception $ex) { $trans->rollback(); Log::record($ex->getMessage(), Log::ERR); } } } public function unique_chmids() { $mid_getter = function () { $result = []; $i = 0; while (true) { $start = $i * 100; $items = Model('')->table('refill_provider')->field('account_id')->where(['provider_id' => ['gt',0]])->order('provider_id asc')->limit("{$start},100")->select(); if(empty($items)) { break; } $i++; foreach ($items as $item) { $result[] = intval($item['account_id']); } } $result = array_unique($result); return $result; }; $mids = $mid_getter(); return $mids; } }