diff --git a/app/Middleware/Rule/LockRequestMiddleware.php b/app/Middleware/Rule/LockRequestMiddleware.php index 5cfcb05..b537653 100644 --- a/app/Middleware/Rule/LockRequestMiddleware.php +++ b/app/Middleware/Rule/LockRequestMiddleware.php @@ -22,25 +22,29 @@ class LockRequestMiddleware implements MiddlewareInterface public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { - $user_info = $request->getAttribute("userInfo"); - if (empty($user_info)){ - return $handler->handle($request); - } + try { + $user_info = $request->getAttribute("userInfo"); + if (empty($user_info)){ + return $handler->handle($request); + } - // 获取请求路径 - $path_info = $request->getUri()->getPath(); - if (empty($path_info)){ - return $handler->handle($request); - } + // 获取请求路径 + $path_info = $request->getUri()->getPath(); + if (empty($path_info)){ + return $handler->handle($request); + } - $redis = $this->container->get(Redis::class); - $redis_key = "lock_request_" . $path_info . $user_info['user_id']; - $redis_lock = $redis->setnx($redis_key,1); - // 设置过期时间 - $redis->expire($redis_key,1); - if (!$redis_lock){ - // 设置失败,表示已经设置该值 - sleep(1); + $redis = $this->container->get(Redis::class); + $redis_key = "lock_request_" . $path_info . $user_info['user_id']; + $redis_lock = $redis->setnx($redis_key,1); + // 设置过期时间 + $redis->expire($redis_key,1); + if (!$redis_lock){ + // 设置失败,表示已经设置该值 + sleep(1); + } + }catch (\Throwable $e){ + // 异常不进行处理 } return $handler->handle($request); diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index 8be6bb1..145f177 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -31,6 +31,8 @@ use App\Model\OrderPrescriptionFile; use App\Model\OrderPrescriptionIcd; use App\Model\OrderPrescriptionProduct; use App\Model\OrderProductItem; +use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageInquiry; use App\Model\PatientFollow; use App\Model\PatientHistoryInquiry; use App\Model\PatientHistoryInquiry as PatientHistoryInquiryModel; @@ -1814,21 +1816,6 @@ class UserDoctorService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "接诊失败"); } - try { - $redis = $this->container->get(Redis::class); - $redis_key = "order_inquiry_lock_" . $order_inquiry_id; - $redis_lock = $redis->setnx($redis_key,1); - if (!$redis_lock){ - // 设置失败,表示已经设置该值 - return fail(HttpEnumCode::HTTP_SUCCESS,"请您稍后重试"); - } - - // 设置过期时间 - $redis->expire($redis_key,3); - }catch (\Throwable $e){ - return fail(HttpEnumCode::HTTP_SUCCESS,"请您稍后重试"); - } - if ($order_inquiry['inquiry_status'] == 4) { // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) return success(); @@ -1885,12 +1872,39 @@ class UserDoctorService extends BaseService $params['order_inquiry_id'] = $order_inquiry_id; OrderInquiry::edit($params,$data); - /** - * 获取订单结束周期 - * 疑难问诊为自己配置周期。 - */ - // 疑难问诊 + // 处理服务包订单 + if ($order_inquiry['inquiry_type'] == 1){ + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取关联服务包订单 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (empty($order_service_package_inquiry)){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "接诊失败"); + } + + // 开始服务时间 + $start_time = date('Y-m-d H:i:s',time()); + + // 结束服务时间 + $finish_time = date('Y-m-d H:i:s', strtotime('+90 days', $start_time)); + + // 修改服务包 + $data = array(); + $data['order_service_status'] = 3; // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + $data['start_time'] = $start_time; + $data['finish_time'] = $finish_time; + + $params = array(); + $params['order_service_id'] = $order_service_package_inquiry['order_service_id']; + OrderServicePackage::edit($params,$data); + } + } + + // 获取订单持续时长 if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 6){ + // 疑难问诊为自己配置周期。 $params = array(); $params['doctor_id'] = $order_inquiry['doctor_id']; $params['inquiry_type'] = $order_inquiry['inquiry_type']; @@ -1918,8 +1932,6 @@ class UserDoctorService extends BaseService return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } - // 删除锁 - $redis->del($redis_key); Db::commit(); } catch (\Exception $e) { Db::rollBack(); diff --git a/config/routes.php b/config/routes.php index 0c5ee39..3542b7e 100644 --- a/config/routes.php +++ b/config/routes.php @@ -157,7 +157,11 @@ Router::addGroup('/doctor', function () { Router::post('/message/attr', [UserDoctorController::class, 'getDoctorMessageAttrList']); // 医生接诊 - Router::post('/{order_inquiry_id:\d+}', [UserDoctorController::class, 'addDoctorInquiry']); + Router::post('/{order_inquiry_id:\d+}', [UserDoctorController::class, 'addDoctorInquiry'], + [ + 'middleware' => [LockRequestMiddleware::class] // 锁定重复请求 + ] + ); // 结束问诊会话列表 Router::get('/finish/message', [InquiryController::class, 'getDoctorFinishMessageList']);