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();
}
}