From fe5d86cd4678773de0c2d89e85009758707f88f3 Mon Sep 17 00:00:00 2001 From: haomingming Date: Thu, 25 Dec 2025 14:49:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8A=84=E6=96=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AutoFinishInquiryDelayDirectConsumer.php | 32 +++++++---- ...oPharmacistCaVerifyDelayDirectConsumer.php | 12 +++++ app/Command/ReportRegulatoryCommand.php | 17 ++++++ app/Model/OrderInquiry.php | 5 +- app/Model/UserDoctor.php | 3 +- app/Services/UserDoctorService.php | 54 +++++++++++++++++-- 6 files changed, 105 insertions(+), 18 deletions(-) diff --git a/app/Amqp/Consumer/AutoFinishInquiryDelayDirectConsumer.php b/app/Amqp/Consumer/AutoFinishInquiryDelayDirectConsumer.php index fab256d..f4d077b 100644 --- a/app/Amqp/Consumer/AutoFinishInquiryDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoFinishInquiryDelayDirectConsumer.php @@ -171,17 +171,27 @@ class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage $this->computeDoctorAvgPesponseTime($order_inquiry['doctor_id']); // 新增上报监管平台数据,只上报 多点执业的医生 20251021 测试分支 - if ($user_doctor['multi_point_status'] == 1){//医生多点执业认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败) - $reportRegulatoryService = new ReportRegulatoryService(); - $res = $reportRegulatoryService->addReportRegulatory($order_inquiry['order_inquiry_id']); - if (!$res) { - // 新增上报失败 - Db::rollBack(); - Log::getInstance("queue-AutoFinishInquiry")->error("新增上报监管平台数据失败"); - return Result::REQUEUE; - } - }else{ - Log::getInstance("queue-AutoFinishInquiry")->info("非多点执业的医生不上报监管平台"); + // if ($user_doctor['multi_point_status'] == 1){//医生多点执业认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败) + // $reportRegulatoryService = new ReportRegulatoryService(); + // $res = $reportRegulatoryService->addReportRegulatory($order_inquiry['order_inquiry_id']); + // if (!$res) { + // // 新增上报失败 + // Db::rollBack(); + // Log::getInstance("queue-AutoFinishInquiry")->error("新增上报监管平台数据失败"); + // return Result::REQUEUE; + // } + // }else{ + // Log::getInstance("queue-AutoFinishInquiry")->info("非多点执业的医生不上报监管平台"); + // } + + //新增抄方功能,所有要全部保存,上报的时候再判断 + $reportRegulatoryService = new ReportRegulatoryService(); + $res = $reportRegulatoryService->addReportRegulatory($order_inquiry['order_inquiry_id']); + if (!$res) { + // 新增上报失败 + Db::rollBack(); + Log::getInstance("queue-AutoFinishInquiry")->error("新增上报监管平台数据失败"); + return Result::REQUEUE; } Db::commit(); diff --git a/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php b/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php index ebfb2e0..4b500ab 100644 --- a/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php @@ -100,6 +100,18 @@ class AutoPharmacistCaVerifyDelayDirectConsumer extends ConsumerMessage return Result::ACK; } + // 获取抄方医生数据 (如果存在抄方操作) + if(!empty($order_inquiry['transfer_doctor_id'])){ + $params = array(); + $params['doctor_id'] = $order_inquiry['transfer_doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("queue-AutoPharmacistCaVerify")->error("错误:抄方医生数据错误"); + return Result::ACK; + } + } + + // 获取用户数据 $params = array(); $params['patient_id'] = $order_prescription['patient_id']; diff --git a/app/Command/ReportRegulatoryCommand.php b/app/Command/ReportRegulatoryCommand.php index 0c52d28..244c740 100644 --- a/app/Command/ReportRegulatoryCommand.php +++ b/app/Command/ReportRegulatoryCommand.php @@ -319,6 +319,23 @@ class ReportRegulatoryCommand extends HyperfCommand return false; } + //判断该问诊是否为抄方 + if(!empty($order_inquiry['transfer_doctor_id'])){ + $this->line("信息:该问诊为抄方类型,不执行"); + return false; + }else{ + $params = array(); + $params['doctor_id'] = $order_inquiry['doctor_id']; + $user_doctor_info = UserDoctorInfo::getOne($params); + if (empty($user_doctor_info)) { + $this->line("错误:医生详情数据错误,不执行"); + return false; + } + if ($user_doctor_info['multi_point_status'] != 1) { + $this->line("错误:医生为非多点执业,不执行"); + return false; + } + } return true; } diff --git a/app/Model/OrderInquiry.php b/app/Model/OrderInquiry.php index 0363de8..af5d3da 100644 --- a/app/Model/OrderInquiry.php +++ b/app/Model/OrderInquiry.php @@ -13,11 +13,12 @@ use Hyperf\DbConnection\Db; use Hyperf\Snowflake\Concern\Snowflake; /** - * @property int $order_inquiry_id 主键id + * @property int $order_inquiry_id 主键id * @property int $order_id 订单id * @property int $user_id 用户id-患者 * @property int $patient_id 患者id * @property int $doctor_id 医生id(未分配时为null) + * @property int $transfer_doctor_id 接受抄方的医生id * @property int $family_id 家庭成员id(就诊用户) * @property int $inquiry_type 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测) * @property int $inquiry_mode 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) @@ -65,7 +66,7 @@ class OrderInquiry extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['order_inquiry_id', 'order_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 array $fillable = ['order_inquiry_id', 'order_id', 'user_id', 'patient_id', 'doctor_id', 'transfer_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/Model/UserDoctor.php b/app/Model/UserDoctor.php index 9be48de..286a9e1 100644 --- a/app/Model/UserDoctor.php +++ b/app/Model/UserDoctor.php @@ -50,6 +50,7 @@ use Hyperf\Utils\Arr; * @property int $is_enterprise_deep_cooperation 是否企业深度合作医生(0:否 1:是) * @property int $is_sys_diagno_cooperation 是否先思达合作医生(0:否 1:是) * @property int $is_welfare_cooperation 是否公益问诊合作医生(可把公益问诊设为0元) + * @property int $is_transfer_prescription 是否接受抄方(0:否 1:是) * @property string $qr_code 分享二维码 * @property string $be_good_at 擅长 * @property string $brief_introduction 医生简介 @@ -73,7 +74,7 @@ class UserDoctor extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['doctor_id', 'user_id', 'user_name', 'open_id', 'union_id', 'wx_session_key', 'status', 'idcard_status', 'iden_auth_status', 'iden_auth_time', 'iden_auth_fail_reason', 'multi_point_status', 'multi_point_time', 'multi_point_fail_reason', 'introduction_status', 'introduction_time', 'is_bind_bank', 'is_recommend', 'avatar', 'doctor_title', 'department_custom_id', 'department_custom_name', 'department_custom_mobile', 'hospital_id', 'served_patients_num', 'praise_rate', 'avg_response_time', 'number_of_fans', 'is_img_expert_reception', 'is_img_welfare_reception', 'is_img_quick_reception', 'is_platform_deep_cooperation', 'is_enterprise_deep_cooperation', 'is_sys_diagno_cooperation', 'is_welfare_cooperation', 'qr_code', 'be_good_at', 'brief_introduction', 'created_at', 'updated_at']; + protected array $fillable = ['doctor_id', 'user_id', 'user_name', 'open_id', 'union_id', 'wx_session_key', 'status', 'idcard_status', 'iden_auth_status', 'iden_auth_time', 'iden_auth_fail_reason', 'multi_point_status', 'multi_point_time', 'multi_point_fail_reason', 'introduction_status', 'introduction_time', 'is_bind_bank', 'is_recommend', 'avatar', 'doctor_title', 'department_custom_id', 'department_custom_name', 'department_custom_mobile', 'hospital_id', 'served_patients_num', 'praise_rate', 'avg_response_time', 'number_of_fans', 'is_img_expert_reception', 'is_img_welfare_reception', 'is_img_quick_reception', 'is_platform_deep_cooperation', 'is_enterprise_deep_cooperation', 'is_sys_diagno_cooperation', 'is_welfare_cooperation', 'is_transfer_prescription', 'qr_code', 'be_good_at', 'brief_introduction', 'created_at', 'updated_at']; protected string $primaryKey = "doctor_id"; diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index a0a4415..5374f4f 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1336,13 +1336,47 @@ class UserDoctorService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, $res); } - if ($user_doctor['multi_point_status'] != 1) { - return fail(HttpEnumCode::HTTP_ERROR, "请先完成多点执业认证"); + $is_transfer_prescription = false; // 是否抄方医生 false:不是抄方医生 true:抄方医生 + $transfer_doctor = null; // 抄方医生 + + Db::beginTransaction(); + try { + if ($user_doctor['multi_point_status'] != 1) { + + //查找可接受抄方的医生 + $params = array(); + $params['is_transfer_prescription'] = 1; + $params['multi_point_status'] = 1; + $transfer_prescription_list = UserDoctor::getList($params); + if (!empty($transfer_prescription_list)) { + $transfer_doctor = $transfer_prescription_list[0];//取第一个抄方医生 + $is_transfer_prescription = true; + + //修改抄方医生id + $data = array(); + $data['transfer_doctor_id'] = $transfer_doctor['doctor_id']; + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $res = OrderInquiry::edit($params,$data); + if (!$res) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "开具处方失败"); + } + } + return fail(HttpEnumCode::HTTP_ERROR, "请先完成多点执业认证"); + } + } catch (\Exception $e) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "开具处方失败"); } + // 获取医生问诊配置-问诊购药 $params = array(); $params['doctor_id'] = $user_doctor['doctor_id']; + if ($is_transfer_prescription){ + $params['doctor_id'] = $transfer_doctor['doctor_id']; + } $params['inquiry_type'] = 4; $params['inquiry_mode'] = 1; $doctor_inquiry_config = DoctorInquiryConfig::getOne($params); @@ -1398,7 +1432,7 @@ class UserDoctorService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "请填写病情主诉"); } - Db::beginTransaction(); + $generator = $this->container->get(IdGeneratorInterface::class); try { @@ -1416,12 +1450,18 @@ class UserDoctorService extends BaseService $data = array(); $data['order_inquiry_id'] = $order_inquiry_id; $data['doctor_id'] = $user_info['client_user_id']; + if ($is_transfer_prescription){ + $data['doctor_id'] = $transfer_doctor['doctor_id']; + } $data['patient_id'] = $order_inquiry['patient_id']; $data['family_id'] = $order_inquiry['family_id']; $data['prescription_status'] = 1; $data['doctor_created_time'] = date('Y-m-d H:i:s',time()); $data['prescription_code'] = $generator->generate(); // 处方编号 $data['doctor_name'] = $user_doctor['user_name']; // 医生名称 + if ($is_transfer_prescription){ + $data['doctor_name'] = $transfer_doctor['user_name']; + } $data['patient_name'] = $order_inquiry['patient_name']; $data['patient_sex'] = $order_inquiry['patient_sex']; $data['patient_age'] = $order_inquiry['patient_age']; @@ -1542,8 +1582,14 @@ class UserDoctorService extends BaseService // 开具处方 $OrderPrescriptionService = new OrderPrescriptionService(); + $user_id = ""; + if ($is_transfer_prescription){ + $user_id = $transfer_doctor['user_id']; + }else{ + $user_id = $user_info['user_id']; + } dump($user_info['user_id']); - $prescription_open_result = $OrderPrescriptionService->openPrescription($order_prescription->order_prescription_id,2,$user_info['user_id']); + $prescription_open_result = $OrderPrescriptionService->openPrescription($order_prescription->order_prescription_id,2,$user_id); if (empty($prescription_open_result['prescription_img_oss_path']) || empty($prescription_open_result['file_id'])){ Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR, "处方开具失败");