新增限制重复请求中间件、新增医生提现中间件

This commit is contained in:
wucongxing 2023-05-08 19:27:12 +08:00
parent d09f53fd49
commit 4c477ce573
2 changed files with 54 additions and 1 deletions

View File

@ -0,0 +1,48 @@
<?php
declare(strict_types=1);
namespace App\Middleware\Rule;
use Hyperf\Redis\Redis;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
/**
* 锁定重复请求
*/
class LockRequestMiddleware implements MiddlewareInterface
{
public function __construct(protected ContainerInterface $container)
{
}
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
$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);
}
$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);
}
}

View File

@ -32,6 +32,7 @@ use App\Controller\UserController;
use App\Controller\UserDoctorController; use App\Controller\UserDoctorController;
use App\Controller\UserPatientController; use App\Controller\UserPatientController;
use App\Controller\UserPharmacistController; use App\Controller\UserPharmacistController;
use App\Middleware\Rule\LockRequestMiddleware;
use App\Services\SafeService; use App\Services\SafeService;
use Hyperf\HttpServer\Router\Router; use Hyperf\HttpServer\Router\Router;
@ -137,7 +138,11 @@ Router::addGroup('/doctor', function () {
Router::get('/record', [DoctorAccountController::class, 'getDoctorWithdrawalRecordList']); Router::get('/record', [DoctorAccountController::class, 'getDoctorWithdrawalRecordList']);
// 发起提现 // 发起提现
Router::post('', [DoctorAccountController::class, 'addDoctorWithdrawal']); Router::post('', [DoctorAccountController::class, 'addDoctorWithdrawal'],
[
'middleware' => [LockRequestMiddleware::class] // 锁定重复请求
]
);
}); });
// 订单 // 订单