diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/IPatrolResultService.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/IPatrolResultService.java index 313c64c..b7e592a 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/IPatrolResultService.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/IPatrolResultService.java @@ -84,7 +84,7 @@ public interface IPatrolResultService { List saveReport(PatrolTaskResultMain resultMain, List lineIds, Long currentLineId, List resultList, int aiQxNum, int csQxNum); - List saveReportLingzhou(PatrolTaskResultMain resultMain, List lineIds, Long currentLineId, List resultList, int aiQxNum, int csQxNum); + List saveReportLingzhou_v2(PatrolTaskResultMain resultMain, List lineIds, Long currentLineId, List resultList); List saveReportShaoxing(PatrolTaskResultMain resultMain, List lineIds, Long currentLineId, List resultList, int aiQxNum, int csQxNum); diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/impl/PatrolResultServiceImpl.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/impl/PatrolResultServiceImpl.java index b1ad877..281d1ae 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/impl/PatrolResultServiceImpl.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/impl/PatrolResultServiceImpl.java @@ -347,7 +347,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService { } @Transactional - public List saveReportLingzhou(PatrolTaskResultMain resultMain, List lineIds, Long currentLineId, List resultList, int aiQxNum, int csQxNum) { + public List saveReportLingzhou_v1(PatrolTaskResultMain resultMain, List lineIds, Long currentLineId, List resultList, int aiQxNum, int csQxNum) { long startTime = System.currentTimeMillis(); List reportIds = new ArrayList<>(); // String mainId = String.valueOf(resultMain.getLineId()); @@ -357,7 +357,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService { resultMain.setFileStatus("1"); this.patrolTaskResultMainMapper.updatePatrolTaskResultMain(resultMain); this.patrolResultMapper.updatePatrolResultByMainId(String.valueOf(lineId)); - reportIds.addAll(saveReportDataLingzhou(resultList, resultMain, lineIds, aiQxNum, csQxNum)); + reportIds.addAll(saveReportDataLingzhou_v1(resultList, resultMain, lineIds, aiQxNum, csQxNum)); } PrintUtil.useTime("获取所有报告id", startTime); @@ -366,6 +366,118 @@ public class PatrolResultServiceImpl implements IPatrolResultService { // return saveReportData(resultList, resultMain, lineIds); } + + @Transactional + public List saveReportLingzhou_v2(PatrolTaskResultMain resultMain, List lineIds, Long currentLineId, List resultList) { + long startTime = System.currentTimeMillis(); + List reportIds = new ArrayList<>(); + if (resultList.isEmpty()) { + log.error("EMPTY REPORT DATA"); + return reportIds; + } + String AiNum = statisticsAnalyseNumLingZhou(lineIds); + List taskNames = resultList.stream().map(PatrolResult::getTaskName).distinct().collect(Collectors.toList()); + List taskPatrolledIds = resultList.stream().map(PatrolResult::getTaskPatrolledId).distinct().collect(Collectors.toList()); + String taskName = StringUtils.join(taskNames, ","); + + List taskStatuses = this.patrolTaskStatusMapper.selectPatrolTaskStatusListByTaskPatrolledIds(taskPatrolledIds); + if (taskStatuses.isEmpty()) { + log.error("LACKING STATUS: " + resultMain.getLineId()); + } + List startTimes = taskStatuses.stream().map(PatrolTaskStatus::getStartTime).sorted().collect(Collectors.toList()); + List endTimes = taskStatuses.stream().map(PatrolTaskStatus::getEndTime).sorted().collect(Collectors.toList()); + + Map stationMap = patrolResultMapper.selectBasedataStation(); + String stationName = stationMap.get("station_name"); + String stationType = stationMap.get("station_type"); + String voltLevel = stationMap.get("volt_level"); + AjaxResult ajaxResult = feignBasedataAreaService.evnList(); + List jsonObjects = JSONObject.parseArray(JSON.toJSONString(ajaxResult.get("data")), JSONObject.class); + log.debug("EVN LIST: " + jsonObjects); + List envoList = new ArrayList<>(); + for (JSONObject jsonObject : jsonObjects) { + String typeName = jsonObject.getString("typeName"); + String valueUnit = jsonObject.getString("valueUnit"); + if (StringUtils.isEmpty(valueUnit) || StringUtils.isEmpty(typeName)) { + continue; + } + envoList.add(typeName + ":" + valueUnit); + } + + Map keyPatrolResultRef = new HashMap<>(); + List patrolResultRefs = patrolResultMapper.selectResultRefByLineIds(lineIds, "0"); + List patrolResultRefsFilter = patrolResultMapper.selectResultRefByLineIds(lineIds, "1"); + for (PatrolResultRef AIRef : patrolResultRefs) { + keyPatrolResultRef.put(AIRef.getDeviceId() + "_" + AIRef.getAlgType(), AIRef); + } + for (PatrolResultRef filterRef : patrolResultRefsFilter) { + keyPatrolResultRef.putIfAbsent(filterRef.getDeviceId() + "_" + filterRef.getAlgType(), filterRef); + } + patrolResultRefs = new ArrayList<>(keyPatrolResultRef.values()); + + // 每个任务生成一份报告 + for (Long lineId : lineIds) { + resultMain.setLineId(lineId); + resultMain.setCheckTime(new Date()); + resultMain.setFileStatus("1"); + this.patrolTaskResultMainMapper.updatePatrolTaskResultMain(resultMain); + this.patrolResultMapper.updatePatrolResultByMainId(String.valueOf(lineId)); + startTime = System.currentTimeMillis(); + String mainId = String.valueOf(resultMain.getLineId()); + String[] nums = new String[]{AiNum}; + + PatrolResult patrolResult = resultList.stream().filter(item -> mainId.equals(item.getMainId())).findFirst().orElse(null); + assert patrolResult != null; + String taskCode = patrolResult.getTaskCode(); + String taskPatrolId = patrolResult.getTaskPatrolledId(); + + if (StringUtils.isEmpty(taskPatrolId)) { + throw new ServiceException("LACK PLAN ID: " + mainId); + } else { + if (taskStatuses.isEmpty()) { + throw new ServiceException("LACKING STATUS: " + mainId); + } else { +// PatrolTaskStatus taskStatus = taskStatuses.stream().filter(item -> taskPatrolId.equals(item.getTaskPatrolledId())).findFirst().orElse(null); + List list = patrolTaskMapper.selectPatrolTaskList(PatrolTask.builder().taskCode(taskCode).build()); + if (list.isEmpty()) { + throw new ServiceException("TASK PLAN LOST: " + taskCode); + } else { + PatrolTask task = list.get(0); + for (int i = 0; i < nums.length; i++) { + InspectionReport report = new InspectionReport(); +// resetReport(report, nums[i], mainId, task, taskStatus); + report.setPatrolStatistics(nums[i]); + report.setInspectionDate(new Date()); + report.setTaskResultId(mainId); + report.setInspectionStartTime(startTimes.get(0)); + report.setInspectionEndTime(DateUtils.parseDate(endTimes.get(endTimes.size() - 1))); + report.setTaskId(String.valueOf(task.getTaskId())); + report.setEnvInfo(StringUtils.join(envoList, ",")); + report.setTaskPatrolledId(taskPatrolId); + report.setInspectionTaskName(taskName); + report.setDescription(resultMain.getTaskResult()); + report.setCheckPerson(resultMain.getCheckPerson()); + report.setCheckTime(resultMain.getCheckTime()); + report.setStationName(stationName); + report.setVoltLevel(StringUtils.isEmpty(voltLevel) ? voltage : voltLevel); + report.setFilter(String.valueOf(i)); + report.setStationType(stationType); + inspectionReportMapper.insertInspectionReport(report); + PrintUtil.useTime("NEW TASK REPORT", startTime); // 12s + batchInsertReportData(String.valueOf(report.getLineId()), lineIds, String.valueOf(i), patrolResultRefs); + PrintUtil.useTime("BATCH INSERT DETAIL", startTime); // 13s + log.info("[ARCHIVE] reportId: {}", report.getLineId()); + reportIds.add(report.getLineId()); + } + } + } + } + } + + PrintUtil.useTime("获取所有报告id", startTime); + return reportIds; + } + @Transactional public List saveReportShaoxing(PatrolTaskResultMain resultMain, List lineIds, Long currentLineId, List resultList, int aiQxNum, int csQxNum) { long startTime = System.currentTimeMillis(); @@ -585,7 +697,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService { } } - public List saveReportDataLingzhou(List resultList, PatrolTaskResultMain resultMain, List lineIds, int aiQxNum, int csQxNum) { + public List saveReportDataLingzhou_v1(List resultList, PatrolTaskResultMain resultMain, List lineIds, int aiQxNum, int csQxNum) { long startTime = System.currentTimeMillis(); String mainId = String.valueOf(resultMain.getLineId()); // String analyseNum = statisticsAnalyseNum(lineIds, resultList.size()); @@ -1189,18 +1301,18 @@ public class PatrolResultServiceImpl implements IPatrolResultService { int totalNum = keyToAnalysisMap.size(); - log.info("lineIds:{},statisticsAnalyseNum analyses:{}", lineIds, analysesAI); - for (ResultAnalysis analyse : keyToAnalysisMap.values()) { - String resultType = analyse.getResultType(); - if (resultType.equals("0")) { - ++confirmNum; - } else if (resultType.equals("1")) { - ++okNum; - } else if (resultType.equals("2")) { - ++failNum; - } - } + if ("0".equals(exportReportFlag)) { + for (ResultAnalysis analyse : keyToAnalysisMap.values()) { + String resultType = analyse.getResultType(); + if (resultType.equals("0")) { + ++confirmNum; + } else if (resultType.equals("1")) { + ++okNum; + } else if (resultType.equals("2")) { + ++failNum; + } + } return String.format(messageUtils.get("缺陷点位:%d个。"), confirmNum); } else { // return String.format(messageUtils.get("本次任务巡视总点位:%d个,已检点位:%d个,未检点位:0个,正常点位:%d个,异常点位:%d个,缺陷点位:%d个。"), totalNum, totalNum, okNum, failNum, confirmNum); diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/controller/PatrolTaskResultMainController.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/controller/PatrolTaskResultMainController.java index 76113be..b519006 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/controller/PatrolTaskResultMainController.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/controller/PatrolTaskResultMainController.java @@ -45,6 +45,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.http.ResponseEntity; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.*; import javax.servlet.ServletOutputStream; @@ -363,31 +364,31 @@ public class PatrolTaskResultMainController extends BaseController { logger.error("[归档]失败, 数据采集中..."); return AjaxResult.error("数据采集中请稍后...."); } - startTime = System.currentTimeMillis(); - ResultAnalysis resultAnalysis = new ResultAnalysis(); - int csQxNum = 0, aiQxNum = 0; - List taskPatrolledIds = resultList.stream().map(PatrolResult::getTaskPatrolledId).distinct().collect(Collectors.toList()); - for (String taskPatrolledId : taskPatrolledIds) { - resultAnalysis.setTaskPatrolledId(taskPatrolledId); - ResultAnalysis ras = patrolResultService.selectTaskAbnormalData(resultAnalysis); - csQxNum += ras.getCsQxNum(); - aiQxNum += ras.getAiQxNum(); - } +// startTime = System.currentTimeMillis(); +// ResultAnalysis resultAnalysis = new ResultAnalysis(); +// int csQxNum = 0, aiQxNum = 0; +// List taskPatrolledIds = resultList.stream().map(PatrolResult::getTaskPatrolledId).distinct().collect(Collectors.toList()); +// for (String taskPatrolledId : taskPatrolledIds) { +// resultAnalysis.setTaskPatrolledId(taskPatrolledId); +// ResultAnalysis ras = patrolResultService.selectTaskAbnormalData(resultAnalysis); +// csQxNum += ras.getCsQxNum(); +// aiQxNum += ras.getAiQxNum(); +// } - if ("0".equals(exportReportFlag) && 0 == aiQxNum && 0 == csQxNum) { - logger.error("[归档]没有缺陷数据, 无需归档!"); - return AjaxResult.error("没有缺陷数据, 无需归档!"); - } +// if ("0".equals(exportReportFlag) && 0 == aiQxNum && 0 == csQxNum) { +// logger.error("[归档]没有缺陷数据, 无需归档!"); +// return AjaxResult.error("没有缺陷数据, 无需归档!"); +// } - PrintUtil.useTime("查询统计缺陷数据", startTime); +// PrintUtil.useTime("查询统计缺陷数据", startTime); startTime = System.currentTimeMillis(); // 使用CompletableFuture异步执行saveReport - int finalAiQxNum = aiQxNum; - int finalCsQxNum = csQxNum; +// int finalAiQxNum = aiQxNum; +// int finalCsQxNum = csQxNum; List finalLineIds = lineIds; CompletableFuture> saveReportFuture = CompletableFuture.supplyAsync(() -> { logger.info("[ARCHIVE] Start saving reports"); - return patrolResultService.saveReportLingzhou(resultMain, finalLineIds, lineId, resultList, finalAiQxNum, finalCsQxNum); + return patrolResultService.saveReportLingzhou_v2(resultMain, finalLineIds, lineId, resultList); }, executor).exceptionally(ex -> { logger.error("Report saving failed", ex); return Collections.emptyList(); diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java index cf68504..dcddc64 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java @@ -54,4 +54,6 @@ public interface IPatrolTaskService { void correctionAlgorithm(PatrolData patrolData); void executeAsync(PatrolTaskStatus taskStatus); + + void executeTask(); } diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java index 7f20199..eff1432 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java @@ -27,9 +27,12 @@ import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @Slf4j +@EnableScheduling @Service public class PatrolTaskServiceImpl implements IPatrolTaskService { @@ -246,7 +249,7 @@ public class PatrolTaskServiceImpl implements IPatrolTaskService { return; } Set patrolTaskCodes = patrolAreaTasks.stream().map(PatrolTask::getTaskCode).collect(Collectors.toSet()); - log.debug("异步执行任务报告合并,区域: {} 下的任务编码集合: {}", taskAreaName, patrolTaskCodes); + log.info("异步执行任务报告合并,区域: {} 下的任务编码集合: {}", taskAreaName, patrolTaskCodes); // patrolTaskStatus 和 patrolTaskResultMain 关联查询,区域任务执行状态已完成,并且未归档的数量是否和区域任务总数相等,相等则归档该区域的任务 @@ -254,7 +257,7 @@ public class PatrolTaskServiceImpl implements IPatrolTaskService { List jsonObjects = patrolTaskMapper.selectPatrolTaskStatus(patrolTaskCodes); log.debug("异步执行任务报告合并,区域: {} 下的已完成任务集合: {}", taskAreaName, jsonObjects); Set taskCodeStatus = jsonObjects.stream().map(jsonObject -> jsonObject.getString("taskCode")).collect(Collectors.toSet()); - log.debug("异步执行任务报告合并,区域: {} 下的任务编码集合: {}", taskAreaName, taskCodeStatus); + log.info("异步执行任务报告合并,区域: {} 下的任务编码集合: {}", taskAreaName, taskCodeStatus); // 如果patrolTaskCodes 都在taskCodeStatus中,则归档该区域的任务 if (!taskCodeStatus.containsAll(patrolTaskCodes)) { @@ -265,8 +268,30 @@ public class PatrolTaskServiceImpl implements IPatrolTaskService { PatrolTaskResultMain patrolTaskResultMain = new PatrolTaskResultMain(); patrolTaskResultMain.setLineIds(lineIds); patrolTaskResultMain.setCheckPerson("admin"); - patrolTaskResultMainController.updateInfo_lingzhou(patrolTaskResultMain); +// patrolTaskResultMainController.updateInfo_lingzhou(patrolTaskResultMain); PrintUtil.useTime("异步执行任务报告合并,区域: " + taskAreaName + " 下的任务归档完成", startTime); } + + // 定时任务归档(每天18:30执行) + @Scheduled(cron = "0 30 18 * * ?") + public void executeTask() { + String stationNo = patrolTaskMapper.selectStationNo(); + if (!"lingzhouzhiliu".equals(stationNo)) { + return; + } + log.info("=============================定时任务归档开始============================================="); + List jsonObjects = patrolTaskMapper.selectPatrolTaskStatus(new HashSet<>()); + List lineIds = jsonObjects.stream().map(jsonObject -> jsonObject.getLong("lineId")).distinct().collect(Collectors.toList()); + log.info("定时任务归档,已完成任务集合guidang lineIds: {}", lineIds); + PatrolTaskResultMain patrolTaskResultMain = new PatrolTaskResultMain(); + patrolTaskResultMain.setLineIds(lineIds); + patrolTaskResultMain.setCheckPerson("admin"); + try { + patrolTaskResultMainController.updateInfo_lingzhou(patrolTaskResultMain); + } catch (Exception e) { + log.error("定时任务归档异常", e); + } + log.info("=============================定时任务归档结束============================================="); + } } diff --git a/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml b/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml index 0fe2207..cd53163 100644 --- a/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml +++ b/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml @@ -358,20 +358,23 @@