2026-05-16 a2d3c6f8d43fbf9daa372fea53acf50642094de4
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和isEnabled不能为空");
        }
        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) {