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 | 68 +++++++++++++++++++++-------------
1 files changed, 42 insertions(+), 26 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..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;
/**
* 娣诲姞鏂颁换鍔″埌璋冨害鍣�
@@ -31,15 +31,37 @@
* 鏇存柊宸叉湁浠诲姟
*/
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());
+ 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,14 +97,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 +122,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 +148,6 @@
? Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant())
: new Date())
.build();
- return trigger;
}
private String convertToCronExpression(TimingTask task) {
// 鍙傛暟鏍¢獙
--
Gitblit v1.9.3