From 41ba09635ca0e5d79117a4364c25b1a5e93c4f13 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 29 九月 2026 18:22:38 +0800
Subject: [PATCH] ``` refactor(scheduler): 优化定时任务调度器的重复任务处理和启动注册机制

---
 src/main/java/com/ruoyi/device/init/MaintenanceTaskRegistrar.java |   48 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 48 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/device/init/MaintenanceTaskRegistrar.java b/src/main/java/com/ruoyi/device/init/MaintenanceTaskRegistrar.java
new file mode 100644
index 0000000..59b4c6a
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/init/MaintenanceTaskRegistrar.java
@@ -0,0 +1,48 @@
+package com.ruoyi.device.init;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.device.mapper.MaintenanceTaskMapper;
+import com.ruoyi.device.pojo.MaintenanceTask;
+import com.ruoyi.device.service.impl.MaintenanceTaskScheduler;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 鍚姩鏃舵妸宸插惎鐢ㄧ殑淇濆吇瀹氭椂浠诲姟娉ㄥ唽鍒拌皟搴﹀櫒锛屼繚璇佸巻鍙叉暟鎹紙鐩存帴鍐欏簱銆佷粠鏈粡杩� service锛変篃鑳借鎵ц
+ */
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class MaintenanceTaskRegistrar implements ApplicationRunner {
+
+    private final MaintenanceTaskMapper maintenanceTaskMapper;
+    private final MaintenanceTaskScheduler maintenanceTaskScheduler;
+
+    @Override
+    public void run(ApplicationArguments args) {
+        try {
+            List<MaintenanceTask> tasks = maintenanceTaskMapper.selectList(
+                    new QueryWrapper<MaintenanceTask>().eq("deleted", 0).eq("is_active", 1));
+            int registered = 0;
+            for (MaintenanceTask task : tasks) {
+                try {
+                    if (maintenanceTaskScheduler.isRegistered(task.getId())) {
+                        continue;
+                    }
+                    maintenanceTaskScheduler.scheduleMaintenanceTask(task);
+                    registered++;
+                } catch (Exception e) {
+                    log.warn("淇濆吇瀹氭椂浠诲姟娉ㄥ唽澶辫触 id={} name={}", task.getId(), task.getTaskName(), e);
+                }
+            }
+            log.info("淇濆吇瀹氭椂浠诲姟娉ㄥ唽瀹屾垚锛氬緟娉ㄥ唽 {} 鏉★紝鏈鏂版敞鍐� {} 鏉�", tasks.size(), registered);
+        } catch (Exception e) {
+            log.error("淇濆吇瀹氭椂浠诲姟鍚姩娉ㄥ唽澶辫触", e);
+        }
+    }
+}

--
Gitblit v1.9.3