MerchantCrontabController.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. /**
  3. * 商户订单-打赏后 走模式
  4. */
  5. namespace addons\HiGo\console\controllers;
  6. use addons\HiGo\common\enums\HiGoEnum;
  7. use addons\HiGo\common\logic\HiValueLogic;
  8. use addons\HiGo\common\models\HigoMerchantRewardLog;
  9. use common\enums\OrderStatusEnum;
  10. use common\enums\RedisKeyEnum;
  11. use common\enums\StatusEnum;
  12. use common\helpers\LockHelper;
  13. use common\models\goods\GoodsMarketing;
  14. use common\models\mall\Mall;
  15. use common\models\mall\MallAddons;
  16. use common\models\order\Order;
  17. use yii\console\Controller;
  18. use yii\console\ExitCode;
  19. class MerchantCrontabController extends Controller
  20. {
  21. /**
  22. * 打赏完成后订单模式处理
  23. * @return void
  24. */
  25. public function actionOrderToMode()
  26. {
  27. try {
  28. \Yii::$app->db->close();
  29. $lock_key = RedisKeyEnum::suffix('lock_higo_order_to_mode');
  30. $identification = uniqid();
  31. if (!LockHelper::lock($lock_key, $identification, 300, 10)) throw new \Exception('打赏完成后订单模式处理进入处理阶段,当前访问过多');
  32. $log_list = HigoMerchantRewardLog::find()->where(['handle_status' => 1,'status' => StatusEnum::ENABLED,
  33. 'mode_status' => HigoMerchantRewardLog::MODE_STATUS_WAIT
  34. ])->limit(1000)->all();
  35. foreach($log_list as $log){
  36. /** @var HigoMerchantRewardLog $log */
  37. $mall_id = $log->mall_id;
  38. if (MallAddons::isInstall($mall_id, HiGoEnum::ADDONS_NAME) == 0){
  39. //商城可能卸载了 插件
  40. $log->mode_status = HigoMerchantRewardLog::MODE_STATUS_FAIL;
  41. $log->save();
  42. continue;
  43. }
  44. if($log->source_table != Order::tableName()) continue;
  45. //触发事件
  46. $event = new \addons\HiGo\common\events\MerchantOrderPayEvent($log->mall_id);
  47. \Yii::$app->services->events->dispatch($event, ['id' => $log->source_table_id], $event->listeners);
  48. $log->mode_status = HigoMerchantRewardLog::MODE_STATUS_FROZEN;
  49. $log->save();
  50. }
  51. LockHelper::uLock($lock_key,$identification);
  52. return ExitCode::OK;
  53. } catch (\Exception $e) {
  54. $msg = '打赏完成后订单模式处理,执行结束失败任务处理出错:' . $e->getMessage() . PHP_EOL;
  55. echo $msg;
  56. \Yii::error($msg);
  57. \Yii::getLogger()->flush(true);
  58. return ExitCode::UNSPECIFIED_ERROR;
  59. }
  60. }
  61. public function actionOrderFinishMode()
  62. {
  63. try {
  64. \Yii::$app->db->close();
  65. $lock_key = RedisKeyEnum::suffix('lock_higo_order_finish_mode');
  66. $identification = uniqid();
  67. if (!LockHelper::lock($lock_key, $identification, 300, 10)) throw new \Exception('打赏完成后订单模式处理进入处理阶段,当前访问过多');
  68. $log_list = HigoMerchantRewardLog::find()->where(['handle_status' => 1,'status' => StatusEnum::ENABLED,
  69. 'mode_status' => HigoMerchantRewardLog::MODE_STATUS_FROZEN
  70. ])->limit(1000)->all();
  71. foreach($log_list as $log){
  72. /** @var HigoMerchantRewardLog $log */
  73. $mall_id = $log->mall_id;
  74. $order_id = $log->source_table_id;
  75. if (MallAddons::isInstall($mall_id, HiGoEnum::ADDONS_NAME) == 0){
  76. //商城可能卸载了 插件
  77. // $log->mode_status = HigoMerchantRewardLog::MODE_STATUS_FAIL;
  78. // $log->save();
  79. continue;
  80. }
  81. if($log->source_table != Order::tableName()) continue;
  82. //判断结算方式,订单是否完成
  83. //$setting = \Yii::$app->services->setting->addons->get($mall_id, HiGoEnum::ADDONS_NAME, 'basic');
  84. $order = Order::findOne($order_id);
  85. if($order['order_status'] != OrderStatusEnum::ACCOMPLISH) continue;
  86. //触发事件
  87. $event = new \addons\HiGo\common\events\MerchantOrderFinishEvent($log->mall_id);
  88. \Yii::$app->services->events->dispatch($event, ['id' => $log->source_table_id], $event->listeners);
  89. $log->mode_status = HigoMerchantRewardLog::MODE_STATUS_FINISH;
  90. $log->save();
  91. }
  92. LockHelper::uLock($lock_key,$identification);
  93. return ExitCode::OK;
  94. } catch (\Exception $e) {
  95. $msg = '打赏完成后订单模式处理,执行结束失败任务处理出错:' . $e->getMessage() . PHP_EOL;
  96. echo $msg;
  97. \Yii::error($msg);
  98. \Yii::getLogger()->flush(true);
  99. return ExitCode::UNSPECIFIED_ERROR;
  100. }
  101. }
  102. }