setName('partners:queue') ->setDescription('Process messages from the Redis queue'); } protected function execute(Input $input, Output $output) { $this->queueService = new QueueService(); while (true) { $message = $this->queueService->pop('partners_queue'); if ($message) { // 处理消息 $this->processMessage($message); } else { // 暂停一段时间再检查队列 sleep(1); } } } protected function processMessage($message) { $IdingjuOil = new IdingjuOil(); $IdingjuOil->saveLogStore('partners_queue队列数据处理:【'.$message.'】'); // 拿到队列数据处理 $data = json_decode($message, true); // 检查解码是否成功 if ($data === false) { $IdingjuOil->saveLogStore('partners_queue队列数据解码失败:' . json_last_error_msg()); return; } $order = OrderModel::detail($data['order_id']); if (!$order) { $IdingjuOil->saveLogStore('未找到对应订单:【' . $data['order_id'] . '】'); return; } // 此处可以根据业务逻辑处理接收到的数据 try { if($order['order_status'] == 10 && $order['oil_status'] == 0 && $order['oilCardType'] == 'zsy_ticket'){ $data['amount'] = $order['total_price']; // 金额 $company = CompanyModel::detail(['orgNo' => $this->getCompany($order['goods_no'])]); if (!$company) { $IdingjuOil->saveLogStore('没有可用参数:【' . $order['goods_no'] . '】'); return; } // 对接平台接口 $res = $IdingjuOil->oilOilCardShare([ 'goodsNo'=>$order['goods_no'], 'amount'=>$data['amount'], 'userNo'=>'', 'mobile'=>$order['mobile'], 'saleOrderNo'=>$order['oilCardNo'], 'oilCardType'=>$order['oilCardType'], 'notify_url'=>config('app.base_url') . 'partnersoil.php', 'use_notify_url'=>config('app.base_url') . 'partnersoiluse.php' ], $company); if ($res['code'] != 1) { $IdingjuOil->saveLogStore(($res['errMessage'] ?? $res['message'])); return; } $item['shareNo'] = $res['data']['trade_no'] ?? ''; $item['qrCode'] = $res['data']['useUrl'] ?? ''; $item['oil_status_zsy'] = $res['data']['state'] ?? 0; $item['oil_time'] = time(); $item['oil_status'] = $item['oil_status_zsy'] == 2 ? 1 : 0; // 已发券 为1 $resUpdate = $order->save($item); if (!$resUpdate) { $IdingjuOil->saveLogStore("订单更新失败,order_id: {$data['order_id']}"); } if($item['oil_status_zsy'] == 2) { // 存入队列处理 $queueService = new QueueService(); $queueService->push('notify_queue', json_encode([ 'order_id' => $order['order_id'], 'type' => 'add', 'optType' => 'share_oil', 'retry_count' => 0, ], 320)); } } } catch (\Exception $e) { $IdingjuOil->saveLogStore( 'partners_queue队列处理异常:' . $e->getMessage() . ' 在文件:' . $e->getFile() . ' 第:' . $e->getLine() . ' 行。堆栈跟踪:' . $e->getTraceAsString() ); } } /** * @param $goodsNo * @return string */ public function getCompany($goodsNo): string { switch ($goodsNo) { case 'djgdface100': case 'djgdface200': case 'djgdface300': return 'umQZhIHKofyA'; case 'jmgxyyface100': case 'jmgxyyface200': case 'jmgxyyface300': case 'jmgzface100': case 'jmgzface200': case 'jmgzface300': case 'jmfjface100': case 'jmfjface200': case 'jmfjface300': return 'HpWqXIgYvTBg'; case 'face003': return 'NKJBgaaRNdiL'; // 测试参数 default: return ''; } } }