| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | |
| | | @Autowired |
| | | private CommonFileServiceImpl commonFileService; |
| | | |
| | | @Autowired |
| | | private TimingTaskMapper timingTaskMapper; |
| | | |
| | | @Override |
| | | public IPage<InspectionTaskDto> selectInspectionTaskList(Page<InspectionTask> page, InspectionTaskDto inspectionTaskDto) { |
| | |
| | | } |
| | | 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); // 复制主对象属性 |
| | |
| | | .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()); |
| | |
| | | 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 { |