@@ -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 < AttendanceArrangementVo > startResult = baseMapper . selectVoList ( Wrappers . < AttendanceArrangement > 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 < AttendanceArrangementVo > attendanceCalendarStartVos = baseMapper . selectCalendarStartList ( ) ;
//查询日历结束时间calendarStartDate在排班开始时间和结束时间之间的信息( 处理排班跨月且覆盖当月最后一天的情况, 如排班从当月开始, 下个月结束)
List < AttendanceArrangementVo > attendanceCalendarEndDateVos = baseMapper . selectCalendarEndDateList ( ) ;
//合并四个list, 并去重
List < AttendanceArrangementVo > 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<AttendanceArrangementVo> 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 < Long > areaId = bo . getAreaId ( ) ;
@@ -518,7 +538,20 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
for ( AttendanceUserGroup userGroup : userGroupList ) {
userGroup . setScheduleId ( ArrangementId ) ;
userGroup . setStartDate ( bo . getStartDate ( ) ) ;
//判断排班日期是单个日期还是从此日期开始循环有效还是从此日期开始有效
//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 ) ;
}