排班
This commit is contained in:
parent
f16a9e0897
commit
d8dfde621e
@ -65,8 +65,8 @@ public class AttendanceGroupController extends BaseController {
|
||||
@SaCheckPermission("Property:group:query")
|
||||
@GetMapping("/{id}")
|
||||
public R<AttendanceGroupVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable("id") Long id) {
|
||||
return R.ok(attendanceGroupService.queryById(id));
|
||||
@PathVariable("id") Long id,Integer attendanceType) {
|
||||
return R.ok(attendanceGroupService.queryById(id,attendanceType));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -88,6 +88,7 @@ public class AttendanceGroupController extends BaseController {
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody AttendanceGroupBo bo) {
|
||||
//todo:考勤组的修改待确定
|
||||
return toAjax(attendanceGroupService.updateByBo(bo));
|
||||
}
|
||||
|
||||
@ -100,7 +101,7 @@ public class AttendanceGroupController extends BaseController {
|
||||
@Log(title = "考勤组基本信息", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable("ids") Long[] ids) {
|
||||
return toAjax(attendanceGroupService.deleteWithValidByIds(List.of(ids), true));
|
||||
@PathVariable("ids") Long[] ids,Integer attendanceType) {
|
||||
return toAjax(attendanceGroupService.deleteWithValidByIds(List.of(ids), true,attendanceType));
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ public class AttendanceScheduleCycle extends TenantEntity {
|
||||
/**
|
||||
* 周期中的第几天(1开始)
|
||||
*/
|
||||
private Long dayNumber;
|
||||
private Integer dayNumber;
|
||||
|
||||
/**
|
||||
* 关联排班组id
|
||||
|
@ -9,7 +9,11 @@ import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import jakarta.validation.constraints.*;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.dromara.system.domain.SysDept;
|
||||
import org.dromara.system.domain.SysRole;
|
||||
|
||||
/**
|
||||
* 排班业务对象 attendance_arrangement
|
||||
@ -63,5 +67,9 @@ public class AttendanceArrangementBo extends BaseEntity {
|
||||
*/
|
||||
private Long status;
|
||||
|
||||
private List<SysRole> roleList;
|
||||
|
||||
private List<SysDept> deptList;
|
||||
|
||||
|
||||
}
|
||||
|
@ -7,7 +7,9 @@ import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import org.dromara.property.domain.AttendanceShift;
|
||||
import org.dromara.property.domain.AttendanceWeekSet;
|
||||
import org.dromara.property.domain.AttendanceWeeksetShift;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
@ -56,5 +58,9 @@ public class AttendanceGroupVo implements Serializable {
|
||||
|
||||
List<AttendanceWeekSet> weekList;
|
||||
|
||||
List<AttendanceWeeksetShift> shiftList;
|
||||
|
||||
List<AttendanceShift> attendanceList;
|
||||
|
||||
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ public interface IAttendanceGroupService {
|
||||
* @param id 主键
|
||||
* @return 考勤组基本信息
|
||||
*/
|
||||
AttendanceGroupVo queryById(Long id);
|
||||
AttendanceGroupVo queryById(Long id,Integer attendanceType);
|
||||
|
||||
/**
|
||||
* 分页查询考勤组基本信息列表
|
||||
@ -65,5 +65,5 @@ public interface IAttendanceGroupService {
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid,Integer attendanceType);
|
||||
}
|
||||
|
@ -11,14 +11,11 @@ import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.property.domain.*;
|
||||
import org.dromara.property.domain.constant.StatusConstant;
|
||||
import org.dromara.property.mapper.AttendanceClockDateMapper;
|
||||
import org.dromara.property.mapper.AttendanceFixedScheduleMapper;
|
||||
import org.dromara.property.mapper.AttendanceWeekSetMapper;
|
||||
import org.dromara.property.mapper.*;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.property.domain.bo.AttendanceGroupBo;
|
||||
import org.dromara.property.domain.vo.AttendanceGroupVo;
|
||||
import org.dromara.property.mapper.AttendanceGroupMapper;
|
||||
import org.dromara.property.service.IAttendanceGroupService;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@ -27,6 +24,9 @@ import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
|
||||
import static org.dromara.property.domain.constant.StatusConstant.FIXEDSCHEDULE;
|
||||
import static org.dromara.property.domain.constant.StatusConstant.SHIFTSCHEDULE;
|
||||
|
||||
/**
|
||||
* 考勤组基本信息Service业务层处理
|
||||
*
|
||||
@ -44,6 +44,11 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
|
||||
|
||||
private final AttendanceClockDateMapper attendanceClockDateMapper;
|
||||
|
||||
private final AttendanceScheduleCycleMapper attendanceScheduleCycleMapper;
|
||||
|
||||
private final AttendanceWeeksetShiftMapper attendanceWeeksetShiftMapper;
|
||||
private final AttendanceShiftMapper attendanceShiftMapper;
|
||||
|
||||
/**
|
||||
* 查询考勤组基本信息
|
||||
*
|
||||
@ -51,8 +56,42 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
|
||||
* @return 考勤组基本信息
|
||||
*/
|
||||
@Override
|
||||
public AttendanceGroupVo queryById(Long id) {
|
||||
return baseMapper.selectVoById(id);
|
||||
public AttendanceGroupVo queryById(Long id, Integer attendanceType) {
|
||||
//根据id参数查询考勤组表
|
||||
AttendanceGroupVo vo = baseMapper.selectVoById(id);
|
||||
//判断考勤是固定班制还是排班制
|
||||
if (Objects.equals(attendanceType, FIXEDSCHEDULE)) {
|
||||
//1.固定班制:
|
||||
//1.1根据id参数查询考勤周期表
|
||||
List<AttendanceWeekSet> weekSets = weekSetMapper.selectList(Wrappers.<AttendanceWeekSet>lambdaQuery().eq(AttendanceWeekSet::getGroupId, id));
|
||||
//1.2根据id参数取出所有考勤周期id
|
||||
List<Long> weekSetIds = weekSets.stream().map(AttendanceWeekSet::getId).toList();
|
||||
//1.3根据考勤周期id查询出中间表
|
||||
List<AttendanceWeeksetShift> weeksetShifts = attendanceWeeksetShiftMapper.selectList(Wrappers.<AttendanceWeeksetShift>lambdaQuery().in(AttendanceWeeksetShift::getWeekSetId, weekSetIds));
|
||||
//1.4根据中间表的班次id查询出班次表id
|
||||
List<Long> shiftIds = weeksetShifts.stream().map(AttendanceWeeksetShift::getShiftId).toList();
|
||||
//1.5根据班次id查询出班次表
|
||||
List<AttendanceShift> shifts = attendanceShiftMapper.selectList(Wrappers.<AttendanceShift>lambdaQuery().in(AttendanceShift::getId, shiftIds));
|
||||
//1.6将查询后的数据封装到attendanceGroupVo中
|
||||
vo.setAttendanceList(shifts);
|
||||
} else if(Objects.equals(attendanceType, SHIFTSCHEDULE)) {
|
||||
//2.排班制
|
||||
//2.1根据id参数查询考勤周期表
|
||||
List<AttendanceWeekSet> weekSets = weekSetMapper.selectList(Wrappers.<AttendanceWeekSet>lambdaQuery().eq(AttendanceWeekSet::getGroupId, id));
|
||||
//2.2根据id参数取出所有考勤天数id
|
||||
List<Long> weekSetIds = weekSets.stream().map(AttendanceWeekSet::getId).toList();
|
||||
//2.3根据天数id查询出中间表
|
||||
List<AttendanceScheduleCycle> scheduleCycles = attendanceScheduleCycleMapper.selectList(Wrappers.<AttendanceScheduleCycle>lambdaQuery().in(AttendanceScheduleCycle::getGroupId, weekSetIds));
|
||||
//2.4根据中间表的班次id查询出班次表id
|
||||
List<Long> scheduleCycleIds = scheduleCycles.stream().map(AttendanceScheduleCycle::getId).toList();
|
||||
//2.5根据班次id查询出班次表
|
||||
List<AttendanceShift> shifts = attendanceShiftMapper.selectList(Wrappers.<AttendanceShift>lambdaQuery().in(AttendanceShift::getId, scheduleCycleIds));
|
||||
//2.6将查询后的数据封装到attendanceGroupVo中
|
||||
vo.setAttendanceList(shifts);
|
||||
}
|
||||
|
||||
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -111,8 +150,9 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
|
||||
//2.判断考勤是固定班制还是排班制
|
||||
if (Objects.equals(add.getAttendanceType(), StatusConstant.FIXEDSCHEDULE)) {
|
||||
//判断考勤是固定班制还是排班制
|
||||
//2.固定班制
|
||||
if (Objects.equals(add.getAttendanceType(), FIXEDSCHEDULE)) {
|
||||
//2.1固定班制,向周期表插入数据
|
||||
//拿到考勤组的id,遍历weekList
|
||||
for (Integer week : bo.getWeekList()) {
|
||||
@ -131,10 +171,8 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
|
||||
}
|
||||
|
||||
//todo: 法定节假日自动排休
|
||||
|
||||
|
||||
//4.新增打卡日期表
|
||||
//4.1判断是必须打卡还是无需打卡
|
||||
//2.3.新增打卡日期表
|
||||
//2.3.1判断是必须打卡还是无需打卡
|
||||
//(1)必须打卡,向打卡日期表中插入数据
|
||||
if (Objects.equals(bo.getMustNoCheck(), StatusConstant.MUSTCHECK)) {
|
||||
judgeDate(bo);
|
||||
@ -145,9 +183,23 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
|
||||
}
|
||||
}
|
||||
|
||||
//3.排班制
|
||||
if (Objects.equals(add.getAttendanceType(), StatusConstant.SHIFTSCHEDULE)) {
|
||||
//2.2排班制,向天数表中插入数据
|
||||
AttendanceScheduleCycle attendanceScheduleCycle = new AttendanceScheduleCycle();
|
||||
//循环向周期表中插入数据
|
||||
for (Integer week : bo.getWeekList()) {
|
||||
attendanceScheduleCycle.setGroupId(add.getId());
|
||||
attendanceScheduleCycle.setDayNumber(week);
|
||||
}
|
||||
//通过考勤组id拿到日期表的所有关联id
|
||||
List<AttendanceScheduleCycle> scheduleCycles = attendanceScheduleCycleMapper.selectList(Wrappers.<AttendanceScheduleCycle>lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, add.getId()));
|
||||
//2.3遍历日期表,向班次和周设置表的中间表插入数据
|
||||
for (AttendanceScheduleCycle scheduleCycle : scheduleCycles) {
|
||||
AttendanceWeeksetShift attendanceWeeksetShift = new AttendanceWeeksetShift();
|
||||
attendanceWeeksetShift.setScheduleId(scheduleCycle.getId());
|
||||
attendanceWeeksetShift.setShiftId(bo.getShiftId());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -185,6 +237,8 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
|
||||
public Boolean updateByBo(AttendanceGroupBo bo) {
|
||||
AttendanceGroup update = MapstructUtils.convert(bo, AttendanceGroup.class);
|
||||
validEntityBeforeSave(update);
|
||||
|
||||
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
@ -202,10 +256,31 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid,Integer attendanceType) {
|
||||
//判断删除固定班次还是排班制
|
||||
if (Objects.equals(attendanceType, FIXEDSCHEDULE)){
|
||||
//1.固定班制
|
||||
//根据id删除周期表中的数据
|
||||
weekSetMapper.delete(Wrappers.<AttendanceWeekSet>lambdaQuery().in(AttendanceWeekSet::getGroupId, ids));
|
||||
//根据id查询出考勤周期id
|
||||
List<Long> weekSetIds = weekSetMapper.selectList(Wrappers.<AttendanceWeekSet>lambdaQuery().in(AttendanceWeekSet::getGroupId, ids)).stream().map(AttendanceWeekSet::getId).toList();
|
||||
//根据考勤周期id删除中间表数据
|
||||
attendanceWeeksetShiftMapper.delete(Wrappers.<AttendanceWeeksetShift>lambdaQuery().in(AttendanceWeeksetShift::getWeekSetId, weekSetIds));
|
||||
|
||||
} else if (Objects.equals(attendanceType, SHIFTSCHEDULE)) {
|
||||
//2.排班制
|
||||
//根据id删除考勤天数的数据
|
||||
attendanceScheduleCycleMapper.delete(Wrappers.<AttendanceScheduleCycle>lambdaQuery().in(AttendanceScheduleCycle::getGroupId, ids));
|
||||
//根据id查询出考勤天数的所有id
|
||||
List<Long> scheduleCycleIds = attendanceScheduleCycleMapper.selectList(Wrappers.<AttendanceScheduleCycle>lambdaQuery().in(AttendanceScheduleCycle::getGroupId, ids)).stream().map(AttendanceScheduleCycle::getId).toList();
|
||||
//根据考勤天数id删除中间表数据
|
||||
attendanceWeeksetShiftMapper.delete(Wrappers.<AttendanceWeeksetShift>lambdaQuery().in(AttendanceWeeksetShift::getScheduleId, scheduleCycleIds));
|
||||
}
|
||||
|
||||
if (isValid) {
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
//TODO 做一些业务上的校验,判断是否需要校验,判断考勤组下是否有数据,有数据则不做删除
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user