| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- 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;
- /**
- * <p>
- * 前端控制器
- * </p>
- *
- * @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<SmartLateSetting> smartLateSettingList = smartLateSettingService.list(new QueryWrapper<>());
- ArrayList<SmartLateSettingVo> vos = new ArrayList<SmartLateSettingVo>();
- 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<SmartLateTime> wrapper = new LambdaQueryWrapper<>();
- wrapper.eq(SmartLateTime::getSmartLateSettingId, smartLateSetting.getId());
- List<SmartLateTime> 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<SmartLateSetting> 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<SmartLateTime> lateTimes1 = dto.getLateTimes();
- List<TimeSlot> 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<SmartLateTime> lateTimes = dto.getLateTimes();
- // 先删除迟到时间配置
- LambdaQueryWrapper<SmartLateTime> 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<SmartLateTime> 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<TimeSlot> 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<SmartLateTime> wrapper = new LambdaQueryWrapper<>();
- wrapper.eq(SmartLateTime::getSmartLateSettingId, smartLateSetting.getId());
- smartLateTimeService.remove(wrapper);
- smartLateSettingService.removeById(id);
- return CommonResult.ok();
- }
- }
|