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 1/4] =?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 1f0407ef..805057dc 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 ba99bf80..419f7522 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 d8afd0be..2156d278 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 90fa0139..a56b12d7 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 44bf95a7..b9e57b67 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 87e6aee3..ba0b113f 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; } From 72b3e40124bf323983ddedcdaf3c3165b4dbaadb Mon Sep 17 00:00:00 2001 From: dy <2389062315@qq.com> Date: Fri, 18 Jul 2025 10:03:44 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=8E=92=E7=8F=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-modules/Property/pom.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ruoyi-modules/Property/pom.xml b/ruoyi-modules/Property/pom.xml index 40ad288a..f126b235 100644 --- a/ruoyi-modules/Property/pom.xml +++ b/ruoyi-modules/Property/pom.xml @@ -114,6 +114,18 @@ org.dromara property-api + + com.github.yulichang + mybatis-plus-join + 1.2.4 + compile + + + org.dromara + ruoyi-system + 2.4.0 + compile + From 75292374fad22b3c880bc544981cf84d1ead23b6 Mon Sep 17 00:00:00 2001 From: dy <2389062315@qq.com> Date: Fri, 18 Jul 2025 10:04:38 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=8E=92=E7=8F=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/property/utils/HolidayUtil.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/utils/HolidayUtil.java diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/utils/HolidayUtil.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/utils/HolidayUtil.java new file mode 100644 index 00000000..eba2b9b8 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/utils/HolidayUtil.java @@ -0,0 +1,36 @@ +package org.dromara.property.utils; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import org.json.JSONObject; + +/** + * 法定节假日工具类 + */ +public class HolidayUtil { + + public HolidayUtil() throws Exception { + // 调用jiejiariapi.com API获取节假日信息 + String baiduUrl = "https://api.jiejiariapi.com/v1/holidays/2025"; + JSONObject jiejiariapiResponse = getJsonFromUrl(baiduUrl); + } + + private static JSONObject getJsonFromUrl(String urlString) throws Exception { + URL url = new URL(urlString); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + connection.connect(); + + BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); + StringBuilder response = new StringBuilder(); + String line; + while ((line = reader.readLine()) != null) { + response.append(line); + } + reader.close(); + + return new JSONObject(response.toString()); + } +} From 625be80cf2c1daf44ee6b5b992b6a1b005ce84c7 Mon Sep 17 00:00:00 2001 From: dy <2389062315@qq.com> Date: Fri, 18 Jul 2025 11:07:22 +0800 Subject: [PATCH 4/4] 1 --- ruoyi-modules/Property/pom.xml | 12 ------------ .../property/domain/bo/AttendanceArrangementBo.java | 7 +------ .../impl/AttendanceArrangementServiceImpl.java | 9 +++++++++ 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/ruoyi-modules/Property/pom.xml b/ruoyi-modules/Property/pom.xml index f126b235..40ad288a 100644 --- a/ruoyi-modules/Property/pom.xml +++ b/ruoyi-modules/Property/pom.xml @@ -114,18 +114,6 @@ org.dromara property-api - - com.github.yulichang - mybatis-plus-join - 1.2.4 - compile - - - org.dromara - ruoyi-system - 2.4.0 - compile - 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 2156d278..263f7d30 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 @@ -11,9 +11,6 @@ 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 @@ -67,9 +64,7 @@ public class AttendanceArrangementBo extends BaseEntity { */ private Long status; - private List roleList; - - private List deptList; +// private List<> } 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 07bc5e1d..64b9f765 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 @@ -15,6 +15,7 @@ import org.dromara.property.domain.vo.AttendanceArrangementVo; import org.dromara.property.domain.AttendanceArrangement; import org.dromara.property.mapper.AttendanceArrangementMapper; import org.dromara.property.service.IAttendanceArrangementService; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; @@ -33,6 +34,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS private final AttendanceArrangementMapper baseMapper; + /** * 查询排班 * @@ -90,6 +92,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS * @param bo 排班 * @return 是否新增成功 */ + @Transactional(rollbackFor = Exception.class) @Override public Boolean insertByBo(AttendanceArrangementBo bo) { AttendanceArrangement add = MapstructUtils.convert(bo, AttendanceArrangement.class); @@ -98,6 +101,12 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS if (flag) { bo.setId(add.getId()); } + //取出当前新增的排班的id + Long ArrangementId = add.getId(); + //向排班人员表中插入排班人员信息 + + + return flag; }