修改问诊完成名称,新增问诊结束推送问诊结束im消息

This commit is contained in:
wucongxing 2023-04-24 13:45:59 +08:00
parent c15bf38075
commit 196f8bbb3b
4 changed files with 120 additions and 38 deletions

View File

@ -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();

View File

@ -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']);
}
}
}
}

View File

@ -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());
}
}
}

View File

@ -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']);