From d8dfde621e46161e1d246fe16a1c2cf6b1997755 Mon Sep 17 00:00:00 2001 From: dy <2389062315@qq.com> Date: Fri, 18 Jul 2025 10:03:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=92=E7=8F=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AttendanceGroupController.java | 9 +- .../domain/AttendanceScheduleCycle.java | 2 +- .../domain/bo/AttendanceArrangementBo.java | 8 ++ .../property/domain/vo/AttendanceGroupVo.java | 6 + .../service/IAttendanceGroupService.java | 4 +- .../impl/AttendanceGroupServiceImpl.java | 103 +++++++++++++++--- 6 files changed, 111 insertions(+), 21 deletions(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceGroupController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceGroupController.java index 1f0407e..805057d 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceGroupController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceGroupController.java @@ -65,8 +65,8 @@ public class AttendanceGroupController extends BaseController { @SaCheckPermission("Property:group:query") @GetMapping("/{id}") public R 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 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 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)); } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceScheduleCycle.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceScheduleCycle.java index ba99bf8..419f752 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceScheduleCycle.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceScheduleCycle.java @@ -30,7 +30,7 @@ public class AttendanceScheduleCycle extends TenantEntity { /** * 周期中的第几天(1开始) */ - private Long dayNumber; + private Integer dayNumber; /** * 关联排班组id 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 d8afd0b..2156d27 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 @@ -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 roleList; + + private List deptList; + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceGroupVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceGroupVo.java index 90fa013..a56b12d 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceGroupVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceGroupVo.java @@ -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 weekList; + List shiftList; + + List attendanceList; + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceGroupService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceGroupService.java index 44bf95a..b9e57b6 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceGroupService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceGroupService.java @@ -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 ids, Boolean isValid); + Boolean deleteWithValidByIds(Collection ids, Boolean isValid,Integer attendanceType); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceGroupServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceGroupServiceImpl.java index 87e6aee..ba0b113 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceGroupServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceGroupServiceImpl.java @@ -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 weekSets = weekSetMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceWeekSet::getGroupId, id)); + //1.2根据id参数取出所有考勤周期id + List weekSetIds = weekSets.stream().map(AttendanceWeekSet::getId).toList(); + //1.3根据考勤周期id查询出中间表 + List weeksetShifts = attendanceWeeksetShiftMapper.selectList(Wrappers.lambdaQuery().in(AttendanceWeeksetShift::getWeekSetId, weekSetIds)); + //1.4根据中间表的班次id查询出班次表id + List shiftIds = weeksetShifts.stream().map(AttendanceWeeksetShift::getShiftId).toList(); + //1.5根据班次id查询出班次表 + List shifts = attendanceShiftMapper.selectList(Wrappers.lambdaQuery().in(AttendanceShift::getId, shiftIds)); + //1.6将查询后的数据封装到attendanceGroupVo中 + vo.setAttendanceList(shifts); + } else if(Objects.equals(attendanceType, SHIFTSCHEDULE)) { + //2.排班制 + //2.1根据id参数查询考勤周期表 + List weekSets = weekSetMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceWeekSet::getGroupId, id)); + //2.2根据id参数取出所有考勤天数id + List weekSetIds = weekSets.stream().map(AttendanceWeekSet::getId).toList(); + //2.3根据天数id查询出中间表 + List scheduleCycles = attendanceScheduleCycleMapper.selectList(Wrappers.lambdaQuery().in(AttendanceScheduleCycle::getGroupId, weekSetIds)); + //2.4根据中间表的班次id查询出班次表id + List scheduleCycleIds = scheduleCycles.stream().map(AttendanceScheduleCycle::getId).toList(); + //2.5根据班次id查询出班次表 + List shifts = attendanceShiftMapper.selectList(Wrappers.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 scheduleCycles = attendanceScheduleCycleMapper.selectList(Wrappers.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 ids, Boolean isValid) { + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid,Integer attendanceType) { + //判断删除固定班次还是排班制 + if (Objects.equals(attendanceType, FIXEDSCHEDULE)){ + //1.固定班制 + //根据id删除周期表中的数据 + weekSetMapper.delete(Wrappers.lambdaQuery().in(AttendanceWeekSet::getGroupId, ids)); + //根据id查询出考勤周期id + List weekSetIds = weekSetMapper.selectList(Wrappers.lambdaQuery().in(AttendanceWeekSet::getGroupId, ids)).stream().map(AttendanceWeekSet::getId).toList(); + //根据考勤周期id删除中间表数据 + attendanceWeeksetShiftMapper.delete(Wrappers.lambdaQuery().in(AttendanceWeeksetShift::getWeekSetId, weekSetIds)); + + } else if (Objects.equals(attendanceType, SHIFTSCHEDULE)) { + //2.排班制 + //根据id删除考勤天数的数据 + attendanceScheduleCycleMapper.delete(Wrappers.lambdaQuery().in(AttendanceScheduleCycle::getGroupId, ids)); + //根据id查询出考勤天数的所有id + List scheduleCycleIds = attendanceScheduleCycleMapper.selectList(Wrappers.lambdaQuery().in(AttendanceScheduleCycle::getGroupId, ids)).stream().map(AttendanceScheduleCycle::getId).toList(); + //根据考勤天数id删除中间表数据 + attendanceWeeksetShiftMapper.delete(Wrappers.lambdaQuery().in(AttendanceWeeksetShift::getScheduleId, scheduleCycleIds)); + } + if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 + //TODO 做一些业务上的校验,判断是否需要校验,判断考勤组下是否有数据,有数据则不做删除 } return baseMapper.deleteByIds(ids) > 0; }