diff --git a/app/Amqp/Consumer/AssignDoctorConsumer.php b/app/Amqp/Consumer/AssignDoctorConsumer.php index b91107e..ae155de 100644 --- a/app/Amqp/Consumer/AssignDoctorConsumer.php +++ b/app/Amqp/Consumer/AssignDoctorConsumer.php @@ -157,6 +157,7 @@ class AssignDoctorConsumer extends ConsumerMessage // 更改数据库 $data = array(); $data['doctor_id'] = $doctor_id; + $data['inquiry_status'] = 3; // 待接诊 $params = array(); $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; diff --git a/app/Controller/InquiryController.php b/app/Controller/InquiryController.php index 2023b58..05ae41d 100644 --- a/app/Controller/InquiryController.php +++ b/app/Controller/InquiryController.php @@ -64,7 +64,7 @@ class InquiryController extends AbstractController } /** - * 新增医生评价 + * 新增问诊评价 * @return ResponseInterface * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface @@ -78,4 +78,31 @@ class InquiryController extends AbstractController $data = $InquiryService->addInquiryEvaluation(); return $this->response->json($data); } + + /** + * 获取患者问诊订单列表 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function getPatientInquiryOrderList(): ResponseInterface + { + $request = $this->container->get(InquiryRequest::class); + $request->scene('getPatientInquiryOrderList')->validateResolved(); + + $InquiryService = new InquiryService(); + $data = $InquiryService->getPatientInquiryOrderList(); + return $this->response->json($data); + } + + /** + * 获取患者问诊订单详情 + * @return ResponseInterface + */ + public function getPatientInquiryOrderInfo(): ResponseInterface + { + $InquiryService = new InquiryService(); + $data = $InquiryService->getPatientInquiryOrderInfo(); + return $this->response->json($data); + } } \ No newline at end of file diff --git a/app/Model/OrderInquiry.php b/app/Model/OrderInquiry.php index 3630782..e72ef87 100644 --- a/app/Model/OrderInquiry.php +++ b/app/Model/OrderInquiry.php @@ -71,6 +71,14 @@ class OrderInquiry extends Model return $this->hasOne(UserDoctor::class, 'doctor_id','doctor_id'); } + /** + * 关联问诊病例表 + */ + public function OrderInquiryCase(): HasOne + { + return $this->hasOne(OrderInquiryCase::class, 'order_inquiry_id','order_inquiry_id'); + } + /** * 获取问诊订单-单条 * @param array $params @@ -211,4 +219,34 @@ class OrderInquiry extends Model return self::where($params)->update($data); } + /** + * 获取问诊订单分页 + * 已结束 + * @param array $params + * @param array $fields + * @param int|null $page + * @param int|null $per_page + * @return int|mixed|string + */ + public static function getPatientOrderInquiryPage(array $params,array $inquiry_status_params ,array $fields = ["*"], int $page = null, ?int $per_page = 10): mixed + { + $raw = self::with([ + 'OrderInquiryCase:inquiry_case_id,order_inquiry_id,disease_desc', + ]) + ->where($params) + ->when($inquiry_status_params, function ($query, $inquiry_status_params) { + $query->whereIn('inquiry_status',$inquiry_status_params); + }) +// ->orderBy('created_at','asc') + ->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; + } } diff --git a/app/Request/InquiryRequest.php b/app/Request/InquiryRequest.php index c5d7e83..2464805 100644 --- a/app/Request/InquiryRequest.php +++ b/app/Request/InquiryRequest.php @@ -30,7 +30,7 @@ class InquiryRequest extends FormRequest 'inquiry_mode', // 订单问诊方式(1:图文 2:视频 3:语音 4:电话 5:会员) 'client_type', // 客户端类型(1:手机 2:电脑) ], - 'addInquiryEvaluation' => [ // 新增医生评价 + 'addInquiryEvaluation' => [ // 新增问诊评价 'doctor_id', 'order_inquiry_id', 'reply_quality',// 回复质量 @@ -38,6 +38,10 @@ class InquiryRequest extends FormRequest 'reply_progress',// 回复速度 'content', ], + 'getPatientInquiryOrderList' => [ // 获取患者问诊订单列表 + 'inquiry_status',// 问诊订单状态(0:全部 1:待支付 2:待接诊 3:问诊中 4:完成/取消 + 'family_id',// 家庭成员id(就诊用户) + ], ]; /** @@ -71,6 +75,8 @@ class InquiryRequest extends FormRequest 'reply_quality' => 'required|integer|min:0|max:5', 'service_attitude' => 'required|integer|min:0|max:5', 'reply_progress' => 'required|integer|min:0|max:5',// + + 'inquiry_status' => 'required|integer|min:0|max:4', ]; } @@ -107,6 +113,11 @@ class InquiryRequest extends FormRequest 'client_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'client_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'client_type.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + + 'inquiry_status.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_status.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_status.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_status.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), ]; } } diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 9f44996..9f9e32a 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -3,9 +3,11 @@ namespace App\Services; use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer; +use App\Constants\DoctorTitleCode; use App\Constants\HttpEnumCode; use App\Exception\BusinessException; use App\Model\DiseaseClass; +use App\Model\Hospital; use App\Model\InquiryCaseProduct; use App\Model\OrderEvaluation; use App\Model\OrderInquiry; @@ -405,7 +407,7 @@ class InquiryService extends BaseService } /** - * 新增医生评价 + * 新增问诊评价 * @return array */ public function addInquiryEvaluation(): array @@ -475,6 +477,207 @@ class InquiryService extends BaseService return success(); } + //获取患者问诊订单列表 + public function getPatientInquiryOrderList(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $inquiry_status = $this->request->input('inquiry_status',0); + $family_id = $this->request->input('family_id'); + $page = $this->request->input('page',1); + $per_page = $this->request->input('per_page',10); + + $params = array(); + $params['patient_id'] = $user_info['client_user_id']; + if (!empty($family_id)){ + $params['family_id'] = $family_id; + } + + $inquiry_status_params = []; + if (!empty($inquiry_status) && $inquiry_status != 0){ + // 问诊订单状态(0:全部 1:待支付 2:待接诊 3:问诊中 4:完成/取消 + // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + if ($inquiry_status == 1){ + $inquiry_status_params = [1]; + } + + if ($inquiry_status == 2){ + $inquiry_status_params = [2,3]; + } + + if ($inquiry_status == 3){ + $inquiry_status_params = [4]; + } + + if ($inquiry_status == 4){ + $inquiry_status_params = [5,6,7]; + } + } + + $params['is_delete'] = 0; + + $fields = [ + 'order_inquiry_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', + 'payment_amount_total', + 'patient_name', + 'patient_name_mask', + 'patient_sex', + 'patient_age', + 'created_at', + ]; + $order_inquiry = OrderInquiry::getPatientOrderInquiryPage($params,$inquiry_status_params,$fields); + if (empty($order_inquiry['data'])){ + return success(); + } + + foreach ($order_inquiry['data'] as &$item){ + $item['disease_desc'] = $item['OrderInquiryCase']['disease_desc']; + unset($item['OrderInquiryCase']); + + // 获取医生数据 + $item['user_doctor'] = []; + if (!empty($item['doctor_id'])){ + $fields = [ + 'doctor_id', + 'user_name', + 'doctor_title', + 'hospital_id', + ]; + + $params = array(); + $params['doctor_id'] = $item['doctor_id']; + $user_doctor = UserDoctor::getOne($params,$fields); + if (empty($user_doctor)){ + return fail(HttpEnumCode::SERVER_ERROR); + } + + // 转换医生职称 + $user_doctor['doctor_title'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']); + + // 获取医生医院名称 + $user_doctor['hospital_name'] = ""; + $user_doctor['hospital_level_name'] = ""; + + $fields = [ + 'hospital_id', + 'hospital_name', + 'hospital_level_name', + ]; + + $params = array(); + $params['hospital_id'] = $user_doctor['hospital_id']; + $hospital = Hospital::getOne($params,$fields); + if (!empty($hospital)){ + $user_doctor['hospital_name'] = $hospital['hospital_name']; + $user_doctor['hospital_level_name'] = $hospital['hospital_level_name']; + } + + $item['user_doctor'] = $user_doctor; + unset($hospital); + unset($user_doctor); + } + } + + return success($order_inquiry); + } + + /** + * 获取患者问诊订单详情 + * @return array + */ + public function getPatientInquiryOrderInfo(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $order_inquiry_id = $this->request->route('order_inquiry_id'); + + // 获取订单数据 + $params = array(); + $params['patient_id'] = $user_info['client_user_id']; + $params['order_inquiry_id'] = $order_inquiry_id; + $params['is_delete'] = 0; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + return fail(); + } + + // 获取病例信息 + $fields = [ + 'disease_class_name', + 'disease_desc', + ]; + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params,$fields); + if (empty($order_inquiry_case)){ + return fail(); + } + + $order_inquiry['case'] = $order_inquiry_case->toArray(); + + // 获取医生数据 + $order_inquiry['user_doctor'] = []; + if (!empty($order_inquiry['doctor_id'])){ + $fields = [ + 'doctor_id', + 'user_name', + 'doctor_title', + 'hospital_id', + 'avatar', + ]; + + $params = array(); + $params['doctor_id'] = $order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params,$fields); + if (empty($user_doctor)){ + return fail(HttpEnumCode::SERVER_ERROR); + } + + // 转换医生职称 + $user_doctor['doctor_title'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']); + + // 头像 + $user_doctor['avatar'] = addAliyunOssWebsite($user_doctor['avatar']); + + // 获取医生医院名称 + $user_doctor['hospital_name'] = ""; + $user_doctor['hospital_level_name'] = ""; + + $fields = [ + 'hospital_id', + 'hospital_name', + 'hospital_level_name', + ]; + + $params = array(); + $params['hospital_id'] = $user_doctor['hospital_id']; + $hospital = Hospital::getOne($params,$fields); + if (!empty($hospital)){ + $user_doctor['hospital_name'] = $hospital['hospital_name']; + $user_doctor['hospital_level_name'] = $hospital['hospital_level_name']; + } + + $order_inquiry['user_doctor'] = $user_doctor; + unset($hospital); + unset($user_doctor); + } + + return success($order_inquiry->toArray()); + } + /** * 获取医生未接诊订单数量 diff --git a/config/routes.php b/config/routes.php index 3f8edb2..c953ed9 100644 --- a/config/routes.php +++ b/config/routes.php @@ -191,11 +191,8 @@ Router::addGroup('/patient', function () { // 问诊 Router::addGroup('/inquiry', function () { - // 订单 - Router::addGroup('/order', function () { - // 创建订单 - Router::post('', [InquiryController::class, 'addInquiryOrder']); - }); + // 创建问诊订单 + Router::post('', [InquiryController::class, 'addInquiryOrder']); // 检测是否可以接诊 Router::get('/check', [PatientDoctorController::class, 'getDoctorInquiryCheck']); @@ -203,8 +200,14 @@ Router::addGroup('/patient', function () { // 检测快速、购药订单分配医生状态 Router::get('/assign/{order_inquiry_id:\d+}', [InquiryController::class, 'getInquiryAssign']); - // 新增医生评价 + // 获取患者问诊订单列表 + Router::get('/list', [InquiryController::class, 'getPatientInquiryOrderList']); + + // 新增问诊评价 Router::post('/evaluation', [InquiryController::class, 'addInquiryEvaluation']); + + // 获取患者问诊订单详情 + Router::get('/{order_inquiry_id:\d+}', [InquiryController::class, 'getPatientInquiryOrderInfo']); }); // 医生数据 @@ -415,11 +418,6 @@ Router::get('/testpay', [UserController::class, 'testpay']); -// 获取问诊订单列表-问诊订单 -Router::post('/3', [CallBackController::class, 'imCallBack']); - -// 获取订单详情-问诊订单 -Router::post('/4', [CallBackController::class, 'imCallBack']); // 取消问诊-问诊订单-未接诊时 Router::post('/5', [CallBackController::class, 'imCallBack']);