diff --git a/app/Amqp/Consumer/AssignDoctorConsumer.php b/app/Amqp/Consumer/AssignDoctorConsumer.php index 5ec34c4..1c2dd80 100644 --- a/app/Amqp/Consumer/AssignDoctorConsumer.php +++ b/app/Amqp/Consumer/AssignDoctorConsumer.php @@ -60,41 +60,10 @@ class AssignDoctorConsumer extends ConsumerMessage return Result::DROP;// 销毁 } - // 检测订单分配状态 - if (!empty($order_inquiry['doctor_id'])) { + $res = $this->checkInquiryStatus($order_inquiry); + if (!$res){ Db::rollBack(); - Log::getInstance()->error("分配医生队列执行失败:已分配医生"); - return Result::DROP;// 销毁 - } - - // 检测订单类型 - if ($order_inquiry['inquiry_type'] != 2 && $order_inquiry['inquiry_type'] != 4) { - Db::rollBack(); - Log::getInstance()->error("分配医生队列执行失败:订单非快速问诊、问诊购药类型"); - return Result::DROP;// 销毁 - } - - // 检测订单退款状态 - if (in_array($order_inquiry['inquiry_refund_status'], [1, 2, 3])) { - Db::rollBack(); - // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) - Log::getInstance()->error("分配医生队列执行失败:订单存在退款"); - return Result::DROP;// 销毁 - } - - // 检测订单状态 - if ($order_inquiry['inquiry_status'] != 2) { - Db::rollBack(); - // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - Log::getInstance()->error("分配医生队列执行失败:订单状态错误:当前为" . $order_inquiry['inquiry_status'] . " 无法进行分配"); - return Result::DROP;// 销毁 - } - - // 检测订单支付状态 - if ($order_inquiry['inquiry_pay_status'] != 2) { - Db::rollBack(); - // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - Log::getInstance()->error("分配医生队列执行失败:订单支付状态错误:当前为" . $order_inquiry['inquiry_pay_status'] . " 无法进行分配"); + Log::getInstance()->error("分配医生队列执行失败:订单状态错误"); return Result::DROP;// 销毁 } @@ -107,6 +76,7 @@ class AssignDoctorConsumer extends ConsumerMessage return Result::DROP;// 销毁 } + dump("超出5分钟,执行退款"); // 超出5分钟,执行退款 if ($diff_time > 300) { Log::getInstance()->error("分配医生队列执行失败:超出5分钟,执行退款"); @@ -128,6 +98,7 @@ class AssignDoctorConsumer extends ConsumerMessage return Result::ACK; } + dump("检测当前是否符合系统问诊时间"); // 检测当前是否符合系统问诊时间 $inquiryService = new InquiryService(); $is_system_time_pass = $inquiryService->checkSystemInquiryTime($order_inquiry['inquiry_type']); @@ -153,18 +124,22 @@ class AssignDoctorConsumer extends ConsumerMessage } // 分配医生 + dump("分配医生"); $UserDoctorService = new UserDoctorService(); $doctor_id = $UserDoctorService->getInquiryAssignDoctor($order_inquiry['inquiry_type'],$order_inquiry['patient_id'],$is_system_time_pass); if (empty($doctor_id)){ // 无合适医生 Db::rollBack(); + dump("目前没有合适医生"); Log::getInstance()->info("分配医生队列执行:目前没有合适医生"); $redis_value = $this->checkAssignCount($order_inquiry['order_inquiry_id']); + dump("111"); + dump($redis_value); Log::getInstance()->info("分配医生队列执行:目前没有合适医生" . $redis_value); // 执行睡眠,防止重复执行队列 // 执行规则,第一次30秒,第二次30秒。以30的倍数增加 sleep($redis_value * 5); - + dump("重回队列"); Log::getInstance()->info("分配医生队列执行:重回队列"); return Result::REQUEUE; // 重回队列 } @@ -261,4 +236,48 @@ class AssignDoctorConsumer extends ConsumerMessage return $redis_value; } + + + /** + * 检测订单状态 + * @param array|object $order_inquiry + * @return bool + */ + private function checkInquiryStatus(array|object $order_inquiry): bool + { + // 检测订单分配状态 + if (!empty($order_inquiry['doctor_id'])) { + Log::getInstance()->error("分配医生队列执行失败:已分配医生"); + return false; + } + + // 检测订单类型 + if ($order_inquiry['inquiry_type'] != 2 && $order_inquiry['inquiry_type'] != 4) { + Log::getInstance()->error("分配医生队列执行失败:订单非快速问诊、问诊购药类型"); + return false; + } + + // 检测订单退款状态 + if (in_array($order_inquiry['inquiry_refund_status'], [1, 2, 3])) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + Log::getInstance()->error("分配医生队列执行失败:订单存在退款"); + return false; + } + + // 检测订单状态 + if ($order_inquiry['inquiry_status'] != 2) { + // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + Log::getInstance()->error("分配医生队列执行失败:订单状态错误:当前为" . $order_inquiry['inquiry_status'] . " 无法进行分配"); + return false; + } + + // 检测订单支付状态 + if ($order_inquiry['inquiry_pay_status'] != 2) { + // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + Log::getInstance()->error("分配医生队列执行失败:订单支付状态错误:当前为" . $order_inquiry['inquiry_pay_status'] . " 无法进行分配"); + return false; + } + + return true; + } }