error("开始执行 自动完成问诊订单 队列:" . json_encode($data, JSON_UNESCAPED_UNICODE)); Db::beginTransaction(); try { // 检测入参参数 if (empty($data['order_inquiry_id'])) { Db::rollBack(); Log::getInstance()->error("自动完成问诊订单队列执行失败:入参错误"); return Result::DROP; } // 获取问诊订单数据 $params = array(); $params['order_inquiry_id'] = $data['order_inquiry_id']; $order_inquiry = OrderInquiry::getOne($params); if (empty($order_inquiry)) { Db::rollBack(); Log::getInstance()->error("自动完成问诊订单队列执行失败:问诊订单数据为空"); return Result::DROP; } $order_inquiry = $order_inquiry->toArray(); // 检测问诊订单状态 if ($order_inquiry['inquiry_status'] != 4) { // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) Db::rollBack(); Log::getInstance()->info("自动完成问诊订单队列执行结果:无需处理"); return Result::DROP; } // 检测问诊订单退款状态 if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])){ // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) Db::rollBack(); Log::getInstance()->info("自动完成问诊订单队列执行结果:订单退款中,无需处理"); return Result::DROP; } // 订单支付状态 if ($order_inquiry['inquiry_pay_status'] != 2){ Db::rollBack(); Log::getInstance()->info("自动完成问诊订单队列执行结果:订单未支付,无需处理"); return Result::DROP; } // 新增患者历史问诊表 $data = array(); $data['patient_id'] = $order_inquiry['patient_id']; $data['doctor_id'] = $order_inquiry['doctor_id']; if (!empty($order_inquiry['pharmacist_id'])){ $data['pharmacist_id'] = $order_inquiry['pharmacist_id']; } $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $data['history_status'] = 1; $patient_history_inquiry = PatientHistoryInquiry::addPatientHistoryInquiry($data); if (empty($patient_history_inquiry)){ Db::rollBack(); Log::getInstance()->info("自动完成问诊订单队列执行结果:新增患者历史问诊表失败"); return Result::DROP; } // 获取医生数据 $params = array(); $params['doctor_id'] = $order_inquiry['doctor_id']; $user_doctor = UserDoctor::getOne($params); if(empty($user_doctor)){ Db::rollBack(); Log::getInstance()->info("自动完成问诊订单队列执行结果:缺少医生数据"); return Result::DROP; } // 处理问诊订单数据为已完成 $data = array(); $data['inquiry_status'] = 5;// 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) $data['complete_time'] = date('Y-m-d H:i:s',time());// 订单完成时间(问诊完成时间) $params = array(); $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; OrderInquiry::edit($params,$data); // 处理处方数据 $params = array(); $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $params['doctor_id'] = $user_doctor['doctor_id']; $params['pharmacist_audit_status'] = 1; $order_prescription = OrderPrescription::getList($params); foreach ($order_prescription as $item){ if ($item['prescription_status'] == 1 && $item['pharmacist_audit_status'] == 0){ $params = array(); $params['order_prescription_id'] = $item['order_prescription_id']; $data = array(); $data['pharmacist_audit_status'] = 2; $data['pharmacist_verify_time'] = date('Y-m-d H:i:s',time()); $data['pharmacist_fail_reason'] = "当前问诊已结束,药师还未审核处方,系统自动驳回"; OrderPrescription::edit($params,$data); // 站内、订阅失败发送短信-医生开具的处方审核未通过 $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); $MessagePush->prescriptionVerifyFail($order_prescription['order_prescription_id']); } } // 发送IM消息-问诊已完成 $imService = new ImService(); $imService->inquiryComplete($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']); // 发送IM消息-问诊结束评价通知 $imService->inquiryEndEvaluation($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']); // 医生-发送站内消息-问诊结束 $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); $MessagePush->finishInquiryToDoctor(); // 添加自动完成队列 $data = array(); $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $message = new AutoFinishInquiryDelayDirectProducer($data); $message->setDelayMs(1000 * 60 * 1); $producer = $this->container->get(Producer::class); $res = $producer->produce($message); if (!$res) { Db::rollBack(); Log::getInstance()->info("自动完成问诊订单队列执行结果:添加自动结束队列失败"); return Result::DROP; } Db::commit(); Log::getInstance()->info("自动完成问诊订单队列执行成功"); return Result::ACK; } catch (\Exception $e) { Db::rollBack(); Log::getInstance()->error("自动完成问诊订单执行失败:" . $e->getMessage()); return Result::ACK; // 重回队列 } } }