huminmin
9 天以前 7b8b2456bb15aa733b8599fce2ada5d9549ba881
src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
@@ -1,7 +1,10 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.device.mapper.MaintenanceTaskMapper;
import com.ruoyi.device.pojo.MaintenanceTask;
@@ -39,8 +42,18 @@
    private MaintenanceTaskScheduler maintenanceTaskScheduler;
    @Override
    public AjaxResult listPage(Page page, MaintenanceTask maintenanceTask) {
        Page<MaintenanceTask> taskPage = maintenanceTaskMapper.selectPage(page, null);
    public AjaxResult listPage(Page<MaintenanceTask> page, MaintenanceTask maintenanceTask) {
        LambdaQueryWrapper<MaintenanceTask> queryWrapper = new LambdaQueryWrapper<>();
        if (maintenanceTask != null) {
            if (StringUtils.isNotEmpty(maintenanceTask.getTaskName())) {
                queryWrapper.like(MaintenanceTask::getTaskName, maintenanceTask.getTaskName());
            }
            if (maintenanceTask.getIsActive() != null) {
                queryWrapper.eq(MaintenanceTask::getIsActive, maintenanceTask.getIsActive());
            }
        }
        queryWrapper.orderByDesc(MaintenanceTask::getCreateTime);
        Page<MaintenanceTask> taskPage = maintenanceTaskMapper.selectPage(page, queryWrapper);
        // 2. 如果没有数据,直接返回空分页
        if (taskPage.getRecords().isEmpty()) {
            return AjaxResult.success(taskPage);
@@ -54,6 +67,9 @@
            if (task.getRegistrantId() != null) {
                userIds.add(task.getRegistrantId());
            }
            if (task.getMaintenancePersonId() != null) {
                userIds.add(task.getMaintenancePersonId());
            }
        });
        // 4. 批量查询用户信息
@@ -63,9 +79,11 @@
            users.forEach(user -> userNickNameMap.put(user.getUserId(), user.getNickName()));
        }
        taskPage.getRecords().forEach(task -> {
            // 设置登记人昵称
            if (task.getRegistrantId() != null) {
                task.setRegistrant(userNickNameMap.getOrDefault(task.getRegistrantId(), "未知用户"));
            }
            if (task.getMaintenancePersonId() != null) {
                task.setMaintenancePerson(userNickNameMap.getOrDefault(task.getMaintenancePersonId(), "未知用户"));
            }
        });
        return AjaxResult.success(taskPage);
@@ -73,15 +91,20 @@
    @Override
    public AjaxResult add(MaintenanceTask maintenanceTask) {
        maintenanceTask.setActive(true);
        // 计算首次执行时间
        TimingTask task = new TimingTask();
        task.setFrequencyType(maintenanceTask.getFrequencyType());
        task.setFrequencyDetail(maintenanceTask.getFrequencyDetail());
        LocalDateTime firstExecutionTime = timingTaskService.calculateFirstExecutionTime(task);
        maintenanceTask.setNextExecutionTime(firstExecutionTime);
        if (maintenanceTask == null){
            throw new ServiceException("新增失败,数据不能为空");
        }
        // 只有启用状态才添加
        if (maintenanceTask.getIsActive() != null && maintenanceTask.getIsActive() == 1) {
            // 计算首次执行时间
            TimingTask task = new TimingTask();
            task.setFrequencyType(maintenanceTask.getFrequencyType());
            task.setFrequencyDetail(maintenanceTask.getFrequencyDetail());
            LocalDateTime firstExecutionTime = timingTaskService.calculateFirstExecutionTime(task);
            maintenanceTask.setNextExecutionTime(firstExecutionTime);
        }
        int insert = maintenanceTaskMapper.insert(maintenanceTask);
        if (insert > 0) {
        if (insert > 0 && maintenanceTask.getIsActive() != null && maintenanceTask.getIsActive() == 1) {
            maintenanceTaskScheduler.scheduleMaintenanceTask(maintenanceTask);
        }
        return AjaxResult.success("添加成功");
@@ -93,10 +116,23 @@
        if (maintenanceTask1 == null) {
            return AjaxResult.warn("没有此数据");
        }
        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 (oldIsActive != null && oldIsActive == 1 && newIsActive != null && newIsActive == 0) {
                // 从启用变为停用,移除任务
                maintenanceTaskScheduler.unscheduleMaintenanceTask(maintenanceTask.getId());
            } else if ((oldIsActive == null || oldIsActive == 0) && newIsActive != null && newIsActive == 1) {
                // 从停用变为启用,添加
                maintenanceTaskScheduler.scheduleMaintenanceTask(maintenanceTask1);
            } else {
                maintenanceTaskScheduler.rescheduleMaintenanceTask(maintenanceTask1);
            }
        }
        return AjaxResult.success("更新成功");
    }