diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/holiday/HolidayGrantJob.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/holiday/HolidayGrantJob.java index adbd0bf6..576ac142 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/holiday/HolidayGrantJob.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/holiday/HolidayGrantJob.java @@ -80,7 +80,8 @@ public class HolidayGrantJob { editList.add(holidayBalanceSettingDO); Long holidaySettingId = holidayBalanceSettingDO.getHolidaySettingId(); // 发放假期 - holidayUserRecordService.grant(holidaySettingMap.get(holidaySettingId), holidaySettingRangeMap.get(holidaySettingId), holidayBalanceSettingDO, holidayWorkingAgeDOMap.get(holidaySettingId)); + holidayUserRecordService.grant(holidaySettingMap.get(holidaySettingId), holidaySettingRangeMap.get(holidaySettingId), + holidayBalanceSettingDO, holidayWorkingAgeDOMap.get(holidaySettingId), false); } } // -- // 按照员工入职日 每年员工入职日 @@ -91,7 +92,8 @@ public class HolidayGrantJob { for (HolidayBalanceSettingDO holidayBalanceSettingDO : employmentGrantList) { Long holidaySettingId = holidayBalanceSettingDO.getHolidaySettingId(); // 发放假期 - holidayUserRecordService.grant(holidaySettingMap.get(holidaySettingId), holidaySettingRangeMap.get(holidaySettingId), holidayBalanceSettingDO, holidayWorkingAgeDOMap.get(holidaySettingId)); + holidayUserRecordService.grant(holidaySettingMap.get(holidaySettingId), holidaySettingRangeMap.get(holidaySettingId), + holidayBalanceSettingDO, holidayWorkingAgeDOMap.get(holidaySettingId), false); } } if (CollectionUtil.isNotEmpty(editList)) { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupuser/AttendanceGroupUserServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupuser/AttendanceGroupUserServiceImpl.java index 2426b9ed..c0f5f177 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupuser/AttendanceGroupUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupuser/AttendanceGroupUserServiceImpl.java @@ -1,6 +1,8 @@ package cn.iocoder.yudao.module.system.service.attendance.groupuser; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.LocalDateTimeUtil; import cn.iocoder.yudao.framework.common.Constants; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -10,11 +12,17 @@ import cn.iocoder.yudao.module.system.controller.admin.groupuser.vo.AttendanceGr import cn.iocoder.yudao.module.system.controller.admin.groupuser.vo.AttendanceGroupUserSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.attendance.groupuser.AttendanceGroupUserDO; import cn.iocoder.yudao.module.system.dal.dataobject.attendance.punchrecord.AttendancePunchRecordDO; +import cn.iocoder.yudao.module.system.dal.dataobject.holiday.holidaysetting.HolidaySettingDO; +import cn.iocoder.yudao.module.system.dal.dataobject.holiday.holidaysettingrange.HolidaySettingRangeDO; import cn.iocoder.yudao.module.system.dal.mysql.attendance.groupuser.AttendanceGroupUserMapper; import cn.iocoder.yudao.module.system.dal.mysql.attendance.punchrecord.AttendancePunchRecordMapper; import cn.iocoder.yudao.module.system.service.attendance.punch.dto.AttendanceOnTheDayDTO; import cn.iocoder.yudao.module.system.service.attendance.punchrecord.AttendancePunchRecordService; +import cn.iocoder.yudao.module.system.service.holiday.holidaysetting.HolidaySettingService; +import cn.iocoder.yudao.module.system.service.holiday.holidaysettingrange.HolidaySettingRangeService; +import cn.iocoder.yudao.module.system.service.holiday.holidayuserrecord.HolidayUserRecordService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.context.annotation.Lazy; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -25,6 +33,7 @@ import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -47,6 +56,13 @@ public class AttendanceGroupUserServiceImpl implements AttendanceGroupUserServic private AttendancePunchRecordMapper attendancePunchRecordMapper; @Resource private AttendancePunchRecordService attendancePunchRecordService; + @Resource + private HolidayUserRecordService holidayUserRecordService; + @Resource + private HolidaySettingRangeService holidaySettingRangeService; + @Resource + @Lazy + private HolidaySettingService holidaySettingService; @Override public AttendanceGroupUserCreateOrDelVO createOrDel(Long attendanceGroupId, List userIds) { @@ -66,10 +82,28 @@ public class AttendanceGroupUserServiceImpl implements AttendanceGroupUserServic .in(AttendanceGroupUserDO::getUserId, delIds)); } if (CollectionUtil.isNotEmpty(saveIds)) { + List items = new ArrayList<>(); for (Long userId : saveIds) { list.add(new AttendanceGroupUserDO().setUserId(userId).setAttendanceGroupId(attendanceGroupId)); + + HolidaySettingRangeDO item = new HolidaySettingRangeDO(); + item.setType(3); + item.setObjectId(userId); + items.add(item); } groupUserMapper.insertBatch(list); + // -- 新添加到考勤组的 需要同步更新员工假期余额 + // -- 获取当前用户所在的考勤组 - 再根据考勤组 查询对应的加班规则 + List holidaySettingIds = holidaySettingRangeService.getHolidaySettingIdsByGroupId(attendanceGroupId); + + if (CollUtil.isNotEmpty(holidaySettingIds)) { + List holidaySettings = holidaySettingService.getHolidaySettingByIds(holidaySettingIds); + Map holidaySettingMap = holidaySettings.stream().collect(Collectors.toMap(HolidaySettingDO::getId, holidaySettingDO -> holidaySettingDO)); + for (HolidaySettingDO holidaySetting : holidaySettings) { + holidayUserRecordService.grant(holidaySetting, + items, holidaySettingMap.get(holidaySetting.getId()).getHolidayBalanceSettingDO(), ListUtil.empty(), true); + } + } } vo.setAttendanceGroupId(attendanceGroupId); vo.setDelUserIds(delIds); @@ -151,4 +185,4 @@ public class AttendanceGroupUserServiceImpl implements AttendanceGroupUserServic .stream().map(AttendanceGroupUserDO::getUserId).collect(Collectors.toList()); } -} \ 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/holiday/holidaysetting/HolidaySettingService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidaysetting/HolidaySettingService.java index 0c341fbb..c948c6b5 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidaysetting/HolidaySettingService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidaysetting/HolidaySettingService.java @@ -102,4 +102,12 @@ public interface HolidaySettingService { * @return */ List getLimitBalanceHolidayList(); + + /** + * 根据ids获取 + * + * @param holidaySettingIds + * @return + */ + List getHolidaySettingByIds(List holidaySettingIds); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidaysetting/HolidaySettingServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidaysetting/HolidaySettingServiceImpl.java index f828ebca..d981c507 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidaysetting/HolidaySettingServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidaysetting/HolidaySettingServiceImpl.java @@ -289,6 +289,16 @@ public class HolidaySettingServiceImpl implements HolidaySettingService { return holidaySettingMapper.getLimitBalanceHolidayList(); } + @Override + public List getHolidaySettingByIds(List holidaySettingIds) { + List holidaySettingDOS = holidaySettingMapper.selectBatchIds(holidaySettingIds); + Map map = holidayBalanceSettingService.selectBySettingIds(holidaySettingIds); + for (HolidaySettingDO holidaySettingDO : holidaySettingDOS) { + holidaySettingDO.setHolidayBalanceSettingDO(map.get(holidaySettingDO.getId())); + } + return holidaySettingDOS; + } + /** * 编辑假期设置 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidaysettingrange/HolidaySettingRangeService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidaysettingrange/HolidaySettingRangeService.java index 134eb400..7b6bace4 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidaysettingrange/HolidaySettingRangeService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidaysettingrange/HolidaySettingRangeService.java @@ -84,4 +84,20 @@ public interface HolidaySettingRangeService { * @return */ List getListByHolidaySettingIds(List holidaySettingIds); + + /** + * 根据考勤组id获取当前考勤组所在的假期 + * + * @param groupId + * @return + */ + List getByGroupId(Long groupId); + + /** + * 根据考勤组id 获取和考勤组关联的假期ids + * + * @param groupId + * @return + */ + List getHolidaySettingIdsByGroupId(Long groupId); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidaysettingrange/HolidaySettingRangeServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidaysettingrange/HolidaySettingRangeServiceImpl.java index 7277b5bb..81174ec2 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidaysettingrange/HolidaySettingRangeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidaysettingrange/HolidaySettingRangeServiceImpl.java @@ -101,11 +101,23 @@ public class HolidaySettingRangeServiceImpl implements HolidaySettingRangeServic @Override public List getListByHolidaySettingIds(List holidaySettingIds) { - if (CollUtil.isEmpty(holidaySettingIds)){ + if (CollUtil.isEmpty(holidaySettingIds)) { return Collections.emptyList(); } return holidaySettingRangeMapper.selectList(new LambdaQueryWrapper() .in(HolidaySettingRangeDO::getHolidaySettingId, holidaySettingIds)); } + @Override + public List getByGroupId(Long groupId) { + return holidaySettingRangeMapper.selectList(new LambdaQueryWrapper() + .eq(HolidaySettingRangeDO::getType, 1) + .eq(HolidaySettingRangeDO::getObjectId, groupId)); + } + + @Override + public List getHolidaySettingIdsByGroupId(Long groupId) { + return this.getByGroupId(groupId).stream().map(HolidaySettingRangeDO::getHolidaySettingId).collect(Collectors.toList()); + } + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidayuserrecord/HolidayUserRecordService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidayuserrecord/HolidayUserRecordService.java index fdfc1220..795c580b 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidayuserrecord/HolidayUserRecordService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidayuserrecord/HolidayUserRecordService.java @@ -78,7 +78,7 @@ public interface HolidayUserRecordService { * @param holidayBalanceSettingDO * @param holidayWorkingAgeDOS */ - void grant(HolidaySettingDO holidaySetting, List holidaySettingRangeDOS, HolidayBalanceSettingDO holidayBalanceSettingDO, List holidayWorkingAgeDOS); + void grant(HolidaySettingDO holidaySetting, List holidaySettingRangeDOS, HolidayBalanceSettingDO holidayBalanceSettingDO, List holidayWorkingAgeDOS, Boolean recordZero); /** * 清空假期余额 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidayuserrecord/HolidayUserRecordServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidayuserrecord/HolidayUserRecordServiceImpl.java index 25ebc8ad..abff318e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidayuserrecord/HolidayUserRecordServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidayuserrecord/HolidayUserRecordServiceImpl.java @@ -94,7 +94,8 @@ public class HolidayUserRecordServiceImpl implements HolidayUserRecordService { List newHolidayUserRecordDOList = new ArrayList<>(); List newHolidayUserDOList = new ArrayList<>(); String remark = myself.getNickname() + " 为" + targetUser.getNickname() + (createReqVO.getDirection() == 0 ? "增加" : "减去"); - this.calculateUserHolidays(userQuotaMap, userId, holidayUserDOMap, holidaySetting, holidayBalanceSettingDO, newHolidayUserRecordDOList, newHolidayUserDOList, now, remark, createReqVO.getDirection(), createReqVO.getReason()); + this.calculateUserHolidays(userQuotaMap, userId, holidayUserDOMap, holidaySetting, holidayBalanceSettingDO, newHolidayUserRecordDOList, + newHolidayUserDOList, now, remark, createReqVO.getDirection(), createReqVO.getReason(), false); if (CollUtil.isNotEmpty(newHolidayUserRecordDOList)) { holidayUserRecordMapper.insertBatch(newHolidayUserRecordDOList); @@ -184,7 +185,8 @@ public class HolidayUserRecordServiceImpl implements HolidayUserRecordService { List newHolidayUserRecordDOList = new ArrayList<>(); List newHolidayUserDOList = new ArrayList<>(); String remark = targetUser.getNickname() + "使用了 "; - this.calculateUserHolidays(userQuotaMap, dto.getUserId(), holidayUserDOMap, holidaySetting, holidayBalanceSettingDO, newHolidayUserRecordDOList, newHolidayUserDOList, now, remark, dto.getDirection(), dto.getReason()); + this.calculateUserHolidays(userQuotaMap, dto.getUserId(), holidayUserDOMap, holidaySetting, holidayBalanceSettingDO, + newHolidayUserRecordDOList, newHolidayUserDOList, now, remark, dto.getDirection(), dto.getReason(), false); List editList = new ArrayList<>(); if (dto.getDirection() == 1) { @@ -292,7 +294,8 @@ public class HolidayUserRecordServiceImpl implements HolidayUserRecordService { @Override - public void grant(HolidaySettingDO holidaySetting, List holidaySettingRangeDOS, HolidayBalanceSettingDO holidayBalanceSettingDO, List holidayWorkingAgeDOS) { + public void grant(HolidaySettingDO holidaySetting, List holidaySettingRangeDOS, + HolidayBalanceSettingDO holidayBalanceSettingDO, List holidayWorkingAgeDOS, Boolean recordZero) { // -- 先查询出所有用户 List users = this.getUsersByRange(holidaySetting, holidaySettingRangeDOS); // -- 计算获取每个人的假期额度 @@ -334,7 +337,8 @@ public class HolidayUserRecordServiceImpl implements HolidayUserRecordService { } for (Long userId : userIds) { String remark = "系统按照规则自动 增加"; - this.calculateUserHolidays(userQuotaMap, userId, holidayUserDOMap, holidaySetting, holidayBalanceSettingDO, newHolidayUserRecordDOList, newHolidayUserDOList, now, remark, 0, null); + this.calculateUserHolidays(userQuotaMap, userId, holidayUserDOMap, holidaySetting, holidayBalanceSettingDO, + newHolidayUserRecordDOList, newHolidayUserDOList, now, remark, 0, null, recordZero); } // TODO: 2024/10/23 这里可能还会慢 if (CollUtil.isNotEmpty(newHolidayUserRecordDOList)) { @@ -427,10 +431,10 @@ public class HolidayUserRecordServiceImpl implements HolidayUserRecordService { private void calculateUserHolidays(Map userQuotaMap, Long userId, Map holidayUserDOMap, HolidaySettingDO holidaySetting, HolidayBalanceSettingDO holidayBalanceSettingDO, List newHolidayUserRecordDOList, List newHolidayUserDOList, - LocalDateTime now, String remark, Integer direction, String reason) { + LocalDateTime now, String remark, Integer direction, String reason, Boolean recordZero) { BigDecimal quota = userQuotaMap.get(userId); - // -- 如果是0的话就不记录了 - if (quota == null || BigDecimal.ZERO.compareTo(quota) == 0) { + // -- 如果是0的话就不记录了 -- 如果不记录0 并且是0 直接return + if (quota == null || (BigDecimal.ZERO.compareTo(quota) == 0 && !recordZero)) { return; } HolidayUserDO holidayUserDO = holidayUserDOMap.get(userId); @@ -783,7 +787,8 @@ public class HolidayUserRecordServiceImpl implements HolidayUserRecordService { List newHolidayUserRecordDOList = new ArrayList<>(); List newHolidayUserDOList = new ArrayList<>(); String remark = "加班" + (dto.getDirection() == 0 ? "增加" : "减去"); - this.calculateUserHolidays(userQuotaMap, userId, holidayUserDOMap, holidaySetting, holidayBalanceSettingDO, newHolidayUserRecordDOList, newHolidayUserDOList, now, remark, dto.getDirection(), dto.getReason()); + this.calculateUserHolidays(userQuotaMap, userId, holidayUserDOMap, holidaySetting, holidayBalanceSettingDO, + newHolidayUserRecordDOList, newHolidayUserDOList, now, remark, dto.getDirection(), dto.getReason(), false); if (CollUtil.isNotEmpty(newHolidayUserRecordDOList)) { holidayUserRecordMapper.insertBatch(newHolidayUserRecordDOList); }