From cb4df5a1c9cda76e828fa202990df33be0735105 Mon Sep 17 00:00:00 2001 From: 许鹏程 <1821349743@qq.com> Date: 星期四, 29 六月 2023 09:32:34 +0800 Subject: [PATCH] poi、easyexcel、poi-tl升级 ,合并空调中的报表、数据源模块 --- src/main/java/com/product/server/report/service/CommonReportService.java | 635 +++++++++++++++------------------------------------------ 1 files changed, 165 insertions(+), 470 deletions(-) diff --git a/src/main/java/com/product/server/report/service/CommonReportService.java b/src/main/java/com/product/server/report/service/CommonReportService.java index d5a3ac0..9415869 100644 --- a/src/main/java/com/product/server/report/service/CommonReportService.java +++ b/src/main/java/com/product/server/report/service/CommonReportService.java @@ -1,6 +1,5 @@ package com.product.server.report.service; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.NumberUtil; import com.alibaba.fastjson.JSONObject; @@ -14,9 +13,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 com.product.util.SystemParamReplace; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -34,92 +31,49 @@ @Autowired private DataListReportService dataListReportService; - /** - * 鎶ヨ〃-瑙f瀽 - * - * @param recordDte 涓氬姟鏁版嵁dte - * @param totalStatisticsFlag 鏄惁鍚堣鏍囪瘑 - * @param reportConfigMap 鎶ヨ〃閰嶇疆缂撳瓨map - * @return - */ - public ReportEntity getReportEntity(DataTableEntity recordDte, String totalName, Map<Integer, List<JSONObject>> reportConfigMap) { - ReportEntity report = null; - Map<String, Set<String>> headAndTailTitleDataMap = Maps.newHashMap(); - // 鏁版嵁鍖� - report = getDataArea(reportConfigMap, headAndTailTitleDataMap, recordDte, totalName); - - int totalColCount = reportConfigMap.get(0).size(); - - // 澶撮儴鏍囬鍖� - List<List<ReportColumn>> headTitleRows = null; - if (!reportConfigMap.get(1).isEmpty()) { - headTitleRows = dataListReportService.getTitle(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head"); - } - // 搴曢儴鏍囬鍖� - List<List<ReportColumn>> tailTitleRows = null; - if (!reportConfigMap.get(3).isEmpty()) { - tailTitleRows = dataListReportService.getTitle(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail"); - } - - if (!CollectionUtil.isEmpty(headTitleRows)) { - List<List<ReportColumn>> reportHeader = report.getReportHeader(); - if (reportHeader != null) { - headTitleRows.addAll(reportHeader); - } - report.setReportHeader(headTitleRows); - } - if (!CollectionUtil.isEmpty(tailTitleRows)) { - report.setReportTail(tailTitleRows); - } - - - return report; - } /** * 鎶ヨ〃-瑙f瀽 * - * @param recordDte 涓氬姟鏁版嵁dte - * @param totalStatisticsFlag 鏄惁鍚堣鏍囪瘑 - * @param reportConfigMap 鎶ヨ〃閰嶇疆缂撳瓨map - * @param tableStyle + * @param recordDte 涓氬姟鏁版嵁dte + * @param totalName 鎬昏鍚嶇О + * @param reportConfigMap 鎶ヨ〃閰嶇疆缂撳瓨map + * @param unpivotInfoContainer 琛屽垪杞崲淇℃伅 * @return */ - public JSONObject getReport(DataTableEntity recordDte, String totalName, Map<Integer, List<JSONObject>> reportConfigMap, StringBuilder tableStyle) { - StringBuilder reportHtml = new StringBuilder(4096); - - // css - StringBuilder cssHtml = dataListReportService.getCssHtml(); + public List<List<ReportColumn>>[] getReport(DataTableEntity recordDte, String totalName, Map<Integer, List<JSONObject>> reportConfigMap, Collection<String> unpivotInfoContainer) { + List<List<ReportColumn>>[] reportColumnList = new List[]{new ArrayList(), new ArrayList(), new ArrayList()}; // 鏁版嵁鍖� Map<String, Set<String>> headAndTailTitleDataMap = Maps.newHashMap(); - String dataAreaHtml = getDataAreaHtml(reportConfigMap, headAndTailTitleDataMap, recordDte, totalName); - - int totalColCount = reportConfigMap.get(0).size(); + List<List<ReportColumn>> reportRows = getDataArea(reportConfigMap, headAndTailTitleDataMap, recordDte, totalName, unpivotInfoContainer); + int totalColCount = reportConfigMap.get(0).size() + unpivotInfoContainer.size() - 1; // 澶撮儴鏍囬鍖� - StringBuilder headTitleHtml = null; if (!reportConfigMap.get(1).isEmpty()) { - headTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head"); + reportColumnList[0] = (dataListReportService.getTitleRows(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head")); } - + //濡傛灉reportRows 琛屾暟澶т簬0灏嗙涓�琛岀殑鏁版嵁鏀惧叆澶撮儴鏍囬鍖� + if (reportRows.size() >= 0) { + reportColumnList[0].add(reportRows.get(0)); + reportRows.remove(0); + } + reportColumnList[1] = reportRows; // 搴曢儴鏍囬鍖� - StringBuilder tailTitleHtml = null; if (!reportConfigMap.get(3).isEmpty()) { - tailTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail"); + reportColumnList[2] = (dataListReportService.getTitleRows(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail")); } - reportHtml.append("\n<body>\n<table class=\"report_main\"").append(tableStyle).append(">") - .append(cssHtml) - .append(headTitleHtml == null ? "" : headTitleHtml) - .append(dataAreaHtml) - .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; +// reportHtml.append("\n<body>\n<table class=\"report_main\"").append(tableStyle).append(">") +// .append(headTitleHtml == null ? "" : headTitleHtml) +// .append(dataAreaHtml) +// .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 reportColumnList; } /** @@ -131,7 +85,8 @@ * @param totalName 鎬昏鍚嶇О锛岄潪绌�-闇�瑕佹�昏 * @return */ - private String getDataAreaHtml(Map<Integer, List<JSONObject>> reportConfigMap, Map<String, Set<String>> headAndTailTitleDataMap, DataTableEntity recordDte, String totalName) { + private List<List<ReportColumn>> getDataArea(Map<Integer, List<JSONObject>> reportConfigMap, Map<String, Set<String>> headAndTailTitleDataMap, DataTableEntity recordDte, String totalName, Collection<String> unpivotInfoContainer) { + List<List<ReportColumn>> reportColumnList = Lists.newArrayList(); // 鏁版嵁鍖哄瓧娈电紦瀛榤ap Map<String, JSONObject> dataAreaFieldConfigMap = dataListReportService.groupAndDataJSONObject2Map(reportConfigMap.get(0)); // 鑾峰彇鎸囧畾鏁版嵁闆嗕腑鍖呭惈鐨勬暟鎹尯瀛楁闆嗗悎 @@ -141,358 +96,42 @@ // 缁熻map Map<JSONObject, JSONObject> statisticsMap = Maps.newLinkedHashMap(); - StringBuilder dataAreaHtml = new StringBuilder(1024); - // 鏍囬 - dataAreaHtml.append(getDataAreaTitleHtml(dataAreaFieldConfigMap)); - // 鍐呭 - dataAreaHtml.append(getDataAreaDataHtml(dataAreaFieldConfigMap, recordDte, headAndTailTitleDataMap, headAndTailFieldSet, statisticsMap, totalName)); - return dataAreaHtml.toString(); - } - - private ReportEntity getDataArea(Map<Integer, List<JSONObject>> reportConfigMap, Map<String, Set<String>> headAndTailTitleDataMap, DataTableEntity recordDte, String totalName) { - // 鏁版嵁鍖哄瓧娈电紦瀛榤ap - Map<String, JSONObject> dataAreaFieldConfigMap = dataListReportService.groupAndDataJSONObject2Map(reportConfigMap.get(0)); - // 鑾峰彇鎸囧畾鏁版嵁闆嗕腑鍖呭惈鐨勬暟鎹尯瀛楁闆嗗悎 - Set<String> headAndTailFieldSet = Sets.newHashSet(); - headAndTailFieldSet.addAll(dataListReportService.getDataFields(reportConfigMap.get(1))); - headAndTailFieldSet.addAll(dataListReportService.getDataFields(reportConfigMap.get(3))); - // 缁熻map - Map<JSONObject, JSONObject> statisticsMap = Maps.newLinkedHashMap(); - List<ReportColumn> reportHeader = getReportHeader(dataAreaFieldConfigMap); - List<List<ReportColumn>> reportData = getReportData(dataAreaFieldConfigMap, recordDte, headAndTailTitleDataMap, headAndTailFieldSet, statisticsMap, totalName); - ReportEntity report = new ReportEntity(); - report.addReportHeader(reportHeader); - report.setReportData(reportData); - return report; - } - - private List<ReportColumn> getReportHeader(Map<String, JSONObject> dataAreaFieldConfigMap) { - if (CollectionUtil.isEmpty(dataAreaFieldConfigMap)) { - return null; + // 灏嗚鍒楄浆鎹㈢殑淇℃伅娣诲姞鍒版暟鎹尯瀛楁缂撳瓨map閲岄潰 + Map<String, JSONObject> newDataAreaFieldConfigMap = Maps.newLinkedHashMap(); + int x = 0; + if (!unpivotInfoContainer.isEmpty()) { + for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) { + String fieldName = entry.getKey(); + JSONObject fieldConfigObj = entry.getValue(); + if (fieldConfigObj.getIntValue(CmnConst.IS_UNPIVOT) == 1) { + x = fieldConfigObj.getIntValue(CmnConst.ATTR_X); + fieldConfigObj.put(CmnConst.IS_UNPIVOT, 0); + fieldConfigObj.put(CmnConst.ATTR_IS_CUSTOM_FIELD, 0); + for (String unpivotField : unpivotInfoContainer) { + JSONObject newFieldConfigObj = new JSONObject(); + newFieldConfigObj.putAll(fieldConfigObj); + newFieldConfigObj.put(CmnConst.ATTR_X, ++x); + newFieldConfigObj.put(CmnConst.ATTR_SHOW_NAME, newFieldConfigObj.getString(CmnConst.ATTR_SHOW_NAME).replace("{#unpivot_name#}", unpivotField)); + newDataAreaFieldConfigMap.put(unpivotField, newFieldConfigObj); + } + } else { + if (x > fieldConfigObj.getIntValue(CmnConst.ATTR_X)) { + fieldConfigObj.put(CmnConst.ATTR_X, ++x); + } + newDataAreaFieldConfigMap.put(fieldName, fieldConfigObj); + } + } + } else { + newDataAreaFieldConfigMap = dataAreaFieldConfigMap; } - List<ReportColumn> reportColumnList = new ArrayList<>(); - dataAreaFieldConfigMap.forEach((k, v) -> { - ReportColumn column = new ReportColumn(); - column.setContent(v.getString(CmnConst.ATTR_SHOW_NAME)); - column.setColumnWidth(NumberUtil.isNumber(v.getString(CmnConst.ATTR_WIDTH)) ? NumberUtil.parseInt(v.getString(CmnConst.ATTR_WIDTH)) : 0); - reportColumnList.add(column); - }); + + // 鏍囬 + reportColumnList.add(getDataAreaTitle(newDataAreaFieldConfigMap)); + // 鍐呭 + List<List<ReportColumn>> dataAreaData = getDataAreaData(newDataAreaFieldConfigMap, recordDte, headAndTailTitleDataMap, headAndTailFieldSet, statisticsMap, totalName); + reportColumnList.addAll(dataAreaData); return reportColumnList; } - - private List<List<ReportColumn>> getReportData(Map<String, JSONObject> dataAreaFieldConfigMap, DataTableEntity recordDte, Map<String, Set<String>> headAndTailTitleDataMap, Set<String> headAndTailFieldSet, Map<JSONObject, JSONObject> statisticsMap, String totalName) { - List<List<ReportColumn>> reportData = new ArrayList<>(); - // 鏁版嵁鍖哄垎缁勭粺璁″瓧娈靛悕绉發ist - List<String> dataAreaGroupStatisticsFieldNameList = Lists.newArrayList(); - // 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist - List<String> dataAreaGroupFieldNameList = Lists.newArrayList(); - dataAreaFieldConfigMap.forEach((dataAreaFieldName, dataAreaFieldConfigObj) -> { - if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) { - dataAreaGroupFieldNameList.add(dataAreaFieldName); - if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_STATISTICS))) { - dataAreaGroupStatisticsFieldNameList.add(dataAreaFieldName); - } - } - }); - - FieldSetEntity recordFse; - FieldSetEntity preFse = null; - String dataAreaFieldName; - JSONObject dataAreaFieldConfigObj; - String value; - JSONObject keyObj; - Map<String, String> replaceMap = Maps.newHashMap(); - Map<String, String> dataAreaClosestGroupStatisticsFieldValueMap = Maps.newHashMap(); - Map<String, String> dataAreaClosestGroupFieldValueMap = Maps.newHashMap(); - String closestGroupStatisticsFieldName = null; - String closestGroupFieldName = null; - String tempFieldName; - String paramKey; - boolean combineFlag; - JSONObject dataAreaGroupFieldRecordObj = new JSONObject(); - for (int i = 0; i < recordDte.getRows(); i++) { - recordFse = recordDte.getFieldSetEntity(i); - // 鑾峰彇澶撮儴銆佸熬閮ㄦ爣棰樺尯鏁版嵁瀛楁 - dataListReportService.getHeadAndTailTitleDataMap(headAndTailTitleDataMap, headAndTailFieldSet, recordFse); - - combineFlag = true; - - List<ReportColumn> columns = new ArrayList<>(); - for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) { - ReportColumn column = new ReportColumn(); - dataAreaFieldName = entry.getKey(); - dataAreaFieldConfigObj = entry.getValue(); - value = dataListReportService.getValue(dataAreaFieldConfigObj, recordFse, dataAreaFieldName); - // 鑻ユ槸鑷畾涔夊瓧娈碉紝鍒欐斁鍏ヤ笟鍔℃暟鎹褰曚腑 - if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD))) { - recordFse.setValue(dataAreaFieldName, value); - } - if (dataAreaGroupFieldNameList.contains(dataAreaFieldName)) { - int curFieldIndex = dataAreaGroupFieldNameList.indexOf(dataAreaFieldName); - // 璁板綍鍒嗙粍瀛楁 - recordDataAreaGroupField(dataAreaGroupFieldRecordObj, dataAreaGroupFieldNameList, curFieldIndex, recordFse); - - // 鍒嗙粍鍚堝瓧娈靛苟 - closestGroupFieldName = dataAreaFieldName; - if (preFse != null && combineFlag) { - if (value.equals(dataAreaClosestGroupFieldValueMap.get(closestGroupFieldName))) { - dealReplaceMapAddRowspan(replaceMap, dataAreaGroupFieldNameList.subList(0, curFieldIndex + 1), preFse, true); - continue; - } else { - combineFlag = false; - } - } - dataAreaClosestGroupFieldValueMap.put(dataAreaFieldName, value); - } - // 鍒嗙粍缁熻 - if (dataAreaGroupStatisticsFieldNameList.contains(dataAreaFieldName)) { - int minK = dataAreaGroupStatisticsFieldNameList.size(); - for (int j = 0; j < dataAreaGroupStatisticsFieldNameList.size(); j++) { - tempFieldName = dataAreaGroupStatisticsFieldNameList.get(j); - if (!StringUtils.isEmpty(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName)) && !recordFse.getString(tempFieldName).equals(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName))) { - minK = j; - break; - } - } - for (int k = dataAreaGroupStatisticsFieldNameList.size() - 1; k >= minK; k--) { - tempFieldName = dataAreaGroupStatisticsFieldNameList.get(k); - if (preFse != null && dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName) != null) { - reportData.add(getDataAreaGroupStatisticsFieldStatisticsRow(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName), statisticsMap, dataAreaFieldConfigMap, tempFieldName, preFse, dataAreaGroupFieldNameList, replaceMap, dataAreaGroupFieldRecordObj)); - dataAreaClosestGroupStatisticsFieldValueMap.remove(tempFieldName); - } - } - closestGroupStatisticsFieldName = dataAreaFieldName; - dataAreaClosestGroupStatisticsFieldValueMap.put(dataAreaFieldName, value); - } - // 闈炲垎缁勭粺璁″瓧娈碉紙鏅��+鑷畾涔夛級 - if (!"1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_GROUP)) && !StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS))) { - addStatisticsRowInfo(statisticsMap, dataAreaGroupStatisticsFieldNameList, recordFse, dataAreaFieldConfigObj, dataAreaFieldName, value); - } - // 鑷畾涔夌粺璁″瓧娈碉紙鏈寚瀹氱粺璁$被鍨嬶紝浣跨敤鍩虹瀛楁鍏紡杩涜璁$畻锛� - if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD)) - && StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS)) - && !StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_FORMULA))) { - String formula = dataAreaFieldConfigObj.getString(CmnConst.ATTR_FORMULA); - List<String> formFieldList = dataListReportService.getSuitContent(formula, CmnConst.REGEXP_FORM_FIELD); - Map<String, String> formulaMap = Maps.newHashMap(); - boolean statisticsFlag = true; - JSONObject tempObj; - for (String formFieldInfo : formFieldList) { - tempObj = dataAreaFieldConfigMap.get(dataListReportService.fieldInfo2FieldName(formFieldInfo)); - if (tempObj == null || StringUtils.isEmpty(tempObj.getString(CmnConst.ATTR_STATISTICS))) { - statisticsFlag = false; - break; - } - formulaMap.put(formFieldInfo, tempObj.getString(CmnConst.ATTR_STATISTICS)); - } - if (statisticsFlag) { - addStatisticsRowInfo(statisticsMap, dataAreaGroupStatisticsFieldNameList, recordFse, dataAreaFieldConfigObj, dataAreaFieldName, value, formulaMap); - } - } - if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) { - keyObj = new JSONObject(); - for (String dataAreaGroupFieldName : dataAreaGroupFieldNameList) { - keyObj.put(dataAreaGroupFieldName, recordFse.getString(dataAreaGroupFieldName)); - if (dataAreaGroupFieldName.equals(dataAreaFieldName)) { - keyObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaGroupFieldName)); - break; - } - } - paramKey = dataListReportService.concat(keyObj, CmnConst.ATTR_ROWSPAN); - if (NumberUtil.isNumber(paramKey)) { - column.setRowspan(NumberUtil.parseInt(paramKey)); - } else { - column.addProperty(paramKey, "rowspan"); - } - replaceMap.put(paramKey, "1"); - } - // class - if (!StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL))) { - //瀛愭姤琛� - String url = dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL); - url = SystemParamReplace.replaceParams(url, recordFse); - column.setSubReport("true".equals(dataAreaFieldConfigObj.getString("~isSubReport~"))); - if (!column.isSubReport()) { - column.setPenetrate(true); - column.setPenetrateProperty(url); - } else { - column.setSubReportProperty(url); - } - } - String attrValue = recordFse.getString(dataAreaFieldName + CmnConst.PROMPT_REAL_VALUE_TAIL); - if (StringUtils.isEmpty(attrValue)) { - attrValue = recordFse.getString(dataAreaFieldName); - } - column.addProperty(dataAreaFieldName, attrValue); - // 鏍煎紡 - value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); - column.setContent(value); - columns.add(column); - } - reportData.add(columns); - preFse = recordFse; - } - - // 琛ュ叏鏈熬缁熻 - if (!StringUtils.isEmpty(closestGroupStatisticsFieldName)) { - int maxK = -1; - for (int j = 0; j < dataAreaGroupStatisticsFieldNameList.size(); j++) { - tempFieldName = dataAreaGroupStatisticsFieldNameList.get(j); - if (closestGroupStatisticsFieldName.equals(tempFieldName)) { - maxK = j; - } - } - for (int k = maxK; k >= 0; k--) { - tempFieldName = dataAreaGroupStatisticsFieldNameList.get(k); - if (preFse != null) { - reportData.add(getDataAreaGroupStatisticsFieldStatisticsRow(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName), statisticsMap, dataAreaFieldConfigMap, tempFieldName, preFse, dataAreaGroupFieldNameList, replaceMap, dataAreaGroupFieldRecordObj)); - } - } - } - - // 鎬昏 - if (!StringUtils.isEmpty(totalName)) { - reportData.add(getDataAreaTotalStatistics(statisticsMap, dataAreaFieldConfigMap, dataAreaGroupFieldNameList, preFse, dataAreaGroupFieldRecordObj, totalName)); - } - reportData.stream().forEach(item -> { - item.stream().forEach(column -> { - for (Map.Entry<String, String> entry : replaceMap.entrySet()) { - column.replace(entry.getKey(), entry.getValue()); - } - }); - }); - - - return reportData; - } - - /** - * 鑾峰彇鎬昏琛� - * - * @param statisticsMap 缁熻map - * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap - * @param dataAreaGroupFieldNameList 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist - * @param preFse 鏈�杩戞搷浣滅殑鏁版嵁fse - * @param dataAreaGroupFieldRecordObj 鏁版嵁鍖哄垎缁勫瓧娈佃褰昽bj - * @param totalName 鎬昏鍚嶇О - * @return - */ - private List<ReportColumn> getDataAreaTotalStatistics(Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, List<String> dataAreaGroupFieldNameList, FieldSetEntity preFse, JSONObject dataAreaGroupFieldRecordObj, String totalName) { - List<ReportColumn> columns = new ArrayList<>(); -// StringBuilder html = new StringBuilder(512); - String dataAreaFieldName; - JSONObject dataAreaFieldConfigObj; - String value; - JSONObject keyObj = new JSONObject(); - String statisticsType; -// html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_STATISTICS).append("\">\n "); - if (preFse == null) { - return null; - } - int index = 0; - for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) { - ReportColumn column = new ReportColumn(); - index++; - dataAreaFieldName = entry.getKey(); - if (!dataAreaGroupFieldNameList.contains(dataAreaFieldName)) { - dataAreaFieldConfigObj = entry.getValue(); - statisticsType = dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS); - keyObj.put(CmnConst.ATTR_FIELD_INFO, dataAreaFieldConfigObj.getString(CmnConst.ATTR_FIELD_INFO)); - if ((!"1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD)) && StringUtils.isEmpty(statisticsType)) || statisticsMap.get(keyObj) == null) { - value = ""; - } else { - JSONObject valueObj = statisticsMap.get(keyObj); - if (StringUtils.isEmpty(statisticsType)) { - statisticsType = CmnConst.ATTR_STATISTICS_DEFAULT; - } - if (CmnConst.ATTR_STATISTICS_AVG.equals(statisticsType) && "1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_AVG_TYPE))) { - int subCnt = dataAreaGroupFieldRecordObj.size(); - valueObj.put(CmnConst.ATTR_STATISTICS_SUB_CNT, subCnt); - dataListReportService.getAvgValue(valueObj, dataAreaFieldConfigObj, false); - } - value = valueObj.getString(statisticsType); - } - // 鏍煎紡 - value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); - column.setContent(value); -// html.append("<td>").append(value == null ? "" : value).append("</td>"); - } else { - if (index == 1) { - column.setColspan(dataAreaGroupFieldNameList.size()); - column.setContent(totalName); -// html.append("<td colspan=\"").append(dataAreaGroupFieldNameList.size()).append("\">").append(totalName).append("</td>"); - } - } - columns.add(column); - } -// html.append("\n</tr>"); - return columns; - } - - private List<ReportColumn> getDataAreaGroupStatisticsFieldStatisticsRow(String waitStatisticsValue, Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, - String tempFieldName, FieldSetEntity recordFse, List<String> dataAreaGroupFieldNameList, Map<String, String> replaceMap, JSONObject dataAreaGroupFieldRecordObj) { - List<ReportColumn> columns = new ArrayList<>(); -// StringBuilder html = new StringBuilder(); -// html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_STATISTICS).append("\">\n "); - String dataAreaFieldName; - JSONObject dataAreaFieldConfigObj; - boolean flag = false; - JSONObject keyObj = new JSONObject(); - String value; - String statisticsType; - int index = 0; - List<String> needAddRowspanDataAreaGroupFieldNameList = Lists.newArrayList(); - for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) { - ReportColumn column = new ReportColumn(); - index++; - dataAreaFieldName = entry.getKey(); - if (!flag) { - if (dataAreaGroupFieldNameList.contains(dataAreaFieldName)) { - keyObj.put(dataAreaFieldName, recordFse.getString(dataAreaFieldName)); - if (dataAreaFieldName.equals(tempFieldName)) { - column.setColspan(dataAreaGroupFieldNameList.size() - index + 1); - column.setContent(waitStatisticsValue + CmnConst.STATISTICS_NAME); - } - if (!flag) { - needAddRowspanDataAreaGroupFieldNameList.add(dataAreaFieldName); - } - } - } else { - dataAreaFieldConfigObj = entry.getValue(); - statisticsType = dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS); - if (!"1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD)) && StringUtils.isEmpty(statisticsType)) { - if (!"1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) { -// html.append("<td></td>"); - } - } else { - keyObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaFieldName)); - if (statisticsMap.get(keyObj) == null) { - value = ""; - } else { - JSONObject valueObj = statisticsMap.get(keyObj); - if (StringUtils.isEmpty(statisticsType)) { - statisticsType = CmnConst.ATTR_STATISTICS_DEFAULT; - } - if (CmnConst.ATTR_STATISTICS_AVG.equals(statisticsType) && "1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_AVG_TYPE))) { - int subCnt = getAimSubCnt(keyObj, dataAreaGroupFieldNameList, dataAreaGroupFieldRecordObj); - valueObj.put(CmnConst.ATTR_STATISTICS_SUB_CNT, subCnt); - dataListReportService.getAvgValue(valueObj, dataAreaFieldConfigObj, false); - } - value = valueObj.getString(statisticsType); - } - // 鏍煎紡 - value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); - column.setContent(value); -// html.append("<td>").append(value == null ? "" : value).append("</td>"); - } - } - columns.add(column); - } -// html.append("\n</tr>"); - dealReplaceMapAddRowspan(replaceMap, needAddRowspanDataAreaGroupFieldNameList, recordFse, false); - return null; - } - /** * 鑾峰彇鏍囬 @@ -500,14 +139,20 @@ * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap * @return */ - private StringBuilder getDataAreaTitleHtml(Map<String, JSONObject> dataAreaFieldConfigMap) { - StringBuilder html = new StringBuilder(256); - html.append("<tr class=\"").append(CmnConst.CLASS_TR_DATA_TITLE).append("\">"); + private List<ReportColumn> getDataAreaTitle(Map<String, JSONObject> dataAreaFieldConfigMap) { + List<ReportColumn> columnRow = new ArrayList<>(); dataAreaFieldConfigMap.forEach((dataAreaFieldName, dataAreaFieldConfigObj) -> { - html.append("<td>").append(dataListReportService.dealTdWidth(dataAreaFieldConfigObj, dataAreaFieldConfigObj.getString(CmnConst.ATTR_SHOW_NAME))).append("</td>"); + ReportColumn column = new ReportColumn(); + column.setContent(dataAreaFieldConfigObj.getString(CmnConst.ATTR_SHOW_NAME)); + String width = dataAreaFieldConfigObj.getString(CmnConst.ATTR_WIDTH); + //鍒ゆ柇瀹藉害鏄惁涓虹┖骞朵笖鏄暟瀛楋紙姝f暣鏁板拰灏忔暟閮藉彲浠ワ級 + if (StringUtils.isNotBlank(width) && width.matches("^[0-9]+(.[0-9]+)?$")) { + //灏嗗搴﹁浆鎹负double绫诲瀷 + column.setColumnWidth(NumberUtil.parseInt(width)); + } + columnRow.add(column); }); - html.append("</tr>"); - return html; + return columnRow; } /** @@ -520,7 +165,8 @@ * @param totalName 鎬昏鍚嶇О * @return */ - private String getDataAreaDataHtml(Map<String, JSONObject> dataAreaFieldConfigMap, DataTableEntity recordDte, Map<String, Set<String>> headAndTailTitleDataMap, Set<String> headAndTailFieldSet, Map<JSONObject, JSONObject> statisticsMap, String totalName) { + private List<List<ReportColumn>> getDataAreaData(Map<String, JSONObject> dataAreaFieldConfigMap, DataTableEntity recordDte, Map<String, Set<String>> headAndTailTitleDataMap, Set<String> headAndTailFieldSet, Map<JSONObject, JSONObject> statisticsMap, String totalName) { + List<List<ReportColumn>> reportColumnList = Lists.newArrayList(); // 鏁版嵁鍖哄垎缁勭粺璁″瓧娈靛悕绉發ist List<String> dataAreaGroupStatisticsFieldNameList = Lists.newArrayList(); // 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist @@ -534,8 +180,9 @@ } }); - StringBuilder dataAreaDataHtml = new StringBuilder(1024); - StringBuilder curRowHtml = new StringBuilder(256); +// StringBuilder dataAreaDataHtml = new StringBuilder(1024); +// StringBuilder curRowHtml = new StringBuilder(256); + List<ReportColumn> curRowColumn = new ArrayList<>(); FieldSetEntity recordFse; FieldSetEntity preFse = null; String dataAreaFieldName; @@ -550,15 +197,18 @@ String tempFieldName; String paramKey; boolean combineFlag; + ReportColumn currentColumn = new ReportColumn(); JSONObject dataAreaGroupFieldRecordObj = new JSONObject(); for (int i = 0; i < recordDte.getRows(); i++) { recordFse = recordDte.getFieldSetEntity(i); // 鑾峰彇澶撮儴銆佸熬閮ㄦ爣棰樺尯鏁版嵁瀛楁 dataListReportService.getHeadAndTailTitleDataMap(headAndTailTitleDataMap, headAndTailFieldSet, recordFse); - curRowHtml.setLength(0); +// curRowHtml.setLength(0); + curRowColumn = new ArrayList<>(); + String rowUuid = IdUtil.simpleUUID(); - curRowHtml.append("\n<tr rowIndex=\"" + (i + 1) + "\" id=\"" + rowUuid + "\" class=\"").append(CmnConst.CLASS_TR_DATA_COMMON).append("\">\n "); +// curRowHtml.append("\n<tr rowIndex=\"" + (i + 1) + "\" id=\"" + rowUuid + "\" class=\"").append(CmnConst.CLASS_TR_DATA_COMMON).append("\">\n "); combineFlag = true; for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) { dataAreaFieldName = entry.getKey(); @@ -598,7 +248,7 @@ for (int k = dataAreaGroupStatisticsFieldNameList.size() - 1; k >= minK; k--) { tempFieldName = dataAreaGroupStatisticsFieldNameList.get(k); if (preFse != null && dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName) != null) { - dataAreaDataHtml.append(getDataAreaGroupStatisticsFieldStatisticsRowHtml(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName), statisticsMap, dataAreaFieldConfigMap, tempFieldName, preFse, dataAreaGroupFieldNameList, replaceMap, dataAreaGroupFieldRecordObj)); + reportColumnList.add(getDataAreaGroupStatisticsFieldStatisticsRow(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName), statisticsMap, dataAreaFieldConfigMap, tempFieldName, preFse, dataAreaGroupFieldNameList, replaceMap, dataAreaGroupFieldRecordObj)); dataAreaClosestGroupStatisticsFieldValueMap.remove(tempFieldName); } } @@ -640,28 +290,55 @@ } } paramKey = dataListReportService.concat(keyObj, CmnConst.ATTR_ROWSPAN); - curRowHtml.append("<td rowspan=\"").append(paramKey).append("\""); +// curRowHtml.append("<td rowspan=\"").append(paramKey).append("\""); + currentColumn.setRowspan(paramKey); replaceMap.put(paramKey, "1"); - } else { - curRowHtml.append("<td"); } +// else { +// curRowHtml.append("<td"); +// } // class if (!StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL))) { - curRowHtml.append(" class=\"").append(CmnConst.CLASS_TD_CAN_TURN).append("true".equals(dataAreaFieldConfigObj.getString("~isSubReport~")) ? "\"skipSubReport=true" : "\"").append(" router=\"").append(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL)).append("\""); + currentColumn.setSubReport("true".equals(dataAreaFieldConfigObj.getString("~isSubReport~"))); + if (!currentColumn.isSubReport()) { + currentColumn.setPenetrate(true); + currentColumn.setPenetrateProperty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL)); + } else { + currentColumn.setSubReportProperty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL)); + } +// curRowHtml.append(" class=\"").append(CmnConst.CLASS_TD_CAN_TURN).append("true".equals(dataAreaFieldConfigObj.getString("~isSubReport~")) ? "\"skipSubReport=true" : "\"").append(" router=\"").append(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL)).append("\""); } String attrValue = recordFse.getString(dataAreaFieldName + CmnConst.PROMPT_REAL_VALUE_TAIL); if (StringUtils.isEmpty(attrValue)) { attrValue = recordFse.getString(dataAreaFieldName); } - curRowHtml.append(" ").append(dataAreaFieldName).append("=\"").append(attrValue).append("\""); - curRowHtml.append(">"); + if (!dataAreaFieldName.matches("\\d+")) { + currentColumn.addProperty(dataAreaFieldName, attrValue); +// curRowHtml.append(" ").append(dataAreaFieldName).append("=\"").append(attrValue).append("\""); + } + // 瑙f瀽绌块�忓弬鏁� + String urlParam = dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL_PARAM); + String attrParam; + if (!StringUtils.isEmpty(urlParam)) { + List<String> suitFieldList = BaseUtil.getSuitContent(urlParam, "\\{#\\w+#\\}"); + for (String singleSuitFieldName : suitFieldList) { + attrParam = singleSuitFieldName.substring(2, singleSuitFieldName.length() - 2); + currentColumn.addProperty(attrParam, recordFse.getString(attrParam)); +// curRowHtml.append(" ").append(attrParam).append("=\"").append(recordFse.getString(attrParam)).append("\""); + } + } +// curRowHtml.append(">"); // 鏍煎紡 value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); - curRowHtml.append(value == null ? "" : value); - curRowHtml.append("</td>"); +// curRowHtml.append(value == null ? "" : value); +// curRowHtml.append("</td>"); + currentColumn.setContent(value); + curRowColumn.add(currentColumn); + currentColumn = new ReportColumn(); } - curRowHtml.append("\n</tr>"); - dataAreaDataHtml.append(curRowHtml); +// curRowHtml.append("\n</tr>"); +// dataAreaDataHtml.append(curRowHtml); + reportColumnList.add(curRowColumn); preFse = recordFse; } @@ -677,22 +354,34 @@ for (int k = maxK; k >= 0; k--) { tempFieldName = dataAreaGroupStatisticsFieldNameList.get(k); if (preFse != null) { - dataAreaDataHtml.append(getDataAreaGroupStatisticsFieldStatisticsRowHtml(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName), statisticsMap, dataAreaFieldConfigMap, tempFieldName, preFse, dataAreaGroupFieldNameList, replaceMap, dataAreaGroupFieldRecordObj)); + reportColumnList.add(getDataAreaGroupStatisticsFieldStatisticsRow(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName), statisticsMap, dataAreaFieldConfigMap, tempFieldName, preFse, dataAreaGroupFieldNameList, replaceMap, dataAreaGroupFieldRecordObj)); } } } // 鎬昏 if (!StringUtils.isEmpty(totalName)) { - dataAreaDataHtml.append(getDataAreaTotalStatisticsHtml(statisticsMap, dataAreaFieldConfigMap, dataAreaGroupFieldNameList, preFse, dataAreaGroupFieldRecordObj, totalName)); + List<ReportColumn> reportColumns = getDataAreaTotalStatisticsRow(statisticsMap, dataAreaFieldConfigMap, dataAreaGroupFieldNameList, preFse, dataAreaGroupFieldRecordObj, totalName); + if (reportColumns != null && reportColumns.size() > 0) { + reportColumnList.add(reportColumns); + } + } + //寰幆鎵�鏈夌殑column杩涜鍙傛暟鏇挎崲 + for (List<ReportColumn> reportColumns : reportColumnList) { + if (reportColumns != null) { + for (ReportColumn reportColumn : reportColumns) { + if (reportColumn != null) { + + for (Map.Entry<String, String> entry : replaceMap.entrySet()) { + reportColumn.replace(entry.getKey(), entry.getValue()); + } + } + } + + } } - String str = dataAreaDataHtml.toString(); - for (Map.Entry<String, String> entry : replaceMap.entrySet()) { - str = str.replace(entry.getKey(), entry.getValue()); - } - - return str; + return reportColumnList; } /** @@ -781,10 +470,9 @@ * @param dataAreaGroupFieldRecordObj 鏁版嵁鍖哄垎缁勫瓧娈佃褰昽bj * @return */ - private StringBuilder getDataAreaGroupStatisticsFieldStatisticsRowHtml(String waitStatisticsValue, Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, - String tempFieldName, FieldSetEntity recordFse, List<String> dataAreaGroupFieldNameList, Map<String, String> replaceMap, JSONObject dataAreaGroupFieldRecordObj) { - StringBuilder html = new StringBuilder(); - html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_STATISTICS).append("\">\n "); + private List<ReportColumn> getDataAreaGroupStatisticsFieldStatisticsRow(String waitStatisticsValue, Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, + String tempFieldName, FieldSetEntity recordFse, List<String> dataAreaGroupFieldNameList, Map<String, String> replaceMap, JSONObject dataAreaGroupFieldRecordObj) { + List<ReportColumn> columnRow = new ArrayList<>(); String dataAreaFieldName; JSONObject dataAreaFieldConfigObj; boolean flag = false; @@ -800,8 +488,12 @@ if (dataAreaGroupFieldNameList.contains(dataAreaFieldName)) { keyObj.put(dataAreaFieldName, recordFse.getString(dataAreaFieldName)); if (dataAreaFieldName.equals(tempFieldName)) { - html.append("<td colspan=\"").append(dataAreaGroupFieldNameList.size() - index + 1).append("\">").append(waitStatisticsValue).append(CmnConst.STATISTICS_NAME).append("</td>"); + ReportColumn column = new ReportColumn(); + column.setColspan(dataAreaGroupFieldNameList.size() - index + 1); + column.setContent(waitStatisticsValue); +// html.append("<td colspan=\"").append(dataAreaGroupFieldNameList.size() - index + 1).append("\">").append(waitStatisticsValue).append(CmnConst.STATISTICS_NAME).append("</td>"); flag = true; + columnRow.add(column); } if (!flag) { needAddRowspanDataAreaGroupFieldNameList.add(dataAreaFieldName); @@ -812,7 +504,8 @@ statisticsType = dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS); if (!"1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD)) && StringUtils.isEmpty(statisticsType)) { if (!"1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) { - html.append("<td></td>"); +// html.append("<td></td>"); + columnRow.add(new ReportColumn()); } } else { keyObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaFieldName)); @@ -832,13 +525,13 @@ } // 鏍煎紡 value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); - html.append("<td>").append(value == null ? "" : value).append("</td>"); +// html.append("<td>").append(value == null ? "" : value).append("</td>"); + columnRow.add(new ReportColumn(value == null ? "" : value)); } } } - html.append("\n</tr>"); dealReplaceMapAddRowspan(replaceMap, needAddRowspanDataAreaGroupFieldNameList, recordFse, false); - return html; + return columnRow; } /** @@ -852,16 +545,16 @@ * @param totalName 鎬昏鍚嶇О * @return */ - private String getDataAreaTotalStatisticsHtml(Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, List<String> dataAreaGroupFieldNameList, FieldSetEntity preFse, JSONObject dataAreaGroupFieldRecordObj, String totalName) { - StringBuilder html = new StringBuilder(512); + private List<ReportColumn> getDataAreaTotalStatisticsRow(Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, List<String> dataAreaGroupFieldNameList, FieldSetEntity preFse, JSONObject dataAreaGroupFieldRecordObj, String totalName) { + List<ReportColumn> reportColumns = new ArrayList<>(); String dataAreaFieldName; JSONObject dataAreaFieldConfigObj; String value; JSONObject keyObj = new JSONObject(); String statisticsType; - html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_STATISTICS).append("\">\n "); +// html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_STATISTICS).append("\">\n "); if (preFse == null) { - return html.toString(); + return null; } int index = 0; for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) { @@ -887,15 +580,17 @@ } // 鏍煎紡 value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); - html.append("<td>").append(value == null ? "" : value).append("</td>"); + reportColumns.add(new ReportColumn(value == null ? "" : value)); } else { if (index == 1) { - html.append("<td colspan=\"").append(dataAreaGroupFieldNameList.size()).append("\">").append(totalName).append("</td>"); + ReportColumn column = new ReportColumn(); + column.setColspan(dataAreaGroupFieldNameList.size()); + column.setContent(totalName); + reportColumns.add(column); } } } - html.append("\n</tr>"); - return html.toString(); + return reportColumns; } /** -- Gitblit v1.9.2