新增限制重复请求中间件、新增医生提现中间件
This commit is contained in:
parent
d09f53fd49
commit
4c477ce573
48
app/Middleware/Rule/LockRequestMiddleware.php
Normal file
48
app/Middleware/Rule/LockRequestMiddleware.php
Normal 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);
|
||||
}
|
||||
}
|
||||
@ -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] // 锁定重复请求
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
// 订单
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user