From 33ea58c636110537269eab1af3c820099ab14e7f Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 26 十月 2026 20:53:02 +0800
Subject: [PATCH] fix(attendance): 周末和法定节假日不再生成缺勤记录

---
 src/main/java/com/ruoyi/staff/task/PersonalAttendanceRecordsTask.java |   26 ++++++++++++++++++++++++++
 1 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/staff/task/PersonalAttendanceRecordsTask.java b/src/main/java/com/ruoyi/staff/task/PersonalAttendanceRecordsTask.java
index 404dae7..0111806 100644
--- a/src/main/java/com/ruoyi/staff/task/PersonalAttendanceRecordsTask.java
+++ b/src/main/java/com/ruoyi/staff/task/PersonalAttendanceRecordsTask.java
@@ -2,6 +2,8 @@
 
 import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.approve.mapper.HolidaySettingsMapper;
+import com.ruoyi.approve.pojo.HolidaySettings;
 import com.ruoyi.staff.dto.PerformanceShiftAddDto;
 import com.ruoyi.staff.mapper.PersonalAttendanceLocationConfigMapper;
 import com.ruoyi.staff.mapper.PersonalAttendanceRecordsMapper;
@@ -42,6 +44,7 @@
     private final PersonalAttendanceLocationConfigMapper personalAttendanceLocationConfigMapper;
     private final StaffOnJobMapper staffOnJobMapper;
     private final PersonalShiftService personalShiftService;
+    private final HolidaySettingsMapper holidaySettingsMapper;
 
     /**
      * 姣忓ぉ鍑屾櫒鐢熸垚鏄ㄦ棩鐨勭己鍕よ褰�
@@ -53,6 +56,12 @@
         try {
             // 鑾峰彇鏄ㄦ棩鏃ユ湡
             LocalDate yesterday = LocalDate.now().minusDays(1);
+
+            // 鍛ㄦ湯銆佹硶瀹氳妭鍋囨棩鏄紤鎭棩锛屼笉鐢熸垚缂哄嫟璁板綍
+            if (!isWorkingDay(yesterday)) {
+                log.info("鏄ㄦ棩{}涓哄懆鏈垨娉曞畾鑺傚亣鏃ワ紝璺宠繃缂哄嫟璁板綍鐢熸垚", yesterday);
+                return;
+            }
 
             // 鐩存帴鏌ヨ鏄ㄥぉ娌℃湁鑰冨嫟璁板綍鐨勫湪鑱屽憳宸ワ紙鎺掗櫎浠婂ぉ鍒氬叆鑱岀殑锛�
             LocalDateTime todayStart = LocalDate.now().atStartOfDay();
@@ -88,6 +97,23 @@
     }
 
     /**
+     * 鍒ゆ柇鏌愬ぉ鏄惁涓哄伐浣滄棩銆�
+     * 鍋囨湡璁剧疆閲屸�滆皟浼戜笂鐝��(adjustment) 绠楀伐浣滄棩锛涘叾浠栧亣鏈燂紙娉曞畾鑺傚亣鏃ョ瓑锛夌畻浼戞伅鏃ワ紱
+     * 娌℃湁閰嶇疆鍋囨湡鐨勬棩鏈熸寜鑷劧鍛ㄥ垽鏂紝鍛ㄥ叚銆佸懆鏃ヤ紤鎭��
+     */
+    private boolean isWorkingDay(LocalDate date) {
+        List<HolidaySettings> holidays = holidaySettingsMapper.selectList(
+                Wrappers.<HolidaySettings>lambdaQuery()
+                        .eq(HolidaySettings::getStatus, "active")
+                        .le(HolidaySettings::getStartDate, date)
+                        .ge(HolidaySettings::getEndDate, date));
+        if (CollectionUtil.isNotEmpty(holidays)) {
+            return holidays.stream().anyMatch(h -> "adjustment".equals(h.getType()));
+        }
+        return date.getDayOfWeek().getValue() < 6;
+    }
+
+    /**
      * 瀹氭椂浠诲姟,姣忎釜鏈�1鍙风殑00:00:00缁欎笅涓�涓湀鎺掔彮
      * 缁欐瘡涓汉閮借繘琛屾帓鐝�(榛樿鏃╃彮)
      */

--
Gitblit v1.9.3