diff --git a/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java b/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java index cf6ca044..62e0bd9e 100644 --- a/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java +++ b/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java @@ -36,6 +36,7 @@ import com.sqx.modules.pay.wuyou.BaseResp; import com.sqx.modules.pay.wuyou.Encrypt; import com.sqx.modules.pay.wuyou.NotifyDto; import com.sqx.modules.pay.wuyou.WuyouPay; +import com.sqx.modules.redisService.RedisService; import com.sqx.modules.sys.entity.SysUserEntity; import com.sqx.modules.sys.service.SysUserService; import com.sqx.modules.utils.AliPayOrderUtil; @@ -74,12 +75,14 @@ public class WuyouController { private final CashOutDao cashOutDao; private final WuyouPay wuyouPay; private final TempOrdersTask ordersTask; + private final UserService userService; + private final RedisService redisService; @Resource private WuyouCallbackService wuyouCallbackService; WuyouController(OrdersService ordersService, PayDetailsDao payDetailsDao, CashOutDao cashOutDao, UserMoneyService userMoneyService, UserMoneyDetailsService userMoneyDetailsService, TempOrdersTask ordersTask, - WuyouPay wuyouPay) { + WuyouPay wuyouPay, UserService userService, RedisService redisService) { this.ordersService = ordersService; this.payDetailsDao = payDetailsDao; this.cashOutDao = cashOutDao; @@ -87,6 +90,8 @@ public class WuyouController { this.userMoneyDetailsService = userMoneyDetailsService; this.wuyouPay = wuyouPay; this.ordersTask = ordersTask; + this.userService = userService; + this.redisService = redisService; } @Debounce(interval = 1000, value = "#orderId") @@ -101,6 +106,9 @@ public class WuyouController { if (order.getStatus() != 0) { return Result.error("订单已支付"); } + if (redisService.setCreateOrderFlagAndCheckLimit(order.getUserId(), orderId)) { + userService.addBlackUser(order.getUserId(), "一分钟频繁下单超12次"); + } PayDetails payDetails = payDetailsDao.selectByOrderId(order.getOrdersNo()); if (payDetails == null) { diff --git a/src/main/java/com/sqx/modules/redisService/RedisService.java b/src/main/java/com/sqx/modules/redisService/RedisService.java index 8b33101f..f486f5ab 100644 --- a/src/main/java/com/sqx/modules/redisService/RedisService.java +++ b/src/main/java/com/sqx/modules/redisService/RedisService.java @@ -30,4 +30,6 @@ public interface RedisService { void setCanCashFlag(Long userId, Long id); boolean isCanCash(Long userId); + + boolean setCreateOrderFlagAndCheckLimit(Long userId, Long orderId); } diff --git a/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java b/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java index 2f551810..427c1f7e 100644 --- a/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java +++ b/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java @@ -342,4 +342,13 @@ public class RedisServiceImpl implements RedisService { String s = redisUtils.get(key); return StrUtil.isNotBlank(s); } + + @Override + public boolean setCreateOrderFlagAndCheckLimit(Long userId, Long orderId) { + String key = "createOrder:" + userId; + redisTemplate.opsForSet().add(key, orderId.toString()); + redisUtils.expire(key, 60); + Set members = redisTemplate.opsForSet().members(key); + return members != null && members.size() > 12; + } }