From ef2289b1f7992ddf3651ed972e8f9771161e59fc Mon Sep 17 00:00:00 2001 From: wucongxing <815046773@qq.com> Date: Sat, 11 Mar 2023 14:42:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96=E8=8D=AF?= =?UTF-8?q?=E5=93=81=E8=AE=A2=E5=8D=95=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/InquiryController.php | 56 --- app/Controller/PatientOrderController.php | 95 +++++ app/Model/OrderInquiry.php | 1 + app/Model/OrderProduct.php | 42 ++- app/Model/OrderProductItem.php | 1 + app/Request/PatientOrderRequest.php | 99 +++++ app/Services/InquiryService.php | 353 ----------------- app/Services/PatientOrderService.php | 437 ++++++++++++++++++++++ config/routes.php | 84 +++-- 9 files changed, 728 insertions(+), 440 deletions(-) create mode 100644 app/Controller/PatientOrderController.php create mode 100644 app/Request/PatientOrderRequest.php create mode 100644 app/Services/PatientOrderService.php diff --git a/app/Controller/InquiryController.php b/app/Controller/InquiryController.php index 0c38714..a7fb25c 100644 --- a/app/Controller/InquiryController.php +++ b/app/Controller/InquiryController.php @@ -84,65 +84,9 @@ class InquiryController extends AbstractController 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); - } - /** - * 取消患者问诊订单 - * @return ResponseInterface - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ - public function putCancelPatientInquiryOrder(): ResponseInterface - { - $InquiryService = new InquiryService(); - $data = $InquiryService->putCancelPatientInquiryOrder(); - return $this->response->json($data); - } - /** - * 删除问诊订单 - * @return ResponseInterface - */ - public function deletePatientInquiryOrder(): ResponseInterface - { - $InquiryService = new InquiryService(); - $data = $InquiryService->deletePatientInquiryOrder(); - return $this->response->json($data); - } - /** - * 问诊订单取消支付 - * @return ResponseInterface - */ - public function putPatientInquiryOrderCancelPay(): ResponseInterface - { - $InquiryService = new InquiryService(); - $data = $InquiryService->putPatientInquiryOrderCancelPay(); - return $this->response->json($data); - } } \ No newline at end of file diff --git a/app/Controller/PatientOrderController.php b/app/Controller/PatientOrderController.php new file mode 100644 index 0000000..ed055ac --- /dev/null +++ b/app/Controller/PatientOrderController.php @@ -0,0 +1,95 @@ +container->get(PatientOrderRequest::class); + $request->scene('getPatientInquiryOrderList')->validateResolved(); + + $PatientOrderService = new PatientOrderService(); + $data = $PatientOrderService->getPatientInquiryOrderList(); + return $this->response->json($data); + } + + /** + * 获取患者问诊订单详情 + * @return ResponseInterface + */ + public function getPatientInquiryOrderInfo(): ResponseInterface + { + $PatientOrderService = new PatientOrderService(); + $data = $PatientOrderService->getPatientInquiryOrderInfo(); + return $this->response->json($data); + } + + /** + * 取消患者问诊订单 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function putCancelPatientInquiryOrder(): ResponseInterface + { + $PatientOrderService = new PatientOrderService(); + $data = $PatientOrderService->putCancelPatientInquiryOrder(); + return $this->response->json($data); + } + + /** + * 删除问诊订单 + * @return ResponseInterface + */ + public function deletePatientInquiryOrder(): ResponseInterface + { + $PatientOrderService = new PatientOrderService(); + $data = $PatientOrderService->deletePatientInquiryOrder(); + return $this->response->json($data); + } + + /** + * 问诊订单取消支付 + * @return ResponseInterface + */ + public function putPatientInquiryOrderCancelPay(): ResponseInterface + { + $PatientOrderService = new PatientOrderService(); + $data = $PatientOrderService->putPatientInquiryOrderCancelPay(); + return $this->response->json($data); + } + + /** + * 获取药品订单列表 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function getPatientProductOrderList(): ResponseInterface + { + $request = $this->container->get(PatientOrderRequest::class); + $request->scene('getPatientProductOrderList')->validateResolved(); + + $PatientOrderService = new PatientOrderService(); + $data = $PatientOrderService->getPatientProductOrderList(); + return $this->response->json($data); + } +} \ No newline at end of file diff --git a/app/Model/OrderInquiry.php b/app/Model/OrderInquiry.php index e72ef87..78a67f9 100644 --- a/app/Model/OrderInquiry.php +++ b/app/Model/OrderInquiry.php @@ -223,6 +223,7 @@ class OrderInquiry extends Model * 获取问诊订单分页 * 已结束 * @param array $params + * @param array $inquiry_status_params * @param array $fields * @param int|null $page * @param int|null $per_page diff --git a/app/Model/OrderProduct.php b/app/Model/OrderProduct.php index d1f890b..c863875 100644 --- a/app/Model/OrderProduct.php +++ b/app/Model/OrderProduct.php @@ -7,6 +7,8 @@ namespace App\Model; use Hyperf\Database\Model\Collection; +use Hyperf\Database\Model\Relations\HasMany; +use Hyperf\Database\Model\Relations\HasOne; use Hyperf\Snowflake\Concern\Snowflake; /** @@ -15,11 +17,13 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $order_prescription_id 订单-处方id * @property int $doctor_id 医生id * @property int $patient_id 患者id + * @property int $family_id 家庭成员id(就诊用户) * @property string $order_product_no 订单编号 * @property string $escrow_trade_no 第三方支付流水号 - * @property int $order_product_status 订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已完成 6:已取消) + * @property int $order_product_status 订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消) * @property int $pay_channel 支付渠道(1:小程序支付 2:微信扫码支付) * @property int $pay_status 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + * @property int $is_delete 删除状态(0:否 1:是) * @property int $cancel_reason 订单取消原因(1:主动取消 2:复核失败/库存不足 3:支付超时) * @property string $amount_total 订单金额 * @property string $payment_amount_total 实际付款金额 @@ -56,10 +60,18 @@ class OrderProduct extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['order_product_id', 'order_inquiry_id', 'order_prescription_id', 'doctor_id', 'patient_id', 'order_product_no', 'escrow_trade_no', 'order_product_status', 'pay_channel', 'pay_status', 'cancel_reason', 'amount_total', 'payment_amount_total', 'logistics_fee', 'logistics_no', 'pay_time', 'remarks', 'refund_status', 'cancel_remarks', 'province_id', 'province', 'city_id', 'city', 'county_id', 'county', 'address', 'address_mask', 'consignee_name', 'consignee_name_mask', 'consignee_tel', 'consignee_tel_mask', 'created_at', 'updated_at']; + protected array $fillable = ['order_product_id', 'order_inquiry_id', 'order_prescription_id', 'doctor_id', 'patient_id', 'family_id', 'order_product_no', 'escrow_trade_no', 'order_product_status', 'pay_channel', 'pay_status', 'is_delete', 'cancel_reason', 'amount_total', 'payment_amount_total', 'logistics_fee', 'logistics_no', 'pay_time', 'remarks', 'refund_status', 'cancel_remarks', 'province_id', 'province', 'city_id', 'city', 'county_id', 'county', 'address', 'address_mask', 'consignee_name', 'consignee_name_mask', 'consignee_tel', 'consignee_tel_mask', 'created_at', 'updated_at']; protected string $primaryKey = "order_product_id"; + /** + * 关联订单商品item表 + */ + public function OrderProductItem(): HasMany + { + return $this->HasMany(OrderProductItem::class, 'order_product_id','order_product_id'); + } + /** * 获取信息-单条 * @param array $params @@ -101,4 +113,30 @@ class OrderProduct extends Model { return self::where($params)->count(); } + + /** + * 获取药品订单分页 + * @param array $params + * @param array $fields + * @param int|null $page + * @param int|null $per_page + * @return array + */ + public static function getPatientOrderProductPage(array $params,array $fields = ["*"], int $page = null, ?int $per_page = 10): array + { + $result = self::with([ + "OrderProductItem:product_item_id,order_product_id,product_id,product_name,amount,manufacturer,product_cover_img,product_spec", + ]) + ->where($params) + ->paginate($per_page, $fields, "page", $page); + + $data = array(); + $data['current_page'] = $result->currentPage();// 当前页码 + $data['total'] = $result->total();// 数据总数 + $data['data'] = $result->items();// 数据 + $data['per_page'] = $result->perPage();// 每页个数 + $data['last_page'] = $result->lastPage();// 最后一页 + + return $data; + } } diff --git a/app/Model/OrderProductItem.php b/app/Model/OrderProductItem.php index d409c19..a0edc9f 100644 --- a/app/Model/OrderProductItem.php +++ b/app/Model/OrderProductItem.php @@ -25,6 +25,7 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $product_spec 商品规格 * @property \Carbon\Carbon $created_at 创建时间 * @property \Carbon\Carbon $updated_at 修改时间 + * @property-read Product $Product */ class OrderProductItem extends Model { diff --git a/app/Request/PatientOrderRequest.php b/app/Request/PatientOrderRequest.php new file mode 100644 index 0000000..be38b84 --- /dev/null +++ b/app/Request/PatientOrderRequest.php @@ -0,0 +1,99 @@ + [ // 获取患者问诊订单列表 + 'inquiry_status',// 问诊订单状态(0:全部 1:待支付 2:待接诊 3:问诊中 4:完成/取消 + 'family_id',// 家庭成员id(就诊用户) + ], + 'getPatientProductOrderList' => [ // 获取药品订单列表 + 'order_product_status',// 订单状态(0:全部 1:待支付 2:待发货 3:已发货 4:已签收 5:已取消) + 'family_id',// 家庭成员id(就诊用户) + ], + ]; + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize(): bool + { + return true; + } + + /** + * Get the validation rules that apply to the request. + */ + public function rules(): array + { + return [ + 'inquiry_type' => 'required|integer|min:1|max:4', + 'inquiry_mode' => 'required|integer|min:1|max:5', + 'patient_id' => 'required', + 'family_id' => 'required', + 'disease_class_id' => 'required', + 'diagnosis_date' => 'date', + 'disease_desc' => 'required', + 'is_allergy_history' => ['sometimes','numeric','min:0','max:1'], + 'is_family_history' => ['sometimes','numeric','min:0','max:1'], + 'is_pregnant' => ['sometimes','numeric','min:0','max:1'], + 'client_type' => 'required|integer|min:1|max:2', + + 'doctor_id' => 'required', + 'order_inquiry_id' => 'required', + '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', + ]; + } + + /** + * 获取已定义验证规则的错误消息. + */ + public function messages(): array + { + return [ + 'inquiry_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_type.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + + 'patient_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'family_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'disease_class_id.required' => "请您选择疾病", + 'diagnosis_date.date' => HttpEnumCode::getMessage(HttpEnumCode::DATE_FORMAT_ERROR), + 'disease_desc.required' => "请您输入病情主诉", + 'is_allergy_history.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_allergy_history.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_allergy_history.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_family_history.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_family_history.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_family_history.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_pregnant.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_pregnant.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_pregnant.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'client_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + '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 af51395..d879bba 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -487,359 +487,6 @@ 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()); - } - - /** - * 取消患者问诊订单 - * @return array - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ - public function putCancelPatientInquiryOrder(): 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(); - } - - // 检测订单状态 - if (!in_array($order_inquiry['inquiry_status'],[1,2,3])) { - // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - return fail(HttpEnumCode::HTTP_ERROR,"订单无法取消"); - } - - if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])) { - // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) - return fail(HttpEnumCode::HTTP_ERROR,"订单正在退款中"); - } - - // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - - Db::beginTransaction(); - try { - // 修改问诊订单为取消 - $data = array(); - $data['inquiry_status'] = 7; - $data['cancel_time'] = date("Y-m-d H:i:s",time()); - $data['cancel_reason'] = 2; // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) - $data['updated_at'] = date("Y-m-d H:i:s",time()); - - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - OrderInquiry::edit($params,$data); - - // 检测支付状态,判断是否需要退款处理 - if ($order_inquiry['inquiry_pay_status'] == 2){ - // 需退款 - $this->inquiryRefund($order_inquiry['order_inquiry_id'],"取消问诊"); - } - - } catch (\Exception $e) { - Db::rollBack(); - return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); - } - - return success(); - } - - /** - * 删除问诊订单 - * @return array - */ - public function deletePatientInquiryOrder(): 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(); - } - - // 检测订单状态 - if (!in_array($order_inquiry['inquiry_status'],[1,5])) { - // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - return fail(HttpEnumCode::HTTP_ERROR,"订单无法删除"); - } - - if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])) { - // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) - return fail(HttpEnumCode::HTTP_ERROR,"订单正在退款中"); - } - - // 修改订单删除状态 - $data = array(); - $data['is_delete'] = 1; - - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - - OrderInquiry::edit($params,$data); - - return success(); - } - - /** - * 问诊订单取消支付 - * @return array - */ - public function putPatientInquiryOrderCancelPay(): 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(); - } - - // 检测订单状态 - if (!in_array($order_inquiry['inquiry_status'],[1])) { - // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - return fail(HttpEnumCode::HTTP_ERROR,"订单无法删除"); - } - - if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])) { - // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) - return fail(HttpEnumCode::HTTP_ERROR,"订单正在退款中"); - } - - // 修改订单删除状态 - $data = array(); - $data['inquiry_status'] = 7; - $data['cancel_time'] = date("Y-m-d H:i:s",time()); - $data['cancel_reason'] = 2; // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) - $data['cancel_remarks'] = "未支付取消"; - $data['updated_at'] = date("Y-m-d H:i:s",time()); - - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - OrderInquiry::edit($params,$data); - - return success(); - } - - /** * 获取医生未接诊订单数量 * @param string $doctor_id 医生id diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php new file mode 100644 index 0000000..9d28abe --- /dev/null +++ b/app/Services/PatientOrderService.php @@ -0,0 +1,437 @@ +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()); + } + + /** + * 取消患者问诊订单 + * @return array + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function putCancelPatientInquiryOrder(): 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(); + } + + // 检测订单状态 + if (!in_array($order_inquiry['inquiry_status'],[1,2,3])) { + // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + return fail(HttpEnumCode::HTTP_ERROR,"订单无法取消"); + } + + if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + return fail(HttpEnumCode::HTTP_ERROR,"订单正在退款中"); + } + + // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + + Db::beginTransaction(); + try { + // 修改问诊订单为取消 + $data = array(); + $data['inquiry_status'] = 7; + $data['cancel_time'] = date("Y-m-d H:i:s",time()); + $data['cancel_reason'] = 2; // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) + $data['updated_at'] = date("Y-m-d H:i:s",time()); + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + OrderInquiry::edit($params,$data); + + // 检测支付状态,判断是否需要退款处理 + if ($order_inquiry['inquiry_pay_status'] == 2){ + // 需退款 + $inquiryService = new InquiryService(); + $inquiryService->inquiryRefund($order_inquiry['order_inquiry_id'],"取消问诊"); + } + + } catch (\Exception $e) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); + } + + return success(); + } + + /** + * 删除问诊订单 + * @return array + */ + public function deletePatientInquiryOrder(): 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(); + } + + // 检测订单状态 + if (!in_array($order_inquiry['inquiry_status'],[1,5])) { + // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + return fail(HttpEnumCode::HTTP_ERROR,"订单无法删除"); + } + + if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + return fail(HttpEnumCode::HTTP_ERROR,"订单正在退款中"); + } + + // 修改订单删除状态 + $data = array(); + $data['is_delete'] = 1; + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + + OrderInquiry::edit($params,$data); + + return success(); + } + + /** + * 问诊订单取消支付 + * @return array + */ + public function putPatientInquiryOrderCancelPay(): 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(); + } + + // 检测订单状态 + if (!in_array($order_inquiry['inquiry_status'],[1])) { + // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + return fail(HttpEnumCode::HTTP_ERROR,"订单无法删除"); + } + + if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + return fail(HttpEnumCode::HTTP_ERROR,"订单正在退款中"); + } + + // 修改订单删除状态 + $data = array(); + $data['inquiry_status'] = 7; + $data['cancel_time'] = date("Y-m-d H:i:s",time()); + $data['cancel_reason'] = 2; // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) + $data['cancel_remarks'] = "未支付取消"; + $data['updated_at'] = date("Y-m-d H:i:s",time()); + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + OrderInquiry::edit($params,$data); + + return success(); + } + + /** + * 获取药品订单列表 + * @return array + */ + public function getPatientProductOrderList(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $order_product_status = $this->request->input('order_product_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_params) && $inquiry_status_params != 0){ + // 入参订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消) + // 数据库订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消) + $params['inquiry_status_params'] = $family_id; + } + + $params['is_delete'] = 0; + + $fields = [ + 'order_product_id', + 'order_inquiry_id', + 'order_prescription_id', + 'doctor_id', + 'patient_id', + 'family_id', + 'order_product_status', + 'pay_status', + 'cancel_reason', + 'remarks', + 'refund_status', + 'cancel_remarks', + 'created_at', + ]; + + $order_product = OrderProduct::getPatientOrderProductPage($params,$fields); + if (empty($order_product['data'])){ + return success(); + } + + foreach ($order_product['data'] as $item){ + foreach ($item['orderProductItem'] as &$product_item){ + $product_item['product_cover_img'] = addAliyunOssWebsite($product_item['product_cover_img']); + } + } + + return success($order_product); + } +} \ No newline at end of file diff --git a/config/routes.php b/config/routes.php index 39e0e9e..7723187 100644 --- a/config/routes.php +++ b/config/routes.php @@ -23,6 +23,7 @@ use App\Controller\PatientCaseController; use App\Controller\PatientCenterController; use App\Controller\PatientDoctorController; use App\Controller\PatientFamilyController; +use App\Controller\PatientOrderController; use App\Controller\SafeController; use App\Controller\SystemController; use App\Controller\UserController; @@ -195,32 +196,19 @@ Router::addGroup('/patient', function () { // 创建问诊订单 Router::post('', [InquiryController::class, 'addInquiryOrder']); + + // 检测是否可以接诊 Router::get('/check', [PatientDoctorController::class, 'getDoctorInquiryCheck']); // 检测快速、购药订单分配医生状态 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']); - // 取消患者问诊订单-1:待支付 2:待分配 3:待接诊 - Router::put('/cancel/{order_inquiry_id:\d+}', [InquiryController::class, 'putCancelPatientInquiryOrder']); - // 删除问诊订单-1:待支付 5:已完成 - Router::delete('/{order_inquiry_id:\d+}', [InquiryController::class, 'deletePatientInquiryOrder']); - - // 问诊订单取消支付-1未支付 - Router::put('/cancel-pay/{order_inquiry_id:\d+}', [InquiryController::class, 'putPatientInquiryOrderCancelPay']); - - // 获取药品订单列表-药品订单 - Router::post('/8', [CallBackController::class, 'imCallBack']); }); // 医生数据 @@ -289,6 +277,55 @@ Router::addGroup('/patient', function () { Router::get('/last/{family_id:\d+}', [PatientCaseController::class, 'getLastCase']); }); + Router::addGroup('/order', function () { + Router::addGroup('/inquiry', function () { + // 获取患者问诊订单列表 + Router::get('', [PatientOrderController::class, 'getPatientInquiryOrderList']); + + // 获取患者问诊订单详情 + Router::get('/{order_inquiry_id:\d+}', [PatientOrderController::class, 'getPatientInquiryOrderInfo']); + + // 删除问诊订单-1:待支付 5:已完成 + Router::delete('/{order_inquiry_id:\d+}', [PatientOrderController::class, 'deletePatientInquiryOrder']); + + // 取消问诊订单-1:待支付 2:待分配 3:待接诊 + Router::put('/cancel/{order_inquiry_id:\d+}', [PatientOrderController::class, 'putCancelPatientInquiryOrder']); + + // 问诊订单取消支付-1未支付 + Router::put('/cancel-pay/{order_inquiry_id:\d+}', [PatientOrderController::class, 'putPatientInquiryOrderCancelPay']); + }); + + // 药品订单 + Router::addGroup('/product', function () { + // 获取药品订单列表 + Router::get('', [PatientOrderController::class, 'getPatientProductOrderList']); + + // 获取药品订单详情 + Router::post('/8', [PatientOrderController::class, 'imCallBack']); + + // 药品订单取消支付-1未支付 + Router::put('/cancel-pay/{order_inquiry_id:\d+}', [PatientOrderController::class, 'putPatientInquiryOrderCancelPay']); + + // 创建处方订单 + Router::post('/17', [PatientOrderController::class, 'imCallBack']); + }); + + // 处方订单 + Router::addGroup('/prescription', function () { + // 获取处方订单列表 + Router::post('/14', [PatientOrderController::class, 'imCallBack']); + + // 获取处方订单详情 + Router::post('/8', [PatientOrderController::class, 'imCallBack']); + + // 获取处方订单支付页详情-处方管理 + Router::post('/16', [PatientOrderController::class, 'imCallBack']); + + // 删除处方订单记录-处方管理 + Router::post('/18', [PatientOrderController::class, 'imCallBack']); + }); + }); + }); // 药师端api @@ -425,11 +462,8 @@ Router::get('/testpay', [UserController::class, 'testpay']); // 未开发接口 -// 获取药品订单列表-药品订单 -Router::post('/8', [CallBackController::class, 'imCallBack']); -// 获取药品订单详情-药品订单 -Router::post('/9', [CallBackController::class, 'imCallBack']); + // 获取地址列表-地址管理 Router::post('/10', [CallBackController::class, 'imCallBack']); @@ -443,20 +477,12 @@ Router::post('/12', [CallBackController::class, 'imCallBack']); // 删除地址-地址管理 Router::post('/13', [CallBackController::class, 'imCallBack']); -// 获取处方列表-处方管理 -Router::post('/14', [CallBackController::class, 'imCallBack']); -// 获取处方详情-处方管理 -Router::post('/15', [CallBackController::class, 'imCallBack']); -// 获取处方支付页详情-处方管理 -Router::post('/16', [CallBackController::class, 'imCallBack']); -// 创建处方订单-处方管理 -Router::post('/17', [CallBackController::class, 'imCallBack']); -// 删除处方记录-处方管理 -Router::post('/18', [CallBackController::class, 'imCallBack']); + + // 获取问诊价格列表-消息-无问诊消息时 Router::post('/19', [CallBackController::class, 'imCallBack']);