From a2d3c6f8d43fbf9daa372fea53acf50642094de4 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 16 五月 2026 10:49:06 +0800
Subject: [PATCH] feat(task): 添加定时任务启用禁用功能

---
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java |   66 +++++++++++++++++++++++++++++++-
 1 files changed, 63 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
index d551399..688f3a3 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
@@ -77,6 +77,9 @@
         if (timingTask.getAreaId() != null) {
             queryWrapper.eq(TimingTask::getAreaId, timingTask.getAreaId());
         }
+        if (timingTask.getIsEnabled() != null) {
+            queryWrapper.eq(TimingTask::getIsEnabled, timingTask.getIsEnabled());
+        }
         IPage<TimingTask> taskPage = timingTaskMapper.selectPage(page, queryWrapper);
         if (taskPage.getRecords().isEmpty()) {
             return new Page<>(taskPage.getCurrent(), taskPage.getSize(), taskPage.getTotal());
@@ -154,18 +157,40 @@
 
         if (Objects.isNull(timingTaskDto.getId())) {
             timingTask.setRegistrationDate(LocalDate.now());
-            timingTask.setActive(true);
+            if (timingTask.getIsEnabled() == null) {
+                timingTask.setIsEnabled(1);
+            }
             timingTask.setNextExecutionTime(calculateFirstExecutionTime(timingTask));
             int result = timingTaskMapper.insert(timingTask);
             if (result > 0) {
-                timingTaskScheduler.scheduleTimingTask(timingTask);
+                resetSchedulerStatus(timingTask);
             }
             return result;
         }
 
+        TimingTask existingTask = timingTaskMapper.selectById(timingTaskDto.getId());
+        if (existingTask == null) {
+            throw new IllegalArgumentException("瀹氭椂浠诲姟涓嶅瓨鍦�: " + timingTaskDto.getId());
+        }
+        if (timingTask.getIsEnabled() == null) {
+            timingTask.setIsEnabled(existingTask.getIsEnabled());
+        }
+        if (timingTask.getNextExecutionTime() == null) {
+            timingTask.setNextExecutionTime(existingTask.getNextExecutionTime());
+        }
+        if (timingTask.getRegistrationDate() == null) {
+            timingTask.setRegistrationDate(existingTask.getRegistrationDate());
+        }
         int result = timingTaskMapper.updateById(timingTask);
         if (result > 0) {
-            timingTaskScheduler.rescheduleTimingTask(timingTask);
+            TimingTask latestTask = timingTaskMapper.selectById(timingTask.getId());
+            if (latestTask != null) {
+                if (latestTask.getNextExecutionTime() == null) {
+                    latestTask.setNextExecutionTime(calculateFirstExecutionTime(latestTask));
+                    timingTaskMapper.updateById(latestTask);
+                }
+                resetSchedulerStatus(latestTask);
+            }
         }
         return result;
     }
@@ -492,6 +517,41 @@
     }
 
     @Override
+    @Transactional
+    public int changeEnable(Long taskId, Integer isEnabled) throws SchedulerException {
+        if (taskId == null || isEnabled == null) {
+            throw new IllegalArgumentException("id鍜宨sEnabled涓嶈兘涓虹┖");
+        }
+        TimingTask task = timingTaskMapper.selectById(taskId);
+        if (task == null) {
+            throw new IllegalArgumentException("瀹氭椂浠诲姟涓嶅瓨鍦�: " + taskId);
+        }
+        task.setIsEnabled(isEnabled);
+        int updated = timingTaskMapper.updateById(task);
+        if (updated > 0) {
+            if (task.getNextExecutionTime() == null) {
+                task.setNextExecutionTime(calculateFirstExecutionTime(task));
+                timingTaskMapper.updateById(task);
+            }
+            resetSchedulerStatus(task);
+        }
+        return updated;
+    }
+
+    private void resetSchedulerStatus(TimingTask task) throws SchedulerException {
+        timingTaskScheduler.rescheduleTimingTask(task);
+        if (isTaskEnabled(task.getIsEnabled())) {
+            timingTaskScheduler.resumeTimingTask(task.getId());
+        } else {
+            timingTaskScheduler.pauseTimingTask(task.getId());
+        }
+    }
+
+    private boolean isTaskEnabled(Integer isEnabled) {
+        return isEnabled == null || isEnabled == 1;
+    }
+
+    @Override
     public int delByIds(Long[] ids) {
         int i = timingTaskMapper.deleteBatchIds(Arrays.asList(ids));
         if (i > 0) {

--
Gitblit v1.9.3