From 1156a6e9619864201de922f4cfa93f6db989ff2e Mon Sep 17 00:00:00 2001 From: 1821349743@qq.com <1821349743@qq.com> Date: 星期一, 17 四月 2023 12:09:07 +0800 Subject: [PATCH] report update --- src/main/java/com/product/server/report/service/GroupReportService.java | 186 ++++++++++++++++++++++++++++++++++++--------- 1 files changed, 147 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/product/server/report/service/GroupReportService.java b/src/main/java/com/product/server/report/service/GroupReportService.java index 59fa0b1..6caf017 100644 --- a/src/main/java/com/product/server/report/service/GroupReportService.java +++ b/src/main/java/com/product/server/report/service/GroupReportService.java @@ -11,6 +11,7 @@ import com.product.core.spring.context.SpringMVCContextHolder; import com.product.server.report.config.CmnConst; import com.product.server.report.entity.ReportColumn; +import com.product.server.report.entity.ReportEntity; import com.product.util.BaseUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -35,32 +36,33 @@ * @param recordDte 涓氬姟鏁版嵁dte * @param totalName 鎬昏鍚嶇О * @param reportConfigMap 鎶ヨ〃閰嶇疆缂撳瓨map - * @param tableStyle * @return 鑾峰彇鍒嗙粍鎶ヨ〃鐨勮鎯� */ - public JSONObject getReportEntity(DataTableEntity recordDte, String totalName, Map<Integer, List<JSONObject>> reportConfigMap, StringBuilder tableStyle) { - StringBuilder reportHtml = new StringBuilder(4096); - + public ReportEntity getReportEntity(DataTableEntity recordDte, String totalName, Map<Integer, List<JSONObject>> reportConfigMap) { +// StringBuilder reportHtml = new StringBuilder(4096); + ReportEntity report = new ReportEntity(); // css // StringBuilder cssHtml = dataListReportService.getCssHtml(); // 鍒嗙粍琛ㄥご鍖哄拰鏁版嵁鍖� - StringBuilder groupAndDataAreaHtml = new StringBuilder(1024); +// StringBuilder groupAndDataAreaHtml = new StringBuilder(1024); + List<List<ReportColumn>>[] rows = new List[2]; Map<String, Set<String>> headAndTailTitleDataMap = Maps.newHashMap(); int totalColCount = reportConfigMap.get(0).size(); - int dataAreaColCount = getGroupAndDataAreaHtmlAndReturnDataAreaColCount(groupAndDataAreaHtml, reportConfigMap, headAndTailTitleDataMap, recordDte, totalName); + int dataAreaColCount = getGroupAndDataAreaAndReturnDataAreaColCount(rows, reportConfigMap, headAndTailTitleDataMap, recordDte, totalName); totalColCount = Math.max(totalColCount, dataAreaColCount); // 澶撮儴鏍囬鍖� - StringBuilder headTitleHtml = null; + + List<List<ReportColumn>> headTitle = null; if (!reportConfigMap.get(1).isEmpty()) { - headTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head"); + headTitle = dataListReportService.getTitle(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head"); } // 搴曢儴鏍囬鍖� - StringBuilder tailTitleHtml = null; + List<List<ReportColumn>> tailTitle = null; if (!reportConfigMap.get(3).isEmpty()) { - tailTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail"); + tailTitle = dataListReportService.getTitle(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail"); } // reportHtml.append("\n<body>\n<table").append(tableStyle).append(">") @@ -70,11 +72,17 @@ // .append(tailTitleHtml == null ? "" : tailTitleHtml) // .append("\n</table>\n</body>"); - JSONObject resultObj = new JSONObject(); - resultObj.put(CmnConst.RETURN_ATTR_RESULT, true); - resultObj.put(CmnConst.RETURN_ATTR_MESSAGE, "鑾峰彇鎶ヨ〃鎴愬姛锛�"); - resultObj.put(CmnConst.RETURN_ATTR_HTML, reportHtml); - return resultObj; + if (rows[0] != null) { + if (headTitle == null) { + headTitle = new ArrayList<>(); + } + headTitle.addAll(rows[0]); + } + report.setReportHeader(headTitle); + + report.setReportData(rows[1]); + report.setReportTail(tailTitle); + return report; } /** @@ -244,7 +252,7 @@ * @param totalName 鎬昏鍚嶇О * @return 鏁版嵁鍖烘�诲垪鏁� */ - private int getGroupAndDataAreaAndReturnDataAreaColCount(List<List<ReportColumn>> groupAndDataArea, Map<Integer, List<JSONObject>> reportConfigMap, Map<String, Set<String>> headAndTailTitleDataMap, DataTableEntity recordDte, String totalName) { + private int getGroupAndDataAreaAndReturnDataAreaColCount(List<List<ReportColumn>>[] groupAndDataArea, Map<Integer, List<JSONObject>> reportConfigMap, Map<String, Set<String>> headAndTailTitleDataMap, DataTableEntity recordDte, String totalName) { // 鍒嗙粍琛ㄥご鍖哄瓧娈电紦瀛榤ap Map<String, JSONObject> groupAreaFieldConfigMap = dataListReportService.groupAndDataJSONObject2Map(reportConfigMap.get(2)); // 鏁版嵁鍖哄瓧娈电紦瀛榤ap @@ -336,9 +344,9 @@ // 鏁版嵁鏍囬list List<JSONObject> dataTitleList = Lists.newArrayList(); // 鑾峰彇鏍囬html - groupAndDataArea.addAll(getDataAreaTitle(dataTitleList, groupAreaFieldRecordObj, dataAreaFieldConfigMap, groupAreaRangeObj, dataAreaCommonStatisticsFieldNameList)); + groupAndDataArea[0] = (getDataAreaTitle(dataTitleList, groupAreaFieldRecordObj, dataAreaFieldConfigMap, groupAreaRangeObj, dataAreaCommonStatisticsFieldNameList)); // 鑾峰彇鍐呭html -// groupAndDataAreaHtml.append(getDataAreaDataHtml(dataTitleList, dataAreaFieldRecordObj, statisticsMap, totalName, dataAreaGroupFieldNameList, dataAreaFieldConfigMap)); + groupAndDataArea[1] = (getDataAreaData(dataTitleList, dataAreaFieldRecordObj, statisticsMap, totalName, dataAreaGroupFieldNameList, dataAreaFieldConfigMap)); return totalColCount; } @@ -723,14 +731,15 @@ List<ReportColumn> columns = new ArrayList<>(); // html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_TITLE).append("\">\n "); for (JSONObject dataTitleObj : rowList) { + ReportColumn column = new ReportColumn(); rowspan = Math.max(1, dataTitleObj.getIntValue(CmnConst.ATTR_ROWSPAN)); colspan = Math.max(1, dataTitleObj.getIntValue(CmnConst.ATTR_COLSPAN)); value = dataTitleObj.getString(CmnConst.ATTR_SHOW_NAME); if (!StringUtils.isEmpty(dataTitleObj.getString(CmnConst.ATTR_FIELD_INFO))) { dataAreaFieldName = dataListReportService.fieldInfo2FieldName(dataTitleObj.getString(CmnConst.ATTR_FIELD_INFO)); - value = dataListReportService.dealTdWidth(dataAreaFieldConfigMap.get(dataAreaFieldName), value); + column.setColumnWidth(dataListReportService.dealColumnWidth(dataAreaFieldConfigMap.get(dataAreaFieldName))); +// value = dataListReportService.dealTdWidth(dataAreaFieldConfigMap.get(dataAreaFieldName), value); } - ReportColumn column = new ReportColumn(); column.setRowspan(rowspan); column.setColspan(colspan); column.setContent(value); @@ -1046,7 +1055,7 @@ private List<List<ReportColumn>> getDataAreaData(List<JSONObject> dataTitleList, JSONObject dataAreaFieldRecordObj, Map<JSONObject, JSONObject> statisticsMap, String totalName, List<String> dataAreaGroupFieldNameList, Map<String, JSONObject> dataAreaFieldConfigMap) { List<List<JSONObject>> dataAreaGroupFieldDataList = Lists.newArrayList(); getDataAreaGroupFieldDataList(dataAreaFieldRecordObj, dataAreaGroupFieldDataList, new JSONObject(), 1, 1, dataAreaGroupFieldNameList.size(), null); - + List<List<ReportColumn>> dataRows = new ArrayList<>(); List<JSONObject> groupTitleList = Lists.newArrayList(); JSONObject obj; for (List<JSONObject> rowList : dataAreaGroupFieldDataList) { @@ -1054,7 +1063,7 @@ groupTitleList.add(obj); } - StringBuilder html = new StringBuilder(1024); +// StringBuilder html = new StringBuilder(1024); JSONObject dataAreaGroupFieldObj; int rowspan; int colspan; @@ -1069,6 +1078,7 @@ List<JSONObject> curRowList; int index; for (int i = 0; i < dataAreaGroupFieldDataList.size(); i++) { + List<ReportColumn> columns = new ArrayList<>(); index = 0; curRowList = dataAreaGroupFieldDataList.get(i); if (!curRowList.isEmpty()) { @@ -1077,22 +1087,28 @@ if (dataAreaGroupFieldObj.isEmpty()) { continue; } - if (index == 0) { - if ("1".equals(dataAreaGroupFieldObj.getString(CmnConst.ATTR_IS_STATISTICS_FIELD))) { - html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_STATISTICS).append("\">\n "); - } else { - html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_COMMON).append("\">\n "); - } - } +// if (index == 0) { +// if ("1".equals(dataAreaGroupFieldObj.getString(CmnConst.ATTR_IS_STATISTICS_FIELD))) { +// html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_STATISTICS).append("\">\n "); +// } else { +// html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_COMMON).append("\">\n "); +// } +// } rowspan = Math.max(1, dataAreaGroupFieldObj.getIntValue(CmnConst.ATTR_ROWSPAN)); colspan = Math.max(1, dataAreaGroupFieldObj.getIntValue(CmnConst.ATTR_COLSPAN)); value = dataAreaGroupFieldObj.getString(CmnConst.ATTR_SHOW_NAME); - html.append("<td rowspan=\"").append(rowspan).append("\" colspan=\"").append(colspan).append("\">").append(value == null ? "" : value).append("</td>"); + ReportColumn column = new ReportColumn(); + column.setRowspan(rowspan); + column.setColspan(colspan); + column.setContent(value); + columns.add(column); +// html.append("<td rowspan=\"").append(rowspan).append("\" colspan=\"").append(colspan).append("\">").append(value == null ? "" : value).append("</td>"); index++; } - } else { - html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_COMMON).append("\">\n "); } +// else { +// html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_COMMON).append("\">\n "); +// } groupTitleObj = groupTitleList.get(i); for (JSONObject dataTitleObj : dataTitleList) { keyObj = dataListReportService.extendJSONObject((JSONObject) groupTitleObj.clone(), dataTitleObj, Arrays.asList(CmnConst.ATTR_ROWSPAN, CmnConst.ATTR_COLSPAN, CmnConst.ATTR_SHOW_NAME, CmnConst.ATTR_IS_STATISTICS_FIELD, CmnConst.ATTR_REAL_VALUE), -1); @@ -1122,31 +1138,43 @@ } else { value = ""; } - html.append("<td"); +// html.append("<td"); + ReportColumn column = new ReportColumn(); if (!StringUtils.isEmpty(value)) { // class if (!StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL))) { dataListReportService.extendJSONObject(keyObj, dataAreaFieldConfigObj, Collections.singletonList(CmnConst.ATTR_URL)); - html.append(" class=\"").append(CmnConst.CLASS_TD_CAN_TURN).append("\""); +// html.append(" class=\"").append(CmnConst.CLASS_TD_CAN_TURN).append("\""); } // 瀛楁灞炴�� dataListReportService.getTdAttrObj(keyObj, groupTitleObj); dataListReportService.getTdAttrObj(keyObj, dataTitleObj); - html.append(dataListReportService.getTdAttrByObj(keyObj)); + String attrUrL = keyObj.getString(CmnConst.ATTR_URL); + if (!StringUtils.isEmpty(attrUrL)) { + column.setPenetrateProperty(attrUrL.toString()); + column.setPenetrate(true); + } + for (String key : keyObj.keySet()) { + column.addProperty(key, keyObj.getString(key)); + } +// html.append(dataListReportService.getTdAttrByObj(keyObj)); // 鏍煎紡 value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); } - html.append(">").append(value == null ? "" : value).append("</td>"); +// html.append(">").append(value == null ? "" : value).append("</td>"); + column.setContent(value); + columns.add(column); } - html.append("\n</tr>"); +// html.append("\n</tr>"); + dataRows.add(columns); } // 鎬昏 if (!StringUtils.isEmpty(totalName)) { - html.append(getTotalStatisticsHtml(statisticsMap, dataTitleList, dataAreaFieldConfigMap, dataAreaGroupFieldNameList.size(), getSubCnt(dataAreaFieldRecordObj), totalName)); + dataRows.add(getTotalStatistics(statisticsMap, dataTitleList, dataAreaFieldConfigMap, dataAreaGroupFieldNameList.size(), getSubCnt(dataAreaFieldRecordObj), totalName)); } - return null; + return dataRows; } /** @@ -1260,6 +1288,86 @@ * @param totalName 鎬昏鍚嶇О * @return */ + private List<ReportColumn> getTotalStatistics(Map<JSONObject, JSONObject> statisticsMap, List<JSONObject> dataTitleList, Map<String, JSONObject> dataAreaFieldConfigMap, int dataAreaGroupFieldCount, int dataAreaSubCnt, String totalName) { + List<ReportColumn> columns = new ArrayList<>(); +// StringBuilder html = new StringBuilder(256); +// html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_STATISTICS).append("\">\n "); +// html.append("<td colspan=\"").append(dataAreaGroupFieldCount).append("\">").append(totalName).append("</td>"); + ReportColumn column = new ReportColumn(); + columns.add(column); + column.setColspan(dataAreaGroupFieldCount); + column.setContent(totalName); + JSONObject dataTitleObj; + JSONObject keyObj; + JSONObject dataAreaFieldConfigObj; + String statisticsType; + JSONObject valueObj; + String value; + int groupAreaSubCnt; + for (int i = 0; i < dataTitleList.size(); i++) { + column = new ReportColumn(); + columns.add(column); + dataTitleObj = dataTitleList.get(i); + keyObj = dataListReportService.extendJSONObject(null, dataTitleObj, Arrays.asList(CmnConst.ATTR_ROWSPAN, CmnConst.ATTR_COLSPAN, CmnConst.ATTR_SHOW_NAME, CmnConst.ATTR_IS_STATISTICS_FIELD, CmnConst.ATTR_REAL_VALUE), -1); + dataAreaFieldConfigObj = dataAreaFieldConfigMap.get(dataListReportService.fieldInfo2FieldName(dataTitleObj.getString(CmnConst.ATTR_FIELD_INFO))); + if (dataAreaFieldConfigObj != null) { + groupAreaSubCnt = keyObj.getIntValue(CmnConst.ATTR_GROUP_AREA_SUB_CNT); + keyObj.remove(CmnConst.ATTR_GROUP_AREA_SUB_CNT); + statisticsType = dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS); + valueObj = statisticsMap.get(keyObj); + if (valueObj == null || valueObj.isEmpty()) { + value = getFinalValue(keyObj, dataAreaFieldConfigObj, statisticsMap); + } else { + if (CmnConst.ATTR_STATISTICS_AVG.equals(statisticsType) && "1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_AVG_TYPE))) { + value = getTwoTypesGroupAvgStatisticsValue(dataAreaSubCnt, groupAreaSubCnt, valueObj, dataAreaFieldConfigObj, statisticsType); + } else { + value = valueObj.getString(statisticsType); + } + valueObj.put(CmnConst.ATTR_FINAL_VALUE, value); + } + } else { + value = ""; + } +// html.append("<td"); + if (!StringUtils.isEmpty(value)) { + // class + if (!StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL))) { + dataListReportService.extendJSONObject(keyObj, dataAreaFieldConfigObj, Collections.singletonList(CmnConst.ATTR_URL)); +// html.append(" class=\"").append(CmnConst.CLASS_TD_CAN_TURN).append("\""); + } + // 瀛楁灞炴�� + dataListReportService.getTdAttrObj(keyObj, dataTitleObj); + String attrUrL = keyObj.getString(CmnConst.ATTR_URL); + if (!StringUtils.isEmpty(attrUrL)) { + column.setPenetrateProperty(attrUrL.toString()); + column.setPenetrate(true); + } + for (String key : keyObj.keySet()) { + column.addProperty(key, keyObj.getString(key)); + } +// html.append(dataListReportService.getTdAttrByObj(keyObj)); + // 鏍煎紡 + value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); + + } + column.setContent(value); +// html.append(">").append(value == null ? "" : value).append("</td>"); + } +// html.append("\n</tr>"); + return columns; + } + + /** + * 鑾峰彇鎬昏html + * + * @param statisticsMap 缁熻map + * @param dataTitleList 鏁版嵁鏍囬list + * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap + * @param dataAreaGroupFieldCount 鏁版嵁鍖哄垎缁勫瓧娈典釜鏁� + * @param dataAreaSubCnt 鏁版嵁鍖轰笅绾у垎缁勯」鏁� + * @param totalName 鎬昏鍚嶇О + * @return + */ private StringBuilder getTotalStatisticsHtml(Map<JSONObject, JSONObject> statisticsMap, List<JSONObject> dataTitleList, Map<String, JSONObject> dataAreaFieldConfigMap, int dataAreaGroupFieldCount, int dataAreaSubCnt, String totalName) { StringBuilder html = new StringBuilder(256); html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_STATISTICS).append("\">\n "); -- Gitblit v1.9.2