diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java index dd5d0c0..e073bac 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java @@ -37,7 +37,7 @@ public class AttendanceArrangementController extends BaseController { private final IAttendanceArrangementService attendanceArrangementService; /** - * 查询排班列表 + * 查询排班详情列表 */ @SaCheckPermission("Property:arrangement:list") @GetMapping("/list") @@ -46,7 +46,7 @@ public class AttendanceArrangementController extends BaseController { } /** - * 查询排班列表 + * 查询某个月的日历排班信息的排班列表 */ @SaCheckPermission("Property:arrangement:explore") @GetMapping("/explore") diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java index 6cd85bd..a8a6fde 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java @@ -1,20 +1,17 @@ package org.dromara.property.domain.bo; -import cn.hutool.core.date.DateTime; import com.fasterxml.jackson.annotation.JsonFormat; -import org.dromara.property.domain.AttendanceArrangement; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.property.domain.AttendanceArrangement; import org.dromara.property.domain.AttendanceScheduleCycle; import org.dromara.property.domain.AttendanceUserGroup; import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDate; import java.time.YearMonth; import java.util.Date; import java.util.List; 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 97efb77..9940f93 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 @@ -1,16 +1,12 @@ package org.dromara.property.mapper; -import cn.hutool.core.date.DateTime; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; -import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.property.domain.AttendanceArrangement; -import org.dromara.property.domain.bo.AttendanceArrangementBo; import org.dromara.property.domain.vo.AttendanceArrangementVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import java.time.LocalDate; +import java.util.Date; import java.util.List; /** @@ -22,7 +18,7 @@ import java.util.List; public interface AttendanceArrangementMapper extends BaseMapperPlus { @Select("SELECT * FROM attendance_arrangement WHERE start_date <= #{startTime} AND end_date >= #{startTime}") - AttendanceArrangementVo selectVoByTime(LocalDate startTime); + AttendanceArrangementVo selectVoByTime(Date startTime); List selectArrangementList(LocalDate calendarStartDate, LocalDate calendarEndTimeDate); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java index e889d04..ce48d6f 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java @@ -25,7 +25,7 @@ public interface IAttendanceArrangementService { AttendanceArrangementVo queryById(Long id); /** - * 分页查询排班列表 + * 分页查询排班详情列表 * * @param bo 查询条件 * @param pageQuery 分页参数 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 cca1a7d..c0c9a82 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 @@ -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 attendanceArrangementVoPage = result.setRecords(result.getRecords().stream().peek(vo -> { + //1.根据当前日期查询在开始时间和结束时间之间的排班信息 + //查询指定日期在哪些排班中 + List arrangementList = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate()).le(AttendanceArrangement::getEndDate, bo.getCurrentDate())); + //根据排班查询出考勤组id + List 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.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.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.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.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 scheduleIdList = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate())).stream().map(AttendanceArrangement::getId).collect(Collectors.toList()); -// //根据排班的id查询出排班的人员详细信息 -// List userGroupList = userGroupMapper.selectList(Wrappers.lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList)); -// //将排班人员信息添加到排班信息中 -// arrangementvo.setUserGroupList(userGroupList); + + +// AttendanceArrangementVo arrangementvo = baseMapper.selectVoByTime(bo.getCurrentDate()); +// //2.查询人员组的信息 +// //根据开始时间查询出所有的排班id +// List scheduleIdList = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate())).stream().map(AttendanceArrangement::getId).collect(Collectors.toList()); +// //根据排班的id查询出排班的人员详细信息 +// List userGroupList = userGroupMapper.selectList(Wrappers.lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList)); +// //将排班人员信息添加到排班信息中 +// arrangementvo.setUserGroupList(userGroupList); // -// //3.根据排班的id查询出排班的考勤组id -// List groupIds = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate())).stream().map(AttendanceArrangement::getGroupId).distinct().collect(Collectors.toList()); -// //判断考勤组是排班制还是固定班制 -// if (arrangementvo.getScheduleType().equals(StatusConstant.FIXEDSCHEDULE)) { -// //排班制 -// //根据排班的id查询出排班的考勤组id -// List weekSetList = weekSetMapper.selectList(Wrappers.lambdaQuery().in(AttendanceWeekSet::getGroupId, groupIds)); -// } +// //3.根据排班的id查询出排班的考勤组id +// List groupIds = baseMapper.selectList(Wrappers.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 arrangementList = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate()).le(AttendanceArrangement::getEndDate, bo.getCurrentDate())); -// //根据排班查询出考勤组id -// List groupIds = arrangementList.stream().map(AttendanceArrangement::getGroupId).distinct().toList(); -// -// // 2.循环将所有的考勤组id设置到考勤组中 -// //循环groupIds,循环和AttendanceGroup中的id做对比,如果有相同的,则取出attendanceGroup中的所有数据 -// groupIds.forEach( -// groupId -> { -// //从数据库查询出当前考勤组的所有数据 -// AttendanceGroup group = attendanceGroupMapper.selectOne(Wrappers.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.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.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.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 arrangementList = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCalendarStartDate()).le(AttendanceArrangement::getEndDate, bo.getCalendarEndTimeDate())); -// //2.查询人员组的信息 -// //根据开始时间查询排班的id -// List scheduleIdList = arrangementList.stream().map(AttendanceArrangement::getId).collect(Collectors.toList()); -// //根据排班的id查询出排班的人员详细信息 -// List userGroupList = userGroupMapper.selectList(Wrappers.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 idList = new ArrayList<>(ids); + + //根据当前排班的id 删除attendanceArrangementGroup表中的数据 + arrangementGroupMapper.delete(Wrappers.lambdaQuery().in(AttendanceArrangementGroup::getArrangementId, idList)); + //根据获取的id删除attendanceUserGroup表中的数据 userGroupMapper.delete(Wrappers.lambdaQuery().in(AttendanceUserGroup::getScheduleId, idList)); return baseMapper.deleteByIds(ids) > 0;