From a1d8dea3eec34440c6a2c777f585bc2192e46a51 Mon Sep 17 00:00:00 2001 From: wangguangyuan Date: Tue, 7 Jul 2026 15:55:14 +0800 Subject: [PATCH] =?UTF-8?q?perf:=E5=90=88=E5=B9=B6=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=EF=BC=8C=E6=89=80=E6=9C=89=E6=8A=A5=E5=91=8A=E9=83=BD=E6=98=AF?= =?UTF-8?q?=E4=B8=80=E6=A0=B7=E7=9A=84=EF=BC=8C=E6=94=B9=E6=88=90=E5=8F=96?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E6=8A=A5=E5=91=8A=E5=AF=BC=E5=87=BA=EF=BC=8C?= =?UTF-8?q?=E8=BF=99=E6=A0=B7=E5=B0=B1=E9=81=BF=E5=85=8D=E5=A4=9A=E6=AC=A1?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=90=8C=E6=A0=B7=E6=8A=A5=E5=91=8A=EF=BC=8C?= =?UTF-8?q?=E5=BD=B1=E5=93=8D=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../insreport/domain/InspectionReport.java | 1 + .../mapper/InspectionReportMapper.java | 2 ++ .../service/IInspectionReportService.java | 2 ++ .../impl/InspectionReportServiceImpl.java | 4 +++ .../service/impl/PatrolResultServiceImpl.java | 3 ++- .../PatrolTaskResultMainController.java | 25 ++++++++----------- .../mapper/task/InspectionReportMapper.xml | 11 ++++++++ 7 files changed, 33 insertions(+), 15 deletions(-) diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/domain/InspectionReport.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/domain/InspectionReport.java index 89f78ca..2ac2ce5 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/domain/InspectionReport.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/domain/InspectionReport.java @@ -100,6 +100,7 @@ public class InspectionReport extends BaseEntity { private Date cycleEndTime; private String taskPatrolledId; private String filter; + private List lineIds; List ReportDatalist; private List info; diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/mapper/InspectionReportMapper.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/mapper/InspectionReportMapper.java index 93aff08..f5b2b9a 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/mapper/InspectionReportMapper.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/mapper/InspectionReportMapper.java @@ -17,6 +17,8 @@ public interface InspectionReportMapper { int updateInspectionReport(InspectionReport report); + int updateInspectionReportFilePath(InspectionReport report); + int deleteInspectionReportByLineId(Long lineId); int deleteInspectionReportByLineIds(Long[] lineIds); diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/service/IInspectionReportService.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/service/IInspectionReportService.java index 9d2de4c..5e9f7a1 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/service/IInspectionReportService.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/service/IInspectionReportService.java @@ -15,6 +15,8 @@ public interface IInspectionReportService { int updateInspectionReport(InspectionReport inspectionReport); + int updateInspectionReportFilePath(InspectionReport inspectionReport); + int deleteInspectionReportByLineIds(Long[] lineIds); int deleteInspectionReportByLineId(Long lineId); diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/service/impl/InspectionReportServiceImpl.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/service/impl/InspectionReportServiceImpl.java index c346386..7563ca7 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/service/impl/InspectionReportServiceImpl.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/service/impl/InspectionReportServiceImpl.java @@ -38,6 +38,10 @@ public class InspectionReportServiceImpl implements IInspectionReportService { return this.inspectionReportMapper.updateInspectionReport(inspectionReport); } + public int updateInspectionReportFilePath(InspectionReport inspectionReport) { + return this.inspectionReportMapper.updateInspectionReportFilePath(inspectionReport); + } + public int deleteInspectionReportByLineIds(Long[] lineIds) { return this.inspectionReportMapper.deleteInspectionReportByLineIds(lineIds); } 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 36106f7..e7de160 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 @@ -520,7 +520,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService { @Transactional public List saveReportShaoxing(PatrolTaskResultMain resultMain, List lineIds, List resultList) { - log.info("saveReportShaoxing PatrolTaskResultMain:{},lineIds:{},resultList:{} ", resultMain, lineIds, resultList); + log.info("saveReportShaoxing PatrolTaskResultMain:{},lineIds:{},resultList size:{} ", resultMain, lineIds, resultList.size()); long startTime = System.currentTimeMillis(); List reportIds = new ArrayList<>(); // 获取站信息 @@ -787,6 +787,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService { this.patrolTaskResultMainMapper.updatePatrolTaskResultMain(resultMain); this.patrolResultMapper.updatePatrolResultByMainId(String.valueOf(lineId)); } + startTime = PrintUtil.useTime("导出报告:全部数据入库", startTime); return reportIds; } 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 8992633..36c2cf2 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 @@ -275,7 +275,6 @@ public class PatrolTaskResultMainController extends BaseController { logger.info("-----------patrolTaskResultMains: {}", patrolTaskResultMains); if (patrolTaskResultMains.size() == 0) { logger.error("[归档]失败, 数据采集中..."); -// return AjaxResult.error("数据采集中请稍后...."); } List lineIds = patrolTaskResultMains.stream().map(PatrolTaskResultMain::getLineId).collect(Collectors.toList()); List longs = patrolTaskResultMainService.selectLineIdsByList(lineIds); @@ -286,7 +285,6 @@ public class PatrolTaskResultMainController extends BaseController { List resultList = patrolResultService.selectPatrolResultListByMainIds(lineIds); if (resultList.isEmpty()) { logger.error("[归档]失败, 数据采集中..."); -// return AjaxResult.error("数据采集中请稍后...."); } List finalLineIds = lineIds; PrintUtil.useTime("查询统计数据", finalStartTime); @@ -297,6 +295,7 @@ public class PatrolTaskResultMainController extends BaseController { return Collections.emptyList(); }); startTime = PrintUtil.useTime("保存报告数据", startTime); + // 当saveReport完成后,再异步处理所有导出任务 saveReportFuture.thenAcceptAsync(reportIds -> { logger.info("-----------[ARCHIVE] Saved export reportIds: {}", reportIds); @@ -304,19 +303,14 @@ public class PatrolTaskResultMainController extends BaseController { 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)); - exportExcelWordAndZipShaoxing(String.valueOf(reportId)); - }, executor)) - .toArray(CompletableFuture[]::new); + + CompletableFuture.runAsync(() -> exportExcelWordAndZipShaoxing(reportIds), executor); }, executor).exceptionally(ex -> { logger.error("Error occurred during saveReport: ", ex); return null; }); + PrintUtil.useTime("导出报告数据", startTime); return toAjax(1); @@ -1477,7 +1471,7 @@ public class PatrolTaskResultMainController extends BaseController { CompletableFuture.allOf(zipUploadFuture, excelUploadFuture, wordUploadFuture).whenComplete((v, t) -> { try { - inspectionReport.setFilePath(basePath + reportName + ".xls"); + inspectionReport.setFilePath(basePath + reportName + ".xls" ); inspectionReportService.updateInspectionReport(inspectionReport); } finally { // 清理资源 @@ -1491,12 +1485,14 @@ public class PatrolTaskResultMainController extends BaseController { } } - public void exportExcelWordAndZipShaoxing(String lineId) { + public void exportExcelWordAndZipShaoxing(List reportIds) { + // 合并报告,所有报告都是一样的,所以随便取一个报告导出,这样就避免多次生成同样报告,影响性能 + Long lineId = reportIds.get(0); logMemoryUsage("START exportExcelWordAndZipShaoxing"); List images = new ArrayList<>(); Map imgSrcToFileNameMap = new HashMap<>(); InspectionReport inspectionReport = - inspectionReportService.selectInspectionReportByLineId(Long.valueOf(lineId)); + inspectionReportService.selectInspectionReportByLineId(lineId); InspectionReportData inspectionReportData = new InspectionReportData(); inspectionReportData.setReportId(String.valueOf(inspectionReport.getLineId())); List inspectionReportDataList = @@ -1624,7 +1620,8 @@ public class PatrolTaskResultMainController extends BaseController { CompletableFuture.allOf(zipUploadFuture, excelUploadFuture, wordUploadFuture).whenComplete((v, t) -> { try { inspectionReport.setFilePath(basePath + reportName + ".xls"); - inspectionReportService.updateInspectionReport(inspectionReport); + inspectionReport.setLineIds(reportIds); + inspectionReportService.updateInspectionReportFilePath(inspectionReport); } finally { closeResources(finalSxssfWorkbook, finalWordDocument, tempFiles); } diff --git a/inspect-main/inspect-main-task/src/main/resources/mapper/task/InspectionReportMapper.xml b/inspect-main/inspect-main-task/src/main/resources/mapper/task/InspectionReportMapper.xml index dfa568c..19fd2bf 100644 --- a/inspect-main/inspect-main-task/src/main/resources/mapper/task/InspectionReportMapper.xml +++ b/inspect-main/inspect-main-task/src/main/resources/mapper/task/InspectionReportMapper.xml @@ -172,6 +172,17 @@ where line_id = #{lineId} + + update inspection_report + + file_path = #{filePath}, + + where line_id in + + #{lineId} + + + delete from inspection_report