防抖
This commit is contained in:
@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.google.common.util.concurrent.RateLimiter;
|
||||
import com.sqx.common.annotation.Debounce;
|
||||
import com.sqx.common.utils.DateUtils;
|
||||
import com.sqx.common.utils.Result;
|
||||
import com.sqx.modules.app.annotation.Login;
|
||||
@@ -42,6 +43,7 @@ import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@@ -59,9 +61,6 @@ public class DiscSpinningController {
|
||||
private final CashOutService cashOutService;
|
||||
private final TaskCenterService taskCenterService;
|
||||
|
||||
// 以id为键,对应的RateLimiter实例为值,用于不同id的防抖控制
|
||||
private static final ConcurrentHashMap<Long, RateLimiter> rateLimiterMap = new ConcurrentHashMap<>();
|
||||
|
||||
|
||||
@Autowired
|
||||
public DiscSpinningController(CommonInfoService commonRepository, DiscSpinningService discSpinningService,
|
||||
@@ -196,29 +195,23 @@ public class DiscSpinningController {
|
||||
draws(amount, orderId, userId, maps == null || maps.get("source") == null ? "order" : maps.get("source").toString()));
|
||||
}
|
||||
|
||||
@PostMapping("/app/discSpinning/receive")
|
||||
@ApiOperation("大转盘奖项领取")
|
||||
@Debounce(interval = 3000, value = "#receive.id")
|
||||
@PostMapping("/app/discSpinning/receive")
|
||||
public Result receive(@RequestBody DiscSpinningRecord receive) {
|
||||
// 每秒允许0.6次操作
|
||||
RateLimiter rateLimiter = rateLimiterMap.computeIfAbsent(receive.getId(), k -> RateLimiter.create(0.6));
|
||||
if (rateLimiter.tryAcquire()) {
|
||||
CompletableFuture.runAsync(() -> {
|
||||
DiscSpinningRecord record = recordService.getById(receive.getId());
|
||||
CompletableFuture.runAsync(() -> {
|
||||
receiveAsync(record);
|
||||
});
|
||||
});
|
||||
return Result.success();
|
||||
}
|
||||
return Result.error("操作过于频繁,请稍后再试");
|
||||
DiscSpinningRecord record = recordService.getById(receive.getId());
|
||||
CompletableFuture.runAsync(() -> {
|
||||
receiveAsync(record);
|
||||
});
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void receiveAsync(DiscSpinningRecord receive) {
|
||||
UserEntity userInfo = userService.queryByUserId(receive.getUserId());
|
||||
UserMoneyDetails userMoneyDetails = new UserMoneyDetails(
|
||||
receive.getUserId(),null,null,"[现金大转盘]",5,1,2,
|
||||
receive.getNumber(),"现金红包奖励" + receive.getNumber() + "元");
|
||||
receive.getUserId(), null, null, "[现金大转盘]", 5, 1, 2,
|
||||
receive.getNumber(), "现金红包奖励" + receive.getNumber() + "元");
|
||||
userMoneyDetailsService.save(userMoneyDetails);
|
||||
receive.setTarget("2");
|
||||
receive.setTargetId(userMoneyDetails.getId());
|
||||
@@ -247,8 +240,8 @@ public class DiscSpinningController {
|
||||
cashOut.setCreateAt(DateUtil.now());
|
||||
|
||||
UserMoneyDetails userMoneyDetails = new UserMoneyDetails(
|
||||
userInfo.getUserId(),null,null,"[现金大转盘]",4,2,1,
|
||||
new BigDecimal(money),"现金红包自动提现" + money + "元");
|
||||
userInfo.getUserId(), null, null, "[现金大转盘]", 4, 2, 1,
|
||||
new BigDecimal(money), "现金红包自动提现" + money + "元");
|
||||
userMoneyDetailsService.save(userMoneyDetails);
|
||||
//减去余额 钱
|
||||
userMoneyService.updateAmount(2, userInfo.getUserId(), money);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.sqx.modules.pay.controller.app;
|
||||
|
||||
|
||||
import com.sqx.common.annotation.Debounce;
|
||||
import com.sqx.common.utils.PageUtils;
|
||||
import com.sqx.common.utils.Result;
|
||||
import com.sqx.modules.app.annotation.Login;
|
||||
@@ -44,6 +45,7 @@ public class AppCashController {
|
||||
|
||||
@Login
|
||||
@GetMapping(value = "/withdraw")
|
||||
@Debounce(interval = 3000, value = "#userId")
|
||||
@ApiOperation("发起提现 余额 金钱")
|
||||
public Result withdraw(@RequestAttribute("userId") Long userId, Double amount) {
|
||||
return cashOutService.withdraw(userId, amount, false);
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.sqx.modules.taskCenter.controller;
|
||||
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.sqx.common.annotation.Debounce;
|
||||
import com.sqx.modules.app.annotation.Login;
|
||||
import com.sqx.modules.taskCenter.entity.TaskCenter;
|
||||
import com.sqx.modules.taskCenter.service.TaskCenterService;
|
||||
@@ -80,6 +81,7 @@ public class TaskCenterController {
|
||||
@ApiImplicitParam(name = "id", value = "任务id", dataTypeClass = Long.class),
|
||||
})
|
||||
@ApiOperation("App 任务中心 领取")
|
||||
@Debounce(interval = 1000, value = "#userId")
|
||||
public Result taskReceive(@ApiIgnore @RequestAttribute("userId") Long userId,Long id) {
|
||||
return taskCenterService.taskReceive(userId,id);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user