From 0481b3942353f83c8506d77a0fc1a447a6942763 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 20 七月 2026 18:52:58 +0800
Subject: [PATCH] fix: 设备保养和巡检定时任务修改

---
 src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java |  111 +++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 70 insertions(+), 41 deletions(-)

diff --git a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java
index ec7a8e3..2dfa564 100644
--- a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java
+++ b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java
@@ -27,13 +27,13 @@
     /**
      * 娣诲姞鏂颁换鍔″埌璋冨害鍣�
      */
-    public void scheduleMaintenanceTask(MaintenanceTask task){
+    public void scheduleMaintenanceTask(MaintenanceTask task) {
         try {
             JobDetail jobDetail = buildJobDetail(task);
             Trigger trigger = buildJobTrigger(task, jobDetail);
             scheduler.scheduleJob(jobDetail, trigger);
-        }catch (SchedulerException e){
-            log.error("SchedulerException scheduleMaintenanceTask ERROR",e);
+        } catch (SchedulerException e) {
+            log.error("SchedulerException scheduleMaintenanceTask ERROR", e);
             throw new RuntimeException(e);
         }
     }
@@ -41,34 +41,54 @@
     /**
      * 鏇存柊宸叉湁浠诲姟
      */
-    public void rescheduleMaintenanceTask(MaintenanceTask task){
-       try{
-           TriggerKey triggerKey = new TriggerKey("triggerMaintenanceTask_" + task.getId());
+    public void rescheduleMaintenanceTask(MaintenanceTask task) {
+        try {
+            TriggerKey triggerKey = new TriggerKey("triggerMaintenanceTask_" + task.getId());
+            JobKey jobKey = new JobKey("MaintenanceTask_" + task.getId());
 
-           // 鑾峰彇鐜版湁瑙﹀彂鍣ㄥ苟杞崲涓� CronTrigger
-           Trigger oldTrigger = scheduler.getTrigger(triggerKey);
-           if (!(oldTrigger instanceof CronTrigger)) {
-               throw new SchedulerException("Existing trigger is not a CronTrigger");
-           }
+            Trigger oldTrigger = scheduler.getTrigger(triggerKey);
 
-           // 3. 鏋勫缓CronTrigger锛岀‘淇濇寔涔呭寲閰嶇疆
-           CronTrigger newTrigger = TriggerBuilder.newTrigger()
-                   .withIdentity(triggerKey)                // 鍞竴鏍囪瘑锛岀敤浜庢寔涔呭寲瀛樺偍
-                   .withDescription(task.getTaskName() + "_TRIGGER") // 瑙﹀彂鍣ㄦ弿杩�
-                   .forJob(oldTrigger.getJobKey())                       // 鍏宠仈瀵瑰簲鐨凧ob
-                   .withSchedule(CronScheduleBuilder
-                           .cronSchedule(convertToCronExpression(task)) // 閿欒繃鎵ц鏃剁殑绛栫暐锛堟牴鎹笟鍔¤皟鏁达級
-                   )
-                   // 4. 璁剧疆寮�濮嬫椂闂达紙鑻ヤ负null鍒欑珛鍗崇敓鏁堬級
-                   .startAt(task.getNextExecutionTime() != null
-                           ? Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant())
-                           : new Date())
-                   .build();
-           scheduler.rescheduleJob(triggerKey, newTrigger);
-       }catch (SchedulerException e){
-           log.error("SchedulerException rescheduleMaintenanceTask ERROR",e);
-           throw new RuntimeException(e);
-       }
+            if (oldTrigger == null) {
+                if (!scheduler.checkExists(jobKey)) {
+                    JobDetail jobDetail = buildJobDetail(task);
+                    Trigger newTrigger = buildJobTrigger(task, jobDetail);
+                    scheduler.scheduleJob(jobDetail, newTrigger);
+                } else {
+                    Trigger newTrigger = buildJobTrigger(task, scheduler.getJobDetail(jobKey));
+                    scheduler.scheduleJob(newTrigger);
+                }
+                return;
+            }
+
+            if (!(oldTrigger instanceof CronTrigger)) {
+                scheduler.unscheduleJob(triggerKey);
+                if (!scheduler.checkExists(jobKey)) {
+                    JobDetail jobDetail = buildJobDetail(task);
+                    Trigger newTrigger = buildJobTrigger(task, jobDetail);
+                    scheduler.scheduleJob(jobDetail, newTrigger);
+                } else {
+                    Trigger newTrigger = buildJobTrigger(task, scheduler.getJobDetail(jobKey));
+                    scheduler.scheduleJob(newTrigger);
+                }
+                return;
+            }
+
+            CronTrigger newTrigger = TriggerBuilder.newTrigger()
+                    .withIdentity(triggerKey)                // 鍞竴鏍囪瘑锛岀敤浜庢寔涔呭寲瀛樺偍
+                    .withDescription(task.getTaskName() + "_TRIGGER") // 瑙﹀彂鍣ㄦ弿杩�
+                    .forJob(oldTrigger.getJobKey())                       // 鍏宠仈瀵瑰簲鐨凧ob
+                    .withSchedule(CronScheduleBuilder
+                            .cronSchedule(convertToCronExpression(task)) // 閿欒繃鎵ц鏃剁殑绛栫暐锛堟牴鎹笟鍔¤皟鏁达級
+                    )
+                    .startAt(task.getNextExecutionTime() != null
+                            ? Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant())
+                            : new Date())
+                    .build();
+            scheduler.rescheduleJob(triggerKey, newTrigger);
+        } catch (SchedulerException e) {
+            log.error("SchedulerException rescheduleMaintenanceTask ERROR", e);
+            throw new RuntimeException(e);
+        }
     }
 
     /**
@@ -90,12 +110,12 @@
     /**
      * 鍒犻櫎浠诲姟
      */
-    public void unscheduleMaintenanceTask(Long taskId){
+    public void unscheduleMaintenanceTask(Long taskId) {
         try {
             JobKey jobKey = new JobKey("MaintenanceTask_" + taskId);
             scheduler.deleteJob(jobKey);
-        }catch (SchedulerException e){
-            log.error("SchedulerException unscheduleMaintenanceTask ERROR",e);
+        } catch (SchedulerException e) {
+            log.error("SchedulerException unscheduleMaintenanceTask ERROR", e);
             throw new RuntimeException(e);
         }
     }
@@ -143,6 +163,7 @@
                         : new Date())
                 .build();
     }
+
     private String convertToCronExpression(MaintenanceTask task) {
         // 鍙傛暟鏍¢獙
         if (task == null || task.getFrequencyType() == null || task.getFrequencyDetail() == null) {
@@ -264,15 +285,23 @@
     // 杞崲鍗曚釜鏄熸湡鍑犲悕绉�
     private String convertSingleDayName(String dayName) {
         switch (dayName.toUpperCase()) {
-            case "MON": return "MON";
-            case "TUE": return "TUE";
-            case "WED": return "WED";
-            case "THU": return "THU";
-            case "FRI": return "FRI";
-            case "SAT": return "SAT";
-            case "SUN": return "SUN";
-            default: throw new IllegalArgumentException("鏃犳晥鐨勬槦鏈熷嚑: " + dayName);
+            case "MON":
+                return "MON";
+            case "TUE":
+                return "TUE";
+            case "WED":
+                return "WED";
+            case "THU":
+                return "THU";
+            case "FRI":
+                return "FRI";
+            case "SAT":
+                return "SAT";
+            case "SUN":
+                return "SUN";
+            default:
+                throw new IllegalArgumentException("鏃犳晥鐨勬槦鏈熷嚑: " + dayName);
         }
     }
-    
+
 }

--
Gitblit v1.9.3