diff --git a/app/Controller/OrderServicePackageController.php b/app/Controller/OrderServicePackageController.php index cdad73e..3bfd1dd 100644 --- a/app/Controller/OrderServicePackageController.php +++ b/app/Controller/OrderServicePackageController.php @@ -58,4 +58,15 @@ class OrderServicePackageController extends AbstractController $data = $OrderServicePackageService->addServiceInquiryOrder(); return $this->response->json($data); } + + /** + * 检测是否可创建服务包问诊订单 + * @return ResponseInterface + */ + public function getServicePackageInquiryCheck(): ResponseInterface + { + $OrderServicePackageService = new OrderServicePackageService(); + $data = $OrderServicePackageService->getServicePackageInquiryCheck(); + return $this->response->json($data); + } } \ No newline at end of file diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 4db976c..8a9b642 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -215,6 +215,7 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::CLIENT_HTTP_ERROR); } } + // 检测家庭成员是否存在 $params = array(); $params['family_id'] = $request_params['family_id']; @@ -1007,6 +1008,111 @@ class OrderServicePackageService extends BaseService return success($result); } + /** + * 检测是否可创建服务包问诊订单 + * @return array + */ + public function getServicePackageInquiryCheck(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $order_no = $this->request->route("order_no"); + + $result = array(); + $result['status'] = 1; + $result['message'] = ""; + $result['data'] = NULL; + + try { + // 检测患者是否购买服务包 + $params = array(); + $params['order_service_no'] = $order_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + return fail(HttpEnumCode::HTTP_ERROR, "患者未购买服务包"); + } + + // 检测服务包订单订单状态 + if ($order_service_package['order_service_status'] == 1) { + return fail(HttpEnumCode::HTTP_ERROR, "服务包未支付"); + } + + if ($order_service_package['order_service_status'] == 2) { + $result['status'] = 2; + $result['message'] = "已发起问诊,请耐心等待接诊"; + $result['data']['order_no'] = $order_service_package['order_service_no']; + return success($result); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)) { + return fail(HttpEnumCode::SERVER_ERROR); + } + + // 处理问诊类型 + if ($order_service_package['order_service_type'] == 1) { + $inquiry_mode = 8; + } else { + $inquiry_mode = 9; + } + + // 检测是否存在同类型未完成的问诊订单 + $PatientOrderService = new PatientOrderService(); + $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry(1, $inquiry_mode, $user_info['client_user_id']); + if (!empty($order_inquiry_id)) { + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + return fail(HttpEnumCode::SERVER_ERROR); + } + + $result['status'] = 4; + $result['message'] = "存在进行中的问诊订单,无法再次使用"; + $result['data']['order_no'] = $order_inquiry['inquiry_no']; + $result['data']['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + return success($result); + } + + // 检测当前医生是否和患者存在未完成问诊订单 + $InquiryService = new InquiryService(); + $order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($user_info['client_user_id'], $order_service_package['doctor_id']); + if (!empty($order_inquiry)) { + $result['status'] = 4; + $result['message'] = "您和当前医生存在问诊中订单,无法再次使用"; + $result['data']['order_no'] = $order_inquiry['inquiry_no']; + $result['data']['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + return success($result); + } + + // 检测问诊次数 + // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 + if ($order_service_package_detail['monthly_frequency'] != 0) { + // 获取服务包当月已问诊次数 + $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); + + if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { + // 超出当月问诊次数 + $result['status'] = 3; + $result['message'] = "超出服务包所包含的当月问诊次数"; + $result['data']['order_no'] = $order_service_package['order_service_no']; + return success($result); + } + } + }catch (\Throwable $e){ + return fail(HttpEnumCode::SERVER_ERROR,$e->getMessage()); + } + + // 未超出当月问诊次数或次数无限制 + $result['message'] = "已购买,未超出当月问诊次数"; + $result['data']['order_no'] = $order_service_package['order_service_no']; + return success($result); + } + /** * 取消未支付检测订单 * @param string|int $order_no diff --git a/config/routes.php b/config/routes.php index ae59f57..542d5ce 100644 --- a/config/routes.php +++ b/config/routes.php @@ -616,6 +616,9 @@ Router::addGroup('/patient', function () { // 创建服务包问诊订单 Router::post('/inquiry/{order_no}', [OrderServicePackageController::class, 'addServiceInquiryOrder']); + + // 检测是否可创建服务包问诊订单 + Router::get('/check/{order_no}', [OrderServicePackageController::class, 'getServicePackageInquiryCheck']); }); });