SyncDespositJobController.php 3.3 KB

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