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/TimingTaskJob.java | 73 ++++++++++++++++++++++++++++--------
1 files changed, 57 insertions(+), 16 deletions(-)
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
index 44ad63d..19e32f0 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
@@ -1,18 +1,15 @@
package com.ruoyi.inspectiontask.service.impl;
import com.ruoyi.inspectiontask.mapper.InspectionTaskMapper;
-import com.ruoyi.inspectiontask.mapper.TimingTaskMapper;
import com.ruoyi.inspectiontask.pojo.InspectionTask;
import com.ruoyi.inspectiontask.pojo.TimingTask;
-import com.ruoyi.inspectiontask.service.TimingTaskService;
+import com.ruoyi.common.utils.StringUtils;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
-import javax.annotation.Resource;
-import javax.sql.DataSource;
import java.io.Serializable;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
@@ -28,14 +25,7 @@
private static final long serialVersionUID = 1L; // 蹇呴』瀹氫箟搴忓垪鍖朓D
@Autowired
- private TimingTaskMapper timingTaskMapper;
-
- @Autowired
- private TimingTaskService timingTaskService;
-
- @Autowired
private InspectionTaskMapper inspectionTaskMapper;
-
@Autowired
private JdbcTemplate jdbcTemplate;
@@ -58,14 +48,19 @@
if (timingTask == null) {
throw new JobExecutionException("鎵句笉鍒板畾鏃朵换鍔�: " + taskId);
}
-
+ if (timingTask.getIsEnabled() != null && timingTask.getIsEnabled() == 0) {
+ return;
+ }
+
// if (!timingTask.isActive()) {
// throw new JobExecutionException("瀹氭椂浠诲姟宸茬鐢�: " + taskId);
// }
- // 2. 鍒涘缓骞朵繚瀛樺贰妫�浠诲姟璁板綍 - 杩欏氨鏄偍鎻愪緵鐨勪唬鐮佸簲璇ユ斁鐨勪綅缃�
- InspectionTask inspectionTask = createInspectionTask(timingTask);
- inspectionTaskMapper.insert(inspectionTask);
+ // 2. 鍒涘缓骞朵繚瀛樺贰妫�浠诲姟璁板綍锛涜澶囧凡鍋滅敤鏃惰烦杩囷紝涓嶇敓鎴愬贰妫�浠诲姟
+ if (!isDeviceDisabled(timingTask.getTaskId())) {
+ InspectionTask inspectionTask = createInspectionTask(timingTask);
+ inspectionTaskMapper.insert(inspectionTask);
+ }
// 3. 鏇存柊瀹氭椂浠诲姟鐨勬墽琛屾椂闂�
if (!tasks.isEmpty()) {
@@ -104,16 +99,36 @@
}
}
+ /**
+ * 璁惧鏄惁宸插仠鐢紙鍋滅敤璁惧涓嶅弬涓庡贰妫�锛�
+ */
+ private boolean isDeviceDisabled(Integer deviceId) {
+ if (deviceId == null || deviceId <= 0) {
+ return false;
+ }
+ List<Integer> enabledList = jdbcTemplate.queryForList(
+ "SELECT is_enabled FROM device_ledger WHERE id = ?", Integer.class, deviceId);
+ if (enabledList.isEmpty() || enabledList.get(0) == null) {
+ return false;
+ }
+ return enabledList.get(0) == 0;
+ }
+
// 杩欏氨鏄偍鎻愪緵鐨勪唬鐮佸皝瑁呮垚鐨勬柟娉�
private InspectionTask createInspectionTask(TimingTask timingTask) {
InspectionTask inspectionTask = new InspectionTask();
// 澶嶅埗鍩烘湰灞炴��
inspectionTask.setTaskName(timingTask.getTaskName());
+ inspectionTask.setInspectionProject(timingTask.getInspectionProject());
inspectionTask.setTaskId(timingTask.getTaskId());
inspectionTask.setInspectorId(timingTask.getInspectorIds());
inspectionTask.setInspectionLocation(timingTask.getInspectionLocation());
- inspectionTask.setRemarks("鑷姩鐢熸垚鑷畾鏃朵换鍔D: " + timingTask.getId());
+ String remarks = "鑷姩鐢熸垚鑷畾鏃朵换鍔D: " + timingTask.getId();
+ if (StringUtils.isNotBlank(timingTask.getRemarks())) {
+ remarks = remarks + "锛�" + timingTask.getRemarks();
+ }
+ inspectionTask.setRemarks(remarks);
inspectionTask.setRegistrantId(timingTask.getRegistrantId());
inspectionTask.setFrequencyType(timingTask.getFrequencyType());
inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail());
@@ -131,6 +146,8 @@
LocalDateTime currentTime) {
try {
switch (frequencyType) {
+ case "YEARLY":
+ return calculateYearlyNextTime(frequencyDetail, currentTime);
case "DAILY":
return calculateDailyNextTime(frequencyDetail, currentTime);
case "WEEKLY":
@@ -147,6 +164,30 @@
}
}
+ /** 姣忓勾宸℃榛樿鎵ц鏃堕棿锛�07:00锛堥〉闈笂涓嶇簿纭埌鏃跺垎锛� */
+ private static final LocalTime DEFAULT_EXECUTION_TIME = LocalTime.of(7, 0);
+
+ /**
+ * 璁$畻姣忓勾浠诲姟鐨勪笅娆℃墽琛屾椂闂�
+ * frequencyDetail 鏍煎紡涓� "鏈�,鏃�"锛屽彲閫� "鏈�,鏃�,HH:mm"锛堥粯璁� 07:00锛�
+ */
+ private LocalDateTime calculateYearlyNextTime(String detail, LocalDateTime current) {
+ String[] parts = detail.split(",");
+ int month = Integer.parseInt(parts[0].trim());
+ int day = Integer.parseInt(parts[1].trim());
+ LocalTime time = parts.length >= 3 ? LocalTime.parse(parts[2].trim()) : DEFAULT_EXECUTION_TIME;
+
+ int year = current.getYear();
+ LocalDateTime target = LocalDateTime.of(
+ year, month, Math.min(day, YearMonth.of(year, month).lengthOfMonth()), time.getHour(), time.getMinute());
+ if (!current.isBefore(target)) {
+ year++;
+ target = LocalDateTime.of(
+ year, month, Math.min(day, YearMonth.of(year, month).lengthOfMonth()), time.getHour(), time.getMinute());
+ }
+ return target;
+ }
+
/**
* 璁$畻姣忔棩浠诲姟鐨勪笅娆℃墽琛屾椂闂�
*/
--
Gitblit v1.9.3