diff --git a/app/Controller/InquiryController.php b/app/Controller/InquiryController.php index 8966893..8003941 100644 --- a/app/Controller/InquiryController.php +++ b/app/Controller/InquiryController.php @@ -4,7 +4,9 @@ namespace App\Controller; use App\Request\InquiryRequest; use App\Services\InquiryService; +use App\Services\UserDoctorService; use Extend\Wechat\WechatPay; +use GuzzleHttp\Exception\GuzzleException; use Hyperf\Snowflake\IdGeneratorInterface; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; @@ -117,4 +119,16 @@ class InquiryController extends AbstractController $data = $InquiryService->getDoctorFinishMessageList(); return $this->response->json($data); } + + /** + * 结束问诊 + * @return ResponseInterface + * @throws GuzzleException + */ + public function putFinishInquiry(): ResponseInterface + { + $InquiryService = new InquiryService(); + $data = $InquiryService->putFinishInquiry(); + return $this->response->json($data); + } } \ No newline at end of file diff --git a/app/Controller/UserDoctorController.php b/app/Controller/UserDoctorController.php index 429a4f3..fb8fb0f 100644 --- a/app/Controller/UserDoctorController.php +++ b/app/Controller/UserDoctorController.php @@ -371,16 +371,4 @@ class UserDoctorController extends AbstractController $data = $UserDoctorService->addDoctorInquiry(); return $this->response->json($data); } - - /** - * 结束问诊 - * @return ResponseInterface - * @throws GuzzleException - */ - public function putDoctorFinishInquiry(): ResponseInterface - { - $UserDoctorService = new UserDoctorService(); - $data = $UserDoctorService->putDoctorFinishInquiry(); - return $this->response->json($data); - } } \ No newline at end of file diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 94b9b78..f412ff8 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -19,10 +19,12 @@ use App\Model\OrderInquiry; use App\Model\OrderInquiryCase; use App\Model\OrderInquiryCoupon; use App\Model\OrderInquiryRefund; +use App\Model\OrderPrescription; use App\Model\PatientFamily; use App\Model\PatientFamilyHealth; use App\Model\PatientFamilyPersonal; use App\Model\PatientFollow; +use App\Model\PatientHistoryInquiry; use App\Model\Product; use App\Model\SystemInquiryConfig; use App\Model\SystemInquiryTime; @@ -780,6 +782,116 @@ class InquiryService extends BaseService return success($result); } + /** + * 结束问诊 + * @return array + * @throws GuzzleException + */ + public function putFinishInquiry(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $order_inquiry_id = $this->request->route('order_inquiry_id'); + + if (empty($user_info)){ + return fail(HttpEnumCode::HTTP_ERROR, "操作失败"); + } + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); + } + + if ($order_inquiry['doctor_id'] != $user_info['client_user_id'] && $order_inquiry['patient_id'] != $user_info['client_user_id']){ + return fail(HttpEnumCode::HTTP_ERROR, "操作失败"); + } + + if ($order_inquiry['inquiry_status'] != 4) { + // 问诊订单状态(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:退款关闭 6:退款异常) + return fail(HttpEnumCode::HTTP_ERROR, "订单正在退款,无法结束"); + } + + // 订单支付状态 + if ($order_inquiry['inquiry_pay_status'] != 2){ + return fail(HttpEnumCode::HTTP_ERROR, "订单未支付,无法结束"); + } + + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)){ + return fail(HttpEnumCode::HTTP_ERROR, "操作失败"); + } + + Db::beginTransaction(); + + try { + // 修改问诊订单表 + $data = array(); + $data['inquiry_status'] = 5;// 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + $data['complete_time'] = date('Y-m-d H:i:s',time());// 订单完成时间(问诊完成时间) + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + OrderInquiry::edit($params,$data); + + // 新增患者历史问诊表-问诊完成后添加 + $data = array(); + $data['patient_id'] = $order_inquiry['patient_id']; + $data['doctor_id'] = $order_inquiry['doctor_id']; + if (!empty($order_inquiry['pharmacist_id'])){ + $data['pharmacist_id'] = $order_inquiry['pharmacist_id']; + } + + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $data['history_status'] = 1; + $patient_history_inquiry = PatientHistoryInquiry::addPatientHistoryInquiry($data); + if (empty($patient_history_inquiry)){ + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "添加患者历史问诊表失败"); + } + + // 发送IM消息-问诊已结束 + $imService = new ImService(); + $imService->inquiryEnd($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']); + + // 发送IM消息-问诊结束评价通知 + $imService->inquiryEndEvaluation($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']); + + // 发送站内消息-问诊结束 + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush->finishInquiryToDoctor(); + + // 添加自动完成队列 + $data = array(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + + $message = new AutoFinishInquiryDelayDirectProducer($data); + $message->setDelayMs(1000 * 60 * 1); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "操作失败"); + } + Db::commit(); + } catch (\Exception $e) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); + } + + return success(); + } + /** * 获取医生未接诊订单数量 * @param string $doctor_id 医生id diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index 845613f..5f0a1bd 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1675,112 +1675,6 @@ class UserDoctorService extends BaseService return success(); } - /** - * 结束问诊 - * @return array - * @throws GuzzleException - */ - public function putDoctorFinishInquiry(): array - { - $user_info = $this->request->getAttribute("userInfo") ?? []; - - $order_inquiry_id = $this->request->route('order_inquiry_id'); - - // 获取问诊订单数据 - $params = array(); - $params['doctor_id'] = $user_info['client_user_id']; - $params['order_inquiry_id'] = $order_inquiry_id; - $order_inquiry = OrderInquiry::getOne($params); - if (empty($order_inquiry)) { - return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); - } - - if ($order_inquiry['inquiry_status'] != 4) { - // 问诊订单状态(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:退款关闭 6:退款异常) - return fail(HttpEnumCode::HTTP_ERROR, "订单正在退款,无法结束"); - } - - // 订单支付状态 - if ($order_inquiry['inquiry_pay_status'] != 2){ - return fail(HttpEnumCode::HTTP_ERROR, "订单未支付,无法结束"); - } - - // 查看订单是否存在处方 - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_prescription = OrderPrescription::getOne($params); - if (!empty($order_prescription)){ - if ($order_prescription['prescription_status'] == 1 && $order_prescription['pharmacist_audit_status'] == 0){ - return fail(HttpEnumCode::HTTP_ERROR, "处方正在开具中,请您耐心等待,稍后取消"); - } - } - - Db::beginTransaction(); - - try { - // 修改问诊订单表 - $data = array(); - $data['inquiry_status'] = 5;// 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - $data['complete_time'] = date('Y-m-d H:i:s',time());// 订单完成时间(问诊完成时间) - - $params = array(); - $params['order_inquiry_id'] = $order_inquiry_id; - OrderInquiry::edit($params,$data); - - // 新增患者历史问诊表-问诊完成后添加 - $data = array(); - $data['patient_id'] = $order_inquiry['patient_id']; - $data['doctor_id'] = $order_inquiry['doctor_id']; - if (!empty($order_inquiry['pharmacist_id'])){ - $data['pharmacist_id'] = $order_inquiry['pharmacist_id']; - } - - $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $data['history_status'] = 1; - $patient_history_inquiry = PatientHistoryInquiry::addPatientHistoryInquiry($data); - if (empty($patient_history_inquiry)){ - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, "添加患者历史问诊表失败"); - } - - // 发送IM消息-问诊已结束 - $imService = new ImService(); - $imService->inquiryEnd($order_inquiry,$user_info['user_id'],$order_inquiry['user_id']); - - // 发送IM消息-问诊结束评价通知 - $imService->inquiryEndEvaluation($order_inquiry,$user_info['user_id'],$order_inquiry['user_id']); - - // 发送站内消息-问诊结束 - $MessagePush = new MessagePush($user_info['user_id'],$order_inquiry['order_inquiry_id']); - $MessagePush->finishInquiryToDoctor(); - - // 添加自动完成队列 - $data = array(); - $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - - $message = new AutoFinishInquiryDelayDirectProducer($data); - $message->setDelayMs(1000 * 60 * 1); - $producer = $this->container->get(Producer::class); - $res = $producer->produce($message); - if (!$res) { - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); - } - Db::commit(); - } catch (\Exception $e) { - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); - } - - return success(); - } - /** * 检测医生身份认证 * @param object|array $user_doctor 医生表数据 diff --git a/config/routes.php b/config/routes.php index 641b9a1..65c6197 100644 --- a/config/routes.php +++ b/config/routes.php @@ -88,9 +88,6 @@ Router::addGroup('/doctor', function () { // 医生接诊 Router::post('/{order_inquiry_id:\d+}', [UserDoctorController::class, 'addDoctorInquiry']); - // 结束问诊 - Router::put('/finish/{order_inquiry_id:\d+}', [UserDoctorController::class, 'putDoctorFinishInquiry']); - // 结束问诊会话列表 Router::get('/finish/message', [InquiryController::class, 'getDoctorFinishMessageList']); }); @@ -598,9 +595,6 @@ Router::addGroup('/user', function () { // 获取患者问诊病例 Router::get('/case', [InquiryController::class, 'getPatientInquiryCase']); - - - // 测试使用 Router::addGroup('/test', function () { Router::get('', [TestController::class, 'test_14']); @@ -644,6 +638,9 @@ Router::addGroup('/message', function () { Router::addGroup('/inquiry', function () { // 获取问诊订单消息内页基础数据 Router::get('/message/basic/{order_inquiry_id:\d+}', [InquiryController::class, 'getInquiryMessageBasic']); + + // 结束问诊 + Router::put('/finish/{order_inquiry_id:\d+}', [UserDoctorController::class, 'putFinishInquiry']); }); // 未开发接口