diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/TaskCalendarGenerator.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/TaskCalendarGenerator.java index f93193d..112950c 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/TaskCalendarGenerator.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/TaskCalendarGenerator.java @@ -335,6 +335,22 @@ public class TaskCalendarGenerator { return calendarMap; } + /** + * 获取指定年月日的未来计划 + * @param year + * @param month + * @param day + * @return + */ + public List getFutureCalendar(int year, int month, int day) { + Map> futureCalendarMap = futureCalendarCache.get(FUTURE_CALENDAR); + LocalDate date = LocalDate.of(year, month, day); + List existingTasks = futureCalendarMap.computeIfAbsent(date, k -> new ArrayList<>()); + return existingTasks.stream() + .filter(task -> task.getStartTime().isAfter(LocalDateTime.now())) + .collect(Collectors.toList()); + } + /** * 将中文星期转换为DayOfWeek枚举 */ diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/controller/PatrolTaskStatusController.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/controller/PatrolTaskStatusController.java index 5233ce6..49b5b5f 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/controller/PatrolTaskStatusController.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/controller/PatrolTaskStatusController.java @@ -1,6 +1,7 @@ package com.inspect.taskstatus.controller; import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.PageInfo; import com.inspect.analysis.domain.ResultAnalysis; import com.inspect.analysis.service.IResultAnalysisService; import com.inspect.base.core.constant.RedisConst; @@ -11,17 +12,20 @@ import com.inspect.base.core.utils.StringUtils; import com.inspect.base.core.utils.poi.ExcelUtil; import com.inspect.base.core.web.controller.BaseController; import com.inspect.base.core.web.domain.AjaxResult; +import com.inspect.base.core.web.page.PageDomain; import com.inspect.base.core.web.page.TableDataInfo; +import com.inspect.base.core.web.page.TableSupport; +import com.inspect.base.redis.service.RedisService; +import com.inspect.calender.domain.DailyTaskStatsDTO; +import com.inspect.calender.enums.TaskStateEnum; +import com.inspect.calender.service.TaskCalendarGenerator; import com.inspect.common.log.annotation.Log; import com.inspect.common.log.enums.BizType; -import com.inspect.base.redis.service.RedisService; import com.inspect.partrolresult.service.IPatrolResultService; import com.inspect.resultmain.domain.PatrolTaskResultMain; import com.inspect.resultmain.service.IPatrolTaskResultMainService; import com.inspect.system.base.openDomain.BasedataEqpBookMoMain; import com.inspect.task.controller.PatrolTaskController; -import com.inspect.task.domain.PatrolSendTask; - import com.inspect.task.domain.PatrolTask; import com.inspect.task.domain.SendTask; import com.inspect.task.service.IPatrolTaskService; @@ -31,29 +35,17 @@ import com.inspect.taskstatus.client.FeignTaskClient; import com.inspect.taskstatus.domain.PatrolTaskStatus; import com.inspect.taskstatus.domain.TaskCount; import com.inspect.taskstatus.service.IPatrolTaskStatusService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import java.text.ParseException; -import java.time.DayOfWeek; -import java.time.Duration; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.YearMonth; -import java.time.ZoneId; +import java.time.*; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping({"/taskstatus"}) @@ -75,6 +67,9 @@ public class PatrolTaskStatusController extends BaseController { @Resource private IPatrolTaskInfoService patrolTaskInfoService; + @Resource + private TaskCalendarGenerator taskCalendarGenerator; + public PatrolTaskStatusController( PatrolTaskController patrolTaskController, IPatrolTaskStatusService patrolTaskStatusService, @@ -136,6 +131,94 @@ public class PatrolTaskStatusController extends BaseController { // log.info("[GAB] count: {}", patrolTaskStatusList.size()); // return getDataTable(patrolTaskStatusList); // } + // 仅支持查询一天的任务 + @GetMapping({"/v2/list"}) + public TableDataInfo listV2(PatrolTaskStatus patrolTaskStatus) { + List list = patrolTaskStatusService.selectPatrolTaskStatusList(patrolTaskStatus); + String beginTime = patrolTaskStatus.getBeginTime(); + if (StringUtils.isNotEmpty(beginTime)) { + String[] beginTimeArr = beginTime.split("-"); + int year = Integer.parseInt(beginTimeArr[0]); + int month = Integer.parseInt(beginTimeArr[1]); + int day = Integer.parseInt(beginTimeArr[2]); + List futureCalendar = taskCalendarGenerator.getFutureCalendar(year, month, day); + List futureList = futureCalendar.stream().map(item -> + PatrolTaskStatus.builder() + .startTime(Date.from(item.getStartTime().atZone(ZoneId.systemDefault()).toInstant())) + .taskName(item.getName()) + .taskCode(item.getId()) + .taskPatrolledId(item.getId()) + .patrolStatus(item.getTaskState().toString()) + .taskState(item.getTaskState().toString()) + .taskProgress("0") + .taskEstimatedTime("0") + .build() + ).collect(Collectors.toList()); + list.addAll(futureList); + } + list.sort(Comparator.comparing(PatrolTaskStatus::getStartTime).reversed()); + // 分页 + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + int start = (pageNum - 1) * pageSize; + int end = Math.min(start + pageSize, list.size()); + log.info("[GAB] listV2: {} {}", pageNum, pageSize); + List pageList = list.subList(start, end); + + // 更新结果 + List taskPatrolIds = list.stream().filter(item -> !item.getTaskState().equals(TaskStateEnum.PENDING.getCode())).map(PatrolTaskStatus::getTaskPatrolledId).collect(Collectors.toList()); + if(taskPatrolIds.size() > 0) { + List resultMains = patrolTaskResultMainService.selectMainFileStatus(taskPatrolIds); + List taskCodeIds = list.stream().map(PatrolTaskStatus::getTaskCode).collect(Collectors.toList()); + List> pointList = patrolTaskInfoService.selectPatrolTaskInfoCount(taskCodeIds); + Map pointMap = pointList.stream().collect(Collectors.toMap((item) -> (String) item.get("taskMajorId"), (item) -> { + return String.valueOf(item.get("num")); + })); + Map abnormalDataBatchMap = resultAnalysisService.selectTaskAbnormalDataBatch(taskPatrolIds); + List allQxAnalysisList = resultAnalysisService.selectResultAnalysisListBatch(taskPatrolIds, "0"); + Map>> groupedAnalysisMap = allQxAnalysisList.stream() + .collect(Collectors.groupingBy( + ResultAnalysis::getTaskPatrolId, + Collectors.groupingBy(data -> new GroupKey(data.getObjectId(), data.getAlgType())) + )); + list.forEach((item) -> { + item.setPatrolStatus("1"); + item.setPointCount(pointMap.get(item.getTaskCode())); + if (!item.getTaskProgress().contains("100")) { + item.setFileStatus("0"); + } else { + List collect = resultMains.stream().filter((res) -> { + return res.getTaskPatrolledId().equals(item.getTaskPatrolledId()); + }).collect(Collectors.toList()); + if (!collect.isEmpty()) { + item.setFileStatus((collect.get(0)).getFileStatus()); + } else { + item.setFileStatus("0"); + } + } + // 异常数据统计 + ResultAnalysis resultAnalysis = abnormalDataBatchMap.getOrDefault(item.getTaskPatrolledId(), new ResultAnalysis()); + item.setCsQxNum(resultAnalysis.getCsQxNum()); + item.setAiQxNum(resultAnalysis.getAiQxNum()); + item.setCsYcNum(resultAnalysis.getCsYcNum()); + item.setAiYcNum(resultAnalysis.getAiYcNum()); + Map> groupKeyListMap = groupedAnalysisMap.get(item.getTaskPatrolledId()); + item.setQxNum(groupKeyListMap == null ? 0 : groupKeyListMap.size()); + if (StringUtils.isEmpty(item.getTaskEstimatedTime())) { + item.setTaskEstimatedTime("0"); + } + }); + } + + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(200); + rspData.setRows(pageList); + rspData.setMsg("Query Ok"); + rspData.setTotal((new PageInfo<>(list)).getTotal()); + + return rspData; + } @GetMapping({"/list"}) public TableDataInfo list(PatrolTaskStatus patrolTaskStatus) {