From 94bbfb0db2f288c0bcb424b76a8d16b91ae1fcdd Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 15:28:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=9C=8D=E5=8A=A1=E5=8C=85?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95=E4=BB=A5=E5=8F=8A=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E5=9B=9E=E8=B0=83=E5=A2=9E=E5=8A=A0=E5=8F=91=E9=80=81?= =?UTF-8?q?im=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/CallBackController.php | 54 ++++++++++++++++++--- app/Services/OrderServicePackageService.php | 34 +++++++++++++ 2 files changed, 82 insertions(+), 6 deletions(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index 602a521..ce37e97 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2443,7 +2443,8 @@ class CallBackController extends AbstractController // 支付状态无需验证,如第一次支付失败,会修改支付状态,再次支付时,会出现验证不通过的情况 // 处理支付状态 - if ($message['trade_state'] == "SUCCESS") { + $trade_state = $message['trade_state']; + if ($trade_state == "SUCCESS") { // 支付成功 $pay_status = 2; $pay_time = date('Y-m-d H:i:s', strtotime($message['success_time']));// 支付时间 @@ -2453,16 +2454,16 @@ class CallBackController extends AbstractController Log::getInstance("CallBack-wxPayServiceSuccess")->error("无支付金额"); return $this->wxPayErrorReturn("无支付金额"); } - } elseif ($message['trade_state'] == "CLOSED") { + } elseif ($trade_state == "CLOSED") { // 已关闭 $pay_status = 6; - } elseif ($message['trade_state'] == "REVOKED") { + } elseif ($trade_state == "REVOKED") { // 已撤销(付款码支付) $pay_status = 7; - } elseif ($message['trade_state'] == "USERPAYING") { + } elseif ($trade_state == "USERPAYING") { // 用户支付中(付款码支付) $pay_status = 3; - } elseif ($message['trade_state'] == "PAYERROR") { + } elseif ($trade_state == "PAYERROR") { // 支付失败(其他原因,如银行返回失败) $pay_status = 4; } else { @@ -2762,7 +2763,48 @@ class CallBackController extends AbstractController return $this->wxPayErrorReturn($e->getMessage()); } - Log::getInstance("CallBack-wxPayServiceSuccess")->info("检测微信支付回调处理成功"); + try { + if ($trade_state == "SUCCESS") { + Log::getInstance("CallBack-wxPayInquirySuccess")->info("开始发送im消息"); + + // 获取订单医生数据 + $params = array(); + $params['doctor_id'] = $order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("CallBack-wxPayServiceSuccess")->error("医生数据错误"); + return $server->serve(); + } + + // 发送im消息 + $imService = new ImService(); + + // 等待医生接诊 + $imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); + + // 发送站内、订阅失败发送短信消息-医生有新问诊 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush->doctorHaveNewInquiry(); + + // 加入xx时间未接诊通知队列 + $data = array(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + + $time = 1000 * 60 * 60 * 2; + $message = new DoctorNotYetInquiryDelayDirectProducer($data); + $message->setDelayMs($time); + $producer = $this->container->get(Producer::class); + $producer->produce($message); + + Log::getInstance("CallBack-wxPayServiceSuccess")->info("发送im消息成功"); + } + } catch (\Exception $e) { + // 验证失败 + Log::getInstance("CallBack-wxPayInquirySuccess")->error("微信支付回调处理成功,分配医生/发送问诊消息失败:" . $e->getMessage()); + return $server->serve(); + } + + Log::getInstance("CallBack-wxPayServiceSuccess")->info("微信支付回调处理成功"); return $server->serve(); } diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 6406b15..b30d465 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -4,6 +4,7 @@ namespace App\Services; use App\Amqp\Producer\CancelUnInquiryOrdersDelayDirectProducer; use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer; +use App\Amqp\Producer\DoctorNotYetInquiryDelayDirectProducer; use App\Constants\HttpEnumCode; use App\Exception\BusinessException; use App\Model\DiseaseClass; @@ -968,6 +969,39 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } + try { + // 获取订单医生数据 + $params = array(); + $params['doctor_id'] = $order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + return fail(HttpEnumCode::HTTP_ERROR, "医生数据错误"); + } + + // 发送im消息 + $imService = new ImService(); + + // 等待医生接诊 + $imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); + + // 发送站内、订阅失败发送短信消息-医生有新问诊 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush->doctorHaveNewInquiry(); + + // 加入xx时间未接诊通知队列 + $data = array(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + + $time = 1000 * 60 * 60 * 2; + $message = new DoctorNotYetInquiryDelayDirectProducer($data); + $message->setDelayMs($time); + $producer = $this->container->get(Producer::class); + $producer->produce($message); + } catch (\Exception $e) { + // 验证失败 + return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); + } + return success(); }