luodangjia
2025-01-13 125372b36a4cce2b43ad39a583f28a0fb962c918
12.18
1个文件已修改
39 ■■■■ 已修改文件
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RedPackegeSetController.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RedPackegeSetController.java
@@ -13,6 +13,9 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
@@ -65,17 +68,8 @@
    public R<Void> addRedPackegeSet(@RequestBody RedPackegeSetDto redPackegeSets){
        redPackegeSetService.remove(null);
        List<RedPackegeSet> redPackegeSetList = redPackegeSets.getRedPackegeSets();
        for (int i = 0; i < redPackegeSetList.size(); i++) {
            RedPackegeSet redPackegeSet = redPackegeSetList.get(i);
            LocalDateTime startTime = redPackegeSet.getStartTime();
            LocalDateTime endTime = redPackegeSet.getEndTime();
            for (RedPackegeSet redPackegeSet1 : redPackegeSetList) {
                LocalDateTime startTime1 = redPackegeSet1.getStartTime();
                LocalDateTime endTime1 = redPackegeSet1.getEndTime();
                if (!(endTime.isBefore(startTime1) || startTime.isAfter(endTime1))) {
                    return R.fail("时间有重叠,请重新配置");
                }
            }
        if (hasOverlap(redPackegeSetList)) {
            R.fail("时间段存在重叠,请重新配置");
        }
        redPackegeSetService.saveBatch(redPackegeSetList);
        return R.ok();
@@ -91,5 +85,28 @@
        return R.ok();
    }
    private boolean hasOverlap(List<RedPackegeSet> redPackegeSetList) {
        // 首先根据startTime对列表进行排序
        Collections.sort(redPackegeSetList, Comparator.comparing(RedPackegeSet::getStartTime));
        // 然后检查是否存在重叠
        for (int i = 0; i < redPackegeSetList.size() - 1; i++) {
            RedPackegeSet current = redPackegeSetList.get(i);
            RedPackegeSet next = redPackegeSetList.get(i + 1);
            // 如果当前时间段的结束时间晚于或等于下一个时间段的开始时间,则存在重叠
            if (current.getEndTime().isAfter(next.getStartTime()) ||
                    current.getEndTime().isEqual(next.getStartTime())) {
                return true;
            }
        }
        return false;
    }
}