From 10445915f2305690ff3d3d3de0aa101e2cf6f647 Mon Sep 17 00:00:00 2001 From: chenjg <17688741996@163.com> Date: Fri, 2 Aug 2024 18:50:57 +0800 Subject: [PATCH] =?UTF-8?q?#[1213858398568448]=20=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E8=A1=A5=E5=85=85sql=E6=89=A7=E8=A1=8C=E8=80=97=E6=97=B6?= =?UTF-8?q?=E5=92=8C=E6=B8=B2=E6=9F=93=E8=80=97=E6=97=B6=E7=AD=89=20http:/?= =?UTF-8?q?/192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/?= =?UTF-8?q?939050947543042/1213858398568448?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/api/ExportReportDetailApi.java | 3 +- .../module/report/api/GetReportTableApi.java | 3 +- .../report/api/ShowReportDetailApi.java | 5 +-- .../module/report/config/ReportConfig.java | 3 +- .../report/schedule/plugin/ReportSendJob.java | 3 +- .../report/service/ReportServiceImpl.java | 20 +++++++-- .../report/util/ReportFreemarkerUtil.java | 44 ++++++++++++++++++- 7 files changed, 66 insertions(+), 15 deletions(-) diff --git a/src/main/java/neatlogic/module/report/api/ExportReportDetailApi.java b/src/main/java/neatlogic/module/report/api/ExportReportDetailApi.java index 6b5a6cf..027fa5a 100644 --- a/src/main/java/neatlogic/module/report/api/ExportReportDetailApi.java +++ b/src/main/java/neatlogic/module/report/api/ExportReportDetailApi.java @@ -102,14 +102,13 @@ public class ExportReportDetailApi extends PrivateBinaryStreamApiComponentBase { throw new ReportNotFoundException(reportId); } Map returnMap = reportService.getQuerySqlResult(reportVo, paramObj, showColumnsMap); - Map> pageMap = (Map>) returnMap.remove("page"); Map tmpMap = new HashMap<>(); Map commonMap = new HashMap<>(); tmpMap.put("report", returnMap); tmpMap.put("param", paramObj); tmpMap.put("common", commonMap); - String content = ReportFreemarkerUtil.getFreemarkerExportContent(tmpMap, returnMap, pageMap, filter, reportVo.getContent(), ActionType.EXPORT.getValue()); + String content = ReportFreemarkerUtil.getFreemarkerExportContent(tmpMap, returnMap, filter, reportVo.getContent(), ActionType.EXPORT.getValue()); if (DocType.PDF.getValue().equals(type)) { os = response.getOutputStream(); response.setContentType("application/pdf"); diff --git a/src/main/java/neatlogic/module/report/api/GetReportTableApi.java b/src/main/java/neatlogic/module/report/api/GetReportTableApi.java index 9368319..2d182f2 100644 --- a/src/main/java/neatlogic/module/report/api/GetReportTableApi.java +++ b/src/main/java/neatlogic/module/report/api/GetReportTableApi.java @@ -117,14 +117,13 @@ public class GetReportTableApi extends PrivateBinaryStreamApiComponentBase { try { boolean isFirst = request.getHeader("referer") == null || !request.getHeader("referer").contains("report-show/" + reportId); Map returnMap = reportService.getQuerySqlResultById(tableId, reportVo, paramObj, showColumnsMap); - Map> pageMap = (Map>) returnMap.remove("page"); Map tmpMap = new HashMap<>(); Map commonMap = new HashMap<>(); tmpMap.put("report", returnMap); tmpMap.put("param", paramObj); tmpMap.put("common", commonMap); - ReportFreemarkerUtil.getFreemarkerContent(tmpMap, returnMap, pageMap, filter, tableContent, out); + ReportFreemarkerUtil.getFreemarkerContent(tmpMap, returnMap, filter, tableContent, out); } catch (Exception ex) { out.write("
" + "" + "异常: " + ex.getMessage() + "
"); } diff --git a/src/main/java/neatlogic/module/report/api/ShowReportDetailApi.java b/src/main/java/neatlogic/module/report/api/ShowReportDetailApi.java index 1d4097f..dc6436a 100644 --- a/src/main/java/neatlogic/module/report/api/ShowReportDetailApi.java +++ b/src/main/java/neatlogic/module/report/api/ShowReportDetailApi.java @@ -105,18 +105,17 @@ public class ShowReportDetailApi extends PrivateBinaryStreamApiComponentBase { //out.write(""); //out.write(""); //out.write(""); - Map timeMap = new HashMap<>(); + //Map timeMap = new HashMap<>(); // boolean isFirst = request.getHeader("referer") == null || !request.getHeader("referer").contains("report-show/" + reportId); // Map returnMap = reportService.getQueryResult(reportId, paramObj, timeMap, isFirst, showColumnsMap); Map returnMap = reportService.getQuerySqlResult(reportVo, paramObj, showColumnsMap, tableList); - Map> pageMap = (Map>) returnMap.remove("page"); Map tmpMap = new HashMap<>(); Map commonMap = new HashMap<>(); tmpMap.put("report", returnMap); tmpMap.put("param", paramObj); tmpMap.put("common", commonMap); - ReportFreemarkerUtil.getFreemarkerContent(tmpMap, returnMap, pageMap, filter, reportVo.getContent(), out); + ReportFreemarkerUtil.getFreemarkerContent(tmpMap, returnMap, filter, reportVo.getContent(), out); } catch (Exception ex) { out.write("
" + "" + "异常: " + ex.getMessage() + "
"); } diff --git a/src/main/java/neatlogic/module/report/config/ReportConfig.java b/src/main/java/neatlogic/module/report/config/ReportConfig.java index 5f605ec..d4b2223 100755 --- a/src/main/java/neatlogic/module/report/config/ReportConfig.java +++ b/src/main/java/neatlogic/module/report/config/ReportConfig.java @@ -9,7 +9,8 @@ public class ReportConfig { public static int REPORT_MAXROW; public static int REPORT_TIMEOUT; public static String ARCHIVE_PATH; - + public static final String REPORT_PAGE_MAP_KEY = "REPORT_PAGE_MAP_KEY_" + Math.random(); + public static final String REPORT_TIME_MAP_KEY = "REPORT_TIME_MAP_KEY_" + Math.random(); public static final int JFREECHART_FONTSIZE; public static Paint[] CHART_COLOR = { diff --git a/src/main/java/neatlogic/module/report/schedule/plugin/ReportSendJob.java b/src/main/java/neatlogic/module/report/schedule/plugin/ReportSendJob.java index 7f46af9..7a4ffd4 100644 --- a/src/main/java/neatlogic/module/report/schedule/plugin/ReportSendJob.java +++ b/src/main/java/neatlogic/module/report/schedule/plugin/ReportSendJob.java @@ -196,13 +196,12 @@ public class ReportSendJob extends JobBase { JSONObject filter = new JSONObject(); filter.putAll(paramObj); Map returnMap = reportService.getQuerySqlResult(report, paramObj, null); - Map> pageMap = (Map>) returnMap.remove("page"); Map tmpMap = new HashMap<>(); Map commonMap = new HashMap<>(); tmpMap.put("report", returnMap); tmpMap.put("param", paramObj); tmpMap.put("common", commonMap); - String content = ReportFreemarkerUtil.getFreemarkerExportContent(tmpMap, returnMap, pageMap, filter, report.getContent(), ActionType.VIEW.getValue()); + String content = ReportFreemarkerUtil.getFreemarkerExportContent(tmpMap, returnMap, filter, report.getContent(), ActionType.VIEW.getValue()); Workbook reportWorkbook = null; try { reportWorkbook = reportService.getReportWorkbook(content); diff --git a/src/main/java/neatlogic/module/report/service/ReportServiceImpl.java b/src/main/java/neatlogic/module/report/service/ReportServiceImpl.java index 4dc896e..1350264 100644 --- a/src/main/java/neatlogic/module/report/service/ReportServiceImpl.java +++ b/src/main/java/neatlogic/module/report/service/ReportServiceImpl.java @@ -13,6 +13,7 @@ import neatlogic.framework.sqlrunner.SqlRunner; import neatlogic.framework.util.RestUtil; import neatlogic.framework.util.excel.ExcelBuilder; import neatlogic.framework.util.excel.SheetBuilder; +import neatlogic.module.report.config.ReportConfig; import neatlogic.module.report.dao.mapper.ReportInstanceMapper; import neatlogic.module.report.dao.mapper.ReportMapper; import neatlogic.module.report.dto.*; @@ -198,7 +199,7 @@ public class ReportServiceImpl implements ReportService { pageObj.put("needPage", true); pageMap.put(select.getId(), pageObj); } - returnResultMap.put("page", pageMap); + returnResultMap.put(ReportConfig.REPORT_PAGE_MAP_KEY, pageMap); /* 如果存在表格且存在表格显示列的配置,则筛选显示列并排序 showColumnMap:key->表格ID;value->配置的表格显示列 */ @@ -463,18 +464,21 @@ public class ReportServiceImpl implements ReportService { } } Map pageMap = new HashMap<>(); + Map timeMap = new HashMap<>(); BasePageVo basePageVo = new BasePageVo(); for (SqlInfo sqlInfo : sqlInfoList) { // 如果SQL设置了延迟加载,第一次访问时不主动获取数据 // if (isFirst) { // continue; // } + long sqlTimeStart = System.currentTimeMillis(); if (sqlInfo.getNeedPage()) { basePageVo.setPageSize(sqlInfo.getPageSize()); PageRowBounds rowBounds = new PageRowBounds(basePageVo.getStartNum(), basePageVo.getPageSize()); List list = sqlRunner.runSqlById(sqlInfo, paramMap, rowBounds); if (CollectionUtils.isNotEmpty(list)) { resultMap.put(sqlInfo.getId(), list); + timeMap.put("SQL_" + sqlInfo.getId() + "_SIZE", (long) list.size()); } basePageVo.setRowNum(rowBounds.getRowNum()); JSONObject pageObj = new JSONObject(); @@ -488,10 +492,12 @@ public class ReportServiceImpl implements ReportService { List list = sqlRunner.runSqlById(sqlInfo, paramMap); if (CollectionUtils.isNotEmpty(list)) { resultMap.put(sqlInfo.getId(), list); + timeMap.put("SQL_" + sqlInfo.getId() + "_SIZE", (long) list.size()); } } + timeMap.put("SQL_" + sqlInfo.getId(), System.currentTimeMillis() - sqlTimeStart); } - resultMap.put("page", pageMap); + resultMap.put(ReportConfig.REPORT_PAGE_MAP_KEY, pageMap); for (SqlInfo sqlInfo : sqlInfoList) { Object object = resultMap.get(sqlInfo.getId()); if (object == null) { @@ -520,8 +526,10 @@ public class ReportServiceImpl implements ReportService { } } resultMap.put(sqlInfo.getId(), resultList); + timeMap.put("SQL_" + sqlInfo.getId() + "_SIZE", (long) resultList.size()); } } + resultMap.put(ReportConfig.REPORT_TIME_MAP_KEY, timeMap); return resultMap; } @@ -531,8 +539,10 @@ public class ReportServiceImpl implements ReportService { SqlRunner sqlRunner = new SqlRunner(reportVo.getSql(), "reportId_" + reportVo.getId()); List sqlInfoList = sqlRunner.getAllSqlInfoList(paramMap); Map pageMap = new HashMap<>(); + Map timeMap = new HashMap<>(); for (SqlInfo sqlInfo : sqlInfoList) { if (Objects.equals(sqlInfo.getId(), id)) { + long sqlTimeStart = System.currentTimeMillis(); BasePageVo basePageVo = new BasePageVo(); Integer currentPage = paramMap.getInteger("currentPage"); if (currentPage != null) { @@ -546,6 +556,7 @@ public class ReportServiceImpl implements ReportService { List list = sqlRunner.runSqlById(sqlInfo, paramMap, rowBounds); if (CollectionUtils.isNotEmpty(list)) { resultMap.put(sqlInfo.getId(), list); + timeMap.put("SQL_" + sqlInfo.getId() + "_SIZE", (long) list.size()); } basePageVo.setRowNum(rowBounds.getRowNum()); JSONObject pageObj = new JSONObject(); @@ -555,9 +566,10 @@ public class ReportServiceImpl implements ReportService { pageObj.put("pageCount", basePageVo.getPageCount()); pageObj.put("tableId", sqlInfo.getId()); pageMap.put(sqlInfo.getId(), pageObj); + timeMap.put("SQL_" + sqlInfo.getId(), System.currentTimeMillis() - sqlTimeStart); } } - resultMap.put("page", pageMap); + resultMap.put(ReportConfig.REPORT_PAGE_MAP_KEY, pageMap); Object object = resultMap.get(id); if (object == null) { return resultMap; @@ -585,7 +597,9 @@ public class ReportServiceImpl implements ReportService { } } resultMap.put(id, resultList); + timeMap.put("SQL_" + id + "_SIZE", (long) resultList.size()); } + resultMap.put(ReportConfig.REPORT_TIME_MAP_KEY, timeMap); return resultMap; } diff --git a/src/main/java/neatlogic/module/report/util/ReportFreemarkerUtil.java b/src/main/java/neatlogic/module/report/util/ReportFreemarkerUtil.java index cc228bc..ca28b7e 100644 --- a/src/main/java/neatlogic/module/report/util/ReportFreemarkerUtil.java +++ b/src/main/java/neatlogic/module/report/util/ReportFreemarkerUtil.java @@ -16,6 +16,7 @@ along with this program. If not, see .*/ package neatlogic.module.report.util; import neatlogic.framework.util.javascript.JavascriptUtil; +import neatlogic.module.report.config.ReportConfig; import neatlogic.module.report.constvalue.ActionType; import neatlogic.module.report.widget.*; import com.alibaba.fastjson.JSONObject; @@ -23,6 +24,7 @@ import freemarker.cache.StringTemplateLoader; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; +import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -51,8 +53,16 @@ public class ReportFreemarkerUtil { } - public static void getFreemarkerContent(Map paramMap, Map reportMap, Map> pageMap, JSONObject filter, String content, Writer out) throws Exception { + public static void getFreemarkerContent(Map paramMap, Map reportMap, JSONObject filter, String content, Writer out) throws Exception { if (StringUtils.isNotBlank(content)) { + long start = System.currentTimeMillis(); + Object timeMapObj = reportMap.remove(ReportConfig.REPORT_TIME_MAP_KEY); + Object pageMapObj = reportMap.remove(ReportConfig.REPORT_PAGE_MAP_KEY); + Map> pageMap = null; + if (pageMapObj instanceof Map) { + pageMap = (Map>) pageMapObj; + } + Configuration cfg = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS); cfg.setNumberFormat("0.##"); cfg.setClassicCompatible(true); @@ -79,13 +89,37 @@ public class ReportFreemarkerUtil { logger.error(e.getMessage(), e); throw e; } + + // 统计报表执行耗时 + StringBuilder sqlTime = new StringBuilder(); + if (timeMapObj instanceof Map) { + Map timeMap = (Map) timeMapObj; + if (MapUtils.isNotEmpty(timeMap)) { + for (Map.Entry entry : timeMap.entrySet()) { + if (entry.getKey().startsWith("SQL_") && !entry.getKey().endsWith("_SIZE")) { + String sqlId = entry.getKey().replace("SQL_", ""); + sqlTime.append(sqlId); + if (timeMap.containsKey(entry.getKey() + "_SIZE")) { + sqlTime.append("(").append(timeMap.get(entry.getKey() + "_SIZE")).append("条)"); + } + sqlTime.append("(").append(entry.getValue()).append("ms); "); + } + } + } + } + out.write("
"); + if (sqlTime.length() > 0) { + out.write("数据库执行耗时:" + sqlTime); + } + out.write("模板渲染耗时:" + (System.currentTimeMillis() - start) + "ms; "); + out.write("
"); } } /* * "string":获取htm "print":下载 */ - public static String getFreemarkerExportContent(Map paramMap, Map reportMap, Map> pageMap, JSONObject filter, String content, String actionType) throws IOException { + public static String getFreemarkerExportContent(Map paramMap, Map reportMap, JSONObject filter, String content, String actionType) throws IOException { StringWriter out = new StringWriter(); out.write("\n"); out.write("\n"); @@ -103,6 +137,12 @@ public class ReportFreemarkerUtil { out.write("\n"); try { if (StringUtils.isNotBlank(content)) { + Object pageMapObj = reportMap.remove(ReportConfig.REPORT_PAGE_MAP_KEY); + Map> pageMap = null; + if (pageMapObj instanceof Map) { + pageMap = (Map>) pageMapObj; + } + Configuration cfg = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS); cfg.setNumberFormat("0.##"); cfg.setClassicCompatible(true); -- Gitee