From 196f8bbb3ba81b290be40c775fc9206860f058e6 Mon Sep 17 00:00:00 2001 From: wucongxing <815046773@qq.com> Date: Mon, 24 Apr 2023 13:45:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=97=AE=E8=AF=8A=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E5=90=8D=E7=A7=B0=EF=BC=8C=E6=96=B0=E5=A2=9E=E9=97=AE?= =?UTF-8?q?=E8=AF=8A=E7=BB=93=E6=9D=9F=E6=8E=A8=E9=80=81=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E7=BB=93=E6=9D=9Fim=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...AutoCompleteInquiryDelayDirectConsumer.php | 6 +- .../AutoFinishInquiryDelayDirectConsumer.php | 73 ++++++++++++++---- app/Services/ImService.php | 75 ++++++++++++++----- app/Services/InquiryService.php | 4 +- 4 files changed, 120 insertions(+), 38 deletions(-) diff --git a/app/Amqp/Consumer/AutoCompleteInquiryDelayDirectConsumer.php b/app/Amqp/Consumer/AutoCompleteInquiryDelayDirectConsumer.php index 25abaee..c2e73e4 100644 --- a/app/Amqp/Consumer/AutoCompleteInquiryDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoCompleteInquiryDelayDirectConsumer.php @@ -147,14 +147,14 @@ class AutoCompleteInquiryDelayDirectConsumer extends ConsumerMessage } } - // 发送IM消息-问诊已结束 + // 发送IM消息-问诊已完成 $imService = new ImService(); - $imService->inquiryEnd($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']); + $imService->inquiryComplete($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']); // 发送IM消息-问诊结束评价通知 $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->finishInquiryToDoctor(); diff --git a/app/Amqp/Consumer/AutoFinishInquiryDelayDirectConsumer.php b/app/Amqp/Consumer/AutoFinishInquiryDelayDirectConsumer.php index 31fd319..14c27ae 100644 --- a/app/Amqp/Consumer/AutoFinishInquiryDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoFinishInquiryDelayDirectConsumer.php @@ -14,6 +14,7 @@ use App\Model\PatientFamilyHealth; use App\Model\PatientFamilyPersonal; use App\Model\UserDoctor; use App\Model\UserPatient; +use App\Services\ImService; use App\Services\MessagePush; use App\Utils\Log; use App\Utils\Mask; @@ -49,14 +50,14 @@ class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage public function consumeMessage($data, AMQPMessage $message): string { - Log::getInstance()->error("开始执行 自动结束问诊订单 队列:" . json_encode($data, JSON_UNESCAPED_UNICODE)); + Log::getInstance("queue-AutoFinishInquiry")->info("开始:" . json_encode($data, JSON_UNESCAPED_UNICODE)); Db::beginTransaction(); try { // 检测入参参数 if (empty($data['order_inquiry_id'])) { Db::rollBack(); - Log::getInstance()->error("自动结束问诊订单队列执行失败:入参错误"); + Log::getInstance("queue-AutoFinishInquiry")->error("错误:入参错误"); return Result::DROP; } @@ -66,7 +67,7 @@ class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage $order_inquiry = OrderInquiry::getOne($params); if (empty($order_inquiry)) { Db::rollBack(); - Log::getInstance()->error("自动结束问诊订单队列执行失败:问诊订单数据为空"); + Log::getInstance("queue-AutoFinishInquiry")->error("错误:问诊订单数据为空"); return Result::DROP; } @@ -75,20 +76,20 @@ class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) if ($order_inquiry['inquiry_status'] != 5) { Db::rollBack(); - Log::getInstance()->error("自动结束问诊订单队列执行失败:问诊订单未完成,无法结束"); + Log::getInstance("queue-AutoFinishInquiry")->error("错误:问诊订单未完成,无法结束"); return Result::DROP; } // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) if (!in_array($order_inquiry['inquiry_refund_status'], [0, 4, 5])) { Db::rollBack(); - Log::getInstance()->error("自动结束问诊订单队列执行失败:问诊订单正在申请退款"); + Log::getInstance("queue-AutoFinishInquiry")->error("错误:问诊订单正在申请退款"); return Result::DROP; } if (empty($order_inquiry['doctor_id'])) { Db::rollBack(); - Log::getInstance()->error("自动结束问诊订单队列执行失败:医生id为空"); + Log::getInstance("queue-AutoFinishInquiry")->error("错误:医生id为空"); return Result::DROP; } @@ -98,7 +99,7 @@ class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage $res = $this->handleDoctorAccount($order_inquiry); if (!$res) { Db::rollBack(); - Log::getInstance()->error("自动结束问诊订单队列执行失败:处理医生账户总表失败"); + Log::getInstance("queue-AutoFinishInquiry")->error("错误:处理医生账户总表失败"); return Result::DROP; } @@ -106,7 +107,7 @@ class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage $res = $this->handleDoctorAccountDay($order_inquiry); if (!$res) { Db::rollBack(); - Log::getInstance()->error("自动结束问诊订单队列执行失败:处理医生账户表-日失败"); + Log::getInstance("queue-AutoFinishInquiry")->error("错误:处理医生账户表-日失败"); return Result::DROP; } } @@ -127,13 +128,22 @@ class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage $this->handleDoctorPraiseRate($order_inquiry['doctor_id']); Db::commit(); - Log::getInstance()->info("自动结束问诊订单队列执行成功"); - return Result::ACK; + Log::getInstance("queue-AutoFinishInquiry")->info("成功"); } catch (\Exception $e) { Db::rollBack(); - Log::getInstance()->error("自动结束问诊订单执行失败:" . $e->getMessage()); + Log::getInstance("queue-AutoFinishInquiry")->error("错误:" . $e->getMessage()); return Result::ACK; // 重回队列 } + + // 推送消息 + try { + // 推送问诊结束im消息 + $this->pushImInquiryFinish($order_inquiry); + }catch (\Exception $e){ + Log::getInstance("queue-AutoFinishInquiry")->error("发送消息异常错误:" . $e->getMessage()); + } + + return Result::ACK; } /** @@ -301,7 +311,7 @@ class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage $patient_family_health = PatientFamilyHealth::addPatientFamilyHealth($data); if (empty($patient_family_health)) { - Log::getInstance()->error("自动结束问诊订单队列执行失败:回写患者家庭成员信息表-健康情况表失败"); + Log::getInstance("queue-AutoFinishInquiry")->error("错误:回写患者家庭成员信息表-健康情况表失败"); } } else { $data = array(); @@ -359,7 +369,7 @@ class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage $patient_family_personal = PatientFamilyPersonal::addPatientFamilyPersonal($data); if (empty($patient_family_personal)) { - Log::getInstance()->error("自动结束问诊订单队列执行失败:回写患者家庭成员信息表-个人情况表失败"); + Log::getInstance("queue-AutoFinishInquiry")->error("错误:回写患者家庭成员信息表-个人情况表失败"); } } else { $data = array(); @@ -436,4 +446,41 @@ class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage $data['praise_rate'] = $praise_rate; UserDoctor::editUserDoctor($params,$data); } + + /** + * 推送问诊结束im消息 + * @param array|object $order_inquiry + * @return void + */ + protected function pushImInquiryFinish(array|object $order_inquiry): void + { + // 当前用户是否在这三天内再次咨询了该医生 + $is_inquiry = false; + + $params = array(); + $params['user_id'] = $order_inquiry['user_id']; + $params['doctor_id'] = $order_inquiry['doctor_id']; + $order_inquirys = OrderInquiry::getList($params); + if (!empty($order_inquirys)){ + foreach ($order_inquirys as $item){ + if ($item['order_inquiry_id'] == $order_inquiry['order_inquiry_id']){ + continue; + } + $is_inquiry = true; + break; + } + } + + if (!$is_inquiry){ + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (!empty($user_doctor)){ + // 发送IM消息-问诊已结束 + $imService = new ImService(); + $imService->inquiryFinish($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']); + } + } + } } diff --git a/app/Services/ImService.php b/app/Services/ImService.php index 6aa4988..797cb85 100644 --- a/app/Services/ImService.php +++ b/app/Services/ImService.php @@ -270,13 +270,13 @@ class ImService extends BaseService } /** - * 问诊已结束 + * 问诊已完成 * @param array|object $order_inquiry 问诊订单数据 * @param string $doctor_user_id 医生用户id * @param string $patient_user_id 患者用户id * @return void */ - public function inquiryEnd(array|object $order_inquiry, string $doctor_user_id, string $patient_user_id): void + public function inquiryComplete(array|object $order_inquiry, string $doctor_user_id, string $patient_user_id): void { try { // 发送消息 @@ -292,8 +292,8 @@ class ImService extends BaseService // 消息内容 医生-患者 $message_content_data = array(); $message_content_data['message_type'] = 1; - $message_content_data['title'] = "--问诊已结束--"; - $message_content_data['desc'] = "线上咨询不能代替问诊,医生的回复仅为建议。"; + $message_content_data['title'] = "—问诊已结束—"; + $message_content_data['desc'] = "线上咨询不能代替面诊,医生建议仅供参考。"; $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -327,15 +327,15 @@ class ImService extends BaseService // 消息内容 医生-患者 $message_content_data = array(); $message_content_data['message_type'] = 1; - $message_content_data['title'] = "--等待医生接诊--"; + $message_content_data['title'] = "—等待医生接诊—"; if ($order_inquiry['inquiry_type'] == 1) { - $message_content_data['desc'] = "温馨提示:当前服务为专家问诊,可以在24小时内和医生沟通20个回合。医生均为一线工作,还请耐心等待,医生接诊会第一时间短信通知您。"; + $message_content_data['desc'] = "温馨提示:当前服务为专家问诊,医师接诊后可以在24小时内和医生沟通20个回合。医生繁忙请耐心等待,医生接诊会后第一时间短信通知您。"; } elseif ($order_inquiry['inquiry_type'] == 2) { - $message_content_data['desc'] = "温馨提示:您可继续补充问诊内容,便于更快确认病情,医生均在临床一线工作,还请耐心等待,医生接诊会第一时间短信通知您。"; + $message_content_data['desc'] = "温馨提示:请耐心等待,您可继续补充病情,便于医生接诊后更快确认病情。"; } elseif ($order_inquiry['inquiry_type'] == 3) { - $message_content_data['desc'] = "温馨提示:当前服务为公益问诊,可以在24小时内和医生沟通10个回合。医生均为一线工作,还请耐心等待,医生接诊会第一时间短信通知您。"; + $message_content_data['desc'] = "温馨提示:当前服务为公益问诊,医师接诊后可以在24小时内和医生沟通10个回合。医生繁忙请耐心等待,医生接诊会后第一时间短信通知您。"; } else { - $message_content_data['desc'] = "温馨提示:当前服务为公益问诊,可以在24小时内和医生沟通10个回合。医生均为一线工作,还请耐心等待,医生接诊会第一时间短信通知您。"; + $message_content_data['desc'] = "温馨提示:请耐心等待,您可继续补充病情,便于医生接诊后更快确认病情。"; } $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), @@ -372,17 +372,17 @@ class ImService extends BaseService $message_content_data['message_type'] = 1; if ($order_inquiry['inquiry_type'] == 1) { - $message_content_data['title'] = "--问诊已开始,本次问诊可持续24小时--"; - $message_content_data['desc'] = "医生已接诊,您可继续补充问诊内容,如目前症状、患病时长、检查及用药情况、需要的帮助等,线上咨询不能代表面诊,医生的回复仅为建议。"; + $message_content_data['title'] = "—问诊已开始,本次问诊可持续24小时—"; + $message_content_data['desc'] = "医生已接诊,为提高沟通效率,您可一次性如实补充病情(具体症状,患病时长,用药情况及想咨询的问题等)。线上咨询不能代替面诊,医生建议仅供参考。"; } elseif ($order_inquiry['inquiry_type'] == 2) { - $message_content_data['title'] = "--问诊已开始,本次问诊可持续60分钟--"; - $message_content_data['desc'] = "医生已接诊,您可继续补充问诊内容,如目前症状、患病时长、检查及用药情况、需要的帮助等,线上咨询不能代表面诊,医生的回复仅为建议。"; + $message_content_data['title'] = "—问诊已开始,本次问诊可持续60分钟—"; + $message_content_data['desc'] = "医生已接诊,为提高沟通效率,您可一次性如实补充病情(具体症状,患病时长,就医用药情况及想咨询的问题等)。线上咨询不能代替面诊,医生建议仅供参考。"; } elseif ($order_inquiry['inquiry_type'] == 3) { - $message_content_data['title'] = "--问诊已开始,本次问诊可持续24小时--"; - $message_content_data['desc'] = "医生已接诊,您可一次描述需要问诊的内容,以免浪费问诊次数,如目前症状、患病时长、检查及用药情况、需要的帮助等,线上咨询不能代表面诊,医生的回复仅为建议。"; + $message_content_data['title'] = "—问诊已开始,本次问诊可持续24小时—"; + $message_content_data['desc'] = "医生已接诊,为提高沟通效率,您可一次性如实补充病情(具体症状,患病时长,就医用药情况及想咨询的问题等)。线上咨询不能代替面诊,医生建议仅供参考。"; } elseif ($order_inquiry['inquiry_type'] == 4) { - $message_content_data['title'] = "--问诊已开始,本次问诊可持续30分钟--"; - $message_content_data['desc'] = "医生已接诊,您可继续补充问诊内容,如目前症状、患病时长、检查及用药情况、需要的帮助等,线上咨询不能代表面诊,医生的回复仅为建议。"; + $message_content_data['title'] = "—问诊已开始,本次问诊可持续30分钟—"; + $message_content_data['desc'] = "医生已接诊,为提高沟通效率,您可一次性如实补充病情(具体症状,患病时长,就医用药情况及想咨询的问题等)。线上咨询不能代替面诊,医生建议仅供参考。"; } $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), @@ -417,8 +417,8 @@ class ImService extends BaseService // 消息内容 医生-患者 $message_content_data = array(); $message_content_data['message_type'] = 1; - $message_content_data['title'] = "--医生未接诊--"; - $message_content_data['desc'] = "医生因工作繁忙,未能接诊和您沟通希望见谅。平台在24小时内进行退款,钱会退回至原账户中。"; + $message_content_data['title'] = "—医生未接诊—"; + $message_content_data['desc'] = "医生因工作繁忙未能及时接诊,请您谅解。所支付金额会在24小时内原路退回,再次感谢您的支持"; $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), @@ -496,7 +496,7 @@ class ImService extends BaseService // 消息内容 医生-患者 $message_content_data = array(); $message_content_data['message_type'] = 1; - $message_content_data['title'] = "--问诊退款--"; + $message_content_data['title'] = "—问诊退款—"; $message_content_data['desc'] = "平台已自动发起退款,请注意查看账户信息。"; $message_content = [ @@ -584,4 +584,39 @@ class ImService extends BaseService throw new BusinessException($e->getMessage()); } } + + /** + * 问诊已结束 + * @param array|object $order_inquiry 问诊订单数据 + * @param string $doctor_user_id 医生用户id + * @param string $patient_user_id 患者用户id + * @return void + */ + public function inquiryFinish(array|object $order_inquiry, string $doctor_user_id, string $patient_user_id): void + { + try { + // 发送消息 + $cloud_custom_data = array(); + $cloud_custom_data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $cloud_custom_data['is_system'] = 1; + $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; + $cloud_custom_data['message_rounds'] = 0; + $cloud_custom_data['patient_family_data']['patient_name'] = $order_inquiry['patient_name']; + $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; + $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + + // 消息内容 医生-患者 + $message_content_data = array(); + $message_content_data['message_type'] = 1; + $message_content_data['title'] = "—问诊已结束—"; + $message_content_data['desc'] = "本次问诊服务已正式结束,祝您早日康复,再次感谢您的支持。"; + $message_content = [ + 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), + ]; + + $this->sendMessage($doctor_user_id, $patient_user_id, $message_content, "TIMCustomElem", $cloud_custom_data); + } catch (\Exception $e) { + throw new BusinessException($e->getMessage()); + } + } } \ No newline at end of file diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 95e7f53..9a7c46a 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -886,9 +886,9 @@ class InquiryService extends BaseService } try { - // 发送IM消息-问诊已结束 + // 发送IM消息-问诊已完成 $imService = new ImService(); - $imService->inquiryEnd($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']); + $imService->inquiryComplete($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']); // 发送IM消息-问诊结束评价通知 $imService->inquiryEndEvaluation($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']);