db->close(); $lock_key = RedisKeyEnum::suffix('lock_higo_order_to_mode'); $identification = uniqid(); if (!LockHelper::lock($lock_key, $identification, 300, 10)) throw new \Exception('打赏完成后订单模式处理进入处理阶段,当前访问过多'); $log_list = HigoMerchantRewardLog::find()->where(['handle_status' => 1,'status' => StatusEnum::ENABLED, 'mode_status' => HigoMerchantRewardLog::MODE_STATUS_WAIT ])->limit(1000)->all(); foreach($log_list as $log){ /** @var HigoMerchantRewardLog $log */ $mall_id = $log->mall_id; if (MallAddons::isInstall($mall_id, HiGoEnum::ADDONS_NAME) == 0){ //商城可能卸载了 插件 $log->mode_status = HigoMerchantRewardLog::MODE_STATUS_FAIL; $log->save(); continue; } if($log->source_table != Order::tableName()) continue; //触发事件 $event = new \addons\HiGo\common\events\MerchantOrderPayEvent($log->mall_id); \Yii::$app->services->events->dispatch($event, ['id' => $log->source_table_id], $event->listeners); $log->mode_status = HigoMerchantRewardLog::MODE_STATUS_FROZEN; $log->save(); } LockHelper::uLock($lock_key,$identification); return ExitCode::OK; } catch (\Exception $e) { $msg = '打赏完成后订单模式处理,执行结束失败任务处理出错:' . $e->getMessage() . PHP_EOL; echo $msg; \Yii::error($msg); \Yii::getLogger()->flush(true); return ExitCode::UNSPECIFIED_ERROR; } } public function actionOrderFinishMode() { try { \Yii::$app->db->close(); $lock_key = RedisKeyEnum::suffix('lock_higo_order_finish_mode'); $identification = uniqid(); if (!LockHelper::lock($lock_key, $identification, 300, 10)) throw new \Exception('打赏完成后订单模式处理进入处理阶段,当前访问过多'); $log_list = HigoMerchantRewardLog::find()->where(['handle_status' => 1,'status' => StatusEnum::ENABLED, 'mode_status' => HigoMerchantRewardLog::MODE_STATUS_FROZEN ])->limit(1000)->all(); foreach($log_list as $log){ /** @var HigoMerchantRewardLog $log */ $mall_id = $log->mall_id; $order_id = $log->source_table_id; if (MallAddons::isInstall($mall_id, HiGoEnum::ADDONS_NAME) == 0){ //商城可能卸载了 插件 // $log->mode_status = HigoMerchantRewardLog::MODE_STATUS_FAIL; // $log->save(); continue; } if($log->source_table != Order::tableName()) continue; //判断结算方式,订单是否完成 //$setting = \Yii::$app->services->setting->addons->get($mall_id, HiGoEnum::ADDONS_NAME, 'basic'); $order = Order::findOne($order_id); if($order['order_status'] != OrderStatusEnum::ACCOMPLISH) continue; //触发事件 $event = new \addons\HiGo\common\events\MerchantOrderFinishEvent($log->mall_id); \Yii::$app->services->events->dispatch($event, ['id' => $log->source_table_id], $event->listeners); $log->mode_status = HigoMerchantRewardLog::MODE_STATUS_FINISH; $log->save(); } LockHelper::uLock($lock_key,$identification); return ExitCode::OK; } catch (\Exception $e) { $msg = '打赏完成后订单模式处理,执行结束失败任务处理出错:' . $e->getMessage() . PHP_EOL; echo $msg; \Yii::error($msg); \Yii::getLogger()->flush(true); return ExitCode::UNSPECIFIED_ERROR; } } }