From 5c0bf128965a1cbe36fa7baf1f51272b5b9ec866 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 19 Apr 2024 15:46:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=AB=99=E5=86=85=E3=80=81?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E8=AE=A2=E9=98=85=E6=B6=88=E6=81=AF=E6=8E=A8?= =?UTF-8?q?=E9=80=81=EF=BC=8C=E4=BF=AE=E6=94=B9=E6=89=80=E6=9C=89=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E6=8E=A8=E9=80=81=E5=85=A5=E5=8F=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AssignDoctorDelayDirectConsumer.php | 6 +- .../Consumer/AssignPharmacistConsumer.php | 24 +- ...AutoCompleteInquiryDelayDirectConsumer.php | 4 +- ...pleteServicePackageDelayDirectConsumer.php | 29 + ...oPharmacistCaVerifyDelayDirectConsumer.php | 8 +- ...ncelUnInquiryOrdersDelayDirectConsumer.php | 31 +- ...DoctorNotYetInquiryDelayDirectConsumer.php | 28 +- app/Controller/CallBackController.php | 28 +- app/Services/InquiryService.php | 6 +- app/Services/MessagePush.php | 1070 +++++++++++++++-- app/Services/OrderPrescriptionService.php | 4 +- app/Services/OrderServicePackageService.php | 66 +- app/Services/PatientOrderService.php | 18 +- app/Services/UserDoctorService.php | 34 +- app/Services/UserPharmacistService.php | 6 +- app/Services/UserService.php | 11 +- 16 files changed, 1240 insertions(+), 133 deletions(-) diff --git a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php index 340a651..0ede303 100644 --- a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php @@ -129,7 +129,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage try { // 患者-分配医生失败-订阅 - $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); $MessagePush->assignDoctorFail(); }catch (\Exception $e){ Log::getInstance("queue-AssignDoctor")->error( $e->getMessage()); @@ -176,7 +176,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage try { // 患者-分配医生失败-订阅 - $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); $MessagePush->assignDoctorFail(); }catch (\Exception $e){ Log::getInstance("queue-AssignDoctor")->error($e->getMessage()); @@ -290,7 +290,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $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 = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); $MessagePush->doctorHaveNewInquiry(); // 加入xx时间未接诊通知队列 diff --git a/app/Amqp/Consumer/AssignPharmacistConsumer.php b/app/Amqp/Consumer/AssignPharmacistConsumer.php index d5c76ac..a9aefcb 100644 --- a/app/Amqp/Consumer/AssignPharmacistConsumer.php +++ b/app/Amqp/Consumer/AssignPharmacistConsumer.php @@ -73,6 +73,16 @@ class AssignPharmacistConsumer extends ConsumerMessage return Result::ACK;// 销毁 } + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_prescription['order_inquiry_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + Db::rollBack(); + Log::getInstance()->error("分配药师队列执行结束:缺少问诊订单数据"); + return Result::ACK;// 销毁 + } + Db::beginTransaction(); try { // 分配药师 @@ -84,7 +94,7 @@ class AssignPharmacistConsumer extends ConsumerMessage Log::getInstance()->error("分配药师队列执行失败:药师数据错误"); // 分配失败,按照驳回处理 - $this->reject($data['order_prescription_id'], $user_doctor['user_id'], $user_patient['user_id'], $order_prescription['order_inquiry_id']); + $this->reject($data['order_prescription_id'], $user_doctor['user_id'], $user_patient['user_id'], $order_inquiry['inquiry_no']); return Result::DROP;// 销毁 } @@ -103,7 +113,7 @@ class AssignPharmacistConsumer extends ConsumerMessage Log::getInstance()->error("分配药师队列执行失败原因:" . $e->getMessage()); // 分配失败,按照驳回处理 - $this->reject($data['order_prescription_id'], $user_doctor['user_id'],$user_patient['user_id'], $order_prescription['order_inquiry_id']); + $this->reject($data['order_prescription_id'], $user_doctor['user_id'],$user_patient['user_id'], $order_inquiry['inquiry_no']); return Result::DROP; // 重回队列 } @@ -118,12 +128,10 @@ class AssignPharmacistConsumer extends ConsumerMessage * @param string $order_prescription_id * @param string $doctor_user_id * @param string $patient_user_id - * @param string $order_inquiry_id + * @param string $inquiry_no * @return void - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ - public function reject(string $order_prescription_id, string $doctor_user_id, string $patient_user_id, string $order_inquiry_id): void + public function reject(string $order_prescription_id, string $doctor_user_id, string $patient_user_id, string $inquiry_no): void { try { $params = array(); @@ -137,11 +145,11 @@ class AssignPharmacistConsumer extends ConsumerMessage OrderPrescription::edit($params, $data); // 医生-开具的处方审核未通过 - $MessagePush = new MessagePush($doctor_user_id, $order_inquiry_id); + $MessagePush = new MessagePush($doctor_user_id, $inquiry_no); $MessagePush->prescriptionVerifyFail($order_prescription_id); // 患者-处方审核未通过 - $MessagePush = new MessagePush($patient_user_id, $order_inquiry_id); + $MessagePush = new MessagePush($patient_user_id, $inquiry_no); $MessagePush->patientPrescriptionVerifyFail(); } catch (\Exception $e) { diff --git a/app/Amqp/Consumer/AutoCompleteInquiryDelayDirectConsumer.php b/app/Amqp/Consumer/AutoCompleteInquiryDelayDirectConsumer.php index 95fe4c4..36e333e 100644 --- a/app/Amqp/Consumer/AutoCompleteInquiryDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoCompleteInquiryDelayDirectConsumer.php @@ -181,7 +181,7 @@ class AutoCompleteInquiryDelayDirectConsumer extends ConsumerMessage 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 = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); $MessagePush->prescriptionVerifyFail($order_prescription_id); } @@ -193,7 +193,7 @@ class AutoCompleteInquiryDelayDirectConsumer extends ConsumerMessage $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 = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); $MessagePush->finishInquiryToDoctor(); }catch (\Throwable $e){ Log::getInstance("queue-AutoCompleteInquiry")->error($e->getMessage()); diff --git a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php index f6847d9..f89d3f5 100644 --- a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php @@ -6,6 +6,9 @@ namespace App\Amqp\Consumer; use App\Amqp\Producer\AutoCompleteServicePackageDelayDirectProducer; use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageInquiry; +use App\Model\UserDoctor; +use App\Services\MessagePush; use App\Utils\Log; use App\Utils\Utils; use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait; @@ -116,7 +119,33 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage // 发送消息 try { + // 获取订单医生数据 + $params = array(); + $params['doctor_id'] = $order_service_package['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("queue-AutoCompleteServicePackage")->error("医生数据错误"); + return Result::ACK; + } + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (!empty($order_service_package_inquiry)){ + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $order_service_package['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (!empty($user_doctor)) { + // 医生-通知医生患者的服务包服务结束 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_service_package_inquiry['inquiry_no']); + $MessagePush->doctorServicePackageFinish(); + } + + // 患者-通知患者服务包服务已结束 + $MessagePush = new MessagePush($order_service_package['user_id'], $order_service_package_inquiry['inquiry_no']); + $MessagePush->patientServicePackageFinish(); + } }catch (\Throwable $e){ Log::getInstance("queue-AutoCompleteServicePackage")->error($e->getMessage()); return Result::ACK; diff --git a/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php b/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php index edc5ca5..ebfb2e0 100644 --- a/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php @@ -152,11 +152,11 @@ class AutoPharmacistCaVerifyDelayDirectConsumer extends ConsumerMessage $this->modifyOrderPrescription($data['order_prescription_id'], 2, "请联系平台客服,请勿重开处方"); // 医生-开具的处方审核未通过 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_prescription['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->prescriptionVerifyFail($data['order_prescription_id']); // 患者-处方审核未通过 - $MessagePush = new MessagePush($user_patient['user_id'], $order_prescription['order_inquiry_id']); + $MessagePush = new MessagePush($user_patient['user_id'], $order_inquiry['inquiry_no']); $MessagePush->patientPrescriptionVerifyFail(); Db::commit(); @@ -274,12 +274,12 @@ class AutoPharmacistCaVerifyDelayDirectConsumer extends ConsumerMessage $imService->prescriptionIssued($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id'],$product_name,(string)$data['order_prescription_id'],7); // 发送站内、短信消息-患者的处方被药师审核通过 - $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); $MessagePush->patientPrescriptionVerifyPass(); // 站内、订阅失败发送短信-医生开具的处方审核通过 // 发送目标不同,重新实例化 - $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); $MessagePush->prescriptionVerifySuccess(); // 添加处方过期队列 diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index b5ffc1c..102582d 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -15,6 +15,7 @@ use App\Services\ImService; use App\Services\InquiryService; use App\Services\MessagePush; use App\Services\OrderService; +use App\Services\OrderServicePackageService; use App\Utils\Log; use App\Utils\Utils; use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait; @@ -198,12 +199,32 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage // 发送IM消息-问诊退款 $imService->inquiryRefund($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']); - // 发送站内、订阅消息-患者-医生未接诊 - $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']); - $MessagePush->patientNoInquiry(); + // 处理服务包情况 + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9) { + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + if ($is_first){ + // 患者-医生未接受服务包订单 + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->patientDoctorNoAcceptServicePackage(); + }else{ + // 发送站内、订阅消息-患者-医生未接诊 + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->patientNoInquiry(); + } + }else{ + // 发送站内、订阅消息-患者-医生未接诊 + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->patientNoInquiry(); + } // 发送站内、订阅消息-医生-超时未接诊 - $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); $MessagePush->doctorNoInquiry(); if (!empty($order_inquiry['coupon_amount_total']) && $order_inquiry['coupon_amount_total'] > 0) { @@ -213,7 +234,7 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage $order_inquiry_coupon = OrderInquiryCoupon::getOne($params); if (!empty($order_inquiry_coupon)){ // 发送站内消息-优惠卷退还 - $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['inquiry_no']); $MessagePush->patientRefundCoupon($order_inquiry_coupon['coupon_name']); } } diff --git a/app/Amqp/Consumer/DoctorNotYetInquiryDelayDirectConsumer.php b/app/Amqp/Consumer/DoctorNotYetInquiryDelayDirectConsumer.php index cdf6894..246e790 100644 --- a/app/Amqp/Consumer/DoctorNotYetInquiryDelayDirectConsumer.php +++ b/app/Amqp/Consumer/DoctorNotYetInquiryDelayDirectConsumer.php @@ -7,6 +7,7 @@ namespace App\Amqp\Consumer; use App\Model\OrderInquiry; use App\Model\UserDoctor; use App\Services\MessagePush; +use App\Services\OrderServicePackageService; use App\Utils\Log; use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait; use Hyperf\Amqp\Message\ProducerDelayedMessageTrait; @@ -36,7 +37,7 @@ class DoctorNotYetInquiryDelayDirectConsumer extends ConsumerMessage public function consumeMessage($data, AMQPMessage $message): string { - Log::getInstance("queue-DoctorNotYetInquiry")->info("开始:" . json_encode($data, JSON_UNESCAPED_UNICODE)); + Log::getInstance("queue-DoctorNotYetInquiry")->info(json_encode($data, JSON_UNESCAPED_UNICODE)); if (!isset($data['order_inquiry_id'])){ Log::getInstance("queue-DoctorNotYetInquiry")->error("缺少参数"); @@ -65,13 +66,30 @@ class DoctorNotYetInquiryDelayDirectConsumer extends ConsumerMessage $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)) { Log::getInstance("queue-DoctorNotYetInquiry")->error("医生数据错误"); + return Result::ACK; } - // 发送站内、订阅消息-医生-超时未接诊 - $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); - $MessagePush->doctorNotYetInquiry(); + // 处理服务包情况 + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + if ($is_first){ + // 医生-医生xx时间后还未接受服务包订单 + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->doctorNotYetOrderServicePackage(); + } + }else{ + // 发送站内、订阅消息-医生-超时未接诊 + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->doctorNotYetInquiry(); + } }catch (\Throwable $e){ - Log::getInstance("queue-DoctorNotYetInquiry")->error("失败:" . $e->getMessage()); + Log::getInstance("queue-DoctorNotYetInquiry")->error($e->getMessage()); return Result::ACK; } diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index b6f6a76..f435af9 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -251,7 +251,7 @@ class CallBackController extends AbstractController $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 = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->doctorHaveNewInquiry(); // 加入xx时间未接诊通知队列 @@ -365,7 +365,7 @@ class CallBackController extends AbstractController if ($message['refund_status'] == "SUCCESS") { try { // 发送站内、订阅、短信消息-问诊服务退款成功 - $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['inquiry_no']); // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) $MessagePush->refundInquirySuccess($order_inquiry['cancel_reason']); @@ -2378,7 +2378,25 @@ class CallBackController extends AbstractController return $this->wxPayErrorReturn($e->getMessage()); } - Log::getInstance("CallBack-wxPayServiceRefund")->info("微信退款回调处理成功"); + Log::getInstance("CallBack-wxPayServiceRefund")->info("微信退款回调处理成功,推送消息"); + + // 发送推送消息 + if ($message['refund_status'] == "SUCCESS") { + try { + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (!empty($order_service_package_inquiry)){ + // 患者-服务包服务退款成功 + $MessagePush = new MessagePush($order_service_package['user_id'], $order_service_package_inquiry['inquiry_no']); + $MessagePush->refundServicePackageSuccess(); + } + } catch (\Exception $e) { + // 验证失败 + Log::getInstance("CallBack-wxPayInquiryRefund")->error("微信退款回调处理成功,推送消息失败:" . $e->getMessage()); + return $server->serve(); + } + } return $server->serve(); } @@ -2785,14 +2803,14 @@ class CallBackController extends AbstractController $imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); // 发送站内、订阅失败发送短信消息-医生有新服务包订单 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_service_package['order_service_no']); + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->doctorHaveNewServicePackage(); // 加入xx时间未接诊通知队列 $data = array(); $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $time = 1000 * 60 * 60 * 2; + $time = 1000 * 60 * 60 * 24; $message = new DoctorNotYetInquiryDelayDirectProducer($data); $message->setDelayMs($time); $producer = $this->container->get(Producer::class); diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 05c8d03..8917e2e 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1218,11 +1218,11 @@ class InquiryService extends BaseService $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 = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->finishInquiryToDoctor(); // 患者-发送通知消息-患者的问诊服务结束 - $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['inquiry_no']); $MessagePush->patientInquiryFinish(); } catch (\Throwable $e) { Log::getInstance("InquiryService-putFinishInquiry")->error($e->getMessage()); @@ -1399,7 +1399,7 @@ class InquiryService extends BaseService $imService->giveFreeRounds($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id'], $times_number, $give_expiration_time); // 发送站内、订阅失败发送短信消息-患者-赠送回合数 - $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['inquiry_no']); $MessagePush->doctorGiveFreeRounds($times_number, $give_expiration_time); } catch (\Throwable $e) { Log::getInstance("InquiryService-addDoctorGiveInquiryOrder")->error($e->getMessage()); diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index 14f99f8..ef265bb 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -19,7 +19,9 @@ use App\Model\OrderPrescription; use App\Model\OrderProduct; use App\Model\OrderProductItem; use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageDetail; use App\Model\OrderServicePackageInquiry; +use App\Model\OrderServicePackageProduct; use App\Model\Product; use App\Model\SystemInquiryConfig; use App\Model\User; @@ -58,75 +60,79 @@ class MessagePush extends BaseService * @param string $to_user_id 用户id(存在被推送者时存在,否则为空) * @param string $order_no 问诊订单编号 */ - public function __construct(string $to_user_id, string $order_no) + public function __construct(string $to_user_id = "", string $order_no = "") { - $params = array(); - $params['user_id'] = $to_user_id; - $user = User::getOne($params); - if (!empty($user)) { - $this->user = $user->toArray(); + if (!empty($to_user_id)){ + $params = array(); + $params['user_id'] = $to_user_id; + $user = User::getOne($params); + if (!empty($user)) { + $this->user = $user->toArray(); + } } // 获取订单数据 - $params = array(); - $params['order_no'] = $order_no; - $order = Order::getOne($params); - if (!empty($order)){ - $this->order = $order->toArray(); - - // 判断订单类型 - switch ($order['order_type']) { - case 1: // 问诊订单 - $params = array(); - $params['inquiry_no'] = $order['order_no']; - $order_inquiry = OrderInquiry::getOne($params); - if (!empty($order_inquiry)) { - $this->order_inquiry = $order_inquiry->toArray(); - } - - break; - case 2: // 药品订单 - $params = array(); - $params['order_product_no'] = $order['order_no']; - $order_product = OrderProduct::getOne($params); - if (!empty($order_product)) { - $this->order_product = $order_product->toArray(); - } - - break; - case 3: // 检测订单 - $params = array(); - $params['detection_no'] = $order['order_no']; - $order_detection = OrderDetection::getOne($params); - if (!empty($order_detection)) { - $this->order_detection = $order_detection->toArray(); - } - - break; - case 4: // 健康包订单 - case 5: // 随访包订单 - $params = array(); - $params['inquiry_no'] = $order_no; - $order_inquiry = OrderInquiry::getOne($params); - if (!empty($order_inquiry)) { - $this->order_inquiry = $order_inquiry->toArray(); + if (!empty($order_no)){ + $params = array(); + $params['order_no'] = $order_no; + $order = Order::getOne($params); + if (!empty($order)){ + $this->order = $order->toArray(); + // 判断订单类型 + switch ($order['order_type']) { + case 1: // 问诊订单 $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); - if (!empty($order_service_package_inquiry)){ + $params['inquiry_no'] = $order['order_no']; + $order_inquiry = OrderInquiry::getOne($params); + if (!empty($order_inquiry)) { + $this->order_inquiry = $order_inquiry->toArray(); + } + + break; + case 2: // 药品订单 + $params = array(); + $params['order_product_no'] = $order['order_no']; + $order_product = OrderProduct::getOne($params); + if (!empty($order_product)) { + $this->order_product = $order_product->toArray(); + } + + break; + case 3: // 检测订单 + $params = array(); + $params['detection_no'] = $order['order_no']; + $order_detection = OrderDetection::getOne($params); + if (!empty($order_detection)) { + $this->order_detection = $order_detection->toArray(); + } + + break; + case 4: // 健康包订单 + case 5: // 随访包订单 + $params = array(); + $params['inquiry_no'] = $order_no; + $order_inquiry = OrderInquiry::getOne($params); + if (!empty($order_inquiry)) { + $this->order_inquiry = $order_inquiry->toArray(); + $params = array(); - $params['order_service_no'] = $order_service_package_inquiry['order_service_no']; - $order_service_package = OrderServicePackage::getOne($params); - if (!empty($order_service_package)){ - $this->order_service_package = $order_service_package->toArray(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (!empty($order_service_package_inquiry)){ + $params = array(); + $params['order_service_no'] = $order_service_package_inquiry['order_service_no']; + $order_service_package = OrderServicePackage::getOne($params); + if (!empty($order_service_package)){ + $this->order_service_package = $order_service_package->toArray(); + } } } - } - break; - default: - throw new BusinessException("订单类型错误"); + break; + default: + throw new BusinessException("订单类型错误"); + } } } } @@ -172,7 +178,7 @@ class MessagePush extends BaseService $producer = ApplicationContext::getContainer()->get(Producer::class); $result = $producer->produce($message); if (!$result) { - Log::getInstance("MessagePush")->error("错误:" . json_encode($data, JSON_UNESCAPED_UNICODE)); + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); } // 订阅 @@ -1233,7 +1239,7 @@ class MessagePush extends BaseService $producer = ApplicationContext::getContainer()->get(Producer::class); $result = $producer->produce($message); if (!$result) { - Log::getInstance("MessagePush")->error("错误:加入站内推送队列失败" . json_encode($data, JSON_UNESCAPED_UNICODE)); + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); } $inquiry_type = inquiryTypeToString($this->order_inquiry['inquiry_type']); @@ -1270,10 +1276,10 @@ class MessagePush extends BaseService $producer = ApplicationContext::getContainer()->get(Producer::class); $result = $producer->produce($message); if (!$result) { - Log::getInstance("MessagePush")->error("错误:加入站内推送队列失败" . json_encode($data, JSON_UNESCAPED_UNICODE)); + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); } } catch (\Throwable $e) { - Log::getInstance("MessagePush")->error("错误:加入站内推送队列失败" .$e->getMessage()); + Log::getInstance("MessagePush")->error($e->getMessage()); } return true; @@ -2655,7 +2661,7 @@ class MessagePush extends BaseService } /** - * 医生-医生有新服务包订单 + * 医生-医生有新的服务包订单 * 站内、订阅失败发送短信 * @return void */ @@ -2720,14 +2726,6 @@ class MessagePush extends BaseService } } - if ($this->order_inquiry['inquiry_type'] == 1 || $this->order_inquiry['inquiry_type'] == 3) { - // 专家、公益 - $thing6 = "24小时内未接诊,平台将自动取消问诊"; - } else { - // 快速、购药 - $thing6 = "5分钟内未接诊,平台将自动取消问诊"; - } - $sub_data = array(); $sub_data['push_user_id'] = $this->user['user_id']; $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc";//咨询提醒 @@ -2736,8 +2734,8 @@ class MessagePush extends BaseService "thing1" => "您有一个{$order_type}服务等待接诊",// 提醒内容 "name2" => (string)$this->order_inquiry['patient_name'],// 患者姓名 "thing4" => (string)$disease_desc,// 病情描述 - "thing6" => $thing6,// 提示说明 - "thing5" => "72小时内未接诊,平台将自送取消服务",// 咨询内容 + "thing6" => "72小时内未接诊,平台将自送取消服务",// 提示说明 + "thing5" => "",// 咨询内容 ]; // 短信 @@ -2766,4 +2764,928 @@ class MessagePush extends BaseService } } + /** + * 医生-医生有新的服务包问诊订单 + * 站内、订阅失败发送短信 + * @return void + */ + public function doctorHaveNewServicePackageInquiry(): void + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("错误:医生数据为空"); + return; + } + + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePush")->error("病例数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 1; + $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者发起{$order_type}服务中的一次问诊,请及时处理。"; + $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者发起{$order_type}服务中的一次问诊,请及时处理。"; + $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者发起{$order_type}服务中的一次问诊,请及时处理。"; + $data['link_type'] = 3; // 问诊消息列表页 + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + // 问诊内容-病情主诉 + $disease_desc = $order_inquiry_case['disease_desc']; + if (!empty($disease_desc)) { + if (strlen($disease_desc) > 15) { + $disease_desc = mb_substr($disease_desc, 0, 15); + if ($disease_desc) { + $disease_desc = $disease_desc . "..."; + } + } + } + + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc";//咨询提醒 + $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; + $sub_data['params']['data'] = [ + "thing1" => "发起{$order_type}服务中一次问诊",// 提醒内容 + "name2" => (string)$this->order_inquiry['patient_name'],// 患者姓名 + "thing4" => (string)$disease_desc,// 病情描述 + "thing6" => "24小时内未接诊,平台将自送取消问诊",// 提示说明 + "thing5" => "",// 咨询内容 + ]; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = []; + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error( $e->getMessage()); + } + } + + /** + * 医生-患者取消服务包订单 + * 站内-订阅 + * @return void + */ + public function doctorPatientCancelServicePackage(): void + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePush")->error("病例数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 1; + $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者已取消{$order_type}服务,您可选择其他患者的问诊咨询进行接诊。"; + $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者已取消{$order_type}服务,您可选择其他患者的问诊咨询进行接诊。"; + $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者已取消{$order_type}服务,您可选择其他患者的问诊咨询进行接诊。"; + $data['link_type'] = 3; // 问诊消息列表页 + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 问诊内容-病情主诉 + $disease_desc = $order_inquiry_case['disease_desc']; + if (!empty($disease_desc)) { + if (strlen($disease_desc) > 15) { + $disease_desc = mb_substr($disease_desc, 0, 15); + if ($disease_desc) { + $disease_desc = $disease_desc . "..."; + } + } + } + + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc";//咨询提醒 + $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; + $sub_data['params']['data'] = [ + "thing1" => "{$order_type}服务已取消",// 提醒内容 + "name2" => (string)$this->order_inquiry['patient_name'],// 患者姓名 + "thing4" => (string)$disease_desc,// 病情描述 + "thing6" => "您可以选择其他患者的问诊咨询进行接诊",// 提示说明 + "thing5" => "",// 咨询内容 + ]; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = []; + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error($e->getMessage()); + } + } + + /** + * 医生-医生xx时间后还未接受服务包订单 + * 站内、订阅失败发送短信 + * @return void + */ + public function doctorNotYetOrderServicePackage(): void + { + try { + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 1; + $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务您还未接诊,请及时处理。"; + $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务您还未接诊,请及时处理。"; + $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务您还未接诊,请及时处理。"; + $data['link_type'] = 3; // 问诊消息列表页. + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $this->user['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 问诊内容-病情主诉 + $disease_desc = $order_inquiry_case['disease_desc']; + if (!empty($disease_desc)) { + if (strlen($disease_desc) > 15) { + $disease_desc = mb_substr($disease_desc, 0, 15); + if ($disease_desc) { + $disease_desc = $disease_desc . "..."; + } + } + } + + // 订阅 + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc"; // 咨询提醒 + $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; + $sub_data['params']['data'] = [ + "thing1" => "您好医生,有新的{$order_type}服务您还未接诊",// 提醒内容 + "name2" => $this->order_inquiry['patient_name'],// 患者姓名 + "thing4" => mb_substr($order_inquiry_case['disease_desc'], 0, 18),// 病情描述 + "thing6" => "您还未接诊,请及时上线处理",// 提示说明 + "thing5" => "",// 咨询内容 + ]; + + $sms_data = array(); + $sms_data['template_code'] = "SMS_271905266"; + $sms_data['scene_desc'] = "医生xx时间后还未接诊"; + $sms_data['phone'] = $this->user['mobile']; + $sms_data['user_id'] = $this->user['user_id']; + + $template_param = array(); + $template_param['type'] = $order_type; + $template_param['name'] = $this->order_inquiry['patient_name']; + $sms_data['template_param'] = $template_param; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = $sms_data; + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error($e->getMessage()); + } + } + + /** + * 医生-通知医生患者的服务包服务结束 + * 站内订阅 + * 发送给医生 + * @return void + */ + public function doctorServicePackageFinish(): void + { + try { + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePush")->error("问诊病例为空"); + return; + } + + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 1; + $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务已完成,您可以提醒患者进行续费。"; + $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务已完成,您可以提醒患者进行续费。"; + $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务已完成,您可以提醒患者进行续费。"; + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + // 问诊内容-病情主诉 + $disease_desc = $order_inquiry_case['disease_desc']; + if (!empty($disease_desc)) { + if (strlen($disease_desc) > 15) { + $disease_desc = mb_substr($disease_desc, 0, 15); + if ($disease_desc) { + $disease_desc = $disease_desc . "..."; + } + } + } + + // 订阅 + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc"; // 咨询提醒 + $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; + $sub_data['params']['data'] = [ + "thing1" => "{$order_type}服务已完成",// 提醒内容 + "name2" => $this->order_inquiry['patient_name'],// 患者姓名 + "thing4" => $disease_desc,// 病情描述 + "thing6" => "您可以提醒患者进行续费",// 提示说明 + "thing5" => "",// 咨询内容 + ]; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = []; + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error("错误:加入推送队列失败" . $e->getMessage()); + } + } + + /** + * 患者-通知患者医生已接受服务包服务 + * 站内、订阅 + * @return void + */ + public function patientAcceptedServicePackage(): void + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePush")->error("病例数据为空"); + return; + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $this->order['order_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + Log::getInstance("MessagePush")->error("服务包订单数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 转换每月次数为汉字 + $monthly_frequency = monthlyFrequencyToString($order_service_package_detail['monthly_frequency']); + + $start_time = date('Y年m月d日 H时i分',strtotime($this->order_service_package['start_time'])); + $finish_time = date('Y年m月d日 H时i分',strtotime($this->order_service_package['finish_time'])); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 3; + $data['notice_system_type'] = 1; + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "您购买的{$order_type}服务,医生已接受,点击查看详情。"; + $data['notice_title'] = "您购买的{$order_type}服务,医生已接受,点击查看详情。"; + $data['notice_content'] = "您购买的{$order_type}服务,{$user_doctor['user_name']}医生已接受,服务包含:({$monthly_frequency}次问诊/月;30盒肝爽颗粒),服务有效期:{$start_time}~{$finish_time},每次问诊不限制沟通回合数,您可以点击【问诊详情】进行交流。"; + $data['link_type'] = 15;// 聊天详情页 + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['order_no'] = $this->order['order_no']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $data['button_type'] = 4; // 问诊详情 + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 + $sub_data['params']['page'] = "healthyService/pages/healthyOrderDetail/healthyOrderDetail?order_service_id={$this->order['order_no']}"; + $sub_data['params']['data'] = [ + "thing1" => "{$order_type}服务",// 问诊内容 + "thing2" => "医生已接受",// 提醒内容 + "name3" => (string)$user_doctor['user_name'],// 问诊医生 + "thing4" => "点击查看详情",// 提示说明 + ]; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = array(); + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error($e->getMessage()); + } + } + + /** + * 患者-通知患者医生已接诊服务包相关问诊订单 + * 站内、订阅 + * @return void + */ + public function patientAcceptedServicePackageInquiry(): void + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePush")->error("病例数据为空"); + return; + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $this->order['order_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + Log::getInstance("MessagePush")->error("服务包订单数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 获取服务包当月已问诊次数 + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($this->order_service_package['start_time'])) { + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($this->order_service_package['start_time'],$this->order_service_package['order_service_type'],$this->order_service_package['user_id'], $this->order_service_package['doctor_id']); + $remaining_inquiry_count = $order_service_package_detail['monthly_frequencys'] - $month_inquiry_count; + if ($remaining_inquiry_count < 0){ + $remaining_inquiry_count = 0; + } + }else{ + $remaining_inquiry_count = "不限"; + } + + // 获取剩余药品数量 + $remaining_quantity = 0; + if ($this->order_service_package['order_service_type'] == 1){ + // 健康包商品数据 + $params = array(); + $params['order_service_id'] = $this->order_service_package['order_service_id']; + $order_service_package_products = OrderServicePackageProduct::getList($params); + if (!empty($order_service_package_products)){ + foreach ($order_service_package_products as $order_service_package_product){ + $remaining_quantity += $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; + if ($remaining_quantity < 0){ + $remaining_quantity = 0; + } + } + } + } + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 3; + $data['notice_system_type'] = 1; + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "您使用{$order_type}服务中问诊,医生已接诊,点击查看详情。"; + $data['notice_title'] = "您使用{$order_type}服务中问诊,医生已接诊,点击查看详情。"; + $data['notice_content'] = "您使用{$order_type}服务中问诊,{$user_doctor['user_name']}医生已接诊,服务剩余:({$remaining_inquiry_count}次问诊/月;{$remaining_quantity}盒肝爽颗粒),您可以点击【问诊详情】进行交流。 +"; + $data['link_type'] = 1; + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['order_no'] = $this->order['order_no']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $data['button_type'] = 6; // 问诊详情 + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 + $sub_data['params']['page'] = "patient/pages/orderDetail/orderDetail?order_inquiry_id={$this->order_inquiry['order_inquiry_id']}"; + $sub_data['params']['data'] = [ + "thing1" => "使用{$order_type}服务中问诊",// 问诊内容 + "thing2" => "医生已接诊",// 提醒内容 + "name3" => (string)$user_doctor['user_name'],// 问诊医生 + "thing4" => "点击查看详情",// 提示说明 + ]; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = array(); + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error($e->getMessage()); + } + } + + /** + * 患者-通知患者服务包服务已结束 + * 站内、订阅 + * @return void + */ + public function patientServicePackageFinish(): void + { + try { + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePush")->error("问诊病例为空"); + return; + } + + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 1; + $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "您购买的{$order_type}服务已结束,点击查看详情。"; + $data['notice_title'] = "您购买的{$order_type}服务已结束,点击查看详情。"; + $data['notice_content'] = "您购买的{$order_type}服务已结束,您可以继续购买医生的{$order_type}进行问诊。"; + $data['link_type'] = 15; + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['order_no'] = $this->order['order_no']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $data['button_type'] = 4; // 问诊详情 + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + // 问诊内容-病情主诉 + $disease_desc = $order_inquiry_case['disease_desc']; + if (!empty($disease_desc)) { + if (strlen($disease_desc) > 15) { + $disease_desc = mb_substr($disease_desc, 0, 15); + if ($disease_desc) { + $disease_desc = $disease_desc . "..."; + } + } + } + + // 订阅 + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 + $sub_data['params']['page'] = "patient/pages/orderDetail/orderDetail?order_inquiry_id={$this->order_inquiry['order_inquiry_id']}"; + $sub_data['params']['data'] = [ + "thing1" => "使用{$order_type}服务中问诊",// 问诊内容 + "thing2" => "医生已接诊",// 提醒内容 + "name3" => (string)$user_doctor['user_name'],// 问诊医生 + "thing4" => "点击查看详情",// 提示说明 + ]; + + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 + $sub_data['params']['page'] = "healthyService/pages/healthyOrderDetail/healthyOrderDetail?order_service_id={$this->order['order_no']}"; + $sub_data['params']['data'] = [ + "thing1" => "{$order_type}服务",// 问诊内容 + "thing2" => "已结束",// 提醒内容 + "name3" => (string)$user_doctor['user_name'],// 问诊医生 + "thing4" => "如您还需服务,请点击此处续费",// 提示说明 + ]; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = []; + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error($e->getMessage()); + } + } + + /** + * 患者-通知患者服务包药品未使用完 + * 站内 + * @return void + */ + public function patientServicePackageHaveProduct(): void + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 获取剩余药品数量 + $remaining_quantity = 0; + if ($this->order_service_package['order_service_type'] == 1){ + // 健康包商品数据 + $params = array(); + $params['order_service_id'] = $this->order_service_package['order_service_id']; + $order_service_package_products = OrderServicePackageProduct::getList($params); + if (!empty($order_service_package_products)){ + foreach ($order_service_package_products as $order_service_package_product){ + $remaining_quantity += $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; + if ($remaining_quantity < 0){ + $remaining_quantity = 0; + } + } + } + } + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 3; + $data['notice_system_type'] = 1; + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "您购买的健康包服务中,有福利还未使用,点击查看详情。"; + $data['notice_title'] = "您购买的健康包服务中,有福利还未使用,点击查看详情。"; + $data['notice_content'] = "您购买的健康包服务中,包含30盒“肝爽颗粒(步长)”,目前剩余{$remaining_quantity}盒,您可以进入【订单详情】查看具体情况,在问诊中与医生沟通开具处方。"; + $data['link_type'] = 15; + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['order_no'] = $this->order['order_no']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $data['button_type'] = 4; + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error($e->getMessage()); + } + } + + /** + * 患者-医生未接受服务包订单 + * 站内、订阅、短信 + * @return void + */ + public function patientDoctorNoAcceptServicePackage(): void + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 3; + $data['notice_system_type'] = 1; + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "您购买的{$order_type}服务,医生未及时确认,点击查看详情。"; + $data['notice_title'] = "您购买的{$order_type}服务,医生未及时确认,点击查看详情。"; + $data['notice_content'] = "您购买的{$order_type}服务,{$user_doctor['user_name']}医生未及时确认,平台已自动发起退款,请注意查看账户信息。"; + $data['link_type'] = 15; + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['order_no'] = $this->order['order_no']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + $data['button_type'] = 4; + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 + $sub_data['params']['page'] = "healthyService/pages/healthyOrderDetail/healthyOrderDetail?order_service_id={$this->order['order_no']}"; + $sub_data['params']['data'] = [ + "thing1" => "{$order_type}服务",// 问诊内容 + "thing2" => "未及时确认",// 提醒内容 + "name3" => (string)$user_doctor['user_name'],// 问诊医生 + "thing4" => "平台已自动发起退款,请注意查看账户信息",// 提示说明 + ]; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = []; + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error("错误:" . $e->getMessage()); + } + } + + /** + * 患者-服务包服务退款成功 + * 站内、订阅 + * @return void + */ + public function refundServicePackageSuccess(): void + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 3; + $data['notice_system_type'] = 1; + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "您购买的{$order_type}服务,订单取消成功,点击查看详情。"; + $data['notice_title'] = "您购买的{$order_type}服务,订单取消成功,点击查看详情。"; + $data['notice_content'] = "您购买的{$order_type}服务,订单取消成功,平台已自动发起退款,请注意查看账户信息。"; + $data['link_type'] = 15; + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['order_no'] = $this->order['order_no']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + $data['button_type'] = 4; + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 + $sub_data['params']['page'] = "healthyService/pages/healthyOrderDetail/healthyOrderDetail?order_service_id={$this->order['order_no']}"; + $sub_data['params']['data'] = [ + "thing1" => "{$order_type}服务",// 问诊内容 + "thing2" => "取消订单成功",// 提醒内容 + "name3" => (string)$user_doctor['user_name'],// 问诊医生 + "thing4" => "平台已自动发起退款,请注意查看账户信息",// 提示说明 + ]; + + // 短信 + $sms_data = array(); + $sms_data['template_code'] = "SMS_465655405"; + $sms_data['scene_desc'] = "服务包服务退款成功"; + $sms_data['phone'] = $this->user['mobile']; + $sms_data['user_id'] = $this->user['user_id']; + + $template_param = array(); + $template_param['type'] = $order_type; + $template_param['name'] = (string)$user_doctor['user_name']; + $sms_data['template_param'] = $template_param; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = $sms_data; + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error("错误:" . $e->getMessage()); + } + + } } \ No newline at end of file diff --git a/app/Services/OrderPrescriptionService.php b/app/Services/OrderPrescriptionService.php index 6c29f4c..8902189 100644 --- a/app/Services/OrderPrescriptionService.php +++ b/app/Services/OrderPrescriptionService.php @@ -469,13 +469,13 @@ class OrderPrescriptionService extends BaseService OrderPrescription::edit($params, $data); - // 医生-开具的处方审核未通过 + /*// 医生-开具的处方审核未通过 $MessagePush = new MessagePush($doctor_user_id, $order_inquiry_id); $MessagePush->prescriptionVerifyFail($order_prescription_id); // 患者-处方审核未通过 $MessagePush = new MessagePush($patient_user_id, $order_inquiry_id); - $MessagePush->patientPrescriptionVerifyFail(); + $MessagePush->patientPrescriptionVerifyFail();*/ } catch (\Exception $e) { throw new BusinessException($e->getMessage()); diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index a35d557..50aee1c 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -986,15 +986,25 @@ class OrderServicePackageService extends BaseService // 等待医生接诊 $imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); - // 发送站内、订阅失败发送短信消息-医生有新服务包订单 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_service_package['order_service_no']); - $MessagePush->doctorHaveNewServicePackage(); + // 检测问诊是否服务包首次问诊 + $OrderServicePackageService = new OrderServicePackageService(); + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_no); + if ($is_first){ + // 首次 + // 发送站内、订阅失败发送短信消息-医生有新服务包订单 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); + $MessagePush->doctorHaveNewServicePackage(); + }else{ + // 发送站内、订阅失败-医生有新的服务包问诊订单 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); + $MessagePush->doctorHaveNewServicePackageInquiry(); + } // 加入xx时间未接诊通知队列 $data = array(); $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $time = 1000 * 60 * 60 * 2; + $time = 1000 * 60 * 60 * 24; $message = new DoctorNotYetInquiryDelayDirectProducer($data); $message->setDelayMs($time); $producer = $this->container->get(Producer::class); @@ -1260,7 +1270,7 @@ class OrderServicePackageService extends BaseService } /** - * 获取服务包剩余药品数量 + * 获取服务包内某一药品的剩余数量 * @param string|int $order_service_id * @param string|int $product_id * @return int @@ -1303,4 +1313,50 @@ class OrderServicePackageService extends BaseService return false; } + + /** + * 获取服务包订单编号-通过问诊订单id + * @param string|int $inquiry_no + * @return string|int + */ + public function getOrderServiceNoByOrderInquiryId(string|int $inquiry_no): string|int + { + $params = array(); + $params['inquiry_no'] = $inquiry_no; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (empty($order_service_package_inquiry)){ + throw new BusinessException("订单错误"); + } + + return $order_service_package_inquiry['order_service_no']; + } + + /** + * 检测患者服务包内是否还存在剩余药品 + * @param string|int $order_no + * @return bool + */ + public function checkOrderServiceRemainingProduct(string|int $order_no): bool + { + // 获取服务包关联商品 + $params = array(); + $params['order_service_no'] = $order_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + return false; + } + + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_products = OrderServicePackageProduct::getList($params); + foreach ($order_service_package_products as $order_service_package_product){ + $remaining_quantity = $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; + if ($remaining_quantity > 0){ + return true; + } + } + + return false; + } + } \ No newline at end of file diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index b2d8a4b..ad59b30 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -413,7 +413,7 @@ class PatientOrderService extends BaseService } // 推送医生-患者取消问诊 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->patientCancelInquiryToDoctor(); } } catch (\Exception $e) { @@ -1241,7 +1241,7 @@ class PatientOrderService extends BaseService $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 = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->doctorHaveNewInquiry(); // 加入xx时间未接诊通知队列 @@ -1503,7 +1503,7 @@ class PatientOrderService extends BaseService $amount_total = 0; foreach ($product_datas as &$product_data){ - // 获取服务包剩余药品数量 + // 获取服务包内某一药品的剩余数量 $remaining_quantity = $OrderServicePackageService->getOrderServiceProductRemainingQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id']); // 可用数量大于处方商品数量,此情况把商品价格置为0 @@ -2014,7 +2014,7 @@ class PatientOrderService extends BaseService $amount_total = 0; foreach ($product_datas as &$product_data){ - // 获取服务包剩余药品数量 + // 获取服务包内某一药品的剩余数量 $remaining_quantity = $OrderServicePackageService->getOrderServiceProductRemainingQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id']); // 可用数量大于处方商品数量,此情况把商品价格置为0 @@ -2667,7 +2667,7 @@ class PatientOrderService extends BaseService $user_doctor = UserDoctor::getOne($params); if (!empty($user_doctor)) { // 推送医生-患者取消问诊 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->patientCancelInquiryToDoctor(); } } @@ -2680,7 +2680,7 @@ class PatientOrderService extends BaseService $order_detection = OrderDetection::getOne($params); if (!empty($order_detection)) { // 推送患者-订单取消成功通知 - $MessagePush = new MessagePush($order_detection['user_id']); + $MessagePush = new MessagePush($order_detection['user_id'],$order_detection['detection_no']); $MessagePush->patientCancelDetectionOrderSuccess($order_detection['order_detection_id']); } @@ -2707,9 +2707,9 @@ class PatientOrderService extends BaseService $params['doctor_id'] = $order_service_package['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (!empty($user_doctor)) { - // 推送医生-患者取消问诊 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_service_package_inquiry['order_inquiry_id']); - $MessagePush->patientCancelInquiryToDoctor(); + // 医生-患者取消服务包订单 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_service_package_inquiry['inquiry_no']); + $MessagePush->doctorPatientCancelServicePackage(); } } diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index 66b43d6..ab0c7ad 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1985,9 +1985,37 @@ class UserDoctorService extends BaseService // 发送IM消息-患者病例 $imService->patientCase($order_inquiry,$user_doctor['user_id'],$order_inquiry_case['disease_desc']); - // 发送站内、订阅、短信消息-医生已接诊 - $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']); - $MessagePush->patientAcceptedInquiry(); + // 处理服务包情况 + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + if ($is_first){ + // 患者-通知患者医生已接受服务包服务 + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->patientAcceptedServicePackage(); + }else{ + // 患者-通知患者医生已接诊服务包相关问诊订单 + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->patientAcceptedServicePackageInquiry(); + } + + // 检测患者服务包内是否还存在剩余药品 + $res = $OrderServicePackageService->checkOrderServiceRemainingProduct($order_service_no); + if ($res){ + // 患者-通知患者服务包药品未使用完 + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->patientServicePackageHaveProduct(); + } + }else{ + // 发送站内、订阅、短信消息-医生已接诊 + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->patientAcceptedInquiry(); + } }catch(\Exception $e){ return success([],HttpEnumCode::HTTP_SUCCESS,$e->getMessage()); } diff --git a/app/Services/UserPharmacistService.php b/app/Services/UserPharmacistService.php index 4e0f0a7..641fb6f 100644 --- a/app/Services/UserPharmacistService.php +++ b/app/Services/UserPharmacistService.php @@ -257,12 +257,12 @@ class UserPharmacistService extends BaseService $imService->prescriptionIssued($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id'],$product_name,(string)$order_prescription['order_prescription_id'],7); // 发送站内、短信消息-患者的处方被药师审核通过 - $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); $MessagePush->patientPrescriptionVerifyPass(); // 站内、订阅失败发送短信-医生开具的处方审核通过 // 发送目标不同,重新实例化 - $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); $MessagePush->prescriptionVerifySuccess(); // 添加处方过期队列 @@ -279,7 +279,7 @@ class UserPharmacistService extends BaseService } }else{ // 站内、订阅失败发送短信-医生开具的处方审核未通过 - $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); $MessagePush->prescriptionVerifyFail($order_prescription['order_prescription_id']); } diff --git a/app/Services/UserService.php b/app/Services/UserService.php index f3771cf..4eb7d52 100644 --- a/app/Services/UserService.php +++ b/app/Services/UserService.php @@ -763,7 +763,7 @@ class UserService extends BaseService /** * 通过user_id获取用户openid * @param string|int $user_id - * @param int $user_type + * @param int|string $user_type * @return string */ public function getOpenIdWithUserId(string|int $user_id, int|string $user_type): string @@ -876,6 +876,13 @@ class UserService extends BaseService return true; } + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + return false; + } + $message = "您有一条新的问诊消息"; // 判断消息类型 if (isset($msg_body[0]['MsgType'])){ @@ -907,7 +914,7 @@ class UserService extends BaseService } } - $MessagePush = new MessagePush($user_id, $order_inquiry_id); + $MessagePush = new MessagePush($user_id, $order_inquiry['inquiry_no']); if ($user['user_type'] == 1){ // 患者