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