| | |
| | | |
| | | @Override |
| | | public Long createAttendanceHoliday(HrmAttendanceHolidaySaveReqVO createReqVO) { |
| | | // 校验日期是否已存在配置 |
| | | validateAttendanceHolidayDateExists(createReqVO.getDate()); |
| | | validateDateRange(createReqVO); |
| | | validateDateRangeNoOverlap(createReqVO.getStartDate(), createReqVO.getEndDate(), null); |
| | | HrmAttendanceHolidayDO attendanceHoliday = BeanUtils.toBean(createReqVO, HrmAttendanceHolidayDO.class); |
| | | attendanceHoliday.setDate(createReqVO.getStartDate()); |
| | | if (attendanceHoliday.getIsLegal() == null) { |
| | | attendanceHoliday.setIsLegal(0); |
| | | } |
| | |
| | | @Override |
| | | public void updateAttendanceHoliday(HrmAttendanceHolidaySaveReqVO updateReqVO) { |
| | | validateAttendanceHolidayExists(updateReqVO.getId()); |
| | | // 如果日期变更,校验新日期是否已存在配置 |
| | | HrmAttendanceHolidayDO oldHoliday = attendanceHolidayMapper.selectById(updateReqVO.getId()); |
| | | if (!oldHoliday.getDate().equals(updateReqVO.getDate())) { |
| | | validateAttendanceHolidayDateExists(updateReqVO.getDate()); |
| | | } |
| | | validateDateRange(updateReqVO); |
| | | validateDateRangeNoOverlap(updateReqVO.getStartDate(), updateReqVO.getEndDate(), updateReqVO.getId()); |
| | | HrmAttendanceHolidayDO updateObj = BeanUtils.toBean(updateReqVO, HrmAttendanceHolidayDO.class); |
| | | updateObj.setDate(updateReqVO.getStartDate()); |
| | | attendanceHolidayMapper.updateById(updateObj); |
| | | } |
| | | |
| | |
| | | |
| | | private void validateAttendanceHolidayExists(Long id) { |
| | | if (attendanceHolidayMapper.selectById(id) == null) { |
| | | throw exception(ATTENDANCE_HOLIDAY_NOT_EXISTS); |
| | | throw exception(ATTENDANCE_HOLIDAY_NOT_EXISTS, id); |
| | | } |
| | | } |
| | | |
| | | private void validateAttendanceHolidayDateExists(LocalDate date) { |
| | | if (attendanceHolidayMapper.selectByDate(date) != null) { |
| | | throw exception(ATTENDANCE_HOLIDAY_DATE_EXISTS); |
| | | private void validateDateRange(HrmAttendanceHolidaySaveReqVO reqVO) { |
| | | if (reqVO.getEndDate().isBefore(reqVO.getStartDate())) { |
| | | throw exception(ATTENDANCE_HOLIDAY_DATE_RANGE_INVALID, reqVO.getEndDate(), reqVO.getStartDate()); |
| | | } |
| | | } |
| | | |
| | | private void validateDateRangeNoOverlap(LocalDate startDate, LocalDate endDate, Long excludeId) { |
| | | for (HrmAttendanceHolidayDO exist : attendanceHolidayMapper.selectListByDateRange(startDate, endDate)) { |
| | | if (excludeId != null && excludeId.equals(exist.getId())) { |
| | | continue; |
| | | } |
| | | throw exception(ATTENDANCE_HOLIDAY_RANGE_OVERLAP, startDate, endDate, |
| | | exist.getName(), exist.getStartDate(), exist.getEndDate()); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | @Override |
| | | public List<HrmAttendanceHolidayDO> getAttendanceHolidayListByDateRange(LocalDate startDate, LocalDate endDate) { |
| | | return attendanceHolidayMapper.selectListByDateBetween(startDate, endDate); |
| | | return attendanceHolidayMapper.selectListByDateRange(startDate, endDate); |
| | | } |
| | | |
| | | @Override |
| | | public boolean isWorkDay(LocalDate date) { |
| | | // 1. 查询节假日配置 |
| | | HrmAttendanceHolidayDO holiday = attendanceHolidayMapper.selectByDate(date); |
| | | if (holiday != null) { |
| | | // 1. 查询覆盖该日期的节假日配置(配置时间段不允许重叠,至多命中一条) |
| | | List<HrmAttendanceHolidayDO> holidays = attendanceHolidayMapper.selectListByDateRange(date, date); |
| | | if (!holidays.isEmpty()) { |
| | | // 有配置时,按配置判断 |
| | | return HrmAttendanceHolidayTypeEnum.WORK_DAY.getType().equals(holiday.getType()); |
| | | return HrmAttendanceHolidayTypeEnum.WORK_DAY.getType().equals(holidays.get(0).getType()); |
| | | } |
| | | // 2. 无配置时,按周末判断 |
| | | DayOfWeek dayOfWeek = date.getDayOfWeek(); |