@@ -43,6 +43,12 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
private final AttendanceArrangementGroupMapper arrangementGroupMapper ;
private final AttendanceWeekSetMapper weekSetMapper ;
private final AttendanceShiftMapper attendanceShiftMapper ;
private final AttendanceScheduleCycleMapper scheduleCycleMapper ;
/**
* 查询排班
*
@@ -62,7 +68,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
}
/**
* 分页查询排班列表
* 分页查询排班详情 列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
@@ -75,28 +81,80 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
Page < AttendanceArrangementVo > attendanceArrangementVoPage = result . setRecords ( result . getRecords ( ) . stream ( ) . peek ( vo - > {
//1.根据当前日期查询在开始时间和结束时间之间的排班信息
//查询指定日期在哪些排班中
List < AttendanceArrangement > arrangementList = baseMapper . selectList ( Wrappers . < AttendanceArrangement > lambdaQuery ( ) . ge ( AttendanceArrangement : : getStartDate , bo . getCurrentDate ( ) ) . le ( AttendanceArrangement : : getEndDate , bo . getCurrentDate ( ) ) ) ;
//根据排班查询出考勤组id
List < Long > groupIds = arrangementList . stream ( ) . map ( AttendanceArrangement : : getGroupId ) . distinct ( ) . toList ( ) ;
} ) . collect ( Collectors . toList ( ) ) ) ;
// 2.循环将所有的考勤组id设置到考勤组中
//循环groupIds, 循环和AttendanceGroup中的id做对比, 如果有相同的, 则取出attendanceGroup中的所有数据
groupIds . forEach (
groupId - > {
//从数据库查询出当前考勤组的所有数据
AttendanceGroup group = attendanceGroupMapper . selectOne ( Wrappers . < AttendanceGroup > lambdaQuery ( ) . eq ( AttendanceGroup : : getId , groupId ) ) ;
// 3.查询出当前考勤组的所有数据, 从考勤组判断当前id是固定班制还是排班制
if ( group . getAttendanceType ( ) . equals ( StatusConstant . FIXEDSCHEDULE ) ) {
// 3.1固定班制:将当前的日期转为周几,然后与数据库中的班次周数作对比,取出当前日期的班次信息
//将传来的日期参数转为周几
int week = DateUtil . dayOfWeek ( bo . getCurrentDate ( ) ) ;
//取出当前日期的周数,与数据库中的班次周数作对比,取出当前日期的班次信息
AttendanceWeekSet weekSet = weekSetMapper . selectOne ( Wrappers . < AttendanceWeekSet > lambdaQuery ( ) . eq ( AttendanceWeekSet : : getGroupId , groupId ) . eq ( AttendanceWeekSet : : getDayOfWeek , week ) ) ;
//将weekSet存到结果中
AttendanceArrangementVo arrangementVo = new AttendanceArrangementVo ( ) ;
arrangementVo . setWeekSet ( weekSet ) ;
//根据weekSet取出id, 根据id查询出attendanceWeekSetShift表中的shiftId
Long shiftId = weekSet . getId ( ) ;
//根据shiftId查询attendanceShift表中对应的id的数据
AttendanceShift shift = attendanceShiftMapper . selectById ( shiftId ) ;
//将shift存到结果中
arrangementVo . setShift ( shift ) ;
} else if ( group . getAttendanceType ( ) . equals ( StatusConstant . SHIFTSCHEDULE ) ) {
// 3.2排班制:判断第一天是从几号开始,循环判断,判断当前是循环中的第几天,取出当前天数的班次信息。
//取出排班中的开始时间和结束时间
Date startDate = bo . getStartDate ( ) ;
Date endDate = bo . getEndDate ( ) ;
Date currentDate = bo . getCurrentDate ( ) ;
//取出attendanceScheduleCycle表中的天数
Integer cycleDays = scheduleCycleMapper . selectOne ( Wrappers . < AttendanceScheduleCycle > lambdaQuery ( ) . eq ( AttendanceScheduleCycle : : getGroupId , groupId ) ) . getDayNumber ( ) ;
//在startDate和endDate之间循环, 判端当前日期是cycleDays中的第几天
int cycleDay = 0 ;
while ( startDate . before ( currentDate ) | | endDate . after ( currentDate ) ) {
cycleDay + + ;
startDate = DateUtil . offsetDay ( startDate , 1 ) ;
//判断当前日期是clcleDays中的第几天
if ( cycleDay > cycleDays ) {
cycleDay = 1 ;
}
}
//根据cycleDay查询出当前日期的班次信息
AttendanceScheduleCycle cycle = scheduleCycleMapper . selectOne ( Wrappers . < AttendanceScheduleCycle > lambdaQuery ( ) . eq ( AttendanceScheduleCycle : : getGroupId , groupId ) . eq ( AttendanceScheduleCycle : : getDayNumber , cycleDay ) ) ;
//将cycle存到结果中
AttendanceArrangementVo arrangementVo = new AttendanceArrangementVo ( ) ;
arrangementVo . setCycle ( cycle ) ;
}
}
) ;
// //1.根据当前日期查询出排班信息
// AttendanceArrangementVo arrangementvo = baseMapper.selectVoByTime(bo.getCurrentDate());
// //2.查询人员组的信息
// //根据开始时间查询出所有的排班id
// List<Long> scheduleIdList = baseMapper.selectList(Wrappers.<AttendanceArrangement>lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate())).stream().map(AttendanceArrangement::getId).collect(Collectors.toList());
// //根据排班的id查询出排班的人员详细信息
// List<AttendanceUserGroup> userGroupList = userGroupMapper.selectList(Wrappers.<AttendanceUserGroup>lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList));
// //将排班人员信息添加到排班信息中
// arrangementvo.setUserGroupList(userGroupList);
// AttendanceArrangementVo arrangementvo = baseMapper.selectVoByTime(bo.getCurrentDate());
// //2.查询人员组的信息
// //根据开始时间查询出所有的排班id
// List<Long> scheduleIdList = baseMapper.selectList(Wrappers.<AttendanceArrangement>lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate())).stream().map(AttendanceArrangement::getId).collect(Collectors.toList());
// //根据排班的id查询出排班的人员详细信息
// List<AttendanceUserGroup> userGroupList = userGroupMapper.selectList(Wrappers.<AttendanceUserGroup>lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList));
// //将排班人员信息添加到排班信息中
// arrangementvo.setUserGroupList(userGroupList);
//
// //3.根据排班的id查询出排班的考勤组id
// List<Long> groupIds = baseMapper.selectList(Wrappers.<AttendanceArrangement>lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate())).stream().map(AttendanceArrangement::getGroupId).distinct().collect(Collectors.toList());
// //判断考勤组是排班制还是固定班制
// if (arrangementvo.getScheduleType().equals(StatusConstant.FIXEDSCHEDULE)) {
// //排班制
// //根据排班的id查询出排班的考勤组id
// List<AttendanceWeekSet> weekSetList = weekSetMapper.selectList(Wrappers.<AttendanceWeekSet>lambdaQuery().in(AttendanceWeekSet::getGroupId, groupIds));
// }
// //3.根据排班的id查询出排班的考勤组id
// List<Long> groupIds = baseMapper.selectList(Wrappers.<AttendanceArrangement>lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate())).stream().map(AttendanceArrangement::getGroupId).distinct().collect(Collectors.toList());
// //判断考勤组是排班制还是固定班制
} ) . collect ( Collectors . toList ( ) ) ) ;
return TableDataInfo . build ( attendanceArrangementVoPage ) ;
@@ -161,65 +219,6 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
// 循环结束后如果 result 仍为空,则返回空列表
return Collections . emptyList ( ) ;
// //1.如: 在2号到10号有固定班制和排班制, 根据当前日期查询出所有的考勤组id
// //查询指定日期在哪些排班中
// List<AttendanceArrangement> arrangementList = baseMapper.selectList(Wrappers.<AttendanceArrangement>lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate()).le(AttendanceArrangement::getEndDate, bo.getCurrentDate()));
// //根据排班查询出考勤组id
// List<Long> groupIds = arrangementList.stream().map(AttendanceArrangement::getGroupId).distinct().toList();
//
// // 2.循环将所有的考勤组id设置到考勤组中
// //循环groupIds, 循环和AttendanceGroup中的id做对比, 如果有相同的, 则取出attendanceGroup中的所有数据
// groupIds.forEach(
// groupId -> {
// //从数据库查询出当前考勤组的所有数据
// AttendanceGroup group = attendanceGroupMapper.selectOne(Wrappers.<AttendanceGroup>lambdaQuery().eq(AttendanceGroup::getId, groupId));
//
// // 3.查询出当前考勤组的所有数据, 从考勤组判断当前id是固定班制还是排班制
// if (group.getAttendanceType().equals(StatusConstant.FIXEDSCHEDULE)) {
// // 3.1固定班制:将当前的日期转为周几,然后与数据库中的班次周数作对比,取出当前日期的班次信息
// //将传来的日期参数转为周几
// int week = DateUtil.dayOfWeek(bo.getCurrentDate());
// //取出当前日期的周数,与数据库中的班次周数作对比,取出当前日期的班次信息
// AttendanceWeekSet weekSet = weekSetMapper.selectOne(Wrappers.<AttendanceWeekSet>lambdaQuery().eq(AttendanceWeekSet::getGroupId, groupId).eq(AttendanceWeekSet::getDayOfWeek, week));
// //将weekSet存到结果中
// AttendanceArrangementVo arrangementVo = new AttendanceArrangementVo();
// arrangementVo.setWeekSet(weekSet);
// //根据weekSet取出id, 根据id查询出attendanceWeekSetShift表中的shiftId
// Long shiftId = weekSet.getId();
// //根据shiftId查询attendanceShift表中对应的id的数据
// AttendanceShift shift = attendanceShiftMapper.selectById(shiftId);
// //将shift存到结果中
// arrangementVo.setShift(shift);
//
// } else if (group.getAttendanceType().equals(StatusConstant.SHIFTSCHEDULE)) {
// // 3.2排班制:判断第一天是从几号开始,循环判断,判断当前是循环中的第几天,取出当前天数的班次信息。
// //取出排班中的开始时间和结束时间
// Date startDate = bo.getStartDate();
// Date endDate = bo.getEndDate();
// Date currentDate = bo.getCurrentDate();
// //取出attendanceScheduleCycle表中的天数
// Integer cycleDays = scheduleCycleMapper.selectOne(Wrappers.<AttendanceScheduleCycle>lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId)).getDayNumber();
// //在startDate和endDate之间循环, 判端当前日期是cycleDays中的第几天
// int cycleDay = 0;
// while (startDate.before(currentDate) || endDate.after(currentDate)) {
// cycleDay++;
// startDate = DateUtil.offsetDay(startDate, 1);
// //判断当前日期是clcleDays中的第几天
// if (cycleDay > cycleDays) {
// cycleDay = 1;
// }
// }
// //根据cycleDay查询出当前日期的班次信息
// AttendanceScheduleCycle cycle = scheduleCycleMapper.selectOne(Wrappers.<AttendanceScheduleCycle>lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId).eq(AttendanceScheduleCycle::getDayNumber, cycleDay));
// //将cycle存到结果中
// AttendanceArrangementVo arrangementVo = new AttendanceArrangementVo();
// arrangementVo.setCycle(cycle);
//
// }
// }
// );
// // 计算交集的开始时间(取较晚的开始时间)和结束时间(取较早的结束时间)
// Date overlapStart = calendarStartDate.after(startDate)
// ? calendarStartDate : startDate;
@@ -229,22 +228,6 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
//根据交集的时间范围查询排班信息
// //1.根据日历的开始时间和日历的结束时间查询所有的排班信息
//// List<AttendanceArrangement> arrangementList = baseMapper.selectList(Wrappers.<AttendanceArrangement>lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCalendarStartDate()).le(AttendanceArrangement::getEndDate, bo.getCalendarEndTimeDate()));
// //2.查询人员组的信息
// //根据开始时间查询排班的id
// List<Long> scheduleIdList = arrangementList.stream().map(AttendanceArrangement::getId).collect(Collectors.toList());
// //根据排班的id查询出排班的人员详细信息
// List<AttendanceUserGroup> userGroupList = userGroupMapper.selectList(Wrappers.<AttendanceUserGroup>lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList));
// //3.将排班人员信息添加到排班信息中
//
// return arrangementList.stream().map(arrangement -> {
// AttendanceArrangementVo vo = MapstructUtils.convert(arrangement, AttendanceArrangementVo.class);
// assert vo != null;
// vo.setUserGroupList(userGroupList.stream().filter(userGroup -> userGroup.getScheduleId().equals(arrangement.getId())).collect(Collectors.toList()));
// return vo;
// }).collect(Collectors.toList());
}
@@ -366,6 +349,10 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
//获取当前排班的id
List < Long > idList = new ArrayList < > ( ids ) ;
//根据当前排班的id 删除attendanceArrangementGroup表中的数据
arrangementGroupMapper . delete ( Wrappers . < AttendanceArrangementGroup > lambdaQuery ( ) . in ( AttendanceArrangementGroup : : getArrangementId , idList ) ) ;
//根据获取的id删除attendanceUserGroup表中的数据
userGroupMapper . delete ( Wrappers . < AttendanceUserGroup > lambdaQuery ( ) . in ( AttendanceUserGroup : : getScheduleId , idList ) ) ;
return baseMapper . deleteByIds ( ids ) > 0 ;