diff --git a/app/Controller/UserDoctorController.php b/app/Controller/UserDoctorController.php index 9faaef4..dd5463c 100644 --- a/app/Controller/UserDoctorController.php +++ b/app/Controller/UserDoctorController.php @@ -111,6 +111,22 @@ class UserDoctorController extends AbstractController return $this->response->json($data); } + /** + * 获取处方列表(抄方) + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function getTransferPrescriptionList(): ResponseInterface + { + $request = $this->container->get(UserDoctorRequest::class); + $request->scene('getPrescriptionList')->validateResolved(); + + $UserDoctorService = new UserDoctorService(); + $data = $UserDoctorService->getTransferPrescriptionList(); + return $this->response->json($data); + } + /** * 获取医生个人中心数据 * @return ResponseInterface diff --git a/app/Model/OrderPrescription.php b/app/Model/OrderPrescription.php index b9d692f..3c33adf 100644 --- a/app/Model/OrderPrescription.php +++ b/app/Model/OrderPrescription.php @@ -83,6 +83,14 @@ class OrderPrescription extends Model return $this->hasOne(UserDoctor::class, 'doctor_id','doctor_id'); } + /** + * 关联问诊订单表 + */ + public function OrderInquiry(): HasOne + { + return $this->hasOne(OrderInquiry::class, 'order_inquiry_id','order_inquiry_id'); + } + /** * 获取信息-单条 * @param array $params @@ -163,6 +171,49 @@ class OrderPrescription extends Model return $data; } + /** + * 获取处方列表-分页 (抄方) + * @param array $params 条件 + * @param array $fields 字段 + * @param int|null $page 页码 + * @param int|null $per_page 每页个数 + * @return array + */ + public static function getTransferWithIcdPage(array $params, array $fields = ["*"], int $page = null, ?int $per_page = 10): array + { + $query = self::with([ + 'OrderPrescriptionIcd', + 'OrderInquiry' + ]); + + // 如果提供了 doctor_id,则添加 OrderInquiry 表的 doctor_id 条件 + if (isset($params['doctor_id'])) { + $doctorId = $params['doctor_id']; + // 从 $params 中移除 doctor_id,避免在 where($params) 中重复使用 + unset($params['doctor_id']); + $query->whereHas('OrderInquiry', function ($q) use ($doctorId) { + $q->where('doctor_id', $doctorId); + }); + } + + // 应用其他条件 + if (!empty($params)) { + $query->where($params); + } + + $raw = $query->orderBy('created_at','desc') + ->paginate($per_page, $fields, "page", $page); + + $data = array(); + $data['current_page'] = $raw->currentPage();// 当前页码 + $data['total'] = $raw->total();//数据总数 + $data['data'] = $raw->items();//数据 + $data['per_page'] = $raw->perPage();//每页个数 + $data['last_page'] = $raw->lastPage();//最后一页 + + return $data; + } + /** * 修改 * @param array $params diff --git a/app/Services/IndexService.php b/app/Services/IndexService.php index 7fc9ebc..79b026f 100644 --- a/app/Services/IndexService.php +++ b/app/Services/IndexService.php @@ -185,6 +185,23 @@ class IndexService extends BaseService // 在线问诊价格 $inquiry_price = ""; + //检查是否有问诊购药的配置(抄方需要) + if($doctor['idcard_status'] == 1 && $doctor['iden_auth_status'] == 1 && $doctor['is_bind_bank'] == 1){ + $params = array(); + $params['doctor_id'] = $doctor['doctor_id']; + $params['inquiry_type'] = 4; + + $doctor_inquiry_config_gouyao = DoctorInquiryConfigModel::getOne($params); + if(empty($doctor_inquiry_config_gouyao)){ + $data = array(); + $data['doctor_id'] = $doctor['doctor_id']; + $data['inquiry_type'] = 4; + $data['inquiry_mode'] = 1; + $data['is_enable'] = 1; + $data['last_enable_method'] = 1; + DoctorInquiryConfigModel::addInquiryConfig($data); + } + } // 获取医生问诊配置 $params = array(); $params['doctor_id'] = $doctor['doctor_id']; diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index cb9031f..46e1b0f 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -560,6 +560,111 @@ class UserDoctorService extends BaseService return success($order_prescriptions); } + + /** + * 获取处方列表(抄方) + * @return array + */ + public function getTransferPrescriptionList(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $pharmacist_audit_status = $this->request->input('pharmacist_audit_status'); + $page = $this->request->input('page', 1); + $per_page = $this->request->input('per_page', 10); + + // 获取医生信息 + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + + $fields = [ + 'doctor_id', + 'iden_auth_status', + 'idcard_status', + 'multi_point_status', + ]; + $user_doctor = UserDoctor::getOne($params, $fields); + if (empty($user_doctor)) { + return fail(HttpEnumCode::HTTP_ERROR, "非法医生"); + } + + if ($user_doctor['iden_auth_status'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "请先完成身份认证"); + } + + if ($user_doctor['idcard_status'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "请先完成实名认证"); + } + + // 获取处方数据 + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $params['pharmacist_audit_status'] = $pharmacist_audit_status; + $params['is_delete'] = 0; + + if ($pharmacist_audit_status == 1){ + // 审核通过 + $params['platform_audit_status'] = 1; + } + + $order_prescriptions = OrderPrescription::getTransferWithIcdPage($params,['*'],$page,$per_page); + if (empty($order_prescriptions)) { + return success($order_prescriptions); + } + + // 处理数据 + $result = array(); + + foreach ($order_prescriptions['data'] as $order_prescription) { + $data = array(); + $data['order_prescription_id'] = $order_prescription['order_prescription_id']; + $data['order_inquiry_id'] = $order_prescription['order_inquiry_id']; + $data['patient_name'] = $order_prescription['patient_name']; + $data['patient_sex'] = $order_prescription['patient_sex']; + $data['patient_age'] = $order_prescription['patient_age']; + $data['created_at'] = date('Y-m-d H:i:s',strtotime($order_prescription['created_at'])); // 开方时间 + $data['pharmacist_audit_status'] = $order_prescription['pharmacist_audit_status'];// 药师审核状态(0:审核中 1:审核成功 2:审核驳回) + $data['pharmacist_fail_reason'] = $order_prescription['pharmacist_fail_reason'];// 驳回原因 + $data['platform_audit_status'] = $order_prescription['platform_audit_status'];// 处方平台审核状态(0:审核中 1:审核成功 2:审核驳回) + $data['platform_fail_reason'] = $order_prescription['platform_fail_reason'];// 处方平台驳回原因 + + // 获取病例信息 + $params = array(); + $params['order_inquiry_id'] = $order_prescription['order_inquiry_id']; + $params['status'] = 1; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + return fail(HttpEnumCode::SERVER_ERROR); + } + + // 病情描述 + $data['disease_desc'] = $order_inquiry_case['disease_desc']; + + // 患病时长 + if (empty($order_inquiry_case['diagnosis_date'])) { + $data['diagnosis_date'] = ""; + } else { + $data['diagnosis_date'] = date('Y-m-d', strtotime($order_inquiry_case['diagnosis_date'])); + } + + // 疾病信息 + $data['order_prescription_icd'] = $order_prescription['OrderPrescriptionIcd'] ?? []; + + // 患者id + $data['patient_id'] = $order_inquiry_case['patient_id']; + + // 医生id + $data['doctor_id'] = $order_prescription['doctor_id']; + + $result[] = $data; + } + + unset($order_prescriptions['data']); + $order_prescriptions['data'] = $result; + + return success($order_prescriptions); + } + /** * 获取医生个人中心数据 * @return array diff --git a/config/routes.php b/config/routes.php index 3b22197..6b23d14 100644 --- a/config/routes.php +++ b/config/routes.php @@ -243,6 +243,9 @@ Router::addGroup('/doctor', function () { // 获取处方列表 Router::get('', [UserDoctorController::class, 'getPrescriptionList']); + // 获取处方列表(抄方) + Router::get('/transfer', [UserDoctorController::class, 'getTransferPrescriptionList']); + // 获取处方详情 Router::get('/info', [UserDoctorController::class, 'getPrescriptionInfo']);