SmartLateSettingController.java 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. package com.template.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  5. import com.template.annotation.DESRespondSecret;
  6. import com.template.api.SmartLateSettingControllerAPI;
  7. import com.template.common.utils.TimeSlot;
  8. import com.template.model.dto.SmartLateSettingDto;
  9. import com.template.model.pojo.SmartLateSetting;
  10. import com.template.model.pojo.SmartLateTime;
  11. import com.template.model.result.CommonResult;
  12. import com.template.model.vo.SmartLateSettingVo;
  13. import com.template.services.SmartLateSettingService;
  14. import com.template.services.SmartLateTimeService;
  15. import org.springframework.beans.BeanUtils;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.web.bind.annotation.RestController;
  18. import java.time.LocalDate;
  19. import java.time.LocalDateTime;
  20. import java.time.ZoneId;
  21. import java.time.format.DateTimeFormatter;
  22. import java.util.ArrayList;
  23. import java.util.Date;
  24. import java.util.List;
  25. import java.util.Objects;
  26. /**
  27. * <p>
  28. * 前端控制器
  29. * </p>
  30. *
  31. * @author ceshi
  32. * @since 2025-02-18
  33. */
  34. @RestController
  35. public class SmartLateSettingController implements SmartLateSettingControllerAPI {
  36. @Autowired
  37. SmartLateSettingService smartLateSettingService;
  38. @Autowired
  39. SmartLateTimeService smartLateTimeService;
  40. @Override
  41. @DESRespondSecret(validated = true)
  42. public CommonResult getList() {
  43. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  44. List<SmartLateSetting> smartLateSettingList = smartLateSettingService.list(new QueryWrapper<>());
  45. ArrayList<SmartLateSettingVo> vos = new ArrayList<SmartLateSettingVo>();
  46. for (SmartLateSetting smartLateSetting : smartLateSettingList) {
  47. SmartLateSettingVo smartLateSettingVo = new SmartLateSettingVo();
  48. BeanUtils.copyProperties(smartLateSetting, smartLateSettingVo);
  49. Date createTime = smartLateSetting.getCreateTime();
  50. LocalDateTime localDateTime = LocalDateTime.ofInstant(createTime.toInstant(), ZoneId.systemDefault());
  51. smartLateSettingVo.setCreateTime(localDateTime.format(dateTimeFormatter1));
  52. if (ObjectUtils.isNotEmpty(smartLateSetting)) {
  53. LambdaQueryWrapper<SmartLateTime> wrapper = new LambdaQueryWrapper<>();
  54. wrapper.eq(SmartLateTime::getSmartLateSettingId, smartLateSetting.getId());
  55. List<SmartLateTime> list = smartLateTimeService.list(wrapper);
  56. smartLateSettingVo.setLateTimes(list);
  57. vos.add(smartLateSettingVo);
  58. }
  59. }
  60. return CommonResult.ok(vos);
  61. }
  62. @Override
  63. @DESRespondSecret(validated = true)
  64. public CommonResult saveOrUpdate(SmartLateSettingDto dto) {
  65. Integer id = dto.getId();
  66. // 先判断改时间内是否包含其他时间
  67. String startTime = dto.getStartTime();
  68. String endTime = dto.getEndTime();
  69. List<SmartLateSetting> list = smartLateSettingService.getOverlap(startTime,endTime);
  70. if (ObjectUtils.isNotEmpty(list)) {
  71. if (ObjectUtils.isEmpty(id)) {
  72. return CommonResult.fail("运行周期已重复");
  73. }
  74. for (SmartLateSetting smartLateSetting : list) {
  75. Integer id1 = smartLateSetting.getId();
  76. if (!id1.equals(id)) {
  77. return CommonResult.fail("运行周期已重复");
  78. }
  79. }
  80. }
  81. // 迟到设置时间也不能重叠
  82. List<SmartLateTime> lateTimes1 = dto.getLateTimes();
  83. List<TimeSlot> slots = new ArrayList<>();
  84. // 获取当前日期
  85. LocalDate currentDate = LocalDate.now();
  86. DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  87. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  88. String time = currentDate.format(dateTimeFormatter2);
  89. for (SmartLateTime smartLateTime : lateTimes1) {
  90. String startTime1 = smartLateTime.getStartTime();
  91. String endTime1 = smartLateTime.getEndTime();
  92. LocalDateTime dateTime = LocalDateTime.parse(time + " " + startTime1, dateTimeFormatter1);
  93. LocalDateTime dateTime2 = LocalDateTime.parse(time + " " + endTime1, dateTimeFormatter1);
  94. TimeSlot timeSlot = new TimeSlot(dateTime,dateTime2);
  95. slots.add(timeSlot);
  96. }
  97. for (int i = 0; i < slots.size(); i++) {
  98. for (int j = i + 1; j < slots.size(); j++) {
  99. if (TimeSlot.overlaps(slots.get(i), slots.get(j))) {
  100. return CommonResult.fail("迟到时间已重复");
  101. }
  102. }
  103. }
  104. if (ObjectUtils.isNotEmpty(id)) {
  105. SmartLateSetting smartLateSetting = smartLateSettingService.getById(id);
  106. if (ObjectUtils.isEmpty(smartLateSetting)) {
  107. return CommonResult.fail("不存在该配置");
  108. }
  109. smartLateSetting.setStartTime(dto.getStartTime());
  110. smartLateSetting.setEndTime(dto.getEndTime());
  111. smartLateSetting.setSmartDeviceId(dto.getSmartDeviceId());
  112. smartLateSetting.setName(dto.getName());
  113. smartLateSettingService.updateById(smartLateSetting);
  114. List<SmartLateTime> lateTimes = dto.getLateTimes();
  115. // 先删除迟到时间配置
  116. LambdaQueryWrapper<SmartLateTime> wrapper = new LambdaQueryWrapper<>();
  117. wrapper.eq(SmartLateTime::getSmartLateSettingId, smartLateSetting.getId());
  118. smartLateTimeService.remove(wrapper);
  119. smartLateTimeService.saveBatch(lateTimes);
  120. return CommonResult.ok();
  121. } else {
  122. SmartLateSetting smartLateSetting = new SmartLateSetting();
  123. smartLateSetting.setStartTime(dto.getStartTime());
  124. smartLateSetting.setEndTime(dto.getEndTime());
  125. smartLateSetting.setSmartDeviceId(dto.getSmartDeviceId());
  126. smartLateSetting.setName(dto.getName());
  127. smartLateSettingService.save(smartLateSetting);
  128. List<SmartLateTime> lateTimes = dto.getLateTimes();
  129. for (int i = 0; i < lateTimes.size(); i++) {
  130. SmartLateTime smartLateTime = lateTimes.get(i);
  131. smartLateTime.setSmartLateSettingId(smartLateSetting.getId());
  132. }
  133. smartLateTimeService.saveBatch(lateTimes);
  134. return CommonResult.ok();
  135. }
  136. }
  137. public static void main(String[] args) {
  138. List<TimeSlot> slots = new ArrayList<>();
  139. slots.add(new TimeSlot(LocalDateTime.of(2023, 1, 1, 9, 0), LocalDateTime.of(2023, 1, 1, 12, 0))); // 9am to 12pm
  140. slots.add(new TimeSlot(LocalDateTime.of(2023, 1, 1, 13, 0), LocalDateTime.of(2023, 1, 1, 15, 0))); // 1pm to 3pm
  141. slots.add(new TimeSlot(LocalDateTime.of(2023, 1, 1, 14, 0), LocalDateTime.of(2023, 1, 1, 16, 0))); // 2pm to 4pm
  142. slots.add(new TimeSlot(LocalDateTime.of(2023, 1, 1, 8, 0), LocalDateTime.of(2023, 1, 1, 9, 30))); // 8am to 9:30am
  143. boolean hasOverlap = false;
  144. for (int i = 0; i < slots.size(); i++) {
  145. for (int j = i + 1; j < slots.size(); j++) {
  146. if (TimeSlot.overlaps(slots.get(i), slots.get(j))) {
  147. System.out.println("Overlap found between " + slots.get(i).getStartTime() + " and " + slots.get(j).getStartTime());
  148. hasOverlap = true;
  149. }
  150. }
  151. }
  152. if (!hasOverlap) {
  153. System.out.println("No overlap found.");
  154. }
  155. }
  156. @Override
  157. @DESRespondSecret(validated = true)
  158. public CommonResult delete(Integer id) {
  159. SmartLateSetting smartLateSetting = smartLateSettingService.getById(id);
  160. if (ObjectUtils.isEmpty(smartLateSetting)) {
  161. return CommonResult.fail("不存在该配置");
  162. }
  163. // 先删除迟到时间配置
  164. LambdaQueryWrapper<SmartLateTime> wrapper = new LambdaQueryWrapper<>();
  165. wrapper.eq(SmartLateTime::getSmartLateSettingId, smartLateSetting.getId());
  166. smartLateTimeService.remove(wrapper);
  167. smartLateSettingService.removeById(id);
  168. return CommonResult.ok();
  169. }
  170. }