package com.template.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.template.annotation.DESRespondSecret; import com.template.api.SmartLateSettingControllerAPI; import com.template.common.utils.TimeSlot; import com.template.model.dto.SmartLateSettingDto; import com.template.model.pojo.SmartLateSetting; import com.template.model.pojo.SmartLateTime; import com.template.model.result.CommonResult; import com.template.model.vo.SmartLateSettingVo; import com.template.services.SmartLateSettingService; import com.template.services.SmartLateTimeService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; /** *

* 前端控制器 *

* * @author ceshi * @since 2025-02-18 */ @RestController public class SmartLateSettingController implements SmartLateSettingControllerAPI { @Autowired SmartLateSettingService smartLateSettingService; @Autowired SmartLateTimeService smartLateTimeService; @Override @DESRespondSecret(validated = true) public CommonResult getList() { DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); List smartLateSettingList = smartLateSettingService.list(new QueryWrapper<>()); ArrayList vos = new ArrayList(); for (SmartLateSetting smartLateSetting : smartLateSettingList) { SmartLateSettingVo smartLateSettingVo = new SmartLateSettingVo(); BeanUtils.copyProperties(smartLateSetting, smartLateSettingVo); Date createTime = smartLateSetting.getCreateTime(); LocalDateTime localDateTime = LocalDateTime.ofInstant(createTime.toInstant(), ZoneId.systemDefault()); smartLateSettingVo.setCreateTime(localDateTime.format(dateTimeFormatter1)); if (ObjectUtils.isNotEmpty(smartLateSetting)) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SmartLateTime::getSmartLateSettingId, smartLateSetting.getId()); List list = smartLateTimeService.list(wrapper); smartLateSettingVo.setLateTimes(list); vos.add(smartLateSettingVo); } } return CommonResult.ok(vos); } @Override @DESRespondSecret(validated = true) public CommonResult saveOrUpdate(SmartLateSettingDto dto) { Integer id = dto.getId(); // 先判断改时间内是否包含其他时间 String startTime = dto.getStartTime(); String endTime = dto.getEndTime(); List list = smartLateSettingService.getOverlap(startTime,endTime); if (ObjectUtils.isNotEmpty(list)) { if (ObjectUtils.isEmpty(id)) { return CommonResult.fail("运行周期已重复"); } for (SmartLateSetting smartLateSetting : list) { Integer id1 = smartLateSetting.getId(); if (!id1.equals(id)) { return CommonResult.fail("运行周期已重复"); } } } // 迟到设置时间也不能重叠 List lateTimes1 = dto.getLateTimes(); List slots = new ArrayList<>(); // 获取当前日期 LocalDate currentDate = LocalDate.now(); DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String time = currentDate.format(dateTimeFormatter2); for (SmartLateTime smartLateTime : lateTimes1) { String startTime1 = smartLateTime.getStartTime(); String endTime1 = smartLateTime.getEndTime(); LocalDateTime dateTime = LocalDateTime.parse(time + " " + startTime1, dateTimeFormatter1); LocalDateTime dateTime2 = LocalDateTime.parse(time + " " + endTime1, dateTimeFormatter1); TimeSlot timeSlot = new TimeSlot(dateTime,dateTime2); slots.add(timeSlot); } for (int i = 0; i < slots.size(); i++) { for (int j = i + 1; j < slots.size(); j++) { if (TimeSlot.overlaps(slots.get(i), slots.get(j))) { return CommonResult.fail("迟到时间已重复"); } } } if (ObjectUtils.isNotEmpty(id)) { SmartLateSetting smartLateSetting = smartLateSettingService.getById(id); if (ObjectUtils.isEmpty(smartLateSetting)) { return CommonResult.fail("不存在该配置"); } smartLateSetting.setStartTime(dto.getStartTime()); smartLateSetting.setEndTime(dto.getEndTime()); smartLateSetting.setSmartDeviceId(dto.getSmartDeviceId()); smartLateSetting.setName(dto.getName()); smartLateSettingService.updateById(smartLateSetting); List lateTimes = dto.getLateTimes(); // 先删除迟到时间配置 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SmartLateTime::getSmartLateSettingId, smartLateSetting.getId()); smartLateTimeService.remove(wrapper); smartLateTimeService.saveBatch(lateTimes); return CommonResult.ok(); } else { SmartLateSetting smartLateSetting = new SmartLateSetting(); smartLateSetting.setStartTime(dto.getStartTime()); smartLateSetting.setEndTime(dto.getEndTime()); smartLateSetting.setSmartDeviceId(dto.getSmartDeviceId()); smartLateSetting.setName(dto.getName()); smartLateSettingService.save(smartLateSetting); List lateTimes = dto.getLateTimes(); for (int i = 0; i < lateTimes.size(); i++) { SmartLateTime smartLateTime = lateTimes.get(i); smartLateTime.setSmartLateSettingId(smartLateSetting.getId()); } smartLateTimeService.saveBatch(lateTimes); return CommonResult.ok(); } } public static void main(String[] args) { List slots = new ArrayList<>(); slots.add(new TimeSlot(LocalDateTime.of(2023, 1, 1, 9, 0), LocalDateTime.of(2023, 1, 1, 12, 0))); // 9am to 12pm slots.add(new TimeSlot(LocalDateTime.of(2023, 1, 1, 13, 0), LocalDateTime.of(2023, 1, 1, 15, 0))); // 1pm to 3pm slots.add(new TimeSlot(LocalDateTime.of(2023, 1, 1, 14, 0), LocalDateTime.of(2023, 1, 1, 16, 0))); // 2pm to 4pm slots.add(new TimeSlot(LocalDateTime.of(2023, 1, 1, 8, 0), LocalDateTime.of(2023, 1, 1, 9, 30))); // 8am to 9:30am boolean hasOverlap = false; for (int i = 0; i < slots.size(); i++) { for (int j = i + 1; j < slots.size(); j++) { if (TimeSlot.overlaps(slots.get(i), slots.get(j))) { System.out.println("Overlap found between " + slots.get(i).getStartTime() + " and " + slots.get(j).getStartTime()); hasOverlap = true; } } } if (!hasOverlap) { System.out.println("No overlap found."); } } @Override @DESRespondSecret(validated = true) public CommonResult delete(Integer id) { SmartLateSetting smartLateSetting = smartLateSettingService.getById(id); if (ObjectUtils.isEmpty(smartLateSetting)) { return CommonResult.fail("不存在该配置"); } // 先删除迟到时间配置 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SmartLateTime::getSmartLateSettingId, smartLateSetting.getId()); smartLateTimeService.remove(wrapper); smartLateSettingService.removeById(id); return CommonResult.ok(); } }