exec($this->orderId); } //方便调试 public function exec($orderId){ $this->orderId = $orderId; OrderLog::saveLog($this->orderId,'订单接诊自动结束队列start'); $t = \Yii::$app->db->beginTransaction(); try { $this->setRequest(); $order = Order::find()->where([ 'id' => $this->orderId, 'is_pay' => 1, 'cancel_status' => 0, 'accept_status' => OrderAcceptEnum::ACCEPTING ])->with('session','serviceUser')->one(); if(!$order){ throw new Exception('接诊订单不存在'); } $ims_id = $order->session->ims_id; $ImMessageSession = ImMessageSession::findOne($ims_id); if(!$ImMessageSession){ throw new Exception('接诊订单会话不存在'); } //修改状态 $order->accept_status = OrderAcceptEnum::OVER; $order->over_time = time(); $order->saveOrFail(); //-----------------------------------------------------发送消息--------------------------------------------- //以用户身份给服务人员发送event的消息 $message = [ 'type' => 'end', 'from_User' => [ 'id' => $order->user->id, 'name' => $order->user->nickname, 'avatar' => $order->user->avatarurl ], 'data' => [ 'text' => '会话已结束' ], ]; $form = new ImMessageForm(); $form->ims_id = $ims_id; $form->from_id = $order->user_id; $form->to_id = $order->su_id; $form->type = ImMessageSendTypeEnum::USER_SEND; $form->content = json_encode($message); $form->sendMessage(); //以服务人员身份给用户发送event的消息 $message = [ 'type' => 'end', 'from_User' => [ 'id' => $order->su_id, 'name' => $order->serviceUser->docInfo->name, 'avatar' => $order->serviceUser->docIdentity->work_avator ], 'data' => [ 'text' => '会话已结束' ], ]; $form = new ImMessageForm(); $form->ims_id = $ims_id; $form->from_id = $order->su_id; $form->to_id = $order->user_id; $form->type = ImMessageSendTypeEnum::SERVICE_SEND;//!! $form->content = json_encode($message); $form->sendMessage(); //-----------------------------------------------------发送消息--------------------------------------------- //会话修改为已结束 - 先发消息,再修改为结束,不然会报会话已结束的错误 $ImMessageSession->status = ImSessionStatusEnum::END; $ImMessageSession->saveOrFail(); $t->commit(); OrderLog::saveLog($this->orderId,'订单接诊自动结束队列end'); } catch (\Exception $exception) { $t->rollBack(); \Yii::error($exception); OrderLog::saveLog($this->orderId,'订单接诊自动结束队列异常:'.$exception->getMessage()); return; } } }