services->rabbitMq->push(RabbitMqEnum::EXCHANGE_ORDER, RabbitMqEnum::ORDER_QUEUE, $data, self::class, 'handleQueue'); } public function handleQueue($data){ var_dump('执行限时补货补货'); $lock_key = RedisKeyEnum::suffix(RedisKeyEnum::LOCK_CLOUD_STOCK_DELAY, $data['mall_id'] . ':' . $data['agent_user_id'] . ':' . $data['goods_id']); $identification = uniqid(); try { if(!isset($data['is_lock'])||!empty($data['is_lock'])){ if (!LockHelper::lock($lock_key, $identification, 5, 10)) { var_dump('加锁失败'); return true; } } $model = CloudStockPushDelayLog::findOne([ 'mall_id' => $data['mall_id'], 'stock_log_id' => $data['stock_log_id'], 'agent_user_id' => $data['agent_user_id'], 'status'=>StatusEnum::ENABLED ]); if (empty($model)) return true; // 根据需求。如果当前订单已经申请售后,并且订单已经售后完成,则不在进行补货 if ($data['order_type'] == 'buying') { $order = CloudStockBuyingOrder::findOne(['id' => $data['order_id']]); $mainOrder = Order::findOne(['id' => $order['order_id']]); if (!empty($mainOrder) && $mainOrder['is_feedback'] == 2) return true; } $user_parent_agent = CloudStockAgent::findOne(['user_id' => $data['agent_user_id'], 'mall_id' => $data['mall_id'], 'status' => StatusEnum::ENABLED]); $order_no = ''; $store_id = 0; switch ($data['order_type']) { case 'buying': $order = CloudStockBuyingOrder::findOne(['id' => $data['order_id']]); $class = BuyDeductionLogic::class; $main_order = Order::findOne(['id' => $order['order_id']]); $order_no = $main_order['order_no']; $store_id = $main_order['store_id']; break; case 'fill': $order = CloudStockFillOrder::findOne(['id' => $data['order_id']]); $class = FillDeductionLogic::class; $order_no = $order['order_no']; break; default: } if (!empty($class) && !empty($order)) { $user = User::findOne(['id' => $data['user_id']]); $stock_log = CloudStockGoodsStockLog::findOne(['id' => $data['stock_log_id']]); $not_yet_num = $model['not_yet_num']; if ($not_yet_num > 0) { $deduction_logic = new $class($user, $user_parent_agent, $stock_log, $order, $not_yet_num, $data['time_limit_fill_user_ids'], 1); $deduction_logic->order_type = $data['order_type']; $deduction_logic->order_no = $order_no; $deduction_logic->store_id = $store_id; $deduction_logic->deduct(); $model->not_yet_num-=$not_yet_num; if($model->not_yet_num<=0) $model->not_yet_num = 0; if (!empty($obj->event_arr)) { foreach ($obj->event_arr as $event_data) { $event = new CloudStockChangeEvent($event_data['mall_id']); \Yii::$app->services->events->dispatch($event, $event_data, $event->listeners); } } } } $model->status = StatusEnum::DELETE; $model->save(); LockHelper::uLock($lock_key, $identification); return true; } catch (\Exception $e) { var_dump($e->getMessage() . $e->getFile() . $e->getLine()); LockHelper::uLock($lock_key, $identification); return true; } } public function handleTest($data) { var_dump('测试延时队列情况'); var_dump($data); } public function delayDeductionStock($data) { try { $mall_id = $data['mall_id']; $order_id = $data['order_id']; $give_arr = $data['give_arr']; $payment_for_goods = $data['payment_for_goods']; $buy_user_id = $data['buy_user_id']; $level = $data['level']; $stock_log_arr = $data['stock_log_arr']; $sub_user_id = GiftBagLogic::checkDeductionStockNoDelay($mall_id, $buy_user_id, $level, $give_arr); GiftBagLogic::deductionStock($mall_id, $sub_user_id, $order_id, $give_arr, $payment_for_goods, $stock_log_arr); } catch (\Exception $e) { var_dump('delayDeductionStock:' . $e->getMessage() . $e->getFile() . $e->getLine()); } } public function test() { var_dump('测试延时队列执行情况' . date('Y-m-d H:i:s', time())); } }