新增了医生赠送沟通回合数

This commit is contained in:
wucongxing 2024-01-10 09:39:42 +08:00
parent c5ec194984
commit cc1ff2f89d
7 changed files with 348 additions and 29 deletions

View File

@ -135,6 +135,8 @@ class InquiryController extends AbstractController
/** /**
* 获取患者最后一条问诊订单id * 获取患者最后一条问诊订单id
* @return ResponseInterface * @return ResponseInterface
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/ */
public function getPatientLastInquiryId(): ResponseInterface public function getPatientLastInquiryId(): ResponseInterface
{ {
@ -145,4 +147,20 @@ class InquiryController extends AbstractController
$data = $InquiryService->getPatientLastInquiryId(); $data = $InquiryService->getPatientLastInquiryId();
return $this->response->json($data); 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);
}
} }

View File

@ -17,12 +17,12 @@ use Hyperf\Snowflake\Concern\Snowflake;
* @property int $patient_id 患者id * @property int $patient_id 患者id
* @property int $doctor_id 医生id未分配时为null * @property int $doctor_id 医生id未分配时为null
* @property int $family_id 家庭成员id就诊用户 * @property int $family_id 家庭成员id就诊用户
* @property int $inquiry_type 订单类型1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 * @property int $inquiry_type 订单类型1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测
* @property int $inquiry_mode 订单问诊方式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 $inquiry_status 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
* @property int $is_delete 删除状态0: 1:是) * @property int $is_delete 删除状态0: 1:是)
* @property int $inquiry_refund_status 问诊订单退款状态0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) * @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 int $inquiry_pay_status 支付状态1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
* @property string $inquiry_no 系统订单编号 * @property string $inquiry_no 系统订单编号
* @property string $escrow_trade_no 第三方支付流水号 * @property string $escrow_trade_no 第三方支付流水号
@ -40,14 +40,16 @@ use Hyperf\Snowflake\Concern\Snowflake;
* @property string $cancel_time 订单取消时间 * @property string $cancel_time 订单取消时间
* @property int $cancel_reason 取消订单原因1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) * @property int $cancel_reason 取消订单原因1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时)
* @property string $cancel_remarks 取消订单备注(自动添加) * @property string $cancel_remarks 取消订单备注(自动添加)
* @property int $times_number 沟通次数0为不限制次数
* @property int $duration 沟通时长分钟0为不限制时长
* @property string $patient_name 患者姓名-就诊人 * @property string $patient_name 患者姓名-就诊人
* @property string $patient_name_mask 患者姓名-就诊人(掩码) * @property string $patient_name_mask 患者姓名-就诊人(掩码)
* @property int $patient_sex 患者性别-就诊人0:未知 1: 2:女) * @property int $patient_sex 患者性别-就诊人0:未知 1: 2:女)
* @property int $patient_age 患者年龄-就诊人 * @property int $patient_age 患者年龄-就诊人
* @property \Carbon\Carbon $created_at 创建时间 * @property \Carbon\Carbon $created_at 创建时间
* @property \Carbon\Carbon $updated_at 修改时间 * @property \Carbon\Carbon $updated_at 修改时间
* @property-read OrderInquiryCase $OrderInquiryCase * @property-read OrderInquiryCase|null $OrderInquiryCase
* @property-read UserDoctor $UserDoctor * @property-read UserDoctor|null $UserDoctor
*/ */
class OrderInquiry extends Model class OrderInquiry extends Model
{ {
@ -61,7 +63,7 @@ class OrderInquiry extends Model
/** /**
* The attributes that are mass assignable. * 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"; protected string $primaryKey = "order_inquiry_id";

View File

@ -44,6 +44,11 @@ class InquiryRequest extends FormRequest
'patient_id', 'patient_id',
'doctor_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',// 'reply_progress' => 'required|integer|min:0|max:5',//
'inquiry_status' => 'required|integer|min:0|max:4', 'inquiry_status' => 'required|integer|min:0|max:4',
'times_number' => "required|min:0|max:999|numeric",
'duration' => "required|min:0|max:21600|numeric",
]; ];
} }

View File

@ -540,7 +540,7 @@ class ImService extends BaseService
$message_content_data['message_type'] = 2; // 订单结束评价弹出 $message_content_data['message_type'] = 2; // 订单结束评价弹出
// $message_content_data['title'] = "评价"; // $message_content_data['title'] = "评价";
$message_content_data['desc'] = ""; $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 = [ $message_content = [
'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), '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['message_type'] = 11;
$message_content_data['title'] = "患者信息"; $message_content_data['title'] = "患者信息";
$message_content_data['desc'] = ""; $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']['disease_desc'] = $disease_desc ?: "";
$message_content_data['data']['message_path'] = "/Pages/yishi/case/index?order_inquiry_id=" . $order_inquiry['order_inquiry_id']; // 跳转地址(小程序内页) $message_content_data['data']['message_path'] = "/Pages/yishi/case/index?order_inquiry_id=" . $order_inquiry['order_inquiry_id']; // 跳转地址(小程序内页)
$message_content = [ $message_content = [
@ -816,8 +816,8 @@ class ImService extends BaseService
$message_content_data['message_type'] = 12; $message_content_data['message_type'] = 12;
$message_content_data['title'] = "问诊表"; $message_content_data['title'] = "问诊表";
$message_content_data['desc'] = ""; $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['data']['order_no'] = $order_inquiry['inquiry_no']; $message_content_data['data']['order_no'] = (string)$order_inquiry['inquiry_no'];
$message_content_data['data']['message_path'] = "/pages/sickForm/sickForm"; // 跳转地址(小程序内页) $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_data['data']['case_not_fill_fields'] = $case_fields; // 病例字段json格式医生端发送患者端使用此字段仅针对message_type为12的情况
$message_content = [ $message_content = [
@ -858,8 +858,8 @@ class ImService extends BaseService
$message_content_data['message_type'] = 12; $message_content_data['message_type'] = 12;
$message_content_data['title'] = "问诊表-已填写"; $message_content_data['title'] = "问诊表-已填写";
$message_content_data['desc'] = ""; $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['data']['order_no'] = $order_inquiry['inquiry_no']; $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']['message_path'] = "/Pages/yishi/sick_detail/index"; // 跳转地址(小程序内页)
$message_content_data['data']['case_patient_message_path'] = "/pages/sickDetail/sickDetail"; // 跳转地址(小程序内页) $message_content_data['data']['case_patient_message_path'] = "/pages/sickDetail/sickDetail"; // 跳转地址(小程序内页)
$message_content_data['data']['case_filled_fields'] = $case_fields; // 病例字段json格式患者端发送医生端使用此字段仅针对message_type为12的情况 $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()); 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 XXXXXX 失效 ,如有需要请尽快给医生留言。";
$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());
}
}
} }

View File

@ -1156,6 +1156,158 @@ class InquiryService extends BaseService
return success($order_inquiry['order_inquiry_id']); 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 * @param string $doctor_id 医生id

View File

@ -399,7 +399,7 @@ class MessagePush extends BaseService
$data['notice_brief_title'] = "您的【{$inquiry_type_string}】服务已结束,点击查看详情。"; $data['notice_brief_title'] = "您的【{$inquiry_type_string}】服务已结束,点击查看详情。";
$data['notice_title'] = "您的【{$inquiry_type_string}】服务已结束,点击查看详情。"; $data['notice_title'] = "您的【{$inquiry_type_string}】服务已结束,点击查看详情。";
$data['notice_content'] = "您咨询{$user_doctor['user_name']}医生的服务已结束,请对本次问诊服务做出评价。您的评价对医生和其他患者也有很重要的参考价值。您也可以点击医生头像,进入医生主页关注医生。"; $data['notice_content'] = "您咨询{$user_doctor['user_name']}医生的服务已结束,请对本次问诊服务做出评价。您的评价对医生和其他患者也有很重要的参考价值。您也可以点击医生头像,进入医生主页关注医生。";
$data['link_type'] = 10;// 聊天详情页 $data['link_type'] = 10;// 问诊订单详情
$link_params = array(); $link_params = array();
$link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id'];
@ -456,8 +456,6 @@ class MessagePush extends BaseService
* 患者-处方被药师审核通过 * 患者-处方被药师审核通过
* 站内、短信 * 站内、短信
* @return void * @return void
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/ */
public function patientPrescriptionVerifyPass(): void public function patientPrescriptionVerifyPass(): void
{ {
@ -533,8 +531,6 @@ class MessagePush extends BaseService
* 患者-处方审核未通过 * 患者-处方审核未通过
* 站内 * 站内
* @return void * @return void
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/ */
public function patientPrescriptionVerifyFail(): void public function patientPrescriptionVerifyFail(): void
{ {
@ -575,8 +571,6 @@ class MessagePush extends BaseService
* 站内 * 站内
* @param string $coupon_name * @param string $coupon_name
* @return void * @return void
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/ */
public function patientDistributeCoupon(string $coupon_name): void public function patientDistributeCoupon(string $coupon_name): void
{ {
@ -639,8 +633,6 @@ class MessagePush extends BaseService
* 站内 * 站内
* @param string $coupon_name * @param string $coupon_name
* @return void * @return void
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/ */
public function patientExpireCoupon(string $coupon_name): void public function patientExpireCoupon(string $coupon_name): void
{ {
@ -671,8 +663,6 @@ class MessagePush extends BaseService
* 站内、订阅、短信 * 站内、订阅、短信
* @param int $cancel_reason 取消订单原因1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) * @param int $cancel_reason 取消订单原因1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时)
* @return void * @return void
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/ */
public function refundInquirySuccess(int $cancel_reason): void public function refundInquirySuccess(int $cancel_reason): void
{ {
@ -1048,8 +1038,6 @@ class MessagePush extends BaseService
* 医生-医生有新问诊 * 医生-医生有新问诊
* 站内、订阅失败发送短信 * 站内、订阅失败发送短信
* @return void * @return void
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/ */
public function doctorHaveNewInquiry(): void public function doctorHaveNewInquiry(): void
{ {
@ -1245,8 +1233,6 @@ class MessagePush extends BaseService
* 站内 * 站内
* 发送给医生 * 发送给医生
* @return void * @return void
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/ */
public function finishInquiryToDoctor(): void public function finishInquiryToDoctor(): void
{ {
@ -2424,7 +2410,7 @@ class MessagePush extends BaseService
/** /**
* 患者-im消息通知 * 患者-im消息通知
* 订阅 * 订阅
* @param string $data 消息内容 * @param string $msg
* @return void * @return void
*/ */
public function patientImMessageNotice(string $msg): void public function patientImMessageNotice(string $msg): void
@ -2477,7 +2463,7 @@ class MessagePush extends BaseService
/** /**
* 医生-im消息通知 * 医生-im消息通知
* 订阅 * 订阅
* @param string $im_data * @param string $msg
* @return void * @return void
*/ */
public function doctorImMessageNotice(string $msg): void public function doctorImMessageNotice(string $msg): void
@ -2537,4 +2523,113 @@ class MessagePush extends BaseService
Log::getInstance("MessagePush-patientImMessageNotice")->error($e->getMessage()); 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());
}
}
} }

View File

@ -111,6 +111,9 @@ Router::addGroup('/doctor', function () {
// 获取医生问诊配置-服务设置 // 获取医生问诊配置-服务设置
Router::get('', [DoctorInquiryConfigController::class, 'getInquiryServiceConfig']); Router::get('', [DoctorInquiryConfigController::class, 'getInquiryServiceConfig']);
}); });
// 医生赠送沟通回合数
Router::post('/give', [InquiryController::class, 'addDoctorGiveInquiryOrder']);
}); });
//银行卡 //银行卡