push_type = $push_type; if (!empty($to_user_id)) { $params = array(); $params['user_id'] = $to_user_id; $user = User::getOne($params); if (!empty($user)) { $this->user = $user->toArray(); } } if (!empty($order_inquiry_id)) { $params = array(); $params['order_inquiry_id'] = $order_inquiry_id; $order_inquiry = OrderInquiry::getOne($params); if (!empty($order_inquiry)) { $this->order_inquiry = $order_inquiry->toArray(); } } } /** * 快速/购药的服务5分钟未接诊 * 公益/专家24小时未接诊 * @return bool * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function noInquiry(): bool { try { if ($this->push_type == 1) { // 站内 // 服务消息 $data = array(); $data['user_id'] = $this->user['user_id']; $data['notice_type'] = 3; $data['notice_system_type'] = 1; $data['from_name'] = "肝胆小秘书"; if ($this->order_inquiry['inquiry_type'] == 1 || $this->order_inquiry['inquiry_type'] == 3) { // 专家-公益 $inquiry_type_string = inquiryTypeToString($this->order_inquiry['inquiry_type']); $data['notice_title'] = "【{$inquiry_type_string}】医生未接诊:您咨询的医生因工作繁忙没有时间接诊,点击查看详情。"; $data['notice_content'] = "【{$inquiry_type_string}】未接诊:您咨询的服务当前排队人较多,暂无空闲医生接诊。给您带来不便敬请谅解,平台会在24小时内进行退款,您可以点击订单详情查看退款详情。"; } elseif ($this->order_inquiry['inquiry_type'] == 1 || $this->order_inquiry['inquiry_type'] == 4) { // 快速-购药 $inquiry_type_string = inquiryTypeToString($this->order_inquiry['inquiry_type']); $data['notice_title'] = "【{$inquiry_type_string}】未接诊:您咨询的服务暂无医生接诊,点击查看详情。"; $data['notice_content'] = "【{$inquiry_type_string}】医生未接诊:您咨询的医生因工作繁忙,暂无空闲时间接诊。给您带来不便敬请谅解,平台会在24小时内进行退款,您可以点击订单详情查看退款详情。"; } $data['link_type'] = 10;// 问诊订单详情 $link_params = array(); $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_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) { throw new BusinessException("加入推送队列失败" . json_encode($data,JSON_UNESCAPED_UNICODE)); } } elseif ($this->push_type == 2) { // 订阅 // 获取医生数据 $params = array(); $params['doctor_id'] = $this->order_inquiry['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)){ throw new BusinessException("加入推送队列失败:医生数据为空"); } $sub_data = array(); $sub_data['push_user_id'] = $this->user['user_id']; $sub_data['template_title'] = "问诊异常通知"; $sub_data['params']['page'] = "pages/orderDetail/orderDetail?order_inquiry_id={$this->order_inquiry['order_inquiry_id']}"; $sub_data['params']['data'] = [ "character_string1" => $this->order_inquiry['inquiry_no'],// 订单ID "name2" => (string)$user_doctor['user_name'],// 问诊医生 "date3" => $this->order_inquiry['created_at'],// 问诊时间 "thing4" => cancelReasonToString($this->order_inquiry['cancel_reason']),// 取消原因 "thing5" => "点击详情更换医生问诊",// 提示说明 ]; $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) { throw new BusinessException("加入推送队列失败" . json_encode($data,JSON_UNESCAPED_UNICODE)); } } } catch (\Exception $e) { throw new BusinessException("加入推送队列失败" . $e->getMessage()); } return true; } /** * 患者回复通知 * @param string $content 回复内容 * @return bool * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function patientReplyNotice(string $content): bool { try { // 只有订阅消息 if ($this->push_type == 2){ $sub_data = array(); $sub_data['push_user_id'] = $this->user['user_id']; $sub_data['template_title'] = "患者回复通知"; $sub_data['params']['page'] = "Pages/yishi/chat/index?from_account={$this->user['user_id']}&order_inquiry_id={$this->order_inquiry['order_inquiry_id']}&inquiry_type={$this->order_inquiry['inquiry_type']}"; $sub_data['params']['data'] = [ "thing1" => $this->user['user_name'],// 患者姓名 "thing2" => $content,// 回复内容 ]; $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) { throw new BusinessException("加入推送队列失败" . json_encode($data,JSON_UNESCAPED_UNICODE)); } } } catch (\Exception $e) { throw new BusinessException("加入推送队列失败" . $e->getMessage()); } return true; } /** * 医生已接诊 * @return bool * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function doctorAcceptedInquiry(): bool { try { // 获取医生数据 $params = array(); $params['doctor_id'] = $this->order_inquiry['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)){ throw new BusinessException("加入推送队列失败:医生数据为空"); } if ($this->push_type == 1) { // 站内 // 服务消息 $data = array(); $data['user_id'] = $this->user['user_id']; $data['notice_type'] = 3; $data['notice_system_type'] = 1; $data['from_name'] = "肝胆小秘书"; $data['notice_title'] = "{$user_doctor['user_name']}医生已接诊,请尽快和医生进行沟通交流病情,点击查看详情"; $data['notice_content'] = "{$user_doctor['user_name']}医生已接诊,请您尽快和医生进行沟通交流病情,您可以点击问诊详情进行交流。"; $data['link_type'] = 1;// 聊天详情页 $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'] = 6; // 问诊详情 $message = new SendStationMessageProducer($data); $producer = ApplicationContext::getContainer()->get(Producer::class); $result = $producer->produce($message); if (!$result) { throw new BusinessException("加入推送队列失败" . json_encode($data,JSON_UNESCAPED_UNICODE)); } } elseif ($this->push_type == 2) { // 订阅 $sub_data = array(); $sub_data['push_user_id'] = $this->user['user_id']; $sub_data['template_title'] = "问诊提醒"; $sub_data['params']['page'] = "pages/orderDetail/orderDetail?order_inquiry_id={$this->order_inquiry['order_inquiry_id']}"; $sub_data['params']['data'] = [ "thing1" => "问诊内容",// 问诊内容 "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) { throw new BusinessException("加入推送队列失败" . json_encode($data,JSON_UNESCAPED_UNICODE)); } } elseif ($this->push_type == 3) { // 短信 // 获取系统接诊配置 $params = array(); $params['inquiry_type'] = $this->order_inquiry['inquiry_type']; $params['inquiry_mode'] = $this->order_inquiry['inquiry_mode']; $system_inquiry_config = SystemInquiryConfig::getOne($params); if (empty($system_inquiry_config)) { throw new BusinessException("加入推送队列失败:获取系统接诊配置失败"); } $duration = $system_inquiry_config['duration']; if ($duration <= 0){ $duration = "不限制"; }else{ $duration = $duration . "分钟"; } $data = array(); $data['template_code'] = "SMS_271955088"; $data['scene_desc'] = "医生已接诊"; $data['phone'] = $this->user['mobile']; $data['user_id'] = $this->user['user_id']; $template_param = array(); $template_param['type'] = inquiryTypeToString($this->order_inquiry['inquiry_type']); $template_param['name'] = $user_doctor['user_name']; $template_param['duration'] = $duration; // 服务时长 $data['template_param'] = $template_param; $message = new SendSmsMessageProducer($data); $producer = ApplicationContext::getContainer()->get(Producer::class); $result = $producer->produce($message); if (!$result) { throw new BusinessException("加入推送队列失败" . json_encode($data,JSON_UNESCAPED_UNICODE)); } } } catch (\Exception $e) { throw new BusinessException("加入推送队列失败" . $e->getMessage()); } return true; } /** * 服务结束 * @return bool * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function inquiryFinish(): bool { try { // 获取医生数据 $params = array(); $params['doctor_id'] = $this->order_inquiry['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)){ throw new BusinessException("加入推送队列失败:医生数据为空"); } if ($this->push_type == 1) { // 站内 // 服务消息 $inquiry_type_string = inquiryTypeToString($this->order_inquiry['inquiry_type']); $data = array(); $data['user_id'] = $this->user['user_id']; $data['notice_type'] = 3; $data['notice_system_type'] = 1; $data['from_name'] = "肝胆小秘书"; $data['notice_title'] = "您咨询的【{$inquiry_type_string}】服务已结束,点击查看详情。"; $data['notice_content'] = "您咨询{$user_doctor['user_name']}医生的服务已结束,请对本次问诊服务做出评价。您的评价对医生和其他患者也有很重要的参考价值。您也可以点击医生头像,进入医生主页关注医生。"; $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); $producer = ApplicationContext::getContainer()->get(Producer::class); $result = $producer->produce($message); if (!$result) { throw new BusinessException("加入推送队列失败" . json_encode($data,JSON_UNESCAPED_UNICODE)); } } elseif ($this->push_type == 2) { // 订阅 $sub_data = array(); $sub_data['push_user_id'] = $this->user['user_id']; $sub_data['template_title'] = "问诊提醒"; $sub_data['params']['page'] = "pages/orderDetail/orderDetail?order_inquiry_id={$this->order_inquiry['order_inquiry_id']}"; $sub_data['params']['data'] = [ "thing1" => "问诊内容",// 问诊内容 "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) { throw new BusinessException("加入推送队列失败" . json_encode($data,JSON_UNESCAPED_UNICODE)); } } } catch (\Exception $e) { throw new BusinessException("加入推送队列失败" . $e->getMessage()); } return true; } /** * 处方审核通过 * @return bool * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function prescriptionVerifyPass(): bool { try { // 获取医生数据 $params = array(); $params['doctor_id'] = $this->order_inquiry['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)){ throw new BusinessException("加入推送队列失败:医生数据为空"); } if ($this->push_type == 1) { // 站内 // 服务消息 // 获取问诊订单处方数据 $params = array(); $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; $order_prescription = OrderPrescription::getOne($params); if (empty($order_prescription)) { throw new BusinessException("加入推送队列失败:处方数据为空"); } $data = array(); $data['user_id'] = $this->user['user_id']; $data['notice_type'] = 3; $data['notice_system_type'] = 1; $data['from_name'] = "肝胆小秘书"; $data['notice_title'] = "{$user_doctor['user_name']}医生为您开具的电子处方已审核通过,点击查看详情。"; $data['notice_content'] = "{$user_doctor['user_name']}医生为您开具的电子处方已审核通过,您可以点击查看处方进行购买药品。"; $data['link_type'] = 13; $link_params = array(); $link_params['order_prescription_id'] = $order_prescription['order_prescription_id']; $data['link_params'] = json_encode($link_params,JSON_UNESCAPED_UNICODE);// 跳转参数 $data['button_type'] = 5; // 查看处方 $message = new SendStationMessageProducer($data); $producer = ApplicationContext::getContainer()->get(Producer::class); $result = $producer->produce($message); if (!$result) { throw new BusinessException("加入推送队列失败" . json_encode($data,JSON_UNESCAPED_UNICODE)); } } elseif ($this->push_type == 3) { // 短信 $data = array(); $data['template_code'] = "SMS_271540920"; $data['scene_desc'] = "处方审核通过"; $data['phone'] = $this->user['mobile']; $data['user_id'] = $this->user['user_id']; $template_param = array(); $template_param['name'] = $user_doctor['user_name']; $data['template_param'] = $template_param; $message = new SendSmsMessageProducer($data); $producer = ApplicationContext::getContainer()->get(Producer::class); $result = $producer->produce($message); if (!$result) { throw new BusinessException("加入推送队列失败" . json_encode($data,JSON_UNESCAPED_UNICODE)); } } } catch (\Exception $e) { throw new BusinessException("加入推送队列失败" . $e->getMessage()); } return true; } /** * 优惠劵发放 * @return bool * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function distributeCoupon(): bool { try { // 获取医生数据 $params = array(); $params['doctor_id'] = $this->order_inquiry['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)){ throw new BusinessException("加入推送队列失败:医生数据为空"); } if ($this->push_type == 1) { // 站内 // 服务消息 // 获取问诊订单处方数据 $params = array(); $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; $order_prescription = OrderPrescription::getOne($params); if (empty($order_prescription)) { throw new BusinessException("加入推送队列失败:处方数据为空"); } $data = array(); $data['user_id'] = $this->user['user_id']; $data['notice_type'] = 3; $data['notice_system_type'] = 2; // 系统消息类型(患者端系统消息存在 1:服务消息 2:福利消息 3:退款消息 4:物流消息) $data['from_name'] = "肝胆小秘书"; $data['notice_title'] = "【优惠劵名称】已到账"; $data['notice_content'] = "有新的优惠劵已下发至您的账户中,点击查看详情!"; $data['link_type'] = 7; $message = new SendStationMessageProducer($data); $producer = ApplicationContext::getContainer()->get(Producer::class); $result = $producer->produce($message); if (!$result) { throw new BusinessException("加入推送队列失败" . json_encode($data,JSON_UNESCAPED_UNICODE)); } } } catch (\Exception $e) { throw new BusinessException("加入推送队列失败" . $e->getMessage()); } return true; } }