补偿机制

This commit is contained in:
wangw 2024-12-27 16:15:48 +08:00
parent 3a15793bfb
commit fae9df231c
2 changed files with 69 additions and 4 deletions

View File

@ -31,7 +31,7 @@ import springfox.documentation.annotations.ApiIgnore;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.*;
@Slf4j
@RestController
@ -47,6 +47,7 @@ public class DiscSpinningController {
private final TaskCenterRecordService taskRecordService;
private final UserService userService;
private final RedisUtils redisUtils;
ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);
@Autowired
public DiscSpinningController(CommonInfoService commonRepository, DiscSpinningService discSpinningService,
OrdersService ordersService, DiscSpinningRecordService recordService,
@ -219,14 +220,24 @@ public class DiscSpinningController {
}
redisUtils.set(redisKey, week, DateUtils.todayAfterSecond());
}
return new Result().put("data",
discSpinningService.draws(i == null ? 1 : i + 1, amount, sourceId, userId, source));
DiscSpinningRecord draws = discSpinningService.draws(i == null ? 1 : i + 1, amount, sourceId, userId, source);
try {
executor.schedule(() -> receive1(draws), 4, TimeUnit.SECONDS);
}finally {
executor.shutdown();
}
return new Result().put("data", draws);
}
@ApiOperation("大转盘奖项领取")
@Debounce(interval = 3000, value = "#receive.id")
@Debounce(interval = 5000, value = "#receive.id")
@PostMapping("/app/discSpinning/receive")
public Result receive(@RequestBody DiscSpinningRecord receive) {
return Result.success().put("data", 1);
}
public Result receive1(@RequestBody DiscSpinningRecord receive) {
DiscSpinningRecord record = recordService.getById(receive.getId());
if (record.getTargetId() != null) {
return Result.error("不可重复领取");
@ -243,5 +254,6 @@ public class DiscSpinningController {
}
return Result.success().put("data", res);
}
}

View File

@ -0,0 +1,53 @@
package com.sqx.modules.job.task;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sqx.modules.discSpinning.controller.DiscSpinningController;
import com.sqx.modules.discSpinning.entity.DiscSpinning;
import com.sqx.modules.discSpinning.entity.DiscSpinningRecord;
import com.sqx.modules.discSpinning.service.DiscSpinningRecordService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
@Component("SpinningTask3")
public class SpinningTask3 implements ITask {
@Resource
private DiscSpinningController spinningController;
@Resource
private DiscSpinningRecordService recordService;
private Logger logger = LoggerFactory.getLogger(getClass());
@Override
public void run(String params) {
logger.info("大转盘到账补偿机制");
// 获取当前时间
Date now = DateUtil.date();
// 获取五分钟前的时间
Date fiveMinutesAgo = DateUtil.offsetMinute(now, -5);
Date tenMinutesAgo = DateUtil.offsetMinute(now, -10);
// 将五分钟前的时间转换为指定格式的时间字符串这里采用常见的"yyyy-MM-dd HH:mm:ss"格式
String fiveMinutesAgoStr = DateUtil.format(fiveMinutesAgo, "yyyy-MM-dd HH:mm:ss");
String tenMinutesAgoStr = DateUtil.format(tenMinutesAgo, "yyyy-MM-dd HH:mm:ss");
QueryWrapper<DiscSpinningRecord> recordQueryWrapper = new QueryWrapper<>();
recordQueryWrapper.isNull("target");
recordQueryWrapper.isNull("target_id");
recordQueryWrapper.eq("type",2);
//大于
recordQueryWrapper.gt("create_time",fiveMinutesAgoStr);
//小于
recordQueryWrapper.lt("create_time", tenMinutesAgoStr);
List<DiscSpinningRecord> list = recordService.list(recordQueryWrapper);
for (DiscSpinningRecord record : list) {
spinningController.receive1(record);
}
logger.info("大转盘到账补偿机制");
}
}