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 | 1144 ++++++++++++++++++++++++++++++-------------------------- 1 files changed, 617 insertions(+), 527 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 c9c6a7e..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,7 @@ package com.product.server.report.service; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -11,6 +12,7 @@ import com.product.core.service.support.AbstractBaseService; import com.product.core.spring.context.SpringMVCContextHolder; import com.product.server.report.config.CmnConst; +import com.product.server.report.entity.ReportColumn; import com.product.util.BaseUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -26,556 +28,644 @@ */ @Component public class CommonReportService extends AbstractBaseService { - @Autowired - private DataListReportService dataListReportService; + @Autowired + private DataListReportService dataListReportService; - /** - * 鎶ヨ〃-瑙f瀽 - * - * @param recordDte 涓氬姟鏁版嵁dte - * @param totalStatisticsFlag 鏄惁鍚堣鏍囪瘑 - * @param reportConfigMap 鎶ヨ〃閰嶇疆缂撳瓨map - * @param tableStyle - * @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(); + /** + * 鎶ヨ〃-瑙f瀽 + * + * @param recordDte 涓氬姟鏁版嵁dte + * @param totalName 鎬昏鍚嶇О + * @param reportConfigMap 鎶ヨ〃閰嶇疆缂撳瓨map + * @param unpivotInfoContainer 琛屽垪杞崲淇℃伅 + * @return + */ + 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); + // 鏁版嵁鍖� + Map<String, Set<String>> headAndTailTitleDataMap = Maps.newHashMap(); + List<List<ReportColumn>> reportRows = getDataArea(reportConfigMap, headAndTailTitleDataMap, recordDte, totalName, unpivotInfoContainer); + int totalColCount = reportConfigMap.get(0).size() + unpivotInfoContainer.size() - 1; + // 澶撮儴鏍囬鍖� + if (!reportConfigMap.get(1).isEmpty()) { + 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; + // 搴曢儴鏍囬鍖� + if (!reportConfigMap.get(3).isEmpty()) { + reportColumnList[2] = (dataListReportService.getTitleRows(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail")); + } - int totalColCount = reportConfigMap.get(0).size(); - // 澶撮儴鏍囬鍖� - StringBuilder headTitleHtml = null; - if (!reportConfigMap.get(1).isEmpty()) { - headTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head"); - } +// 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; + } - // 搴曢儴鏍囬鍖� - StringBuilder tailTitleHtml = null; - if (!reportConfigMap.get(3).isEmpty()) { - tailTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail"); - } + /** + * 鑾峰彇鎶ヨ〃鏁版嵁鍖篽tml + * + * @param reportConfigMap 鎶ヨ〃缂撳瓨map + * @param headAndTailTitleDataMap 澶撮儴銆佸熬閮ㄦ爣棰樺尯鏁版嵁瀛楁map + * @param recordDte 涓氬姟鏁版嵁闆嗗悎 + * @param totalName 鎬昏鍚嶇О锛岄潪绌�-闇�瑕佹�昏 + * @return + */ + 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)); + // 鑾峰彇鎸囧畾鏁版嵁闆嗕腑鍖呭惈鐨勬暟鎹尯瀛楁闆嗗悎 + 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(); - 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>"); + // 灏嗚鍒楄浆鎹㈢殑淇℃伅娣诲姞鍒版暟鎹尯瀛楁缂撳瓨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; + } - 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; - } + // 鏍囬 + reportColumnList.add(getDataAreaTitle(newDataAreaFieldConfigMap)); + // 鍐呭 + List<List<ReportColumn>> dataAreaData = getDataAreaData(newDataAreaFieldConfigMap, recordDte, headAndTailTitleDataMap, headAndTailFieldSet, statisticsMap, totalName); + reportColumnList.addAll(dataAreaData); + return reportColumnList; + } - /** - * 鑾峰彇鎶ヨ〃鏁版嵁鍖篽tml - * - * @param reportConfigMap 鎶ヨ〃缂撳瓨map - * @param headAndTailTitleDataMap 澶撮儴銆佸熬閮ㄦ爣棰樺尯鏁版嵁瀛楁map - * @param recordDte 涓氬姟鏁版嵁闆嗗悎 - * @param totalName 鎬昏鍚嶇О锛岄潪绌�-闇�瑕佹�昏 - * @return - */ - private String getDataAreaHtml(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(); + /** + * 鑾峰彇鏍囬 + * + * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap + * @return + */ + private List<ReportColumn> getDataAreaTitle(Map<String, JSONObject> dataAreaFieldConfigMap) { + List<ReportColumn> columnRow = new ArrayList<>(); + dataAreaFieldConfigMap.forEach((dataAreaFieldName, dataAreaFieldConfigObj) -> { + 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); + }); + return columnRow; + } - StringBuilder dataAreaHtml = new StringBuilder(1024); - // 鏍囬 - dataAreaHtml.append(getDataAreaTitleHtml(dataAreaFieldConfigMap)); - // 鍐呭 - dataAreaHtml.append(getDataAreaDataHtml(dataAreaFieldConfigMap, recordDte, headAndTailTitleDataMap, headAndTailFieldSet, statisticsMap, totalName)); - return dataAreaHtml.toString(); - } + /** + * 鑾峰彇鍐呭锛屽寘鍚粺璁� + * + * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap + * @param recordDte 涓氬姟鏁版嵁闆嗗悎 + * @param headAndTailFieldSet 澶撮儴銆佸熬閮ㄦ爣棰樺尯瀛楁set + * @param statisticsMap 缁熻map + * @param totalName 鎬昏鍚嶇О + * @return + */ + 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 + 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); + } + } + }); - /** - * 鑾峰彇鏍囬 - * - * @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("\">"); - dataAreaFieldConfigMap.forEach((dataAreaFieldName, dataAreaFieldConfigObj) -> { - html.append("<td>").append(dataListReportService.dealTdWidth(dataAreaFieldConfigObj, dataAreaFieldConfigObj.getString(CmnConst.ATTR_SHOW_NAME))).append("</td>"); - }); - html.append("</tr>"); - return html; - } +// StringBuilder dataAreaDataHtml = new StringBuilder(1024); +// StringBuilder curRowHtml = new StringBuilder(256); + List<ReportColumn> curRowColumn = new ArrayList<>(); + 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; + 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); - /** - * 鑾峰彇鍐呭锛屽寘鍚粺璁� - * - * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap - * @param recordDte 涓氬姟鏁版嵁闆嗗悎 - * @param headAndTailFieldSet 澶撮儴銆佸熬閮ㄦ爣棰樺尯瀛楁set - * @param statisticsMap 缁熻map - * @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) { - // 鏁版嵁鍖哄垎缁勭粺璁″瓧娈靛悕绉發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); - } - } - }); +// curRowHtml.setLength(0); + curRowColumn = new ArrayList<>(); - StringBuilder dataAreaDataHtml = new StringBuilder(1024); - StringBuilder curRowHtml = new StringBuilder(256); - 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); + String rowUuid = IdUtil.simpleUUID(); +// 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(); + 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); - curRowHtml.setLength(0); - String rowUuid = IdUtil.simpleUUID(); - 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(); - 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) { + reportColumnList.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); +// curRowHtml.append("<td rowspan=\"").append(paramKey).append("\""); + currentColumn.setRowspan(paramKey); + replaceMap.put(paramKey, "1"); + } +// else { +// curRowHtml.append("<td"); +// } + // class + if (!StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL))) { + 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); + } + 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>"); + currentColumn.setContent(value); + curRowColumn.add(currentColumn); + currentColumn = new ReportColumn(); + } +// curRowHtml.append("\n</tr>"); +// dataAreaDataHtml.append(curRowHtml); + reportColumnList.add(curRowColumn); + preFse = 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) { - dataAreaDataHtml.append(getDataAreaGroupStatisticsFieldStatisticsRowHtml(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); - curRowHtml.append("<td rowspan=\"").append(paramKey).append("\""); - replaceMap.put(paramKey, "1"); - } 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("\""); - } - 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(">"); - // 鏍煎紡 - value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); - curRowHtml.append(value == null ? "" : value); - curRowHtml.append("</td>"); - } - curRowHtml.append("\n</tr>"); - dataAreaDataHtml.append(curRowHtml); - 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) { + reportColumnList.add(getDataAreaGroupStatisticsFieldStatisticsRow(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName), statisticsMap, dataAreaFieldConfigMap, tempFieldName, preFse, dataAreaGroupFieldNameList, replaceMap, dataAreaGroupFieldRecordObj)); + } + } + } - // 琛ュ叏鏈熬缁熻 - 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) { - dataAreaDataHtml.append(getDataAreaGroupStatisticsFieldStatisticsRowHtml(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName), statisticsMap, dataAreaFieldConfigMap, tempFieldName, preFse, dataAreaGroupFieldNameList, replaceMap, dataAreaGroupFieldRecordObj)); - } - } - } + // 鎬昏 + if (!StringUtils.isEmpty(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) { - // 鎬昏 - if (!StringUtils.isEmpty(totalName)) { - dataAreaDataHtml.append(getDataAreaTotalStatisticsHtml(statisticsMap, dataAreaFieldConfigMap, dataAreaGroupFieldNameList, preFse, dataAreaGroupFieldRecordObj, totalName)); - } + 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; + } - /** - * 娣诲姞鍒嗙粍缁熻淇℃伅 - * @param statisticsMap 缁熻map - * @param dataAreaGroupStatisticsFieldNameList 鏁版嵁鍖哄垎缁勭粺璁″瓧娈靛悕绉發ist - * @param recordFse 涓氬姟鏁版嵁fse - * @param dataAreaFieldConfigObj 鏁版嵁鍖哄瓧娈祇bj - * @param dataAreaFieldName 鏁版嵁鍖哄瓧娈靛悕绉� - * @param value 鍊� - * @param formulaMap 鍏紡map锛屽瓧娈礽nfo鍜岀粺璁$被鍨嬬殑鏄犲皠 - */ - private void addStatisticsRowInfo(Map<JSONObject, JSONObject> statisticsMap, List<String> dataAreaGroupStatisticsFieldNameList, FieldSetEntity recordFse, JSONObject dataAreaFieldConfigObj, String dataAreaFieldName, String value, Map<String, String> formulaMap) { - JSONObject keyObj = new JSONObject(); - keyObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaFieldName)); - String statisticsType = dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS); - if (StringUtils.isEmpty(statisticsType) && "1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_STATISTICS))) { - statisticsType = CmnConst.ATTR_STATISTICS_DEFAULT; - } - String statisticsValue; - String formula = dataAreaFieldConfigObj.getString(CmnConst.ATTR_FORMULA); - JSONObject formulaFieldKeyObj = new JSONObject(); - // 鎬昏 - JSONObject cloneKeyObj = (JSONObject) keyObj.clone(); - JSONObject valueObj = statisticsMap.computeIfAbsent(cloneKeyObj, k -> new JSONObject()); - statisticsValue = getStatisticsValue(statisticsMap, formulaMap, formulaFieldKeyObj, formula, value); - statisticsMap.put(keyObj, dataListReportService.getStatisticsValueObj(valueObj, dataAreaFieldConfigObj, statisticsValue, statisticsType, true)); - // 鍒嗙粍缁熻 - for (String dataAreaGroupStatisticsFieldName : dataAreaGroupStatisticsFieldNameList) { - keyObj.put(dataAreaGroupStatisticsFieldName, recordFse.getString(dataAreaGroupStatisticsFieldName)); - formulaFieldKeyObj.put(dataAreaGroupStatisticsFieldName, recordFse.getString(dataAreaGroupStatisticsFieldName)); - cloneKeyObj = (JSONObject) keyObj.clone(); - valueObj = statisticsMap.computeIfAbsent(cloneKeyObj, k -> new JSONObject()); - statisticsValue = getStatisticsValue(statisticsMap, formulaMap, formulaFieldKeyObj, formula, value); - statisticsMap.put(keyObj, dataListReportService.getStatisticsValueObj(valueObj, dataAreaFieldConfigObj, statisticsValue, statisticsType, true)); - } - } - private void addStatisticsRowInfo(Map<JSONObject, JSONObject> statisticsMap, List<String> dataAreaGroupStatisticsFieldNameList, FieldSetEntity recordFse, JSONObject dataAreaFieldConfigObj, String dataAreaFieldName, String value) { - addStatisticsRowInfo(statisticsMap, dataAreaGroupStatisticsFieldNameList, recordFse, dataAreaFieldConfigObj, dataAreaFieldName, value, null); - } + /** + * 娣诲姞鍒嗙粍缁熻淇℃伅 + * + * @param statisticsMap 缁熻map + * @param dataAreaGroupStatisticsFieldNameList 鏁版嵁鍖哄垎缁勭粺璁″瓧娈靛悕绉發ist + * @param recordFse 涓氬姟鏁版嵁fse + * @param dataAreaFieldConfigObj 鏁版嵁鍖哄瓧娈祇bj + * @param dataAreaFieldName 鏁版嵁鍖哄瓧娈靛悕绉� + * @param value 鍊� + * @param formulaMap 鍏紡map锛屽瓧娈礽nfo鍜岀粺璁$被鍨嬬殑鏄犲皠 + */ + private void addStatisticsRowInfo(Map<JSONObject, JSONObject> statisticsMap, List<String> dataAreaGroupStatisticsFieldNameList, FieldSetEntity recordFse, JSONObject dataAreaFieldConfigObj, String dataAreaFieldName, String value, Map<String, String> formulaMap) { + JSONObject keyObj = new JSONObject(); + keyObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaFieldName)); + String statisticsType = dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS); + if (StringUtils.isEmpty(statisticsType) && "1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_STATISTICS))) { + statisticsType = CmnConst.ATTR_STATISTICS_DEFAULT; + } + String statisticsValue; + String formula = dataAreaFieldConfigObj.getString(CmnConst.ATTR_FORMULA); + JSONObject formulaFieldKeyObj = new JSONObject(); + // 鎬昏 + JSONObject cloneKeyObj = (JSONObject) keyObj.clone(); + JSONObject valueObj = statisticsMap.computeIfAbsent(cloneKeyObj, k -> new JSONObject()); + statisticsValue = getStatisticsValue(statisticsMap, formulaMap, formulaFieldKeyObj, formula, value); + statisticsMap.put(keyObj, dataListReportService.getStatisticsValueObj(valueObj, dataAreaFieldConfigObj, statisticsValue, statisticsType, true)); + // 鍒嗙粍缁熻 + for (String dataAreaGroupStatisticsFieldName : dataAreaGroupStatisticsFieldNameList) { + keyObj.put(dataAreaGroupStatisticsFieldName, recordFse.getString(dataAreaGroupStatisticsFieldName)); + formulaFieldKeyObj.put(dataAreaGroupStatisticsFieldName, recordFse.getString(dataAreaGroupStatisticsFieldName)); + cloneKeyObj = (JSONObject) keyObj.clone(); + valueObj = statisticsMap.computeIfAbsent(cloneKeyObj, k -> new JSONObject()); + statisticsValue = getStatisticsValue(statisticsMap, formulaMap, formulaFieldKeyObj, formula, value); + statisticsMap.put(keyObj, dataListReportService.getStatisticsValueObj(valueObj, dataAreaFieldConfigObj, statisticsValue, statisticsType, true)); + } + } - /** - * 鑾峰彇缁熻琛岀殑鍏紡璁$畻鍊� - * @param statisticsMap 缁熻map - * @param formulaMap 鍏紡map - * @param formulaFieldKeyObj 鍏紡瀛楁keyobj - * @param formula 鍏紡 - * @param value 鍘熸湰鐨勫�� - * @return - */ - private String getStatisticsValue(Map<JSONObject, JSONObject> statisticsMap, Map<String, String> formulaMap, JSONObject formulaFieldKeyObj, String formula, String value) { - String statisticsValue = ""; - String formulaFieldValue; - if (formulaMap != null && !formulaMap.isEmpty()) { - for (Map.Entry<String, String> entry : formulaMap.entrySet()) { - formulaFieldKeyObj.put(CmnConst.ATTR_FIELD_INFO, entry.getKey()); - formulaFieldValue = statisticsMap.get(formulaFieldKeyObj).getString(entry.getValue()); - if (formulaFieldValue != null && formulaFieldValue.matches(CmnConst.REGEXP_NUMBER)) { - formulaFieldValue += "d"; - } - formula = formula.replace(entry.getKey(), StringUtils.isEmpty(formulaFieldValue) ? "" : formulaFieldValue); - } - try { - statisticsValue = BaseUtil.executeExpression(formula, Maps.newHashMap()).toString(); - } catch (Exception e) { - SpringMVCContextHolder.getSystemLogger().error(e); - statisticsValue = ""; - } - } - return StringUtils.isEmpty(statisticsValue) ? value : statisticsValue; - } + private void addStatisticsRowInfo(Map<JSONObject, JSONObject> statisticsMap, List<String> dataAreaGroupStatisticsFieldNameList, FieldSetEntity recordFse, JSONObject dataAreaFieldConfigObj, String dataAreaFieldName, String value) { + addStatisticsRowInfo(statisticsMap, dataAreaGroupStatisticsFieldNameList, recordFse, dataAreaFieldConfigObj, dataAreaFieldName, value, null); + } - /** - * 鑾峰彇鏁版嵁鍖哄垎缁勭粺璁″瓧娈电粺璁¤html - * - * @param waitStatisticsValue 寰呯粺璁$殑鍊� - * @param statisticsMap 缁熻map - * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap - * @param tempFieldName 鏈鎿嶄綔鐨勫瓧娈靛悕绉� - * @param recordFse 涓氬姟鏁版嵁璁板綍 - * @param dataAreaGroupFieldNameList 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist - * @param replaceMap 鏇挎崲map - * @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 "); - 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()) { - index++; - dataAreaFieldName = entry.getKey(); - if (!flag) { - 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>"); - flag = true; - } - 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); - html.append("<td>").append(value == null ? "" : value).append("</td>"); - } - } - } - html.append("\n</tr>"); - dealReplaceMapAddRowspan(replaceMap, needAddRowspanDataAreaGroupFieldNameList, recordFse, false); - return html; - } + /** + * 鑾峰彇缁熻琛岀殑鍏紡璁$畻鍊� + * + * @param statisticsMap 缁熻map + * @param formulaMap 鍏紡map + * @param formulaFieldKeyObj 鍏紡瀛楁keyobj + * @param formula 鍏紡 + * @param value 鍘熸湰鐨勫�� + * @return + */ + private String getStatisticsValue(Map<JSONObject, JSONObject> statisticsMap, Map<String, String> formulaMap, JSONObject formulaFieldKeyObj, String formula, String value) { + String statisticsValue = ""; + String formulaFieldValue; + if (formulaMap != null && !formulaMap.isEmpty()) { + for (Map.Entry<String, String> entry : formulaMap.entrySet()) { + formulaFieldKeyObj.put(CmnConst.ATTR_FIELD_INFO, entry.getKey()); + formulaFieldValue = statisticsMap.get(formulaFieldKeyObj).getString(entry.getValue()); + if (formulaFieldValue != null && formulaFieldValue.matches(CmnConst.REGEXP_NUMBER)) { + formulaFieldValue += "d"; + } + formula = formula.replace(entry.getKey(), StringUtils.isEmpty(formulaFieldValue) ? "" : formulaFieldValue); + } + try { + statisticsValue = BaseUtil.executeExpression(formula, Maps.newHashMap()).toString(); + } catch (Exception e) { + SpringMVCContextHolder.getSystemLogger().error(e); + statisticsValue = ""; + } + } + return StringUtils.isEmpty(statisticsValue) ? value : statisticsValue; + } - /** - * 鑾峰彇鎬昏html - * - * @param statisticsMap 缁熻map - * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap - * @param dataAreaGroupFieldNameList 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist - * @param preFse 鏈�杩戞搷浣滅殑鏁版嵁fse - * @param dataAreaGroupFieldRecordObj 鏁版嵁鍖哄垎缁勫瓧娈佃褰昽bj - * @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); - 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 html.toString(); - } - int index = 0; - for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) { - 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); - html.append("<td>").append(value == null ? "" : value).append("</td>"); - } else { - if (index == 1) { - html.append("<td colspan=\"").append(dataAreaGroupFieldNameList.size()).append("\">").append(totalName).append("</td>"); - } - } - } - html.append("\n</tr>"); - return html.toString(); - } + /** + * 鑾峰彇鏁版嵁鍖哄垎缁勭粺璁″瓧娈电粺璁¤html + * + * @param waitStatisticsValue 寰呯粺璁$殑鍊� + * @param statisticsMap 缁熻map + * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap + * @param tempFieldName 鏈鎿嶄綔鐨勫瓧娈靛悕绉� + * @param recordFse 涓氬姟鏁版嵁璁板綍 + * @param dataAreaGroupFieldNameList 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist + * @param replaceMap 鏇挎崲map + * @param dataAreaGroupFieldRecordObj 鏁版嵁鍖哄垎缁勫瓧娈佃褰昽bj + * @return + */ + 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; + JSONObject keyObj = new JSONObject(); + String value; + String statisticsType; + int index = 0; + List<String> needAddRowspanDataAreaGroupFieldNameList = Lists.newArrayList(); + for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) { + index++; + dataAreaFieldName = entry.getKey(); + if (!flag) { + if (dataAreaGroupFieldNameList.contains(dataAreaFieldName)) { + keyObj.put(dataAreaFieldName, recordFse.getString(dataAreaFieldName)); + if (dataAreaFieldName.equals(tempFieldName)) { + 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); + } + } + } 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>"); + columnRow.add(new ReportColumn()); + } + } 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); +// html.append("<td>").append(value == null ? "" : value).append("</td>"); + columnRow.add(new ReportColumn(value == null ? "" : value)); + } + } + } + dealReplaceMapAddRowspan(replaceMap, needAddRowspanDataAreaGroupFieldNameList, recordFse, false); + return columnRow; + } - /** - * 澶勭悊鍙傛暟鏇挎崲map-娣诲姞鏁版嵁鍖哄垎缁勫瓧娈电殑鍗犺 - * - * @param replaceMap 鏇挎崲map - * @param needAddRowspanDataAreaGroupFieldNames 闇�瑕佹坊鍔犲崰琛岀殑鏁版嵁鍖哄垎缁勫瓧娈靛悕绉伴泦鍚� - * @param recordFse 涓氬姟鏁版嵁璁板綍 - */ - private void dealReplaceMapAddRowspan(Map<String, String> replaceMap, Collection<String> needAddRowspanDataAreaGroupFieldNames, FieldSetEntity recordFse, boolean commonFieldFlag) { - JSONObject keyObj = new JSONObject(); - String value; - int rowspan; - String paramKey; - int index = 0; - for (String fieldName : needAddRowspanDataAreaGroupFieldNames) { - index++; - keyObj.put(fieldName, recordFse.getString(fieldName)); - if (commonFieldFlag && index != needAddRowspanDataAreaGroupFieldNames.size()) { - continue; - } - keyObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(fieldName)); - paramKey = dataListReportService.concat(keyObj, CmnConst.ATTR_ROWSPAN); - value = replaceMap.get(paramKey); - rowspan = StringUtils.isEmpty(value) ? 1 : Integer.parseInt(value) + 1; - replaceMap.put(paramKey, String.valueOf(rowspan)); - } - } + /** + * 鑾峰彇鎬昏html + * + * @param statisticsMap 缁熻map + * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap + * @param dataAreaGroupFieldNameList 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist + * @param preFse 鏈�杩戞搷浣滅殑鏁版嵁fse + * @param dataAreaGroupFieldRecordObj 鏁版嵁鍖哄垎缁勫瓧娈佃褰昽bj + * @param totalName 鎬昏鍚嶇О + * @return + */ + 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 "); + if (preFse == null) { + return null; + } + int index = 0; + for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) { + 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); + reportColumns.add(new ReportColumn(value == null ? "" : value)); + } else { + if (index == 1) { + ReportColumn column = new ReportColumn(); + column.setColspan(dataAreaGroupFieldNameList.size()); + column.setContent(totalName); + reportColumns.add(column); + } + } + } + return reportColumns; + } - /** - * 璁板綍鍒嗙粍瀛楁 - * - * @param dataAreaGroupFieldRecordObj 鏁版嵁鍖哄垎缁勫瓧娈佃褰昽bj - * @param dataAreaGroupFieldNameList 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist - * @param curFieldIndex 褰撳墠瀛楁涓嬫爣 - * @param recordFse 涓氬姟鏁版嵁璁板綍 - */ - private void recordDataAreaGroupField(JSONObject dataAreaGroupFieldRecordObj, List<String> dataAreaGroupFieldNameList, int curFieldIndex, FieldSetEntity recordFse) { - String tempFieldName; - JSONObject parentObj = dataAreaGroupFieldRecordObj; - JSONObject subObj; - String value; - for (int j = 0; j <= curFieldIndex; j++) { - tempFieldName = dataAreaGroupFieldNameList.get(j); - value = recordFse.getString(tempFieldName); - subObj = parentObj.getJSONObject(value); - if (subObj == null) { - subObj = new JSONObject(); - parentObj.put(value, subObj); - } - parentObj = subObj; - } - } + /** + * 澶勭悊鍙傛暟鏇挎崲map-娣诲姞鏁版嵁鍖哄垎缁勫瓧娈电殑鍗犺 + * + * @param replaceMap 鏇挎崲map + * @param needAddRowspanDataAreaGroupFieldNames 闇�瑕佹坊鍔犲崰琛岀殑鏁版嵁鍖哄垎缁勫瓧娈靛悕绉伴泦鍚� + * @param recordFse 涓氬姟鏁版嵁璁板綍 + */ + private void dealReplaceMapAddRowspan(Map<String, String> replaceMap, Collection<String> needAddRowspanDataAreaGroupFieldNames, FieldSetEntity recordFse, boolean commonFieldFlag) { + JSONObject keyObj = new JSONObject(); + String value; + int rowspan; + String paramKey; + int index = 0; + for (String fieldName : needAddRowspanDataAreaGroupFieldNames) { + index++; + keyObj.put(fieldName, recordFse.getString(fieldName)); + if (commonFieldFlag && index != needAddRowspanDataAreaGroupFieldNames.size()) { + continue; + } + keyObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(fieldName)); + paramKey = dataListReportService.concat(keyObj, CmnConst.ATTR_ROWSPAN); + value = replaceMap.get(paramKey); + rowspan = StringUtils.isEmpty(value) ? 1 : Integer.parseInt(value) + 1; + replaceMap.put(paramKey, String.valueOf(rowspan)); + } + } - /** - * 鑾峰彇鎸囧畾鐨勪笅绾у垎缁勯」 - * - * @param keyObj 鎸囧畾鐨刱ey - * @param dataAreaGroupFieldNameList 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist - * @param dataAreaGroupFieldRecordObj 鏁版嵁鍖哄垎缁勫瓧娈佃褰昽bj - * @return - */ - private int getAimSubCnt(JSONObject keyObj, List<String> dataAreaGroupFieldNameList, JSONObject dataAreaGroupFieldRecordObj) { - String value; - JSONObject parentObj = dataAreaGroupFieldRecordObj; - JSONObject subObj = null; - for (String fieldName : dataAreaGroupFieldNameList) { - value = keyObj.getString(fieldName); - if (value != null) { - subObj = parentObj.getJSONObject(value); - } else { - break; - } - parentObj = subObj; - } - return subObj == null ? 0 : subObj.size(); - } + /** + * 璁板綍鍒嗙粍瀛楁 + * + * @param dataAreaGroupFieldRecordObj 鏁版嵁鍖哄垎缁勫瓧娈佃褰昽bj + * @param dataAreaGroupFieldNameList 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist + * @param curFieldIndex 褰撳墠瀛楁涓嬫爣 + * @param recordFse 涓氬姟鏁版嵁璁板綍 + */ + private void recordDataAreaGroupField(JSONObject dataAreaGroupFieldRecordObj, List<String> dataAreaGroupFieldNameList, int curFieldIndex, FieldSetEntity recordFse) { + String tempFieldName; + JSONObject parentObj = dataAreaGroupFieldRecordObj; + JSONObject subObj; + String value; + for (int j = 0; j <= curFieldIndex; j++) { + tempFieldName = dataAreaGroupFieldNameList.get(j); + value = recordFse.getString(tempFieldName); + subObj = parentObj.getJSONObject(value); + if (subObj == null) { + subObj = new JSONObject(); + parentObj.put(value, subObj); + } + parentObj = subObj; + } + } + + /** + * 鑾峰彇鎸囧畾鐨勪笅绾у垎缁勯」 + * + * @param keyObj 鎸囧畾鐨刱ey + * @param dataAreaGroupFieldNameList 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist + * @param dataAreaGroupFieldRecordObj 鏁版嵁鍖哄垎缁勫瓧娈佃褰昽bj + * @return + */ + private int getAimSubCnt(JSONObject keyObj, List<String> dataAreaGroupFieldNameList, JSONObject dataAreaGroupFieldRecordObj) { + String value; + JSONObject parentObj = dataAreaGroupFieldRecordObj; + JSONObject subObj = null; + for (String fieldName : dataAreaGroupFieldNameList) { + value = keyObj.getString(fieldName); + if (value != null) { + subObj = parentObj.getJSONObject(value); + } else { + break; + } + parentObj = subObj; + } + return subObj == null ? 0 : subObj.size(); + } } -- Gitblit v1.9.2