排班详情
This commit is contained in:
parent
40a9cb65b8
commit
e69093390c
@ -37,7 +37,7 @@ public class AttendanceArrangementController extends BaseController {
|
|||||||
private final IAttendanceArrangementService attendanceArrangementService;
|
private final IAttendanceArrangementService attendanceArrangementService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询排班列表
|
* 查询排班详情列表
|
||||||
*/
|
*/
|
||||||
@SaCheckPermission("Property:arrangement:list")
|
@SaCheckPermission("Property:arrangement:list")
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
@ -46,7 +46,7 @@ public class AttendanceArrangementController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询排班列表
|
* 查询某个月的日历排班信息的排班列表
|
||||||
*/
|
*/
|
||||||
@SaCheckPermission("Property:arrangement:explore")
|
@SaCheckPermission("Property:arrangement:explore")
|
||||||
@GetMapping("/explore")
|
@GetMapping("/explore")
|
||||||
|
@ -1,20 +1,17 @@
|
|||||||
package org.dromara.property.domain.bo;
|
package org.dromara.property.domain.bo;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateTime;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
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 io.github.linpeilie.annotations.AutoMapper;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
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.AttendanceScheduleCycle;
|
||||||
import org.dromara.property.domain.AttendanceUserGroup;
|
import org.dromara.property.domain.AttendanceUserGroup;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.time.YearMonth;
|
import java.time.YearMonth;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -1,16 +1,12 @@
|
|||||||
package org.dromara.property.mapper;
|
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.apache.ibatis.annotations.Select;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
||||||
import org.dromara.property.domain.AttendanceArrangement;
|
import org.dromara.property.domain.AttendanceArrangement;
|
||||||
import org.dromara.property.domain.bo.AttendanceArrangementBo;
|
|
||||||
import org.dromara.property.domain.vo.AttendanceArrangementVo;
|
import org.dromara.property.domain.vo.AttendanceArrangementVo;
|
||||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -22,7 +18,7 @@ import java.util.List;
|
|||||||
public interface AttendanceArrangementMapper extends BaseMapperPlus<AttendanceArrangement, AttendanceArrangementVo> {
|
public interface AttendanceArrangementMapper extends BaseMapperPlus<AttendanceArrangement, AttendanceArrangementVo> {
|
||||||
|
|
||||||
@Select("SELECT * FROM attendance_arrangement WHERE start_date <= #{startTime} AND end_date >= #{startTime}")
|
@Select("SELECT * FROM attendance_arrangement WHERE start_date <= #{startTime} AND end_date >= #{startTime}")
|
||||||
AttendanceArrangementVo selectVoByTime(LocalDate startTime);
|
AttendanceArrangementVo selectVoByTime(Date startTime);
|
||||||
|
|
||||||
List<AttendanceArrangement> selectArrangementList(LocalDate calendarStartDate, LocalDate calendarEndTimeDate);
|
List<AttendanceArrangement> selectArrangementList(LocalDate calendarStartDate, LocalDate calendarEndTimeDate);
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ public interface IAttendanceArrangementService {
|
|||||||
AttendanceArrangementVo queryById(Long id);
|
AttendanceArrangementVo queryById(Long id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询排班列表
|
* 分页查询排班详情列表
|
||||||
*
|
*
|
||||||
* @param bo 查询条件
|
* @param bo 查询条件
|
||||||
* @param pageQuery 分页参数
|
* @param pageQuery 分页参数
|
||||||
|
@ -43,6 +43,12 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
|
|||||||
|
|
||||||
private final AttendanceArrangementGroupMapper arrangementGroupMapper;
|
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 bo 查询条件
|
||||||
* @param pageQuery 分页参数
|
* @param pageQuery 分页参数
|
||||||
@ -75,11 +81,67 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
|
|||||||
|
|
||||||
|
|
||||||
Page<AttendanceArrangementVo> attendanceArrangementVoPage = result.setRecords(result.getRecords().stream().peek(vo -> {
|
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();
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
}).collect(Collectors.toList()));
|
|
||||||
|
|
||||||
|
|
||||||
// //1.根据当前日期查询出排班信息
|
|
||||||
// AttendanceArrangementVo arrangementvo = baseMapper.selectVoByTime(bo.getCurrentDate());
|
// AttendanceArrangementVo arrangementvo = baseMapper.selectVoByTime(bo.getCurrentDate());
|
||||||
// //2.查询人员组的信息
|
// //2.查询人员组的信息
|
||||||
// //根据开始时间查询出所有的排班id
|
// //根据开始时间查询出所有的排班id
|
||||||
@ -92,11 +154,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
|
|||||||
// //3.根据排班的id查询出排班的考勤组id
|
// //3.根据排班的id查询出排班的考勤组id
|
||||||
// List<Long> groupIds = baseMapper.selectList(Wrappers.<AttendanceArrangement>lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate())).stream().map(AttendanceArrangement::getGroupId).distinct().collect(Collectors.toList());
|
// 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)) {
|
}).collect(Collectors.toList()));
|
||||||
// //排班制
|
|
||||||
// //根据排班的id查询出排班的考勤组id
|
|
||||||
// List<AttendanceWeekSet> weekSetList = weekSetMapper.selectList(Wrappers.<AttendanceWeekSet>lambdaQuery().in(AttendanceWeekSet::getGroupId, groupIds));
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
return TableDataInfo.build(attendanceArrangementVoPage);
|
return TableDataInfo.build(attendanceArrangementVoPage);
|
||||||
@ -161,65 +219,6 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
|
|||||||
// 循环结束后如果 result 仍为空,则返回空列表
|
// 循环结束后如果 result 仍为空,则返回空列表
|
||||||
return Collections.emptyList();
|
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)
|
// Date overlapStart = calendarStartDate.after(startDate)
|
||||||
// ? calendarStartDate : 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
|
//获取当前排班的id
|
||||||
List<Long> idList = new ArrayList<>(ids);
|
List<Long> idList = new ArrayList<>(ids);
|
||||||
|
|
||||||
|
//根据当前排班的id 删除attendanceArrangementGroup表中的数据
|
||||||
|
arrangementGroupMapper.delete(Wrappers.<AttendanceArrangementGroup>lambdaQuery().in(AttendanceArrangementGroup::getArrangementId, idList));
|
||||||
|
|
||||||
//根据获取的id删除attendanceUserGroup表中的数据
|
//根据获取的id删除attendanceUserGroup表中的数据
|
||||||
userGroupMapper.delete(Wrappers.<AttendanceUserGroup>lambdaQuery().in(AttendanceUserGroup::getScheduleId, idList));
|
userGroupMapper.delete(Wrappers.<AttendanceUserGroup>lambdaQuery().in(AttendanceUserGroup::getScheduleId, idList));
|
||||||
return baseMapper.deleteByIds(ids) > 0;
|
return baseMapper.deleteByIds(ids) > 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user