mitao
2024-05-31 d5cd5518fb4c9ec771dbf3d8db691fef36d18a45
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/async/AsyncMethodService.java
@@ -10,6 +10,7 @@
import com.ruoyi.system.api.feignClient.SysUserClient;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;
import java.util.concurrent.TimeUnit;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -31,7 +32,8 @@
    @Async
    @Transactional(rollbackFor = Exception.class)
    public void seckillScheduleTask(GoodsSeckill goodsSeckill) {
    public void seckillScheduleTask(List<GoodsSeckill> goodsSeckillList) {
        for (GoodsSeckill goodsSeckill : goodsSeckillList) {
        LocalDateTime startTime = goodsSeckill.getStartTime();
        LocalDateTime endTime = goodsSeckill.getEndTime();
        //秒杀在一小时内开始
@@ -48,30 +50,33 @@
            log.info(">>>>>>>>>>>>>>>>>>>>秒杀商品:{} 开始秒杀<<<<<<<<<<<<<<<<<<<<", id);
            //秒杀结束延时任务
            handleEndDelayTask(id, DelayTaskEnum.SECKILL_END_TASK, endTime);
            }
        }
    }
    @Async
    @Transactional(rollbackFor = Exception.class)
    public void groupPurchaseScheduleTask(GoodsGroupPurchase groupPurchase) {
        LocalDateTime startTime = groupPurchase.getStartTime();
        LocalDateTime endTime = groupPurchase.getEndTime();
        //秒杀在一小时内开始
    public void groupPurchaseScheduleTask(List<GoodsGroupPurchase> groupPurchaseList) {
        for (GoodsGroupPurchase goodsGroupPurchase : groupPurchaseList) {
            LocalDateTime startTime = goodsGroupPurchase.getStartTime();
            LocalDateTime endTime = goodsGroupPurchase.getEndTime();
            // 团购在一小时内开始
        if (isWithinOneHour(startTime)) {
            Long id = groupPurchase.getId();
            //秒杀已经开始,三秒后执行
                Long id = goodsGroupPurchase.getId();
                // 团购已经开始,三秒后执行
            if (LocalDateTime.now().isAfter(startTime)) {
                handleStartDelayTask(id, DelayTaskEnum.GROUP_PURCHASES_START_TASK, startTime, 3L);
                    handleStartDelayTask(id, DelayTaskEnum.GROUP_PURCHASES_START_TASK, startTime,
                            3L);
            } else {
                Duration duration = Duration.between(LocalDateTime.now(), startTime);
                handleStartDelayTask(id, DelayTaskEnum.GROUP_PURCHASES_START_TASK, startTime,
                        duration.getSeconds());
            }
            //秒杀结束延时任务
                // 团购结束延时任务
            handleEndDelayTask(id, DelayTaskEnum.GROUP_PURCHASES_END_TASK, endTime);
        }
    }
    }
    private boolean isWithinOneHour(LocalDateTime startTime) {
        LocalDateTime checkTime = LocalDateTime.now().plusHours(1);