This commit is contained in:
dy 2025-07-18 10:03:20 +08:00
parent f16a9e0897
commit d8dfde621e
6 changed files with 111 additions and 21 deletions

View File

@ -65,8 +65,8 @@ public class AttendanceGroupController extends BaseController {
@SaCheckPermission("Property:group:query") @SaCheckPermission("Property:group:query")
@GetMapping("/{id}") @GetMapping("/{id}")
public R<AttendanceGroupVo> getInfo(@NotNull(message = "主键不能为空") public R<AttendanceGroupVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) { @PathVariable("id") Long id,Integer attendanceType) {
return R.ok(attendanceGroupService.queryById(id)); return R.ok(attendanceGroupService.queryById(id,attendanceType));
} }
/** /**
@ -88,6 +88,7 @@ public class AttendanceGroupController extends BaseController {
@RepeatSubmit() @RepeatSubmit()
@PutMapping() @PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody AttendanceGroupBo bo) { public R<Void> edit(@Validated(EditGroup.class) @RequestBody AttendanceGroupBo bo) {
//todo:考勤组的修改待确定
return toAjax(attendanceGroupService.updateByBo(bo)); return toAjax(attendanceGroupService.updateByBo(bo));
} }
@ -100,7 +101,7 @@ public class AttendanceGroupController extends BaseController {
@Log(title = "考勤组基本信息", businessType = BusinessType.DELETE) @Log(title = "考勤组基本信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}") @DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空") public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("ids") Long[] ids) { @PathVariable("ids") Long[] ids,Integer attendanceType) {
return toAjax(attendanceGroupService.deleteWithValidByIds(List.of(ids), true)); return toAjax(attendanceGroupService.deleteWithValidByIds(List.of(ids), true,attendanceType));
} }
} }

View File

@ -30,7 +30,7 @@ public class AttendanceScheduleCycle extends TenantEntity {
/** /**
* 周期中的第几天(1开始) * 周期中的第几天(1开始)
*/ */
private Long dayNumber; private Integer dayNumber;
/** /**
* 关联排班组id * 关联排班组id

View File

@ -9,7 +9,11 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import java.util.Date; import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.SysRole;
/** /**
* 排班业务对象 attendance_arrangement * 排班业务对象 attendance_arrangement
@ -63,5 +67,9 @@ public class AttendanceArrangementBo extends BaseEntity {
*/ */
private Long status; private Long status;
private List<SysRole> roleList;
private List<SysDept> deptList;
} }

View File

@ -7,7 +7,9 @@ import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import org.dromara.property.domain.AttendanceShift;
import org.dromara.property.domain.AttendanceWeekSet; import org.dromara.property.domain.AttendanceWeekSet;
import org.dromara.property.domain.AttendanceWeeksetShift;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
@ -56,5 +58,9 @@ public class AttendanceGroupVo implements Serializable {
List<AttendanceWeekSet> weekList; List<AttendanceWeekSet> weekList;
List<AttendanceWeeksetShift> shiftList;
List<AttendanceShift> attendanceList;
} }

View File

@ -23,7 +23,7 @@ public interface IAttendanceGroupService {
* @param id 主键 * @param id 主键
* @return 考勤组基本信息 * @return 考勤组基本信息
*/ */
AttendanceGroupVo queryById(Long id); AttendanceGroupVo queryById(Long id,Integer attendanceType);
/** /**
* 分页查询考勤组基本信息列表 * 分页查询考勤组基本信息列表
@ -65,5 +65,5 @@ public interface IAttendanceGroupService {
* @param isValid 是否进行有效性校验 * @param isValid 是否进行有效性校验
* @return 是否删除成功 * @return 是否删除成功
*/ */
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid,Integer attendanceType);
} }

View File

@ -11,14 +11,11 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.property.domain.*; import org.dromara.property.domain.*;
import org.dromara.property.domain.constant.StatusConstant; import org.dromara.property.domain.constant.StatusConstant;
import org.dromara.property.mapper.AttendanceClockDateMapper; import org.dromara.property.mapper.*;
import org.dromara.property.mapper.AttendanceFixedScheduleMapper;
import org.dromara.property.mapper.AttendanceWeekSetMapper;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.dromara.property.domain.bo.AttendanceGroupBo; import org.dromara.property.domain.bo.AttendanceGroupBo;
import org.dromara.property.domain.vo.AttendanceGroupVo; import org.dromara.property.domain.vo.AttendanceGroupVo;
import org.dromara.property.mapper.AttendanceGroupMapper;
import org.dromara.property.service.IAttendanceGroupService; import org.dromara.property.service.IAttendanceGroupService;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -27,6 +24,9 @@ import java.util.Map;
import java.util.Collection; import java.util.Collection;
import java.util.Objects; import java.util.Objects;
import static org.dromara.property.domain.constant.StatusConstant.FIXEDSCHEDULE;
import static org.dromara.property.domain.constant.StatusConstant.SHIFTSCHEDULE;
/** /**
* 考勤组基本信息Service业务层处理 * 考勤组基本信息Service业务层处理
* *
@ -44,6 +44,11 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
private final AttendanceClockDateMapper attendanceClockDateMapper; 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 考勤组基本信息 * @return 考勤组基本信息
*/ */
@Override @Override
public AttendanceGroupVo queryById(Long id) { public AttendanceGroupVo queryById(Long id, Integer attendanceType) {
return baseMapper.selectVoById(id); //根据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()); bo.setId(add.getId());
} }
//2.判断考勤是固定班制还是排班制 //判断考勤是固定班制还是排班制
if (Objects.equals(add.getAttendanceType(), StatusConstant.FIXEDSCHEDULE)) { //2.固定班制
if (Objects.equals(add.getAttendanceType(), FIXEDSCHEDULE)) {
//2.1固定班制向周期表插入数据 //2.1固定班制向周期表插入数据
//拿到考勤组的id,遍历weekList //拿到考勤组的id,遍历weekList
for (Integer week : bo.getWeekList()) { for (Integer week : bo.getWeekList()) {
@ -131,10 +171,8 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
} }
//todo: 法定节假日自动排休 //todo: 法定节假日自动排休
//2.3.新增打卡日期表
//2.3.1判断是必须打卡还是无需打卡
//4.新增打卡日期表
//4.1判断是必须打卡还是无需打卡
//(1)必须打卡向打卡日期表中插入数据 //(1)必须打卡向打卡日期表中插入数据
if (Objects.equals(bo.getMustNoCheck(), StatusConstant.MUSTCHECK)) { if (Objects.equals(bo.getMustNoCheck(), StatusConstant.MUSTCHECK)) {
judgeDate(bo); judgeDate(bo);
@ -145,9 +183,23 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
} }
} }
//3.排班制
if (Objects.equals(add.getAttendanceType(), StatusConstant.SHIFTSCHEDULE)) { if (Objects.equals(add.getAttendanceType(), StatusConstant.SHIFTSCHEDULE)) {
//2.2排班制向天数表中插入数据 //2.2排班制向天数表中插入数据
AttendanceScheduleCycle attendanceScheduleCycle = new AttendanceScheduleCycle(); 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) { public Boolean updateByBo(AttendanceGroupBo bo) {
AttendanceGroup update = MapstructUtils.convert(bo, AttendanceGroup.class); AttendanceGroup update = MapstructUtils.convert(bo, AttendanceGroup.class);
validEntityBeforeSave(update); validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0; return baseMapper.updateById(update) > 0;
} }
@ -202,10 +256,31 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
* @param isValid 是否进行有效性校验 * @param isValid 是否进行有效性校验
* @return 是否删除成功 * @return 是否删除成功
*/ */
@Transactional(rollbackFor = Exception.class)
@Override @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) { if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验 //TODO 做一些业务上的校验,判断是否需要校验判断考勤组下是否有数据有数据则不做删除
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }