From cf330c6a6c2ae7ec86d20de465d5af27a4684cf6 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 03 十一月 2026 19:16:58 +0800
Subject: [PATCH] 巡检任务频次增加“每年”支持

---
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java |   26 ++++++++++++++++++++------
 1 files changed, 20 insertions(+), 6 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..59248ab 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;
 
     /**
      * 娣诲姞鏂颁换鍔″埌璋冨害鍣�
@@ -84,9 +84,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) {
@@ -141,6 +145,8 @@
         // 浣跨敤switch纭繚鏉′欢浜掓枼
         String frequencyType = task.getFrequencyType().toUpperCase(); // 缁熶竴杞负澶у啓姣旇緝
         switch (frequencyType) {
+            case "YEARLY":
+                return convertYearlyToCron(task.getFrequencyDetail());
             case "DAILY":
                 return convertDailyToCron(task.getFrequencyDetail());
             case "WEEKLY":
@@ -154,6 +160,14 @@
         }
     }
 
+    // 姣忓勾浠诲姟杞崲锛坒requencyDetail 鏍煎紡涓� "鏈�,鏃�"锛岄粯璁� 07:00 鎵ц锛�
+    private String convertYearlyToCron(String frequencyDetail) {
+        String[] parts = validateAndSplit(frequencyDetail, ",", 2);
+        int month = validateMonth(parts[0]);
+        int day = validateDayOfMonth(parts[1]);
+        return String.format("0 0 7 %d %d ? *", day, month);
+    }
+
     // 姣忔棩浠诲姟杞崲
     private String convertDailyToCron(String frequencyDetail) {
         LocalTime time = parseTime(frequencyDetail);

--
Gitblit v1.9.3