SyncDespositJobController.php 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace console\controllers;
  3. use backend\models\Deposit;
  4. use backend\models\SyncDesposit;
  5. use common\helpers\MtKit;
  6. use Yii;
  7. class SyncDespositJobController extends BaseJobController
  8. {
  9. public function actionRun()
  10. {
  11. if (isset(Yii::$app->params['isAutoSyncDesposit']) && Yii::$app->params['isAutoSyncDesposit'] == 1) {
  12. $isAutoSyncDeposit = true;
  13. } else {
  14. $isAutoSyncDeposit = false;
  15. }
  16. if ($isAutoSyncDeposit == false) {
  17. return;
  18. }
  19. $beginTime = time();
  20. $this->outLog("Job start " . date('Y-m-d H:i:s'));
  21. if ($this->redis->set("crm_service:SyncDespositJob", "1", "EX", "60", "NX") == false) {
  22. $this->outLog("Job start failed, lock exist, exit.");
  23. return;
  24. }
  25. $skipLogins = [];
  26. $maxPk = null;
  27. $limit = 100;
  28. while (true) {
  29. if (time() - $beginTime > 55) {
  30. // 退出脚本
  31. break;
  32. }
  33. $query = SyncDesposit::find()->andWhere(['!=','is_sync', 1])->orderBy('id asc')->limit($limit)->asArray();
  34. if ($maxPk != null) {
  35. $query->andWhere(['>', 'id', $maxPk]);
  36. }
  37. $syncDesposits = $query->all();
  38. if (empty($syncDesposits)) {
  39. break;
  40. }
  41. foreach ($syncDesposits as $syncDesposit) {
  42. $maxPk = $syncDesposit['id'];
  43. if (time() - $beginTime > 55) {
  44. // 退出脚本
  45. break;
  46. }
  47. // 每个mt4账户1分钟只入一次金 防止请求频繁
  48. if (isset($skipLogins[$syncDesposit['login']])) {
  49. continue;
  50. }
  51. $skipLogins[$syncDesposit['login']] = 1;
  52. $affectRows = SyncDesposit::updateAll(['is_sync' => 2], ['id' => $syncDesposit['id'], 'is_sync' => 0]);
  53. if ($affectRows == 0) {
  54. $this->outLog("Desposit(id: {$syncDesposit['id']}) is_sync update fail({$syncDesposit['is_sync']} => 2), skipped.");
  55. continue;
  56. }
  57. //根据同步入金表的订单查询入金表的数据
  58. $result = Deposit::find()->where(['order_sn' =>$syncDesposit['memo']])->one();
  59. //调用入金的接口,这里传递进去id
  60. $isSuccess = MtKit::deposit($syncDesposit['login'], $syncDesposit['amount'], $syncDesposit['comment'],$result['id']); //尾部增加了一个字段
  61. if ($isSuccess == false) {
  62. $this->outLog("Desposit(id: {$syncDesposit['id']}) fail.");
  63. continue;
  64. }
  65. $this->outLog("Desposit(id: {$syncDesposit['id']}) success.");
  66. $affectRows = SyncDesposit::updateAll(['is_sync' => 1], ['id' => $syncDesposit['id']]);
  67. if ($affectRows == 0) {
  68. $this->outLog("Desposit(id: {$syncDesposit['id']}) is_sync update fail({$syncDesposit['is_sync']} => 1).");
  69. }
  70. Deposit::updateAll(['mt4_status' => 1], ['order_sn' => $syncDesposit['memo'], 'type' => 1]);
  71. usleep(50000); // sleep 50ms
  72. }
  73. if (count($syncDesposits) != $limit) {
  74. break;
  75. }
  76. }
  77. $this->outLog("Job end, " . date('Y-m-d H:i:s'));
  78. $this->redis->del("crm_service:SyncDespositJob");
  79. }
  80. }