From a797b5801af481990e40c029221c55229291eae8 Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期三, 30 九月 2026 19:31:06 +0800
Subject: [PATCH] feat: 考勤节假日配置改为时间段、物料列表排序优化
---
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceHolidayServiceImpl.java | 43 ++++++++++++++++++++++++++-----------------
1 files changed, 26 insertions(+), 17 deletions(-)
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceHolidayServiceImpl.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceHolidayServiceImpl.java
index 6e96e27..d894d4c 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceHolidayServiceImpl.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceHolidayServiceImpl.java
@@ -21,7 +21,7 @@
/**
* 鑰冨嫟鑺傚亣鏃ラ厤缃� Service 瀹炵幇绫�
*
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
*/
@Service
@Validated
@@ -32,9 +32,10 @@
@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);
}
@@ -45,12 +46,10 @@
@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);
}
@@ -62,13 +61,23 @@
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());
}
}
@@ -84,16 +93,16 @@
@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();
--
Gitblit v1.9.3