From 10b88a7ff17caf92f3d4e8a550c1085a70c2517a Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 28 五月 2026 17:43:26 +0800
Subject: [PATCH] Merge dev_New_pro into dev_山西_晋和园_pro

---
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java |   57 +++++++++++++++++++++++++++++++++------------------------
 1 files changed, 33 insertions(+), 24 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 e76e62e..63289a7 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;
 
     /**
      * 娣诲姞鏂颁换鍔″埌璋冨害鍣�
@@ -31,10 +31,21 @@
      * 鏇存柊宸叉湁浠诲姟
      */
     public void rescheduleTimingTask(TimingTask task) throws SchedulerException {
-        TriggerKey triggerKey = new TriggerKey("trigger_" + task.getId(), "TIMING_TASK_TRIGGER_GROUP");
+        TriggerKey triggerKey = new TriggerKey("trigger_" + task.getId());
 
         // 鑾峰彇鐜版湁瑙﹀彂鍣ㄥ苟杞崲涓� CronTrigger
         Trigger oldTrigger = scheduler.getTrigger(triggerKey);
+        if (oldTrigger == null) {
+            JobKey jobKey = new JobKey("timingTask_" + task.getId());
+            JobDetail jobDetail = scheduler.getJobDetail(jobKey);
+            if (jobDetail != null) {
+                Trigger trigger = buildJobTrigger(task, jobDetail);
+                scheduler.scheduleJob(trigger);
+            } else {
+                scheduleTimingTask(task);
+            }
+            return;
+        }
         if (!(oldTrigger instanceof CronTrigger)) {
             throw new SchedulerException("Existing trigger is not a CronTrigger");
         }
@@ -84,14 +95,18 @@
     /**
      * 鍒犻櫎浠诲姟
      */
-    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) {
         // 1. 鏋勫缓鍞竴JobKey锛堝熀浜庝换鍔D锛岀‘淇濋噸鍚悗鑳借瘑鍒級
-        JobKey jobKey = new JobKey("timingTask_" + task.getId(), "TIMING_TASK_GROUP");
+        JobKey jobKey = new JobKey("timingTask_" + task.getId());
 
         // 2. 灏佽浠诲姟鏁版嵁锛堜粎浣跨敤鍩烘湰绫诲瀷锛岀‘淇濆彲搴忓垪鍖栵級
         JobDataMap jobDataMap = new JobDataMap();
@@ -105,20 +120,20 @@
                 .withIdentity(jobKey)                    // 鍞竴鏍囪瘑锛岀敤浜庢寔涔呭寲瀛樺偍
                 .withDescription(task.getTaskName())     // 浠诲姟鎻忚堪锛屽瓨鍏ユ暟鎹簱
                 .usingJobData(jobDataMap)                // 缁戝畾浠诲姟鏁版嵁
-                .storeDurably()                          // 鍗充娇娌℃湁瑙﹀彂鍣ㄥ叧鑱斾篃鎸佷箙鍖栦繚瀛�
+                .storeDurably(true)                          // 鍗充娇娌℃湁瑙﹀彂鍣ㄥ叧鑱斾篃鎸佷箙鍖栦繚瀛�
                 .requestRecovery(true)                   // 褰撹皟搴﹀櫒宕╂簝鍚庢仮澶嶆椂锛岄噸鏂版墽琛屾湭瀹屾垚鐨勪换鍔�
                 .build();
     }
 
     private Trigger buildJobTrigger(TimingTask task, JobDetail jobDetail) {
         // 1. 鏋勫缓鍞竴TriggerKey锛堝熀浜庝换鍔D锛�
-        TriggerKey triggerKey = new TriggerKey("trigger_" + task.getId(), "TIMING_TASK_TRIGGER_GROUP");
+        TriggerKey triggerKey = new TriggerKey("trigger_" + task.getId());
 
         // 2. 鐢熸垚Cron琛ㄨ揪寮忥紙鍘熼�昏緫涓嶅彉锛�
         String cronExpression = convertToCronExpression(task);
 
         // 3. 鏋勫缓CronTrigger锛岀‘淇濇寔涔呭寲閰嶇疆
-        CronTrigger trigger = TriggerBuilder.newTrigger()
+        return TriggerBuilder.newTrigger()
                 .withIdentity(triggerKey)                // 鍞竴鏍囪瘑锛岀敤浜庢寔涔呭寲瀛樺偍
                 .withDescription(task.getTaskName() + "_TRIGGER") // 瑙﹀彂鍣ㄦ弿杩�
                 .forJob(jobDetail)                       // 鍏宠仈瀵瑰簲鐨凧ob
@@ -131,7 +146,6 @@
                         ? Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant())
                         : new Date())
                 .build();
-        return trigger;
     }
     private String convertToCronExpression(TimingTask task) {
         // 鍙傛暟鏍¢獙
@@ -141,18 +155,13 @@
 
         // 浣跨敤switch纭繚鏉′欢浜掓枼
         String frequencyType = task.getFrequencyType().toUpperCase(); // 缁熶竴杞负澶у啓姣旇緝
-        switch (frequencyType) {
-            case "DAILY":
-                return convertDailyToCron(task.getFrequencyDetail());
-            case "WEEKLY":
-                return convertWeeklyToCron(task.getFrequencyDetail());
-            case "MONTHLY":
-                return convertMonthlyToCron(task.getFrequencyDetail());
-            case "QUARTERLY":
-                return convertQuarterlyToCron(task.getFrequencyDetail());
-            default:
-                throw new IllegalArgumentException("涓嶆敮鎸佺殑棰戠巼绫诲瀷: " + task.getFrequencyType());
-        }
+        return switch (frequencyType) {
+            case "DAILY" -> convertDailyToCron(task.getFrequencyDetail());
+            case "WEEKLY" -> convertWeeklyToCron(task.getFrequencyDetail());
+            case "MONTHLY" -> convertMonthlyToCron(task.getFrequencyDetail());
+            case "QUARTERLY" -> convertQuarterlyToCron(task.getFrequencyDetail());
+            default -> throw new IllegalArgumentException("涓嶆敮鎸佺殑棰戠巼绫诲瀷: " + task.getFrequencyType());
+        };
     }
 
     // 姣忔棩浠诲姟杞崲

--
Gitblit v1.9.3