2 天以前 e772b3d8cf395e9d441419373d883601350fbf0b
src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
@@ -4,7 +4,11 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.device.mapper.DeviceAreaMapper;
import com.ruoyi.device.mapper.DeviceLedgerMapper;
import com.ruoyi.device.mapper.MaintenanceTaskMapper;
import com.ruoyi.device.pojo.DeviceArea;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.device.pojo.MaintenanceTask;
import com.ruoyi.device.service.MaintenanceTaskService;
import com.ruoyi.framework.web.domain.AjaxResult;
@@ -32,10 +36,16 @@
    private final SysUserMapper sysUserMapper;
    private final TimingTaskServiceImpl timingTaskService;
    private final MaintenanceTaskScheduler maintenanceTaskScheduler;
    private final DeviceLedgerMapper deviceLedgerMapper;
    private final DeviceAreaMapper deviceAreaMapper;
    @Override
    public AjaxResult listPage(Page page, MaintenanceTask maintenanceTask) {
        Page<MaintenanceTask> taskPage = maintenanceTaskMapper.selectPage(page, new QueryWrapper<MaintenanceTask>().orderByDesc("create_time"));
        QueryWrapper<MaintenanceTask> queryWrapper = new QueryWrapper<MaintenanceTask>().orderByDesc("create_time");
        if (maintenanceTask.getAreaId() != null) {
            queryWrapper.eq("area_id", maintenanceTask.getAreaId());
        }
        Page<MaintenanceTask> taskPage = maintenanceTaskMapper.selectPage(page, queryWrapper);
        // 2. 如果没有数据,直接返回空分页
        if (taskPage.getRecords().isEmpty()) {
            return AjaxResult.success(taskPage);
@@ -57,10 +67,33 @@
            List<SysUser> users = sysUserMapper.selectUserByIds((new ArrayList<>(userIds)));
            users.forEach(user -> userNickNameMap.put(user.getUserId(), user.getNickName()));
        }
        Map<Long, DeviceLedger> ledgerMap = new HashMap<>();
        Set<Long> areaIds = new HashSet<>();
        taskPage.getRecords().forEach(task -> {
            // 设置登记人昵称
            if (task.getTaskId() != null) {
                DeviceLedger deviceLedger = deviceLedgerMapper.selectById(task.getTaskId());
                if (deviceLedger != null) {
                    ledgerMap.put(task.getTaskId(), deviceLedger);
                    if (deviceLedger.getAreaId() != null) {
                        areaIds.add(deviceLedger.getAreaId());
                    }
                }
            }
        });
        Map<Long, String> areaNameMap = new HashMap<>();
        if (!areaIds.isEmpty()) {
            List<DeviceArea> areas = deviceAreaMapper.selectBatchIds(new ArrayList<>(areaIds));
            areas.forEach(area -> areaNameMap.put(area.getId(), area.getAreaName()));
        }
        taskPage.getRecords().forEach(task -> {
            // 璁剧疆鐧昏浜烘樀绉?
            if (task.getRegistrantId() != null) {
                task.setRegistrant(userNickNameMap.getOrDefault(task.getRegistrantId(), "未知用户"));
                task.setRegistrant(userNickNameMap.getOrDefault(task.getRegistrantId(), "鏈煡鐢ㄦ埛"));
            }
            DeviceLedger deviceLedger = ledgerMap.get(task.getTaskId());
            if (deviceLedger != null) {
                task.setAreaId(deviceLedger.getAreaId());
                task.setAreaName(areaNameMap.getOrDefault(deviceLedger.getAreaId(), ""));
            }
        });
        return AjaxResult.success(taskPage);
@@ -68,6 +101,10 @@
    @Override
    public AjaxResult add(MaintenanceTask maintenanceTask) {
        DeviceLedger deviceLedger = deviceLedgerMapper.selectById(maintenanceTask.getTaskId());
        if (deviceLedger != null) {
            maintenanceTask.setAreaId(deviceLedger.getAreaId());
        }
        maintenanceTask.setActive(true);
        // 计算首次执行时间
        TimingTask task = new TimingTask();
@@ -85,6 +122,10 @@
    @Override
    public AjaxResult updateByMaintenanceTaskId(MaintenanceTask maintenanceTask) {
        MaintenanceTask maintenanceTask1 = maintenanceTaskMapper.selectById(maintenanceTask.getId());
        DeviceLedger deviceLedger = deviceLedgerMapper.selectById(maintenanceTask.getTaskId());
        if (deviceLedger != null) {
            maintenanceTask.setAreaId(deviceLedger.getAreaId());
        }
        if (maintenanceTask1 == null) {
            return AjaxResult.warn("没有此数据");
        }
@@ -106,4 +147,47 @@
        }
        return AjaxResult.success("删除成功");
    }
    @Override
    public AjaxResult changeEnable(Long id, Integer isEnabled) {
        MaintenanceTask oldTask = maintenanceTaskMapper.selectById(id);
        if (oldTask == null) {
            return AjaxResult.error("保养任务不存在");
        }
        MaintenanceTask update = new MaintenanceTask();
        update.setId(id);
        update.setIsEnabled(isEnabled);
        update.setActive(isEnabled != null && isEnabled == 1);
        int result = maintenanceTaskMapper.updateById(update);
        if (result > 0) {
            try {
                if (isEnabled != null && isEnabled == 1) {
                    // 启用:恢复或重新调度
                    if (oldTask.getIsEnabled() != null && oldTask.getIsEnabled() == 0) {
                        // 从禁用改为启用,重新计算下次执行时间(如果没有)
                        if (oldTask.getNextExecutionTime() == null || oldTask.getNextExecutionTime().isBefore(LocalDateTime.now())) {
                            TimingTask tempTask = new TimingTask();
                            tempTask.setFrequencyType(oldTask.getFrequencyType());
                            tempTask.setFrequencyDetail(oldTask.getFrequencyDetail());
                            LocalDateTime nextTime = timingTaskService.calculateFirstExecutionTime(tempTask);
                            update.setNextExecutionTime(nextTime);
                            maintenanceTaskMapper.updateById(update);
                        }
                        maintenanceTaskScheduler.scheduleMaintenanceTask(oldTask);
                    } else {
                        maintenanceTaskScheduler.resumeMaintenanceTask(id);
                    }
                } else {
                    // 禁用:暂停调度
                    maintenanceTaskScheduler.pauseMaintenanceTask(id);
                }
            } catch (Exception e) {
                log.error("调整保养任务调度状态失败", e);
            }
            return AjaxResult.success("更新成功");
        }
        return AjaxResult.error("更新失败");
    }
}