info(json_encode($data, JSON_UNESCAPED_UNICODE)); Db::beginTransaction(); try { // 检测入参参数 if (empty($data['order_inquiry_id'])) { Db::rollBack(); Log::getInstance("queue-AutoCompleteInquiry")->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("queue-AutoCompleteInquiry")->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("queue-AutoCompleteInquiry")->info("无需处理"); return Result::ACK; } // 检测问诊订单退款状态 if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])){ // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) Db::rollBack(); Log::getInstance("queue-AutoCompleteInquiry")->info("订单退款中,无需处理"); return Result::ACK; } // 订单支付状态 if ($order_inquiry['inquiry_pay_status'] != 2){ Db::rollBack(); Log::getInstance("queue-AutoCompleteInquiry")->info("订单未支付,无需处理"); return Result::ACK; } // 新增患者历史问诊表 $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("queue-AutoCompleteInquiry")->error("新增患者历史问诊表失败"); return Result::REQUEUE; } // 获取医生数据 $params = array(); $params['doctor_id'] = $order_inquiry['doctor_id']; $user_doctor = UserDoctor::getOne($params); if(empty($user_doctor)){ Db::rollBack(); Log::getInstance("queue-AutoCompleteInquiry")->error("缺少医生数据"); 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); // 是否需要推送消息 $is_push_prescription_verify_fail = true; // 驳回处方id $order_prescription_id = $item['order_prescription_id']; } } // 添加自动完成队列 $data = array(); $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $message = new AutoFinishInquiryDelayDirectProducer($data); $message->setDelayMs(1000 * 60 * 60 * 24 * 3); $producer = $this->container->get(Producer::class); $res = $producer->produce($message); if (!$res) { Db::rollBack(); Log::getInstance("queue-AutoCompleteInquiry")->error("添加自动结束队列失败"); return Result::DROP; } Db::commit(); Log::getInstance("queue-AutoCompleteInquiry")->info("执行成功"); } catch (\Exception $e) { Db::rollBack(); Log::getInstance("queue-AutoCompleteInquiry")->error($e->getMessage()); return Result::ACK; // 重回队列 } // 发送消息 try { if (isset($is_push_prescription_verify_fail)){ // 站内、订阅失败发送短信-医生开具的处方审核未通过 $order_prescription_id = $order_prescription_id ?? ""; $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); $MessagePush->prescriptionVerifyFail($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(); }catch (\Throwable $e){ Log::getInstance("queue-AutoCompleteInquiry")->error($e->getMessage()); return Result::ACK; } return Result::ACK; } }