puzhibing
2025-01-13 acccff9860b271d55c55dc87486f7c20b9896e6c
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RedPackegeSetController.java
@@ -4,6 +4,7 @@
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.RedPackegeSet;
import com.ruoyi.other.dto.RedPackegeSetDto;
import com.ruoyi.other.service.RedPackegeSetService;
import io.swagger.annotations.ApiOperation;
import org.springframework.transaction.annotation.Transactional;
@@ -12,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;
/**
@@ -47,8 +51,11 @@
     */
    @ApiOperation(value = "获取红包配置", tags = {"管理后台-活动管理-签到红包"})
    @GetMapping("/getRedPackegeSet")
    public R<RedPackegeSet> getRedPackegeSet(){
        return R.ok(redPackegeSetService.getOne(null));
    public R<RedPackegeSetDto> getRedPackegeSet(){
        List<RedPackegeSet> redPackegeSetList = redPackegeSetService.list();
        RedPackegeSetDto redPackegeSetDto = new RedPackegeSetDto();
        redPackegeSetDto.setRedPackegeSets(redPackegeSetList);
        return R.ok(redPackegeSetDto);
    }
@@ -58,19 +65,13 @@
    @ApiOperation(value = "添加红包配置", tags = {"管理后台-活动管理-签到红包"})
    @PostMapping("/addRedPackegeSet")
    @Transactional(rollbackFor = Exception.class)
    public R<Void> addRedPackegeSet(@RequestBody List<RedPackegeSet> redPackegeSets){
        for (RedPackegeSet redPackegeSet : redPackegeSets) {
            RedPackegeSet one = redPackegeSetService.getOne(null);
            if (one==null){
                redPackegeSet.setId(1);
                redPackegeSetService.save(redPackegeSet);
            }else {
                if (one.getId()==null){
                    return R.fail("参数错误");
                }
                redPackegeSetService.updateById(redPackegeSet);
            }
    public R<Void> addRedPackegeSet(@RequestBody RedPackegeSetDto redPackegeSets){
        List<RedPackegeSet> redPackegeSetList = redPackegeSets.getRedPackegeSets();
        if (hasOverlap(redPackegeSetList)) {
            return R.fail("时间段存在重叠,请重新配置");
        }
        redPackegeSetService.remove(null);
        redPackegeSetService.saveBatch(redPackegeSetList);
        return R.ok();
    }
@@ -84,5 +85,44 @@
        return R.ok();
    }
    public static 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;
    }
    public static void main(String[] args) {
        // 示例数据
        RedPackegeSet redPackegeSet = new RedPackegeSet();
        redPackegeSet.setStartTime(LocalDateTime.of(2025, 1, 13, 0, 0));
        redPackegeSet.setEndTime(LocalDateTime.of(2025, 1, 14, 0, 0));
        RedPackegeSet redPackegeSet2 = new RedPackegeSet();
        redPackegeSet2.setStartTime(LocalDateTime.of(2025, 1, 13, 0, 0));
        redPackegeSet2.setEndTime(LocalDateTime.of(2025, 1, 14, 0, 0));
        List<RedPackegeSet> redPackegeSetList = Arrays.asList(
                redPackegeSet,redPackegeSet2
        );
        boolean overlapExists = hasOverlap(redPackegeSetList);
        System.out.println("是否存在重叠: " + overlapExists);
    }
}