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/inspectiontask/service/impl/TimingTaskScheduler.java |   57 +++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 37 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
index 2ff2e7e..d164353 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
@@ -1,8 +1,8 @@
 package com.ruoyi.inspectiontask.service.impl;
 
 import com.ruoyi.inspectiontask.pojo.TimingTask;
+import lombok.RequiredArgsConstructor;
 import org.quartz.*;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalTime;
@@ -13,10 +13,10 @@
 import java.util.stream.Collectors;
 
 @Service
+@RequiredArgsConstructor
 public class TimingTaskScheduler {
 
-    @Autowired
-    private Scheduler scheduler;
+    private final Scheduler scheduler;
 
     /**
      * 娣诲姞鏂颁换鍔″埌璋冨害鍣�
@@ -32,14 +32,36 @@
      */
     public void rescheduleTimingTask(TimingTask task) throws SchedulerException {
         TriggerKey triggerKey = new TriggerKey("trigger_" + task.getId());
+        JobKey jobKey = new JobKey("timingTask_" + task.getId());
 
-        // 鑾峰彇鐜版湁瑙﹀彂鍣ㄥ苟杞崲涓� CronTrigger
+        // 鑾峰彇鐜版湁瑙﹀彂鍣�
         Trigger oldTrigger = scheduler.getTrigger(triggerKey);
-        if (!(oldTrigger instanceof CronTrigger)) {
-            throw new SchedulerException("Existing trigger is not a CronTrigger");
+
+        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;
         }
 
-        // 3. 鏋勫缓CronTrigger锛岀‘淇濇寔涔呭寲閰嶇疆
+        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") // 瑙﹀彂鍣ㄦ弿杩�
@@ -47,20 +69,11 @@
                 .withSchedule(CronScheduleBuilder
                         .cronSchedule(convertToCronExpression(task)) // 閿欒繃鎵ц鏃剁殑绛栫暐锛堟牴鎹笟鍔¤皟鏁达級
                 )
-                // 4. 璁剧疆寮�濮嬫椂闂达紙鑻ヤ负null鍒欑珛鍗崇敓鏁堬級
+                // 璁剧疆寮�濮嬫椂闂达紙鑻ヤ负null鍒欑珛鍗崇敓鏁堬級
                 .startAt(task.getNextExecutionTime() != null
                         ? Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant())
                         : new Date())
                 .build();
-
-        // 鏋勫缓鏂拌Е鍙戝櫒
-//        Trigger newTrigger = TriggerBuilder.newTrigger()
-//                .withIdentity(triggerKey)
-//                .withDescription(task.getTaskName())
-//                .withSchedule(CronScheduleBuilder.cronSchedule(convertToCronExpression(task)))
-//                .startAt(Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant()))
-//                .forJob(oldTrigger.getJobKey())
-//                .build();
 
         scheduler.rescheduleJob(triggerKey, newTrigger);
     }
@@ -84,9 +97,13 @@
     /**
      * 鍒犻櫎浠诲姟
      */
-    public void unscheduleTimingTask(Long taskId) throws SchedulerException {
-        JobKey jobKey = new JobKey("timingTask_" + taskId);
-        scheduler.deleteJob(jobKey);
+    public void unscheduleTimingTask(Long taskId){
+        try {
+            JobKey jobKey = new JobKey("timingTask_" + taskId);
+            scheduler.deleteJob(jobKey);
+        }catch (SchedulerException e){
+            throw new RuntimeException(e);
+        }
     }
 
     private JobDetail buildJobDetail(TimingTask task) {

--
Gitblit v1.9.3