gongchunyi
8 天以前 0dc3779c31af4f070d3dfec5cc9910d9caa7687c
src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
@@ -6,8 +6,7 @@
import com.ruoyi.device.mapper.MaintenanceTaskMapper;
import com.ruoyi.device.pojo.MaintenanceTask;
import com.ruoyi.device.service.MaintenanceTaskService;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.inspectiontask.pojo.TimingTask;
import com.ruoyi.inspectiontask.service.impl.TimingTaskServiceImpl;
import com.ruoyi.project.system.domain.SysUser;
@@ -34,11 +33,11 @@
    private final MaintenanceTaskScheduler maintenanceTaskScheduler;
    @Override
    public R<?> listPage(Page page, MaintenanceTask maintenanceTask) {
    public AjaxResult listPage(Page page, MaintenanceTask maintenanceTask) {
        Page<MaintenanceTask> taskPage = maintenanceTaskMapper.selectPage(page, null);
        // 2. 如果没有数据,直接返回空分页
        if (taskPage.getRecords().isEmpty()) {
            return R.ok(taskPage);
            return AjaxResult.success(taskPage);
        }
        // 3. 收集所有需要查询的用户ID
@@ -63,12 +62,11 @@
                task.setRegistrant(userNickNameMap.getOrDefault(task.getRegistrantId(), "未知用户"));
            }
        });
        return R.ok(taskPage);
        return AjaxResult.success(taskPage);
    }
    @Override
    public R<?> add(MaintenanceTask maintenanceTask) {
        maintenanceTask.setActive(true);
    public AjaxResult add(MaintenanceTask maintenanceTask) {
        // 计算首次执行时间
        TimingTask task = new TimingTask();
        task.setFrequencyType(maintenanceTask.getFrequencyType());
@@ -77,33 +75,64 @@
        maintenanceTask.setNextExecutionTime(firstExecutionTime);
        int insert = maintenanceTaskMapper.insert(maintenanceTask);
        if (insert > 0) {
            maintenanceTaskScheduler.scheduleMaintenanceTask(maintenanceTask);
            // 只有当 isActive 为 1 时才添加到定时任务调度器
            if (maintenanceTask.getIsActive() != null && maintenanceTask.getIsActive() == 1) {
                maintenanceTaskScheduler.scheduleMaintenanceTask(maintenanceTask);
            }
        }
        return R.ok(null, "添加成功");
        return AjaxResult.success("添加成功");
    }
    @Override
    public R<?> updateByMaintenanceTaskId(MaintenanceTask maintenanceTask) {
    public AjaxResult updateByMaintenanceTaskId(MaintenanceTask maintenanceTask) {
        MaintenanceTask maintenanceTask1 = maintenanceTaskMapper.selectById(maintenanceTask.getId());
        if (maintenanceTask1 == null) {
            return R.fail(HttpStatus.WARN, "没有此数据");
            return AjaxResult.warn("没有此数据");
        }
        // 保存旧的 isActive 状态
        Integer oldIsActive = maintenanceTask1.getIsActive();
        Integer newIsActive = maintenanceTask.getIsActive();
        BeanUtils.copyProperties(maintenanceTask, maintenanceTask1);
        int update = maintenanceTaskMapper.updateById(maintenanceTask1);
        if (update > 0) {
            maintenanceTaskScheduler.rescheduleMaintenanceTask(maintenanceTask1);
            // 处理 isActive 状态变化
            if (newIsActive != null && newIsActive == 1) {
                // 新状态为启用:添加到定时任务调度器
                if (oldIsActive == null || oldIsActive != 1) {
                    // 从未启用变为启用,添加到调度器
                    maintenanceTaskScheduler.scheduleMaintenanceTask(maintenanceTask1);
                } else {
                    // 已经启用,更新调度器中的任务
                    maintenanceTaskScheduler.rescheduleMaintenanceTask(maintenanceTask1);
                }
            } else {
                // 新状态为停用:从定时任务调度器中移除
                if (oldIsActive != null && oldIsActive == 1) {
                    maintenanceTaskScheduler.unscheduleMaintenanceTask(maintenanceTask1.getId());
                }
            }
        }
        return R.ok(null, "更新成功");
        return AjaxResult.success("更新成功");
    }
    @Override
    public R<?> delete(List<Long> ids) {
    public AjaxResult delete(List<Long> ids) {
        // 先从定时任务调度器中移除所有待删除的任务
        ids.forEach(id -> {
            try {
                maintenanceTaskScheduler.unscheduleMaintenanceTask(id);
            } catch (Exception e) {
                log.error("删除定时任务调度失败, id: {}", id, e);
            }
        });
        // 再从数据库中删除记录
        int delete = maintenanceTaskMapper.deleteBatchIds(ids);
        if (delete > 0) {
            ids.forEach(id -> {
                maintenanceTaskScheduler.unscheduleMaintenanceTask(id);
            });
            return AjaxResult.success("删除成功");
        }
        return R.ok(null, "删除成功");
        return AjaxResult.error("删除失败");
    }
}