diff --git a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php index 8df9858..a9c9519 100644 --- a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php @@ -17,6 +17,7 @@ use App\Services\ImService; use App\Services\InquiryService; use App\Services\MessagePush; use App\Services\OrderService; +use App\Services\OrderServicePackageService; use App\Services\UserDoctorService; use App\Utils\Log; use App\Utils\Utils; @@ -116,8 +117,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage } // 检测分配时间 - $pay_time = strtotime($order_inquiry['pay_time']); - $diff_time = time() - $pay_time; + $diff_time = time() - strtotime($order_inquiry['pay_time']); if ($diff_time < 0) { Log::getInstance('queue-AssignDoctor')->error("支付时间错误"); @@ -174,7 +174,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $queue_data['order_inquiry_id'] = $data['order_inquiry_id']; // 5分钟-支付时间-1s:10:00支付 此时10:04 5-(10:04-10:00) - $time = 300- (time() - $pay_time) - 1; + $time = 300- (time() - strtotime($order_inquiry['pay_time'])) - 1; $message = new AssignDoctorDelayDirectProducer($queue_data); $message->setDelayMs(1000 * $time); @@ -190,6 +190,31 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage return Result::ACK; } + // 获取患者家庭成员是否存在未支付的服务包订单 + $OrderServicePackageService = new OrderServicePackageService(); + $order_service_package = $OrderServicePackageService->getPatientFamilyNoPayServicePackage($order_inquiry['user_id'], $order_inquiry['family_id'], $doctor_id); + if (!empty($order_service_package)){ + $queue_data = array(); + $queue_data['order_inquiry_id'] = $data['order_inquiry_id']; + + // 5分钟-支付时间-1s:10:00支付 此时10:04 5-(10:04-10:00) + $time = 300- (time() - strtotime($order_inquiry['pay_time'])) - 1; + + $message = new AssignDoctorDelayDirectProducer($queue_data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + Db::rollBack(); + Log::getInstance("queue-AssignDoctor")->error("患者和医生存在未支付的服务包订单,无法分配给该医生,重回队列"); + return Result::REQUEUE; + } + + Log::getInstance("queue-AssignDoctor")->info("重回队列"); + return Result::ACK; + } + + // 更改数据库 $save_data = array(); $save_data['doctor_id'] = $doctor_id;