From cc1ff2f89d770004a026b6987708abf81065d61c Mon Sep 17 00:00:00 2001 From: wucongxing <815046773@qq.com> Date: Wed, 10 Jan 2024 09:39:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E8=B5=A0=E9=80=81=E6=B2=9F=E9=80=9A=E5=9B=9E=E5=90=88=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/InquiryController.php | 18 ++++ app/Model/OrderInquiry.php | 14 +-- app/Request/InquiryRequest.php | 7 ++ app/Services/ImService.php | 54 ++++++++-- app/Services/InquiryService.php | 152 +++++++++++++++++++++++++++ app/Services/MessagePush.php | 129 ++++++++++++++++++++--- config/routes.php | 3 + 7 files changed, 348 insertions(+), 29 deletions(-) diff --git a/app/Controller/InquiryController.php b/app/Controller/InquiryController.php index a6e083a..d6a99ab 100644 --- a/app/Controller/InquiryController.php +++ b/app/Controller/InquiryController.php @@ -135,6 +135,8 @@ class InquiryController extends AbstractController /** * 获取患者最后一条问诊订单id * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface */ public function getPatientLastInquiryId(): ResponseInterface { @@ -145,4 +147,20 @@ class InquiryController extends AbstractController $data = $InquiryService->getPatientLastInquiryId(); return $this->response->json($data); } + + /** + * 医生赠送沟通回合数 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function addDoctorGiveInquiryOrder(): ResponseInterface + { + $request = $this->container->get(InquiryRequest::class); + $request->scene('addDoctorGiveInquiryOrder')->validateResolved(); + + $InquiryService = new InquiryService(); + $data = $InquiryService->addDoctorGiveInquiryOrder(); + return $this->response->json($data); + } } \ No newline at end of file diff --git a/app/Model/OrderInquiry.php b/app/Model/OrderInquiry.php index d2d1de1..9c5555a 100644 --- a/app/Model/OrderInquiry.php +++ b/app/Model/OrderInquiry.php @@ -17,12 +17,12 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $patient_id 患者id * @property int $doctor_id 医生id(未分配时为null) * @property int $family_id 家庭成员id(就诊用户) - * @property int $inquiry_type 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) - * @property int $inquiry_mode 订单问诊方式(1:图文 2:视频 3:语音 4:电话 5:会员) + * @property int $inquiry_type 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测) + * @property int $inquiry_mode 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠) * @property int $inquiry_status 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) * @property int $is_delete 删除状态(0:否 1:是) * @property int $inquiry_refund_status 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) - * @property int $inquiry_pay_channel 支付渠道(1:小程序支付 2:微信扫码支付) + * @property int $inquiry_pay_channel 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) * @property int $inquiry_pay_status 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) * @property string $inquiry_no 系统订单编号 * @property string $escrow_trade_no 第三方支付流水号 @@ -40,14 +40,16 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $cancel_time 订单取消时间 * @property int $cancel_reason 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) * @property string $cancel_remarks 取消订单备注(自动添加) + * @property int $times_number 沟通次数(0为不限制次数) + * @property int $duration 沟通时长(分钟,0为不限制时长) * @property string $patient_name 患者姓名-就诊人 * @property string $patient_name_mask 患者姓名-就诊人(掩码) * @property int $patient_sex 患者性别-就诊人(0:未知 1:男 2:女) * @property int $patient_age 患者年龄-就诊人 * @property \Carbon\Carbon $created_at 创建时间 * @property \Carbon\Carbon $updated_at 修改时间 - * @property-read OrderInquiryCase $OrderInquiryCase - * @property-read UserDoctor $UserDoctor + * @property-read OrderInquiryCase|null $OrderInquiryCase + * @property-read UserDoctor|null $UserDoctor */ class OrderInquiry extends Model { @@ -61,7 +63,7 @@ class OrderInquiry extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['order_inquiry_id', 'user_id', 'patient_id', 'doctor_id', 'family_id', 'inquiry_type', 'inquiry_mode', 'inquiry_status', 'is_delete', 'inquiry_refund_status', 'inquiry_pay_channel', 'inquiry_pay_status', 'inquiry_no', 'escrow_trade_no', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'pay_time', 'reception_time', 'complete_time', 'finish_time', 'statistics_status', 'statistics_time', 'is_withdrawal', 'withdrawal_time', 'cancel_time', 'cancel_reason', 'cancel_remarks', 'patient_name', 'patient_name_mask', 'patient_sex', 'patient_age', 'created_at', 'updated_at']; + protected array $fillable = ['order_inquiry_id', 'user_id', 'patient_id', 'doctor_id', 'family_id', 'inquiry_type', 'inquiry_mode', 'inquiry_status', 'is_delete', 'inquiry_refund_status', 'inquiry_pay_channel', 'inquiry_pay_status', 'inquiry_no', 'escrow_trade_no', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'pay_time', 'reception_time', 'complete_time', 'finish_time', 'statistics_status', 'statistics_time', 'is_withdrawal', 'withdrawal_time', 'cancel_time', 'cancel_reason', 'cancel_remarks', 'times_number', 'duration', 'patient_name', 'patient_name_mask', 'patient_sex', 'patient_age', 'created_at', 'updated_at']; protected string $primaryKey = "order_inquiry_id"; diff --git a/app/Request/InquiryRequest.php b/app/Request/InquiryRequest.php index eac240a..29e6795 100644 --- a/app/Request/InquiryRequest.php +++ b/app/Request/InquiryRequest.php @@ -44,6 +44,11 @@ class InquiryRequest extends FormRequest 'patient_id', 'doctor_id', ], + 'addDoctorGiveInquiryOrder' => [ // 医生赠送沟通回合数 + 'order_inquiry_id', + 'times_number', // 沟通次数(0为不限制次数) + 'duration', // 沟通时长(分钟,0为不限制时长) + ], ]; /** @@ -80,6 +85,8 @@ class InquiryRequest extends FormRequest 'reply_progress' => 'required|integer|min:0|max:5',// 'inquiry_status' => 'required|integer|min:0|max:4', + 'times_number' => "required|min:0|max:999|numeric", + 'duration' => "required|min:0|max:21600|numeric", ]; } diff --git a/app/Services/ImService.php b/app/Services/ImService.php index 387d3bc..611e889 100644 --- a/app/Services/ImService.php +++ b/app/Services/ImService.php @@ -540,7 +540,7 @@ class ImService extends BaseService $message_content_data['message_type'] = 2; // 订单结束评价弹出 // $message_content_data['title'] = "评价"; $message_content_data['desc'] = ""; - $message_content_data['data']['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $message_content_data['data']['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), @@ -775,7 +775,7 @@ class ImService extends BaseService $message_content_data['message_type'] = 11; $message_content_data['title'] = "患者信息"; $message_content_data['desc'] = ""; - $message_content_data['data']['order_no'] = $order_inquiry['inquiry_no']; + $message_content_data['data']['order_no'] = (string)$order_inquiry['inquiry_no']; $message_content_data['data']['disease_desc'] = $disease_desc ?: ""; $message_content_data['data']['message_path'] = "/Pages/yishi/case/index?order_inquiry_id=" . $order_inquiry['order_inquiry_id']; // 跳转地址(小程序内页) $message_content = [ @@ -816,8 +816,8 @@ class ImService extends BaseService $message_content_data['message_type'] = 12; $message_content_data['title'] = "问诊表"; $message_content_data['desc'] = ""; - $message_content_data['data']['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $message_content_data['data']['order_no'] = $order_inquiry['inquiry_no']; + $message_content_data['data']['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $message_content_data['data']['order_no'] = (string)$order_inquiry['inquiry_no']; $message_content_data['data']['message_path'] = "/pages/sickForm/sickForm"; // 跳转地址(小程序内页) $message_content_data['data']['case_not_fill_fields'] = $case_fields; // 病例字段,json格式,医生端发送患者端使用(此字段仅针对message_type为12的情况) $message_content = [ @@ -858,8 +858,8 @@ class ImService extends BaseService $message_content_data['message_type'] = 12; $message_content_data['title'] = "问诊表-已填写"; $message_content_data['desc'] = ""; - $message_content_data['data']['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $message_content_data['data']['order_no'] = $order_inquiry['inquiry_no']; + $message_content_data['data']['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $message_content_data['data']['order_no'] = (string)$order_inquiry['inquiry_no']; $message_content_data['data']['message_path'] = "/Pages/yishi/sick_detail/index"; // 跳转地址(小程序内页) $message_content_data['data']['case_patient_message_path'] = "/pages/sickDetail/sickDetail"; // 跳转地址(小程序内页) $message_content_data['data']['case_filled_fields'] = $case_fields; // 病例字段,json格式,患者端发送医生端使用(此字段仅针对message_type为12的情况) @@ -873,4 +873,46 @@ class ImService extends BaseService throw new BusinessException($e->getMessage()); } } + + /** + * 赠送回合数消息 + * @param array|object $order_inquiry 问诊表数据 + * @param string|int $doctor_user_id 医生用户id + * @param string|int $patient_user_id 患者用户id + * @param string $times_number 沟通次数(0为不限制次数) + * @param string $give_expiration_time 赠送到期时间 + * @return void + */ + public function giveFreeRounds(array|object $order_inquiry, string|int $doctor_user_id, string|int $patient_user_id, string $times_number, string $give_expiration_time): 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['inquiry_mode'] = $order_inquiry['inquiry_mode']; + $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'] = 12; + $message_content_data['title'] = ""; + $message_content_data['desc'] = "医生已赠送X个沟通回合数,将在XXXX-XX-XX XX:XX:XX 失效 ,如有需要请尽快给医生留言。"; + $message_content_data['data']['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $message_content_data['data']['order_no'] = (string)$order_inquiry['inquiry_no']; + $message_content_data['data']['times_number'] = $times_number; + $message_content_data['data']['give_expiration_time'] = $give_expiration_time; + $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 (\Throwable $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 288ef52..14d4989 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1156,6 +1156,158 @@ class InquiryService extends BaseService return success($order_inquiry['order_inquiry_id']); } + /** + * 医生赠送沟通回合数 + * @return array + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function addDoctorGiveInquiryOrder(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $order_inquiry_id = $this->request->input('order_inquiry_id'); + $times_number = $this->request->input('times_number'); + $duration = $this->request->input('duration'); + + if (empty($user_info)) { + return fail(HttpEnumCode::HTTP_ERROR, "操作失败"); + } + + // 检测赠送的回合数和周期 + if (!in_array($duration,[3*60,7*60,5*60])){ + return fail(HttpEnumCode::HTTP_ERROR, "请重新选择周期"); + } + + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $params['doctor_id'] = $user_info['client_user_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + return fail(); + } + + // 检测订单状态 + if (!in_array($order_inquiry['inquiry_status'],[5,6,7])){ + return fail(HttpEnumCode::HTTP_ERROR, "问诊订单未完成,不可赠送"); + } + + // 检测是否存在同类型未完成的问诊订单 + $PatientOrderService = new PatientOrderService(); + $result = $PatientOrderService->getNotFinishedOrderInquiry($order_inquiry['inquiry_type'], $order_inquiry['patient_id']); + if (!empty($result)) { + return fail(HttpEnumCode::HTTP_ERROR, "当前患者存在进行中的问诊订单"); + } + + // 检测当前医生是否和患者存在未完成问诊订单 + $InquiryService = new InquiryService(); + $result = $InquiryService->checkPatientDoctorProgressInquiry($order_inquiry['patient_id'], $user_info['client_user_id']); + if (!empty($result)) { + return fail(HttpEnumCode::HTTP_ERROR, "当前患者和您存在问诊订单,不可赠送"); + } + + // 获取本次问诊病例 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)){ + return fail(); + } + + // 创建订单 + Db::beginTransaction(); + + $generator = $this->container->get(IdGeneratorInterface::class); + + try { + // 生成问诊订单 + $data = array(); + $data['user_id'] = $order_inquiry['user_id']; + $data['patient_id'] = $order_inquiry['patient_id']; + $data['doctor_id'] = $order_inquiry['doctor_id']; + $data['family_id'] = $order_inquiry['family_id']; + $data['inquiry_type'] = $order_inquiry['inquiry_type']; + $data['inquiry_mode'] = 7; + $data['inquiry_status'] = 4; + $data['inquiry_pay_channel'] = 3;// 支付渠道(1:小程序支付 2:微信扫码支付) + $data['inquiry_pay_status'] = 2; + $data['inquiry_no'] = $generator->generate();// 订单编号 + $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 + $data['amount_total'] = 0;// 订单金额 + $data['coupon_amount_total'] = 0;// 优惠卷总金额 + $data['payment_amount_total'] = 0;// 实际付款金额 + $data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间 + $data['reception_time'] = date('Y-m-d H:i:s', time());// 接诊时间(已接诊) + $data['times_number'] = $times_number;// 沟通次数(0为不限制次数) + $data['duration'] = $duration;// 沟通时长(分钟,0为不限制时长) + $data['patient_name'] = $order_inquiry['patient_name'];// 患者姓名-就诊人 + $data['patient_name_mask'] = $order_inquiry['patient_name_mask'];// 患者姓名-就诊人(掩码) + $data['patient_sex'] = $order_inquiry['patient_sex'];// 患者性别-就诊人(0:未知 1:男 2:女) + $data['patient_age'] = $order_inquiry['patient_age'];// 患者年龄-就诊人 + $order_inquiry = OrderInquiry::addOrderInquiry($data); + if (empty($order_inquiry)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "赠送失败"); + } + + // 增加患者问诊病例 + unset($order_inquiry_case["inquiry_case_id"]); + unset($order_inquiry_case["order_inquiry_id"]); + unset($order_inquiry_case["created_at"]); + unset($order_inquiry_case["updated_at"]); + + $data = array(); + $data = $order_inquiry_case->toArray(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id + $order_inquiry_case = OrderInquiryCase::addOrderInquiryCase($data); + if (empty($order_inquiry_case)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "赠送失败"); + } + + // 不处理意向用药 + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + Log::getInstance("InquiryService-addDoctorGiveInquiryOrder")->error($e->getMessage()); + return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); + } + + // 发送消息 + try { + // 赠送到期时间 + $give_expiration_time = date('Y-m-d H:i:s',time()+$duration * 60); + + // 获取订单医生数据 + $params = array(); + $params['doctor_id'] = $order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + return fail(HttpEnumCode::SERVER_ERROR, "赠送失败"); + } + + // 发送im消息 + $imService = new ImService(); + + // 赠送回合数消息 + $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->doctorGiveFreeRounds($times_number,$give_expiration_time); + }catch (\Throwable $e){ + Log::getInstance("InquiryService-addDoctorGiveInquiryOrder")->error($e->getMessage()); + } + + $result = array(); + $result['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; // 订单主键id + $result['inquiry_no'] = (string)$order_inquiry['inquiry_no']; // 订单编号 + + return success($result); + } + /** * 获取医生未接诊订单数量 * @param string $doctor_id 医生id diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index dc36aea..fa53051 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -399,7 +399,7 @@ class MessagePush extends BaseService $data['notice_brief_title'] = "您的【{$inquiry_type_string}】服务已结束,点击查看详情。"; $data['notice_title'] = "您的【{$inquiry_type_string}】服务已结束,点击查看详情。"; $data['notice_content'] = "您咨询{$user_doctor['user_name']}医生的服务已结束,请对本次问诊服务做出评价。您的评价对医生和其他患者也有很重要的参考价值。您也可以点击医生头像,进入医生主页关注医生。"; - $data['link_type'] = 10;// 聊天详情页 + $data['link_type'] = 10;// 问诊订单详情 $link_params = array(); $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; @@ -456,8 +456,6 @@ class MessagePush extends BaseService * 患者-处方被药师审核通过 * 站内、短信 * @return void - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function patientPrescriptionVerifyPass(): void { @@ -533,8 +531,6 @@ class MessagePush extends BaseService * 患者-处方审核未通过 * 站内 * @return void - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function patientPrescriptionVerifyFail(): void { @@ -575,8 +571,6 @@ class MessagePush extends BaseService * 站内 * @param string $coupon_name * @return void - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function patientDistributeCoupon(string $coupon_name): void { @@ -639,8 +633,6 @@ class MessagePush extends BaseService * 站内 * @param string $coupon_name * @return void - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function patientExpireCoupon(string $coupon_name): void { @@ -671,8 +663,6 @@ class MessagePush extends BaseService * 站内、订阅、短信 * @param int $cancel_reason 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) * @return void - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function refundInquirySuccess(int $cancel_reason): void { @@ -1048,8 +1038,6 @@ class MessagePush extends BaseService * 医生-医生有新问诊 * 站内、订阅失败发送短信 * @return void - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function doctorHaveNewInquiry(): void { @@ -1245,8 +1233,6 @@ class MessagePush extends BaseService * 站内 * 发送给医生 * @return void - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function finishInquiryToDoctor(): void { @@ -2424,7 +2410,7 @@ class MessagePush extends BaseService /** * 患者-im消息通知 * 订阅 - * @param string $data 消息内容 + * @param string $msg * @return void */ public function patientImMessageNotice(string $msg): void @@ -2477,7 +2463,7 @@ class MessagePush extends BaseService /** * 医生-im消息通知 * 订阅 - * @param string $im_data + * @param string $msg * @return void */ public function doctorImMessageNotice(string $msg): void @@ -2537,4 +2523,113 @@ class MessagePush extends BaseService Log::getInstance("MessagePush-patientImMessageNotice")->error($e->getMessage()); } } + + /** + * 患者-赠送回合数 + * 站内、订阅失败发送短信 + * @param string $times_number + * @param string $give_expiration_time 赠送到期时间 + * @return void + */ + public function doctorGiveFreeRounds(string $times_number,string $give_expiration_time): 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; + } + + $producer = ApplicationContext::getContainer()->get(Producer::class); + + $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'] = "您好,{$user_doctor['user_name']}医生已赠送您{$times_number}次回复机会,请在有效期内和医生进行问诊,请查看详情。"; + $data['notice_title'] = "您好,{$user_doctor['user_name']}医生已赠送您{$times_number}次回复机会,请在有效期内和医生进行问诊,请查看详情。"; + $data['notice_content'] = "您好,{$user_doctor['user_name']}医生已赠送您{$times_number}次回复机会(过期时间:{$give_expiration_time}),请在有效期内和医生进行问诊,请查看详情。"; + $data['link_type'] = 10;// 问诊订单详情 + + $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);// 跳转参数 + + $data['button_type'] = 4; // 订单详情 + + $message = new SendStationMessageProducer($data); + $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 . "..."; + } + } + } + + // 赠送到期时间 + $give_expiration_time = date('Y-m-d H:i',strtotime($give_expiration_time)); + + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 + $sub_data['params']['page'] = "pages/orderDetail/orderDetail?order_inquiry_id={$this->order_inquiry['order_inquiry_id']}"; + $sub_data['params']['data'] = [ + "thing1" => (string)$disease_desc,// 问诊内容-病情主诉 + "thing2" => "医生赠送您{$times_number}次沟通机会",// 提醒内容 + "name3" => (string)$user_doctor['user_name'],// 问诊医生 + "thing4" => "有效期至{$give_expiration_time}",// 提示说明 + ]; + + // 短信 + $sms_data = array(); + $sms_data['template_code'] = "SMS_464531282"; + $sms_data['scene_desc'] = "医生赠送免费回合数"; + $sms_data['phone'] = $this->user['mobile']; + $sms_data['user_id'] = $this->user['user_id']; + + $template_param = array(); + $template_param['name'] = $user_doctor['user_name']; + $template_param['number'] = $times_number; + $template_param['time'] = $give_expiration_time; + $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/config/routes.php b/config/routes.php index 2cdb177..544f2f6 100644 --- a/config/routes.php +++ b/config/routes.php @@ -111,6 +111,9 @@ Router::addGroup('/doctor', function () { // 获取医生问诊配置-服务设置 Router::get('', [DoctorInquiryConfigController::class, 'getInquiryServiceConfig']); }); + + // 医生赠送沟通回合数 + Router::post('/give', [InquiryController::class, 'addDoctorGiveInquiryOrder']); }); //银行卡