From 4c477ce5734ae7f0eb3d33a4340fa1065438b377 Mon Sep 17 00:00:00 2001 From: wucongxing <815046773@qq.com> Date: Mon, 8 May 2023 19:27:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=99=90=E5=88=B6=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E8=AF=B7=E6=B1=82=E4=B8=AD=E9=97=B4=E4=BB=B6=E3=80=81?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8C=BB=E7=94=9F=E6=8F=90=E7=8E=B0=E4=B8=AD?= =?UTF-8?q?=E9=97=B4=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Middleware/Rule/LockRequestMiddleware.php | 48 +++++++++++++++++++ config/routes.php | 7 ++- 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 app/Middleware/Rule/LockRequestMiddleware.php diff --git a/app/Middleware/Rule/LockRequestMiddleware.php b/app/Middleware/Rule/LockRequestMiddleware.php new file mode 100644 index 0000000..5cfcb05 --- /dev/null +++ b/app/Middleware/Rule/LockRequestMiddleware.php @@ -0,0 +1,48 @@ +getAttribute("userInfo"); + if (empty($user_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); + } + + return $handler->handle($request); + } +} diff --git a/config/routes.php b/config/routes.php index 1b13fa3..81f36f5 100644 --- a/config/routes.php +++ b/config/routes.php @@ -32,6 +32,7 @@ use App\Controller\UserController; use App\Controller\UserDoctorController; use App\Controller\UserPatientController; use App\Controller\UserPharmacistController; +use App\Middleware\Rule\LockRequestMiddleware; use App\Services\SafeService; use Hyperf\HttpServer\Router\Router; @@ -137,7 +138,11 @@ Router::addGroup('/doctor', function () { Router::get('/record', [DoctorAccountController::class, 'getDoctorWithdrawalRecordList']); // 发起提现 - Router::post('', [DoctorAccountController::class, 'addDoctorWithdrawal']); + Router::post('', [DoctorAccountController::class, 'addDoctorWithdrawal'], + [ + 'middleware' => [LockRequestMiddleware::class] // 锁定重复请求 + ] + ); }); // 订单