buhuazhen
4 天以前 ee690149bcf516b72df8f12916d5d93319bf55d5
src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
@@ -18,7 +18,9 @@
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.inspectiontask.dto.InspectionTaskDto;
import com.ruoyi.inspectiontask.mapper.InspectionTaskMapper;
import com.ruoyi.inspectiontask.mapper.TimingTaskMapper;
import com.ruoyi.inspectiontask.pojo.InspectionTask;
import com.ruoyi.inspectiontask.pojo.TimingTask;
import com.ruoyi.inspectiontask.service.InspectionTaskService;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
@@ -31,6 +33,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Function;
@@ -71,6 +74,9 @@
    @Autowired
    private CommonFileServiceImpl commonFileService;
    @Autowired
    private TimingTaskMapper timingTaskMapper;
    @Override
    public IPage<InspectionTaskDto> selectInspectionTaskList(Page<InspectionTask> page, InspectionTaskDto inspectionTaskDto) {
@@ -134,6 +140,20 @@
        }
        List<CommonFile> finalCommonFiles = commonFiles;
        // 批量查询定时任务获取nextExecutionTime
        List<Long> timingTaskIds = entityPage.getRecords().stream()
                .map(InspectionTask::getTimingTaskId)
                .filter(Objects::nonNull)
                .collect(Collectors.toList());
        Map<Long, TimingTask> timingTaskMap = new HashMap<>();
        if (!timingTaskIds.isEmpty()) {
            List<TimingTask> timingTasks = timingTaskMapper.selectBatchIds(timingTaskIds);
            timingTaskMap = timingTasks.stream()
                    .collect(Collectors.toMap(TimingTask::getId, Function.identity()));
        }
        final Map<Long, TimingTask> finalTimingTaskMap = timingTaskMap;
        final LocalDateTime now = LocalDateTime.now();
        List<InspectionTaskDto> dtoList = entityPage.getRecords().stream().map(inspectionTask -> {
            InspectionTaskDto dto = new InspectionTaskDto();
            BeanUtils.copyProperties(inspectionTask, dto);  // 复制主对象属性
@@ -173,6 +193,17 @@
                    .filter(commonFile -> commonFile.getCommonId().equals(taskId) && commonFile.getType().equals(FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue()))
                    .collect(Collectors.toList()));
            // 计算状态:已过期 > 巡检中 > 待巡检
            String status = calculateStatus(inspectionTask, finalTimingTaskMap, now);
            dto.setStatus(status);
            // 设置nextExecutionTime用于前端展示
            if (inspectionTask.getTimingTaskId() != null) {
                TimingTask timingTask = finalTimingTaskMap.get(inspectionTask.getTimingTaskId());
                if (timingTask != null) {
                    dto.setNextExecutionTime(timingTask.getNextExecutionTime());
                }
            }
            return dto;
        }).collect(Collectors.toList());
@@ -206,6 +237,38 @@
        return dto;
    }
    /**
     * 计算巡检任务状态
     * 优先级:已过期 > 巡检中 > 待巡检
     * @param inspectionTask 巡检任务
     * @param timingTaskMap 定时任务Map
     * @param now 当前时间
     * @return 状态:EXPIRED-已过期,IN_PROGRESS-巡检中,PENDING-待巡检
     */
    private String calculateStatus(InspectionTask inspectionTask, Map<Long, TimingTask> timingTaskMap, LocalDateTime now) {
        // 1. 判断是否已过期
        if (inspectionTask.getTimingTaskId() != null) {
            TimingTask timingTask = timingTaskMap.get(inspectionTask.getTimingTaskId());
            if (timingTask != null && timingTask.getNextExecutionTime() != null) {
                if (now.isAfter(timingTask.getNextExecutionTime())) {
                    return "EXPIRED";
                }
            }
        }else {
            return "EXPIRED";
        }
        // 2. 判断是否巡检中(任一异常字段不为null)
        if (inspectionTask.getHasExceptionBefore() != null
                || inspectionTask.getHasExceptionAfter() != null
                || inspectionTask.getHasExceptionIssue() != null) {
            return "IN_PROGRESS";
        }
        // 3. 待巡检
        return "PENDING";
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) throws IOException {