5 天以前 d17d4d1ac98865d2a71b4f24771b7b76e0839ed3
src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
@@ -2,9 +2,14 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.device.mapper.DeviceAreaMapper;
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.IDeviceLedgerService;
import com.ruoyi.device.service.MaintenanceTaskService;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.inspectiontask.pojo.TimingTask;
@@ -16,65 +21,81 @@
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
 * @author :yys
 * @date : 2025/12/22 14:57
 */
@Service
@Slf4j
public class MaintenanceTaskServiceImpl extends ServiceImpl<MaintenanceTaskMapper, MaintenanceTask> implements MaintenanceTaskService {
    @Autowired
    private MaintenanceTaskMapper maintenanceTaskMapper;
    @Autowired
    private SysUserMapper sysUserMapper;
    @Autowired
    private TimingTaskServiceImpl timingTaskService;
    @Autowired
    private MaintenanceTaskScheduler maintenanceTaskScheduler;
    @Autowired
    private IDeviceLedgerService deviceLedgerService;
    @Autowired
    private DeviceAreaMapper deviceAreaMapper;
    @Override
    public AjaxResult listPage(Page page, MaintenanceTask maintenanceTask) {
        Page<MaintenanceTask> taskPage = maintenanceTaskMapper.selectPage(page, null);
        // 2. 如果没有数据,直接返回空分页
        com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<MaintenanceTask> queryWrapper =
                new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<>();
        if (StringUtils.isNotEmpty(maintenanceTask.getTaskName())) {
            queryWrapper.like(MaintenanceTask::getTaskName, maintenanceTask.getTaskName());
        }
        if (maintenanceTask.getAreaId() != null) {
            queryWrapper.eq(MaintenanceTask::getAreaId, maintenanceTask.getAreaId());
        }
        Page<MaintenanceTask> taskPage = maintenanceTaskMapper.selectPage(page, queryWrapper);
        if (taskPage.getRecords().isEmpty()) {
            return AjaxResult.success(taskPage);
        }
        // 3. 收集所有需要查询的用户ID
        Set<Long> userIds = new HashSet<>();
        // 收集登记人ID
        taskPage.getRecords().forEach(task -> {
            if (task.getRegistrantId() != null) {
                userIds.add(task.getRegistrantId());
            }
        });
        // 4. 批量查询用户信息
        Map<Long, String> userNickNameMap = new HashMap<>();
        if (!userIds.isEmpty()) {
            List<SysUser> users = sysUserMapper.selectUserByIds((new ArrayList<>(userIds)));
            List<SysUser> users = sysUserMapper.selectUserByIds(new ArrayList<>(userIds));
            users.forEach(user -> userNickNameMap.put(user.getUserId(), user.getNickName()));
        }
        Map<Long, String> areaNameMap = deviceAreaMapper.selectBatchIds(taskPage.getRecords().stream()
                        .map(MaintenanceTask::getAreaId)
                        .filter(java.util.Objects::nonNull)
                        .distinct()
                        .collect(Collectors.toList()))
                .stream()
                .collect(Collectors.toMap(DeviceArea::getId, DeviceArea::getAreaName, (left, right) -> left, HashMap::new));
        taskPage.getRecords().forEach(task -> {
            // 设置登记人昵称
            if (task.getRegistrantId() != null) {
                task.setRegistrant(userNickNameMap.getOrDefault(task.getRegistrantId(), "未知用户"));
            }
            task.setAreaName(areaNameMap.get(task.getAreaId()));
        });
        return AjaxResult.success(taskPage);
    }
    @Override
    public AjaxResult add(MaintenanceTask maintenanceTask) {
        if (!prepareMaintenanceTask(maintenanceTask)) {
            return AjaxResult.error("请选择设备");
        }
        maintenanceTask.setActive(true);
        // 计算首次执行时间
        TimingTask task = new TimingTask();
        task.setFrequencyType(maintenanceTask.getFrequencyType());
        task.setFrequencyDetail(maintenanceTask.getFrequencyDetail());
@@ -94,6 +115,10 @@
            return AjaxResult.warn("没有此数据");
        }
        BeanUtils.copyProperties(maintenanceTask, maintenanceTask1);
        if (!prepareMaintenanceTask(maintenanceTask1)) {
            return AjaxResult.error("请选择设备");
        }
        maintenanceTask1.setDeviceLedgerIds(null);
        int update = maintenanceTaskMapper.updateById(maintenanceTask1);
        if (update > 0) {
            maintenanceTaskScheduler.rescheduleMaintenanceTask(maintenanceTask1);
@@ -105,10 +130,40 @@
    public AjaxResult delete(List<Long> ids) {
        int delete = maintenanceTaskMapper.deleteBatchIds(ids);
        if (delete > 0) {
            ids.forEach(id -> {
                maintenanceTaskScheduler.unscheduleMaintenanceTask(id);
            });
            ids.forEach(id -> maintenanceTaskScheduler.unscheduleMaintenanceTask(id));
        }
        return AjaxResult.success("删除成功");
    }
    private boolean prepareMaintenanceTask(MaintenanceTask task) {
        Long[] deviceIds = task.getDeviceLedgerIds();
        if ((deviceIds == null || deviceIds.length == 0) && StringUtils.isNotEmpty(task.getDeviceLedgerIdsStr())) {
            deviceIds = Arrays.stream(task.getDeviceLedgerIdsStr().split(","))
                    .filter(StringUtils::isNotEmpty)
                    .map(Long::valueOf)
                    .toArray(Long[]::new);
        }
        if (deviceIds == null || deviceIds.length == 0) {
            deviceIds = task.getTaskId() == null ? new Long[0] : new Long[]{task.getTaskId()};
        }
        List<Long> validIds = Arrays.stream(deviceIds).distinct().collect(Collectors.toList());
        if (validIds.isEmpty()) {
            return false;
        }
        List<DeviceLedger> devices = validIds.stream()
                .map(deviceLedgerService::getById)
                .filter(device -> device != null)
                .collect(Collectors.toList());
        if (devices.isEmpty()) {
            return false;
        }
        task.setTaskId(devices.get(0).getId());
        if (task.getAreaId() == null) {
            task.setAreaId(devices.get(0).getAreaId());
        }
        task.setDeviceLedgerIdsStr(devices.stream().map(item -> String.valueOf(item.getId())).collect(Collectors.joining(",")));
        task.setTaskName(devices.stream().map(DeviceLedger::getDeviceName).filter(StringUtils::isNotEmpty).distinct().collect(Collectors.joining(",")));
        task.setDeviceModel(devices.stream().map(DeviceLedger::getDeviceModel).filter(StringUtils::isNotEmpty).distinct().collect(Collectors.joining(",")));
        return true;
    }
}