params['isAutoSyncDesposit']) && Yii::$app->params['isAutoSyncDesposit'] == 1) { $isAutoSyncDeposit = true; } else { $isAutoSyncDeposit = false; } if ($isAutoSyncDeposit == false) { return; } $beginTime = time(); $this->outLog("Job start " . date('Y-m-d H:i:s')); if ($this->redis->set("aike_service:SyncDespositJob", "1", "EX", "60", "NX") == false) { $this->outLog("Job start failed, lock exist, exit."); return; } $skipLogins = []; $maxPk = null; $limit = 100; while (true) { if (time() - $beginTime > 55) { // 退出脚本 break; } $query = SyncDesposit::find()->andWhere(['is_sync' => 0])->orderBy('id asc')->limit($limit)->asArray(); if ($maxPk != null) { $query->andWhere(['>', 'id', $maxPk]); } $syncDesposits = $query->all(); if (empty($syncDesposits)) { break; } foreach ($syncDesposits as $syncDesposit) { $maxPk = $syncDesposit['id']; if (time() - $beginTime > 55) { // 退出脚本 break; } // 每个mt4账户1分钟只入一次金 防止请求频繁 if (isset($skipLogins[$syncDesposit['login']])) { continue; } $skipLogins[$syncDesposit['login']] = 1; $affectRows = SyncDesposit::updateAll(['is_sync' => 2], ['id' => $syncDesposit['id'], 'is_sync' => 0]); if ($affectRows == 0) { $this->outLog("Desposit(id: {$syncDesposit['id']}) is_sync update fail({$syncDesposit['is_sync']} => 2), skipped."); continue; } $isSuccess = MtKit::deposit($syncDesposit['login'], $syncDesposit['amount'], $syncDesposit['comment']); if ($isSuccess == false) { $this->outLog("Desposit(id: {$syncDesposit['id']}) fail."); continue; } $this->outLog("Desposit(id: {$syncDesposit['id']}) success."); $affectRows = SyncDesposit::updateAll(['is_sync' => 1], ['id' => $syncDesposit['id']]); if ($affectRows == 0) { $this->outLog("Desposit(id: {$syncDesposit['id']}) is_sync update fail({$syncDesposit['is_sync']} => 1)."); } usleep(50000); // sleep 50ms } if (count($syncDesposits) != $limit) { break; } } $this->outLog("Job end, " . date('Y-m-d H:i:s')); $this->redis->del("aike_service:SyncDespositJob"); } }