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 786098f..1dd90c9 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 @@ -85,6 +85,8 @@ public interface IPatrolResultService { List saveReportLingzhou(PatrolTaskResultMain resultMain, List lineIds, Long currentLineId, List resultList, int aiQxNum, int csQxNum); + List saveReportShaoxing(PatrolTaskResultMain resultMain, List lineIds, Long currentLineId, List resultList, int aiQxNum, int csQxNum); + List saveReportV2(PatrolTaskResultMain patrolTaskResultMain, List patrolResultList); List selectResultRefByLineId(String lineId); 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 cbf56d0..f266b71 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 @@ -364,6 +364,26 @@ public class PatrolResultServiceImpl implements IPatrolResultService { // return saveReportData(resultList, resultMain, lineIds); } + @Transactional + public List saveReportShaoxing(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()); + for (Long lineId : lineIds) { + resultMain.setLineId(lineId); + resultMain.setCheckTime(new Date()); + resultMain.setFileStatus("1"); + this.patrolTaskResultMainMapper.updatePatrolTaskResultMain(resultMain); + this.patrolResultMapper.updatePatrolResultByMainId(String.valueOf(lineId)); + reportIds.addAll(saveReportDataShaoxing(resultList, resultMain, lineIds, aiQxNum, csQxNum)); + } + + PrintUtil.useTime("获取所有报告id", startTime); + return reportIds; +// resultMain.setLineId(currentLineId); +// return saveReportData(resultList, resultMain, lineIds); + } + @Transactional public List saveReportV2(PatrolTaskResultMain resultMain, List resultList) { long startTime = System.currentTimeMillis(); @@ -459,6 +479,110 @@ public class PatrolResultServiceImpl implements IPatrolResultService { } } + public List saveReportDataShaoxing(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()); +// String filterNum = statisticsAnalyseNumLingZhou(lineIds, "1"); + String AiNum = statisticsAnalyseNumShaoxing(lineIds); +// String[] nums = new String[]{AiNum, filterNum}; + String[] nums = new String[]{AiNum}; + startTime = PrintUtil.useTime("STATISTICS ANALYZE DATA", startTime); + if (resultList.isEmpty()) { + throw new ServiceException("LACK INSPECT RESULT: " + mainId); + } else { + PatrolResult patrolResult = resultList.stream().filter(item -> mainId.equals(item.getMainId())).findFirst().orElse(null); + assert patrolResult != null; + String taskCode = patrolResult.getTaskCode(); + String taskPatrolId = patrolResult.getTaskPatrolledId(); + List taskNames = resultList.stream().map(PatrolResult::getTaskName).distinct().collect(Collectors.toList()); + String taskName = StringUtils.join(taskNames, ","); + if (StringUtils.isEmpty(taskPatrolId)) { + throw new ServiceException("LACK PLAN ID: " + mainId); + } else { + List taskStatuses = this.patrolTaskStatusMapper.selectPatrolTaskStatusList(PatrolTaskStatus.builder().taskPatrolledId(taskPatrolId).build()); + startTime = PrintUtil.useTime("INQUIRY STATUS", startTime); + if (taskStatuses.isEmpty()) { + throw new ServiceException("LACKING STATUS: " + mainId); + } else { + PatrolTaskStatus taskStatus = taskStatuses.get(0); + List list = patrolTaskMapper.selectPatrolTaskList(PatrolTask.builder().taskCode(taskCode).build()); + startTime = PrintUtil.useTime("INQUIRY TASK PLAN", startTime); + if (list.isEmpty()) { + throw new ServiceException("TASK PLAN LOST: " + taskCode); + } else { + List reportIds = new ArrayList<>(); + PatrolTask task = list.get(0); +// List reports = inspectionReportMapper.selectInspectionReportList(new InspectionReport(mainId)); +// startTime = PrintUtil.useTime("INQUIRY TASK REPORT", startTime); +// InspectionReport report; +// if (!reports.isEmpty()) { +// report = reports.get(0); +// resetReport(report, analyseNum, mainId, task, taskStatus); +// inspectionReportMapper.updateInspectionReport(report); +// PrintUtil.useTime("MODIFY TASK REPORT", startTime); +// } else { + 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.info("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); + } + for (int i = 0; i < nums.length; i++) { + if ("0".equals(exportReportFlag) && aiQxNum == 0 && csQxNum == 0) { + continue; + } +// Map keyPatrolResultRef = new HashMap<>(); + List patrolResultRefs = patrolResultMapper.selectResultRefByLineIds(lineIds, null); +// 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()); + if (patrolResultRefs.isEmpty()) { + continue; + } + InspectionReport report = new InspectionReport(); + resetReport(report, nums[i], mainId, task, taskStatus); + 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); + batchInsertReportData(String.valueOf(report.getLineId()), lineIds, String.valueOf(i), patrolResultRefs); + PrintUtil.useTime("BATCH INSERT DETAIL", startTime); + log.info("[ARCHIVE] reportId: {}", report.getLineId()); + Long lineId = report.getLineId(); + reportIds.add(lineId); + } +// } + return reportIds; + } + } + } + } + } + public List saveReportDataLingzhou(List resultList, PatrolTaskResultMain resultMain, List lineIds, int aiQxNum, int csQxNum) { long startTime = System.currentTimeMillis(); String mainId = String.valueOf(resultMain.getLineId()); @@ -1025,8 +1149,36 @@ public class PatrolResultServiceImpl implements IPatrolResultService { ++failNum; } } + if ("0".equals(exportReportFlag)) { + return String.format(messageUtils.get("缺陷点位:%d个。"), confirmNum); + } else { + return String.format(messageUtils.get("本次任务巡视总点位:%d个,已检点位:%d个,未检点位:0个,正常点位:%d个,异常点位:%d个,缺陷点位:%d个。"), totalNum, totalNum, okNum, failNum, confirmNum); + } + } + - return String.format(messageUtils.get("本次任务巡视总点位:%d个,已检点位:%d个,未检点位:0个,正常点位:%d个,异常点位:%d个,缺陷点位:%d个。"), totalNum, totalNum, okNum, failNum, confirmNum); + public String statisticsAnalyseNumShaoxing(List lineIds) { + int okNum = 0; + int failNum = 0; + int confirmNum = 0; + List analyses = resultAnalysisMapper.selectResultAnalysisListByMainIdsNew(lineIds, null); + int totalNum = analyses.size(); + log.info("lineIds:{},statisticsAnalyseNum analyses:{}", lineIds, analyses); + for (ResultAnalysis analyse : analyses) { + 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)) { + return String.format(messageUtils.get("缺陷点位:%d个。"), confirmNum); + } else { + return String.format(messageUtils.get("本次任务巡视总点位:%d个,已检点位:%d个,未检点位:0个,正常点位:%d个,异常点位:%d个,缺陷点位:%d个。"), totalNum, totalNum, okNum, failNum, confirmNum); + } } public String statisticsAnalyseNumV2(String mainId, String filter) { 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 a7ed241..ffd5899 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 @@ -2,7 +2,6 @@ package com.inspect.resultmain.controller; import cn.hutool.core.date.DateUtil; import com.inspect.analysis.domain.ResultAnalysis; -import com.inspect.analysis.domain.resultList; import com.inspect.analysis.service.IResultAnalysisService; import com.inspect.base.core.sftp.SftpClient; import com.inspect.base.core.sftp.SftpUploadEntity; @@ -24,38 +23,16 @@ import com.inspect.message.MessageUtils; import com.inspect.partrolresult.domain.PatrolResult; import com.inspect.partrolresult.service.IPatrolResultService; import com.inspect.partrolresult.util.PrintUtil; -import com.inspect.partrolresultAux.domain.PatrolResultAux; import com.inspect.partrolresultAux.service.IPatrolResultAuxService; import com.inspect.resultmain.domain.PatrolTaskResultMain; import com.inspect.resultmain.service.IPatrolTaskResultMainService; import com.inspect.task.service.IPatrolTaskService; import com.inspect.taskinfo.service.IPatrolTaskInfoService; +import com.inspect.taskstatus.domain.PatrolTaskStatus; import com.inspect.taskstatus.service.IPatrolTaskStatusService; - -import java.io.*; -import java.math.BigInteger; -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; -import javax.servlet.http.HttpServletResponse; - import net.coobird.thumbnailator.Thumbnails; import org.apache.commons.io.function.IOConsumer; -import org.apache.poi.hssf.usermodel.HSSFCell; -import org.apache.poi.hssf.usermodel.HSSFCellStyle; -import org.apache.poi.hssf.usermodel.HSSFClientAnchor; -import org.apache.poi.hssf.usermodel.HSSFFont; -import org.apache.poi.hssf.usermodel.HSSFPatriarch; -import org.apache.poi.hssf.usermodel.HSSFRow; -import org.apache.poi.hssf.usermodel.HSSFSheet; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.Units; @@ -68,8 +45,23 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; 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.web.bind.annotation.*; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.math.BigInteger; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + @RestController @RefreshScope @RequestMapping({"/resultmain"}) @@ -269,6 +261,88 @@ public class PatrolTaskResultMainController extends BaseController { } + @PostMapping({"/updateInfo_shaoxing"}) + public AjaxResult updateInfo_shaoxing( + @RequestBody PatrolTaskResultMain resultMain) { + long startTime = System.currentTimeMillis(); + logger.info("[ARCHIVE] Starting, resultMain: {}", resultMain); + logger.info("-----------resultMain getTaskPatrolledId: {}", resultMain.getTaskPatrolledId()); + PatrolTaskResultMain patrolTaskResultMain = patrolTaskResultMainService.selectPatrolTaskResultMainByTaskPatrolledId(resultMain.getTaskPatrolledId()); + logger.info("-----------patrolTaskResultMain: {}", patrolTaskResultMain); + if (patrolTaskResultMain == null) { + logger.error("[归档]失败, 数据采集中..."); + return AjaxResult.error("数据采集中请稍后...."); + } + Long lineId = patrolTaskResultMain.getLineId(); + List lineIds = new ArrayList<>(); + lineIds.add(lineId); + List longs = patrolTaskResultMainService.selectLineIdsByList(lineIds); + if (longs != null && longs.size() > 0) { + lineIds.addAll(longs); + } + lineIds = lineIds.stream().distinct().collect(Collectors.toList()); + PrintUtil.useTime("收集需归档的lineIds", startTime); + logger.info("---归档--lineIds size: {},lineIds:{}", lineIds.size(), lineIds); + List resultList = patrolResultService.selectPatrolResultListByMainIds(lineIds); + if (resultList.isEmpty()) { + 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(); + } + + if("0".equals(exportReportFlag) && 0 == aiQxNum && 0 == csQxNum) { + logger.error("[归档]没有缺陷数据, 无需归档!"); + return AjaxResult.error("没有缺陷数据, 无需归档!"); + } + + PrintUtil.useTime("查询统计缺陷数据", startTime); + startTime = System.currentTimeMillis(); + // 使用CompletableFuture异步执行saveReport + int finalAiQxNum = aiQxNum; + int finalCsQxNum = csQxNum; + List finalLineIds = lineIds; + CompletableFuture> saveReportFuture = CompletableFuture.supplyAsync(() -> { + logger.info("[ARCHIVE] Start saving reports"); + return patrolResultService.saveReportShaoxing(resultMain, finalLineIds, lineId, resultList, finalAiQxNum, finalCsQxNum); + }, executor).exceptionally(ex -> { + logger.error("Report saving failed", ex); + return Collections.emptyList(); + }); + PrintUtil.useTime("保存报告数据", startTime); + startTime = System.currentTimeMillis(); + // 当saveReport完成后,再异步处理所有导出任务 + saveReportFuture.thenAcceptAsync(reportIds -> { + logger.info("-----------[ARCHIVE] Saved export reportIds: {}", reportIds); + if (reportIds.isEmpty()) { + logger.warn("No reports to export"); + return; + } + // 为每个reportId创建异步导出任务 + CompletableFuture[] exportFutures = reportIds.stream() + .map(reportId -> CompletableFuture.runAsync(() -> { + logger.info("[EXPORT] Start export for reportId: {}", reportId); + exportExcelWordAndZipLingzhou(String.valueOf(reportId)); + }, executor)) + .toArray(CompletableFuture[]::new); + + }, executor).exceptionally(ex -> { + logger.error("Error occurred during saveReport: ", ex); + return null; + }); + PrintUtil.useTime("导出报告数据", startTime); + return toAjax(1); + + } + @PostMapping({"/updateInfo"}) public AjaxResult updateInfo_lingzhou( @@ -382,6 +456,27 @@ public class PatrolTaskResultMainController extends BaseController { } } + @Log( + title = "导出报告", + businessType = BizType.EXPORT + ) + @PostMapping({"/reportExport"}) + public ResponseEntity taskInfoExport(HttpServletResponse response, PatrolTaskResultMain patrolTaskResultMain) throws Exception { + logger.info("开始导出报告,patrolTaskResultMain:{}", patrolTaskResultMain.toString()); + +// response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); +// response.setHeader("Content-Disposition", "attachment; filename=\"task_export_" + System.currentTimeMillis() + ".xlsx\""); +// InspectionReport inspectionReport = new InspectionReport(); +// +// try (SXSSFWorkbook sxssfWorkbook = getSXSSFWorkbookLingzhou(inspectionReport, streamHashMap); +// ServletOutputStream outputStream = response.getOutputStream()) { +// sxssfWorkbook.write(outputStream); +// } + + + return ResponseEntity.ok("报告导出成功!"); + } + public String ToStationIn(String areaId) { String areaName = ""; Map map = this.patrolResultService.selectAreaInfo(areaId); diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/mapper/PatrolTaskResultMainMapper.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/mapper/PatrolTaskResultMainMapper.java index 7c295c0..452a1ad 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/mapper/PatrolTaskResultMainMapper.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/mapper/PatrolTaskResultMainMapper.java @@ -12,6 +12,8 @@ public interface PatrolTaskResultMainMapper { List selectPatrolTaskResultMainList(PatrolTaskResultMain resultMain); + PatrolTaskResultMain selectPatrolTaskResultMainByTaskPatrolledId(@Param("taskPatrolledId") String tasKPatrolledId); + List selectPatrolTaskResultMain(PatrolTaskResultMain resultMain); String selectUnifiedTaskPatrolledId(PatrolTaskResultMain resultMain); diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/IPatrolTaskResultMainService.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/IPatrolTaskResultMainService.java index c808410..b93e8ae 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/IPatrolTaskResultMainService.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/IPatrolTaskResultMainService.java @@ -9,6 +9,8 @@ public interface IPatrolTaskResultMainService { List selectPatrolTaskResultMainList(PatrolTaskResultMain patrolTaskResultMain); + PatrolTaskResultMain selectPatrolTaskResultMainByTaskPatrolledId(String taskPatrolledId); + List selectPatrolTaskResultMain(PatrolTaskResultMain patrolTaskResultMain); String selectUnifiedTaskPatrolledId(PatrolTaskResultMain patrolTaskResultMain); diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/impl/PatrolTaskResultMainServiceImpl.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/impl/PatrolTaskResultMainServiceImpl.java index 068ee74..fc6cfc4 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/impl/PatrolTaskResultMainServiceImpl.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/impl/PatrolTaskResultMainServiceImpl.java @@ -26,6 +26,10 @@ public class PatrolTaskResultMainServiceImpl implements IPatrolTaskResultMainSer return this.patrolTaskResultMainMapper.selectPatrolTaskResultMainList(patrolTaskResultMain); } + public PatrolTaskResultMain selectPatrolTaskResultMainByTaskPatrolledId(String taskPatrolledId) { + return this.patrolTaskResultMainMapper.selectPatrolTaskResultMainByTaskPatrolledId(taskPatrolledId); + } + public List selectPatrolTaskResultMain(PatrolTaskResultMain patrolTaskResultMain) { return this.patrolTaskResultMainMapper.selectPatrolTaskResultMain(patrolTaskResultMain); } diff --git a/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskResultMainMapper.xml b/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskResultMainMapper.xml index 514b454..7e977b8 100644 --- a/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskResultMainMapper.xml +++ b/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskResultMainMapper.xml @@ -159,6 +159,12 @@ ) + +