From 272875ea64b7a3b03464e146436c3eee75ff9094 Mon Sep 17 00:00:00 2001 From: aikai Date: Wed, 12 Jun 2024 20:13:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=80=83=E5=8B=A4=E8=A7=84?= =?UTF-8?q?=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/common/util/date/DateUtils.java | 26 +++++++++++ .../attendance/AttendanceController.java | 9 ++++ .../attendance/vo/AttendanceRulesVO.java | 29 ++++++++++++ .../group/vo/AttendanceGroupPageReqVO.java | 4 ++ .../admin/group/vo/AttendanceGroupRespVO.java | 5 +++ .../group/vo/AttendanceGroupSaveReqVO.java | 3 ++ .../attendance/group/AttendanceGroupDO.java | 4 ++ .../service/attendance/AttendanceService.java | 9 ++++ .../attendance/AttendanceServiceImpl.java | 12 +++++ .../fixed/AttendanceFixedService.java | 2 + .../fixed/AttendanceFixedServiceImpl.java | 44 +++++++++++++++++++ .../AttendanceGroupShiftServiceImpl.java | 1 + .../attendance/punch/PunchService.java | 11 +++++ .../AttendanceSchedulingService.java | 2 + .../AttendanceSchedulingServiceImpl.java | 43 ++++++++++++++++++ 15 files changed, 204 insertions(+) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/attendance/vo/AttendanceRulesVO.java diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java index 4c0ccb37..85371190 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java @@ -354,4 +354,30 @@ public class DateUtils { JSONObject jsonObject = JSONUtil.parseObj(json); return jsonObject.getJSONArray("days"); } + + /** + * 将1-7的数字转换为对应的中文星期表示 + * @param dayOfWeek 数字形式的星期几,1-7分别代表星期一到星期日 + * @return 中文表示的星期几 + */ + public static String convertToChineseWeekday(int dayOfWeek) { + switch (dayOfWeek) { + case 1: + return "星期一"; + case 2: + return "星期二"; + case 3: + return "星期三"; + case 4: + return "星期四"; + case 5: + return "星期五"; + case 6: + return "星期六"; + case 7: + return "星期日"; + default: + throw new IllegalArgumentException("输入的数字必须在1-7之间,代表星期一到星期日"); + } + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/attendance/AttendanceController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/attendance/AttendanceController.java index 629c4fec..24008e58 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/attendance/AttendanceController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/attendance/AttendanceController.java @@ -38,6 +38,15 @@ public class AttendanceController { return success(vo); } + @GetMapping("/getRules/{groupId}") + @Operation(summary = "获取考勤规则") + public CommonResult getRules(@PathVariable Long groupId) { + AttendanceRulesVO vo = attendanceService.getRules(groupId); + return success(vo); + } + + + @GetMapping("/statisticsByDay") @Operation(summary = "统计按天") public CommonResult> statisticsByDay(@ModelAttribute AttendanceStatisticsByDayDTO dto) { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/attendance/vo/AttendanceRulesVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/attendance/vo/AttendanceRulesVO.java new file mode 100644 index 00000000..38c0cdc4 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/attendance/vo/AttendanceRulesVO.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.system.controller.admin.attendance.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +@Data +@Accessors(chain = true) +public class AttendanceRulesVO { + @Schema(description = "上班规则 - 一条数据一行 前端记得换行") + private List workRules; + @Schema(description = "办公地点") + private String officeLocation; + @Schema(description = "是否允许外勤打卡 0否 1是") + private Integer fieldworkFlag; + + @Data + public static class WorkRules { + @Schema(description = "星期几/第几天") + private String indexStr; + @Schema(description = "规则") + private String rule; + @Schema(description = "是否当天") + private boolean flag; + } +} + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupPageReqVO.java index 5e59f3be..cafa7a65 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupPageReqVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.controller.admin.group.vo; +import com.alibaba.excel.annotation.ExcelProperty; import lombok.*; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; @@ -33,6 +34,9 @@ public class AttendanceGroupPageReqVO extends PageParam { @Schema(description = "纬度") private String latitude; + @Schema(description = "地址") + private String address; + @Schema(description = "范围(米)") private Integer scope; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupRespVO.java index 936cc28c..b51e07d3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupRespVO.java @@ -41,6 +41,11 @@ public class AttendanceGroupRespVO { @ExcelProperty("纬度") private String latitude; + @Schema(description = "地址") + @ExcelProperty("地址") + private String address; + + @Schema(description = "范围(米)") @ExcelProperty("范围(米)") private Integer scope; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupSaveReqVO.java index ac217805..dde5f75a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupSaveReqVO.java @@ -32,6 +32,9 @@ public class AttendanceGroupSaveReqVO { @Schema(description = "纬度") private String latitude; + @Schema(description = "地址") + private String address; + @Schema(description = "范围(米)") private Integer scope; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/group/AttendanceGroupDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/group/AttendanceGroupDO.java index d848cd3d..bccab8ec 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/group/AttendanceGroupDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/group/AttendanceGroupDO.java @@ -55,6 +55,10 @@ public class AttendanceGroupDO extends BaseDO { * 纬度 */ private String latitude; + /** + * 地址 + */ + private String address; /** * 范围(米) */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceService.java index bf4224ab..b8619dc3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceService.java @@ -85,7 +85,16 @@ public interface AttendanceService { /** * 获取当前登录用户所属的考勤组以及是否具有管理员权限 + * * @return */ List getTheAttendanceGroupToWhichTheCurrentlyLoggedInUserBelongsAndWhetherTheyHaveAdministratorRights(); + + /** + * 获取考勤规则 + * + * @param groupId + * @return + */ + AttendanceRulesVO getRules(Long groupId); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java index b7f33009..5b1e1b6e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java @@ -737,6 +737,18 @@ public class AttendanceServiceImpl implements AttendanceService { return attendanceGroupSystemVOS; } + @Override + public AttendanceRulesVO getRules(Long groupId) { + AttendanceRulesVO vo = new AttendanceRulesVO(); + AttendanceGroupDO group = attendanceGroupService.getGroup(groupId); + PunchService punchService = punchHandler.getResource(AttendanceGroupDO.getCodeByType(group.getType())); + List workRules = punchService.getRule(groupId); + vo.setFieldworkFlag(group.getFieldworkFlag()); + vo.setWorkRules(workRules); + vo.setOfficeLocation(group.getAddress()); + return vo; + } + /** * 外勤计算 * diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/fixed/AttendanceFixedService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/fixed/AttendanceFixedService.java index e28896ca..49e4267c 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/fixed/AttendanceFixedService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/fixed/AttendanceFixedService.java @@ -67,6 +67,8 @@ public interface AttendanceFixedService { */ AttendanceFixedDO getByGroupIdAndWeek(Long attendanceGroupId, Integer week); + List getByGroupId(Long attendanceGroupId); + List getByGroupIdAndWeek(List attendanceGroupIds, Integer week); /** diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/fixed/AttendanceFixedServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/fixed/AttendanceFixedServiceImpl.java index e3d3285a..1724b30c 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/fixed/AttendanceFixedServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/fixed/AttendanceFixedServiceImpl.java @@ -2,17 +2,21 @@ package cn.iocoder.yudao.module.system.service.attendance.fixed; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.Constants; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.system.controller.admin.attendance.dto.AttendancePunchPageDTO; import cn.iocoder.yudao.module.system.controller.admin.attendance.vo.AttendancePunchPageVO; +import cn.iocoder.yudao.module.system.controller.admin.attendance.vo.AttendanceRulesVO; import cn.iocoder.yudao.module.system.controller.admin.fixed.vo.AttendanceFixedPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.fixed.vo.AttendanceFixedRespVO; import cn.iocoder.yudao.module.system.controller.admin.fixed.vo.AttendanceFixedSaveReqVO; import cn.iocoder.yudao.module.system.controller.admin.groupshift.vo.AttendanceGroupShiftVO; import cn.iocoder.yudao.module.system.dal.dataobject.attendance.fixed.AttendanceFixedDO; import cn.iocoder.yudao.module.system.dal.dataobject.attendance.group.AttendanceGroupDO; +import cn.iocoder.yudao.module.system.dal.dataobject.attendance.groupshiftitem.AttendanceGroupShiftItemDO; import cn.iocoder.yudao.module.system.dal.mysql.attendance.fixed.AttendanceFixedMapper; import cn.iocoder.yudao.module.system.service.attendance.AttendanceService; import cn.iocoder.yudao.module.system.service.attendance.groupshift.AttendanceGroupShiftService; @@ -20,6 +24,7 @@ import cn.iocoder.yudao.module.system.service.attendance.punch.PunchService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Lazy; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -48,6 +53,8 @@ public class AttendanceFixedServiceImpl implements AttendanceFixedService, Punch private AttendanceService attendanceService; @Resource private AttendanceGroupShiftService attendanceGroupShiftService; + @Resource + private StringRedisTemplate stringRedisTemplate; @Override @Transactional(rollbackFor = Exception.class) @@ -141,6 +148,12 @@ public class AttendanceFixedServiceImpl implements AttendanceFixedService, Punch return null; } + @Override + public List getByGroupId(Long attendanceGroupId) { + return attendanceFixedMapper.selectList(new LambdaQueryWrapper() + .eq(attendanceGroupId != null, AttendanceFixedDO::getAttendanceGroupId, attendanceGroupId)); + } + @Override public List getByGroupIdAndWeek(List attendanceGroupIds, Integer week) { return attendanceFixedMapper.selectList(new LambdaQueryWrapper() @@ -224,5 +237,36 @@ public class AttendanceFixedServiceImpl implements AttendanceFixedService, Punch return vo; } + @Override + public List getRule(Long attendanceGroupId) { + List rules = new ArrayList<>(); + List list = this.getByGroupId(attendanceGroupId); + List attendanceGroupShiftIds = list.stream().map(AttendanceFixedDO::getAttendanceGroupShiftId).filter(Objects::nonNull).collect(Collectors.toList()); + List vos = attendanceGroupShiftService.listByShiftIds(attendanceGroupShiftIds); + Map map = vos.stream().collect(Collectors.toMap(AttendanceGroupShiftVO::getId, a -> a)); + LocalDateTime now = LocalDateTime.now(); + for (AttendanceFixedDO attendanceFixedDO : list) { + AttendanceRulesVO.WorkRules workRules = new AttendanceRulesVO.WorkRules(); + String weekday = DateUtils.convertToChineseWeekday(attendanceFixedDO.getWeekTime()); + workRules.setIndexStr(weekday); + workRules.setFlag(false); + if (now.getDayOfWeek().getValue() == attendanceFixedDO.getWeekTime()) { + workRules.setFlag(true); + } + if (attendanceFixedDO.getAttendanceGroupShiftId() == null) { + workRules.setRule("休息"); + } else { + AttendanceGroupShiftVO attendanceGroupShiftVOS = map.get(attendanceFixedDO.getAttendanceGroupShiftId()); + List itemRule = new ArrayList<>(); + for (AttendanceGroupShiftItemDO attendanceGroupShiftItemDO : attendanceGroupShiftVOS.getAttendanceGroupShiftItemDOList()) { + itemRule.add(attendanceGroupShiftItemDO.getBeginTime() + "-" + attendanceGroupShiftItemDO.getEndTime()); + } + String rule = String.join(",", itemRule); + workRules.setRule(rule); + } + rules.add(workRules); + } + return rules; + } } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupshift/AttendanceGroupShiftServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupshift/AttendanceGroupShiftServiceImpl.java index f2e6893c..9661327f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupshift/AttendanceGroupShiftServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupshift/AttendanceGroupShiftServiceImpl.java @@ -267,6 +267,7 @@ public class AttendanceGroupShiftServiceImpl implements AttendanceGroupShiftServ AttendanceGroupShiftVO attendanceGroupShiftVO = BeanUtils.toBean(item, AttendanceGroupShiftVO.class); List attendanceGroupShiftItemDOS = map.get(item.getId()); if (CollectionUtil.isNotEmpty(attendanceGroupShiftItemDOS)) { + attendanceGroupShiftItemDOS = attendanceGroupShiftItemDOS.stream().sorted(Comparator.comparing(AttendanceGroupShiftItemDO::getLevel)).collect(Collectors.toList()); attendanceGroupShiftVO.setAttendanceGroupShiftItemDOList(attendanceGroupShiftItemDOS); } vos.add(attendanceGroupShiftVO); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/punch/PunchService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/punch/PunchService.java index f2c747f8..745a14ec 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/punch/PunchService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/punch/PunchService.java @@ -2,6 +2,9 @@ package cn.iocoder.yudao.module.system.service.attendance.punch; import cn.iocoder.yudao.module.system.controller.admin.attendance.dto.AttendancePunchPageDTO; import cn.iocoder.yudao.module.system.controller.admin.attendance.vo.AttendancePunchPageVO; +import cn.iocoder.yudao.module.system.controller.admin.attendance.vo.AttendanceRulesVO; + +import java.util.List; /** * 打卡 Service 接口 @@ -17,4 +20,12 @@ public interface PunchService { * @return */ AttendancePunchPageVO getPunchPage(AttendancePunchPageDTO dto); + + /** + * 获取规则 + * + * @param attendanceGroupId + * @return + */ + List getRule(Long attendanceGroupId); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/scheduling/AttendanceSchedulingService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/scheduling/AttendanceSchedulingService.java index 735fadb9..6cbf5213 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/scheduling/AttendanceSchedulingService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/scheduling/AttendanceSchedulingService.java @@ -67,6 +67,8 @@ public interface AttendanceSchedulingService { */ AttendanceSchedulingDO getSchedulingByIndexDay(Long attendanceGroupId, Integer indexDay); + List getSchedulingByGroupId(Long attendanceGroupId); + Integer getCycleDay(Long attendanceGroupId); /** diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/scheduling/AttendanceSchedulingServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/scheduling/AttendanceSchedulingServiceImpl.java index 37209f35..b08143ea 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/scheduling/AttendanceSchedulingServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/scheduling/AttendanceSchedulingServiceImpl.java @@ -8,11 +8,13 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.system.controller.admin.attendance.dto.AttendancePunchPageDTO; import cn.iocoder.yudao.module.system.controller.admin.attendance.vo.AttendancePunchPageVO; +import cn.iocoder.yudao.module.system.controller.admin.attendance.vo.AttendanceRulesVO; import cn.iocoder.yudao.module.system.controller.admin.groupshift.vo.AttendanceGroupShiftVO; import cn.iocoder.yudao.module.system.controller.admin.scheduling.vo.AttendanceSchedulingPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.scheduling.vo.AttendanceSchedulingRespVO; import cn.iocoder.yudao.module.system.controller.admin.scheduling.vo.AttendanceSchedulingSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.attendance.group.AttendanceGroupDO; +import cn.iocoder.yudao.module.system.dal.dataobject.attendance.groupshiftitem.AttendanceGroupShiftItemDO; import cn.iocoder.yudao.module.system.dal.dataobject.attendance.scheduling.AttendanceSchedulingDO; import cn.iocoder.yudao.module.system.dal.mysql.attendance.scheduling.AttendanceSchedulingMapper; import cn.iocoder.yudao.module.system.service.attendance.AttendanceService; @@ -143,6 +145,12 @@ public class AttendanceSchedulingServiceImpl implements AttendanceSchedulingServ return null; } + @Override + public List getSchedulingByGroupId(Long attendanceGroupId) { + return schedulingMapper.selectList(new LambdaQueryWrapper() + .eq(AttendanceSchedulingDO::getAttendanceGroupId, attendanceGroupId)); + } + @Override public Integer getCycleDay(Long attendanceGroupId) { return Math.toIntExact(schedulingMapper.selectCount(new LambdaQueryWrapper() @@ -224,5 +232,40 @@ public class AttendanceSchedulingServiceImpl implements AttendanceSchedulingServ return vo; } + @Override + public List getRule(Long attendanceGroupId) { + List list = this.getSchedulingByGroupId(attendanceGroupId); + + List rules = new ArrayList<>(); + List attendanceGroupShiftIds = list.stream().map(AttendanceSchedulingDO::getAttendanceGroupShiftId).filter(Objects::nonNull).collect(Collectors.toList()); + List vos = attendanceGroupShiftService.listByShiftIds(attendanceGroupShiftIds); + Map map = vos.stream().collect(Collectors.toMap(AttendanceGroupShiftVO::getId, a -> a)); + //获取到当天是第几天 + String schedulingKey = Constants.SCHEDULING + Constants.UNDERLINE + attendanceGroupId; + String indexDayObj = stringRedisTemplate.opsForValue().get(schedulingKey); + + for (AttendanceSchedulingDO attendanceSchedulingDO : list) { + AttendanceRulesVO.WorkRules workRules = new AttendanceRulesVO.WorkRules(); + String indexDay = "第" + attendanceSchedulingDO.getIndexDay() + "天"; + workRules.setIndexStr(indexDay); + workRules.setFlag(false); + if (StrUtil.isNotEmpty(indexDayObj) && Integer.parseInt(indexDayObj) == attendanceSchedulingDO.getIndexDay()) { + workRules.setFlag(true); + } + if (attendanceSchedulingDO.getAttendanceGroupShiftId() == null) { + workRules.setRule("休息"); + } else { + AttendanceGroupShiftVO attendanceGroupShiftVOS = map.get(attendanceSchedulingDO.getAttendanceGroupShiftId()); + List itemRule = new ArrayList<>(); + for (AttendanceGroupShiftItemDO attendanceGroupShiftItemDO : attendanceGroupShiftVOS.getAttendanceGroupShiftItemDOList()) { + itemRule.add(attendanceGroupShiftItemDO.getBeginTime() + "-" + attendanceGroupShiftItemDO.getEndTime()); + } + String rule = String.join(",", itemRule); + workRules.setRule(rule); + } + rules.add(workRules); + } + return rules; + } } \ No newline at end of file