From 1a3f5db043fd381b60a0a5f40687136274a2cbd1 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 27 二月 2026 09:57:41 +0800
Subject: [PATCH] Merge branch 'refs/heads/dev_New' into dev_New_kthg

---
 src/main/java/com/ruoyi/staff/task/PersonalAttendanceRecordsTask.java |   76 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 76 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
new file mode 100644
index 0000000..9730df6
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/task/PersonalAttendanceRecordsTask.java
@@ -0,0 +1,76 @@
+package com.ruoyi.staff.task;
+
+import com.ruoyi.staff.pojo.PersonalAttendanceRecords;
+import com.ruoyi.staff.pojo.StaffOnJob;
+import com.ruoyi.staff.service.PersonalAttendanceRecordsService;
+import com.ruoyi.staff.mapper.PersonalAttendanceRecordsMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 涓汉鑰冨嫟璁板綍瀹氭椂浠诲姟
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-02-09
+ */
+@Slf4j
+@Component
+public class PersonalAttendanceRecordsTask {
+
+    @Autowired
+    private PersonalAttendanceRecordsMapper personalAttendanceRecordsMapper;
+
+    @Autowired
+    private PersonalAttendanceRecordsService personalAttendanceRecordsService;
+
+    /**
+     * 姣忓ぉ鍑屾櫒鐢熸垚鏄ㄦ棩鐨勭己鍕よ褰�
+     * 瀹氭椂浠诲姟锛氭瘡澶╁噷鏅�1鐐规墽琛�
+     * 鎺掗櫎浠婂ぉ鍒氬叆鑱岀殑鍛樺伐
+     */
+    @Scheduled(cron = "0 0 1 * * ?")
+    public void generateAbsenceRecords() {
+        try {
+            // 鑾峰彇鏄ㄦ棩鏃ユ湡
+            LocalDate yesterday = LocalDate.now().minusDays(1);
+
+            // 鐩存帴鏌ヨ鏄ㄥぉ娌℃湁鑰冨嫟璁板綍鐨勫湪鑱屽憳宸ワ紙鎺掗櫎浠婂ぉ鍒氬叆鑱岀殑锛�
+            LocalDateTime todayStart = LocalDate.now().atStartOfDay();
+            List<StaffOnJob> staffWithoutAttendance = personalAttendanceRecordsMapper.selectStaffWithoutAttendanceRecordBeforeTime(yesterday, todayStart);
+
+            // 閬嶅巻娌℃湁鑰冨嫟璁板綍鐨勫憳宸ワ紝鐢熸垚缂哄嫟璁板綍
+            for (StaffOnJob staff : staffWithoutAttendance) {
+                try {
+                    boolean exists = personalAttendanceRecordsMapper.existsAttendanceRecord(staff.getId(), yesterday);
+                    if (exists) {
+                        continue;
+                    }
+
+                    PersonalAttendanceRecords absenceRecord = new PersonalAttendanceRecords();
+                    absenceRecord.setStaffOnJobId(staff.getId());
+                    absenceRecord.setDate(yesterday);
+                    absenceRecord.setStatus(4); // 璁剧疆鐘舵�佷负缂哄嫟
+                    absenceRecord.setRemark("绯荤粺鑷姩鐢熸垚-缂哄嫟");
+                    absenceRecord.setCreateTime(LocalDateTime.now());
+                    absenceRecord.setUpdateTime(LocalDateTime.now());
+                    absenceRecord.setTenantId(staff.getTenantId());
+                    personalAttendanceRecordsService.save(absenceRecord);
+
+                } catch (Exception e) {
+                    log.error("涓哄憳宸}鐢熸垚缂哄嫟璁板綍澶辫触锛歿}", staff.getStaffName(), e.getMessage(), e);
+                }
+            }
+
+            log.info("鏄ㄦ棩缂哄嫟璁板綍鐢熸垚瀹屾垚");
+        } catch (Exception e) {
+            log.error("鐢熸垚鏄ㄦ棩缂哄嫟璁板綍浠诲姟鎵ц澶辫触锛歿}", e.getMessage(), e);
+        }
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3