From c4d7f5e018e7216140e6f0db42be5a54e8fa0be0 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 19 Apr 2024 16:37:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9im=E6=B6=88=E6=81=AF=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/ImService.php | 166 +++++++++++++++++++++++++++++++++++-- 1 file changed, 160 insertions(+), 6 deletions(-) diff --git a/app/Services/ImService.php b/app/Services/ImService.php index 86d4f10..a0e05f4 100644 --- a/app/Services/ImService.php +++ b/app/Services/ImService.php @@ -6,6 +6,9 @@ use App\Constants\DoctorTitleCode; use App\Constants\HttpEnumCode; use App\Exception\BusinessException; use App\Model\Hospital; +use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageDetail; +use App\Model\OrderServicePackageProduct; use App\Model\User; use App\Model\UserDoctor; use App\Model\UserPatient; @@ -333,7 +336,22 @@ class ImService extends BaseService $message_content_data['message_type'] = 1; $message_content_data['title'] = "—等待医生接诊—"; if ($order_inquiry['inquiry_type'] == 1) { - $message_content_data['desc'] = "温馨提示:当前服务为专家问诊,医师接诊后可以在24小时内和医生沟通20个回合。医生繁忙请耐心等待,医生接诊会后第一时间短信通知您。"; + 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){ + $message_content_data['desc'] = "温馨提示:医生繁忙请耐心等待,医生接诊后会第一时间通知您。医生接诊后,服务有效期开始计算。"; + }else{ + $message_content_data['desc'] = "温馨提示:医生繁忙请耐心等待,医生接诊后会第一时间通知您。"; + } + }else{ + $message_content_data['desc'] = "温馨提示:当前服务为专家问诊,医师接诊后可以在24小时内和医生沟通20个回合。医生繁忙请耐心等待,医生接诊会后第一时间短信通知您。"; + } } elseif ($order_inquiry['inquiry_type'] == 2) { $message_content_data['desc'] = "温馨提示:请耐心等待,您可继续补充病情,便于医生接诊后更快确认病情。"; } elseif ($order_inquiry['inquiry_type'] == 3) { @@ -386,7 +404,91 @@ class ImService extends BaseService } $message_content_data['title'] = "—问诊已开始,本次问诊可持续{$time}—"; - $message_content_data['desc'] = "医生已接诊,为提高沟通效率,您可一次性如实补充病情(具体症状,患病时长,用药情况及想咨询的问题等)。线上咨询不能代替面诊,医生建议仅供参考。"; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + throw new BusinessException("im消息发送失败"); + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($order_service_package['order_service_type']); + + $start_time = date('Y年m月d日 H时i分',strtotime($order_service_package['start_time'])); + $finish_time = date('Y年m月d日 H时i分',strtotime($order_service_package['finish_time'])); + + // 获取服务包当月剩余问诊次数 + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$order_service_package['user_id'], $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 = "不限"; + } + + if ($remaining_inquiry_count == 0){ + $message_content_data['desc'] = "医生已接诊,为提高沟通效率,您可一次性如实补充病情(具体症状,患病时长,用药情况及想咨询的问题等)。线上咨询不能代替面诊,医生建议仅供参考。"; + } + + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + if ($is_first){ + $message_content_data['desc'] = "医生已接诊,{$order_type}服务开始,服务周期为:{$start_time}~{$finish_time},线上咨询不能代表面诊,医生的回复仅为建议。"; + }else{ + // 健康包 + if ($order_inquiry['inquiry_mode'] == 8){ + // 检测患者服务包内是否还存在剩余药品 + $res = $OrderServicePackageService->checkOrderServiceRemainingProduct($order_service_no); + if ($res){ + // 获取剩余药品数量 + $remaining_quantity = 0; + + // 健康包商品数据 + $params = array(); + $params['order_service_id'] = $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; + } + } + } + + if ($remaining_quantity > 0){ + $message_content_data['desc'] = "医生已接诊,健康包服务本月剩余{$remaining_inquiry_count}次问诊,且还剩余{$remaining_quantity}盒肝爽颗粒,提醒医生开具处方。"; + }else{ + $message_content_data['desc'] = "医生已接诊,健康包服务本月剩余{$remaining_inquiry_count}次问诊,服务周期为:{$start_time}~{$finish_time},线上咨询不能代表面诊,医生的回复仅为建议。"; + } + } + } + + // 随访包 + if ($order_inquiry['inquiry_mode'] == 9){ + $message_content_data['desc'] = "医生已接诊,{$order_type}服务本月剩余{$remaining_inquiry_count}/不限次,服务周期为:{$start_time}~{$finish_time},线上咨询不能代表面诊,医生的回复仅为建议。"; + } + } + }else{ + $message_content_data['desc'] = "医生已接诊,为提高沟通效率,您可一次性如实补充病情(具体症状,患病时长,用药情况及想咨询的问题等)。线上咨询不能代替面诊,医生建议仅供参考。"; + } $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), @@ -423,8 +525,36 @@ class ImService extends BaseService // 消息内容 医生-患者 $message_content_data = array(); $message_content_data['message_type'] = 1; - $message_content_data['title'] = "—医生未接诊—"; - $message_content_data['desc'] = "医生因工作繁忙未能及时接诊,请您谅解。所支付金额会在24小时内原路退回,再次感谢您的支持"; + + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($order_service_package['order_service_type']); + + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + if ($is_first){ + $message_content_data['title'] = "—医生未接诊—"; + $message_content_data['desc'] = "温馨提示:医生因工作繁忙未能及时进行接诊,请您见谅。{$order_type}订单金额会在24小时内原路退回,感谢您的支持。"; + }else{ + $message_content_data['title'] = "—医生未接诊—"; + $message_content_data['desc'] = "温馨提示:医生因工作繁忙未能及时进行接诊,请您见谅;稍后请再次发起问诊。"; + } + }else{ + $message_content_data['title'] = "—医生未接诊—"; + $message_content_data['desc'] = "医生因工作繁忙未能及时接诊,请您谅解。所支付金额会在24小时内原路退回,再次感谢您的支持"; + } $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), @@ -506,8 +636,32 @@ class ImService extends BaseService // 消息内容 医生-患者 $message_content_data = array(); $message_content_data['message_type'] = 1; - $message_content_data['title'] = "—问诊退款—"; - $message_content_data['desc'] = "平台已自动发起退款,请注意查看账户信息。"; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + if ($is_first){ + $message_content_data['title'] = "—服务退款—"; + $message_content_data['desc'] = "平台已自动发起退款,请注意查看账户信息。"; + }else{ + $message_content_data['title'] = "—问诊退款—"; + $message_content_data['desc'] = "平台已自动发起退款,请注意查看账户信息。"; + } + }else{ + $message_content_data['title'] = "—问诊退款—"; + $message_content_data['desc'] = "平台已自动发起退款,请注意查看账户信息。"; + } $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE),