From f23b02fe51e31e509decbf88dab666f7087e30bf Mon Sep 17 00:00:00 2001 From: dy <2389062315@qq.com> Date: Wed, 20 Aug 2025 22:08:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E6=8E=92=E7=8F=AD=E8=B7=A8?= =?UTF-8?q?=E6=9C=88=E4=B8=94=E8=A6=86=E7=9B=96=E5=BD=93=E6=9C=88=E6=9C=80?= =?UTF-8?q?=E5=90=8E=E4=B8=80=E5=A4=A9=E7=9A=84=E6=83=85=E5=86=B5=EF=BC=8C?= =?UTF-8?q?=E5=A6=82=E6=8E=92=E7=8F=AD=E4=BB=8E=E5=BD=93=E6=9C=88=E5=BC=80?= =?UTF-8?q?=E5=A7=8B=EF=BC=8C=E4=B8=8B=E4=B8=AA=E6=9C=88=E7=BB=93=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/AttendanceArrangementMapper.java | 7 +++ .../AttendanceArrangementServiceImpl.java | 43 ++++++++++++++++--- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceArrangementMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceArrangementMapper.java index 9940f93d..f8f409e7 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceArrangementMapper.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceArrangementMapper.java @@ -22,6 +22,13 @@ public interface AttendanceArrangementMapper extends BaseMapperPlus selectArrangementList(LocalDate calendarStartDate, LocalDate calendarEndTimeDate); + @Select("SELECT id, schedule_name, group_id, schedule_type, date_type, start_date, end_date, status, tenant_id, create_dept, create_by, create_time, update_by, update_time FROM attendance_arrangement WHERE (SELECT DATE_FORMAT(CURDATE(), '%Y-%m-01') BETWEEN start_date AND end_date) AND tenant_id = '000000';") + List selectCalendarStartList(); + + @Select("SELECT id, schedule_name, group_id, schedule_type, date_type, start_date, end_date, status, tenant_id, create_dept, create_by, create_time, update_by, update_time FROM attendance_arrangement WHERE (SELECT LAST_DAY(CURDATE()) BETWEEN start_date AND end_date) AND tenant_id = '000000';") + List selectCalendarEndDateList(); + + // List selectArrangementList(AttendanceArrangementBo bo); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java index 743b0e1b..0c8b54f2 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.property.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; @@ -23,6 +24,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; +import java.time.Month; import java.time.ZoneId; import java.util.*; import java.util.stream.Collectors; @@ -331,7 +333,8 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS LocalDate calendarStartDate = month.withDayOfMonth(1); LocalDate calendarEndDate = month.withDayOfMonth(calendarStartDate.lengthOfMonth()); - //使用mybatisplus的between查询在calendarStartDate和calendarEndDate之间的排班信息 + //判断 + //查询开始时间在calendarStartDate和calendarEndDate之间的排班信息 List startResult = baseMapper.selectVoList(Wrappers.lambdaQuery() .between(AttendanceArrangement::getStartDate, calendarStartDate.atStartOfDay(ZoneId.systemDefault()).toInstant(), calendarEndDate.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1))); @@ -341,7 +344,13 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS .between(AttendanceArrangement::getEndDate, calendarStartDate.atStartOfDay(ZoneId.systemDefault()).toInstant(), calendarEndDate.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1))); - //合并两个list,并去重 + //查询日历开始时间calendarStartDate在排班开始时间和结束时间之间的信息(处理排班跨月且覆盖当月最后一天的情况,如排班从当月开始,下个月结束) + List attendanceCalendarStartVos = baseMapper.selectCalendarStartList(); + + //查询日历结束时间calendarStartDate在排班开始时间和结束时间之间的信息(处理排班跨月且覆盖当月最后一天的情况,如排班从当月开始,下个月结束) + List attendanceCalendarEndDateVos = baseMapper.selectCalendarEndDateList(); + + //合并四个list,并去重 List result = new ArrayList<>(startResult.stream().distinct().toList()); result.addAll(endResult.stream().map(vo -> { AttendanceArrangementVo newVo = MapstructUtils.convert(vo, AttendanceArrangementVo.class); @@ -349,6 +358,17 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS newVo.setEndDate(vo.getEndDate()); return newVo; }).toList()); + result.addAll(attendanceCalendarStartVos.stream().distinct().toList()); + result.addAll(attendanceCalendarEndDateVos.stream().distinct().toList()); + +// //合并两个list,并去重 +// List result = new ArrayList<>(startResult.stream().distinct().toList()); +// result.addAll(endResult.stream().map(vo -> { +// AttendanceArrangementVo newVo = MapstructUtils.convert(vo, AttendanceArrangementVo.class); +// newVo.setStartDate(vo.getStartDate()); +// newVo.setEndDate(vo.getEndDate()); +// return newVo; +// }).toList()); //去掉result中id重复的排班信息 result = result.stream().distinct().toList(); @@ -493,13 +513,13 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS public Boolean insertByBo(AttendanceArrangementBo bo) { //新增排班 AttendanceArrangement add = MapstructUtils.convert(bo, AttendanceArrangement.class); + + judgeDate(bo, add); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); } - - judgeDate(bo, add); //取出当前新增的排班的id Long ArrangementId = add.getId(); List areaId = bo.getAreaId(); @@ -518,7 +538,20 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS for (AttendanceUserGroup userGroup : userGroupList) { userGroup.setScheduleId(ArrangementId); userGroup.setStartDate(bo.getStartDate()); - userGroup.setEndDate(bo.getEndDate()); + //判断排班日期是单个日期还是从此日期开始循环有效还是从此日期开始有效 + //1.单个日期 + if (bo.getDateType().equals(StatusConstant.SINGLE)) { + userGroup.setEndDate(null); + } + //2.从此日期开始长期有效 + if (bo.getDateType().equals(StatusConstant.LONGTIME)) { + //设置长期时间为2099年12月31日 + LocalDate longTimeEndDate = LocalDate.of(2099, 12, 31); + userGroup.setEndDate(longTimeEndDate); + } + if (bo.getDateType().equals(StatusConstant.SHORTTIME)) { + userGroup.setEndDate(bo.getEndDate()); + } userGroupMapper.insert(userGroup); }