From 0d63f52d84e393204af3ba5bce86bdfddf936be8 Mon Sep 17 00:00:00 2001
From: 1821349743@qq.com <1821349743@qq.com>
Date: 星期六, 08 四月 2023 16:39:25 +0800
Subject: [PATCH] 修改报表加载返回html更改为数据
---
src/main/java/com/product/server/report/entity/ReportEntity.java | 160 ++
src/main/java/com/product/server/report/controller/DataListReportController.java | 2
src/main/java/com/product/server/report/service/GroupReportService.java | 2256 ++++++++++++++++++-------------
src/main/java/com/product/server/report/service/CommonReportService.java | 1443 ++++++++++++-------
src/main/java/com/product/server/report/service/DataListReportService.java | 268 +++
src/main/java/com/product/server/report/entity/ReportColumn.java | 120 +
src/main/java/com/product/server/report/service/ReportConfigService.java | 10
7 files changed, 2,789 insertions(+), 1,470 deletions(-)
diff --git a/src/main/java/com/product/server/report/controller/DataListReportController.java b/src/main/java/com/product/server/report/controller/DataListReportController.java
index 202ecf4..863f3eb 100644
--- a/src/main/java/com/product/server/report/controller/DataListReportController.java
+++ b/src/main/java/com/product/server/report/controller/DataListReportController.java
@@ -89,7 +89,7 @@
SpringMVCContextHolder.getSystemLogger().error(SystemCode.SYSTEM_FORM_NODATA.getValue(), SystemCode.SYSTEM_FORM_NODATA.getText());
return this.error(SystemCode.SYSTEM_FORM_NODATA.getValue(), SystemCode.SYSTEM_FORM_NODATA.getText());
}
- return BaseUtil.success(dataListReportService.getReport(fse));
+ return BaseUtil.success(dataListReportService.getReportEntity(fse));
} catch (BaseException e) {
SpringMVCContextHolder.getSystemLogger().error(e);
return this.error(e.getCode(), e.getMessageInfo());
diff --git a/src/main/java/com/product/server/report/entity/ReportColumn.java b/src/main/java/com/product/server/report/entity/ReportColumn.java
new file mode 100644
index 0000000..8af08fc
--- /dev/null
+++ b/src/main/java/com/product/server/report/entity/ReportColumn.java
@@ -0,0 +1,120 @@
+package com.product.server.report.entity;
+
+import com.product.common.lang.StringUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @Author cheng
+ * @Date 2023/4/3 11:34
+ * @Desc 鎶ヨ〃鍗曞厓鏍�
+ */
+public class ReportColumn {
+ //璺ㄥ垪
+ private int colspan = 1;
+ //璺ㄨ
+ private int rowspan = 1;
+ //鍗曞厓鏍煎唴瀹�
+ private String content;
+ //绌块�忓瓧娈�
+ private boolean penetrate;
+ //瀛愭姤琛�
+ private boolean subReport;
+ //绌块�忓睘鎬�
+ private String penetrateProperty;
+ //瀛愭姤琛ㄥ睘鎬�
+ private String subReportProperty;
+ //鍗曞厓鏍煎搴� px
+ private int columnWidth;
+
+ private Map<String, String> otherParams = new HashMap<>();
+
+ public void replace(String key, String value) {
+ if (!otherParams.isEmpty()) {
+ Map<String, String> otherParams = this.otherParams;
+ this.otherParams = new HashMap<>();
+ otherParams.forEach((k, v) -> {
+ this.otherParams.put(k.replace(key, value), v.replace(key, value));
+ });
+ }
+ if(!StringUtils.isEmpty(subReportProperty)){
+ subReportProperty=subReportProperty.replace(key,value);
+ }
+ if(!StringUtils.isEmpty(penetrateProperty)){
+ penetrateProperty=penetrateProperty.replace(key,value);
+ }
+ if(!StringUtils.isEmpty(content)){
+ content=content.replace(key,value);
+ }
+ }
+
+ public void addProperty(String key, String value) {
+ otherParams.put(key, value);
+ }
+
+ public int getColspan() {
+ return colspan;
+ }
+
+ public void setColspan(int colspan) {
+ this.colspan = colspan;
+ }
+
+ public int getRowspan() {
+ return rowspan;
+ }
+
+ public void setRowspan(int rowspan) {
+ this.rowspan = rowspan;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public boolean isPenetrate() {
+ return penetrate;
+ }
+
+ public void setPenetrate(boolean penetrate) {
+ this.penetrate = penetrate;
+ }
+
+ public boolean isSubReport() {
+ return subReport;
+ }
+
+ public void setSubReport(boolean subReport) {
+ this.subReport = subReport;
+ }
+
+ public String getPenetrateProperty() {
+ return penetrateProperty;
+ }
+
+ public void setPenetrateProperty(String penetrateProperty) {
+ this.penetrateProperty = penetrateProperty;
+ }
+
+ public String getSubReportProperty() {
+ return subReportProperty;
+ }
+
+ public void setSubReportProperty(String subReportProperty) {
+ this.subReportProperty = subReportProperty;
+ }
+
+ public int getColumnWidth() {
+ return columnWidth;
+ }
+
+ public void setColumnWidth(int columnWidth) {
+ this.columnWidth = columnWidth;
+ }
+}
diff --git a/src/main/java/com/product/server/report/entity/ReportEntity.java b/src/main/java/com/product/server/report/entity/ReportEntity.java
new file mode 100644
index 0000000..23eeec5
--- /dev/null
+++ b/src/main/java/com/product/server/report/entity/ReportEntity.java
@@ -0,0 +1,160 @@
+package com.product.server.report.entity;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSONArray;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author cheng
+ * @Date 2023/4/3 11:33
+ * @Desc 鎶ヨ〃灞曠ず
+ */
+public class ReportEntity {
+ //鍓嶇浣跨敤
+ private String entityType = "report";
+ //澶撮儴鏍囬 锛堝寘鍚唴瀹瑰ご锛�
+ private List<List<ReportColumn>> reportHeader;
+ //鍐呭
+ private List<List<ReportColumn>> reportData;
+ //搴曢儴鏍囬
+ private List<List<ReportColumn>> reportTail;
+ //鎶ヨ〃绫诲瀷uuid
+ private String reportType;
+ //榛樿杩囨护鏉′欢
+ private Map<String, Map<String, String>> filterInfo;
+ //瀛楁淇℃伅
+ private JSONArray systemFieldMeta;
+
+
+ /************鍒嗛〉鍙傛暟*************/
+
+ private boolean isPage;
+
+ private int pageSize;
+
+ private int pageIndex;
+
+ private int totalPage;
+
+ /************鍒嗛〉鍙傛暟************
+
+
+
+ /**
+ * 娣诲姞涓�琛岃〃澶�
+ *
+ * @param reportColumnArray
+ */
+ public void addReportHeader(List<ReportColumn> reportColumnArray) {
+ if (CollectionUtil.isEmpty(reportColumnArray)) {
+ return;
+ }
+ if (CollectionUtil.isEmpty(this.reportHeader)) {
+ reportHeader = new ArrayList<>();
+ }
+ reportHeader.add(reportColumnArray);
+ }
+
+ /**
+ * 娣诲姞涓�琛屾暟鎹�
+ *
+ * @param reportDataArray
+ */
+ private void addReportData(List<ReportColumn> reportDataArray) {
+ if (CollectionUtil.isEmpty(reportDataArray)) {
+ return;
+ }
+ if (CollectionUtil.isEmpty(this.reportData)) {
+ reportData = new ArrayList<>();
+ }
+ reportData.add(reportDataArray);
+ }
+
+
+ public String getEntityType() {
+ return entityType;
+ }
+
+ public List<List<ReportColumn>> getReportHeader() {
+ return reportHeader;
+ }
+
+ public void setReportHeader(List<List<ReportColumn>> reportHeader) {
+ this.reportHeader = reportHeader;
+ }
+
+ public List<List<ReportColumn>> getReportData() {
+ return reportData;
+ }
+
+ public void setReportData(List<List<ReportColumn>> reportData) {
+ this.reportData = reportData;
+ }
+
+ public List<List<ReportColumn>> getReportTail() {
+ return reportTail;
+ }
+
+ public void setReportTail(List<List<ReportColumn>> reportTail) {
+ this.reportTail = reportTail;
+ }
+
+ public String getReportType() {
+ return reportType;
+ }
+
+ public void setReportType(String reportType) {
+ this.reportType = reportType;
+ }
+
+ public Map<String, Map<String, String>> getFilterInfo() {
+ return filterInfo;
+ }
+
+ public void setFilterInfo(Map<String, Map<String, String>> filterInfo) {
+ this.filterInfo = filterInfo;
+ }
+
+ public JSONArray getSystemFieldMeta() {
+ return systemFieldMeta;
+ }
+
+ public void setSystemFieldMeta(JSONArray systemFieldMeta) {
+ this.systemFieldMeta = systemFieldMeta;
+ }
+
+ public boolean isPage() {
+ return isPage;
+ }
+
+ public void setPage(boolean page) {
+ isPage = page;
+ }
+
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ public int getTotalPage() {
+ return totalPage;
+ }
+
+ public void setTotalPage(int totalPage) {
+ this.totalPage = totalPage;
+ }
+}
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..f239244 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,8 @@
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;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -11,7 +13,10 @@
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.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;
@@ -26,556 +31,940 @@
*/
@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);
+ /**
+ * 鎶ヨ〃-瑙f瀽
+ *
+ * @param recordDte 涓氬姟鏁版嵁dte
+ * @param totalStatisticsFlag 鏄惁鍚堣鏍囪瘑
+ * @param reportConfigMap 鎶ヨ〃閰嶇疆缂撳瓨map
+ * @param tableStyle
+ * @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);
- // css
- StringBuilder cssHtml = dataListReportService.getCssHtml();
+ int totalColCount = reportConfigMap.get(0).size();
- // 鏁版嵁鍖�
- Map<String, Set<String>> headAndTailTitleDataMap = Maps.newHashMap();
- String dataAreaHtml = getDataAreaHtml(reportConfigMap, headAndTailTitleDataMap, recordDte, totalName);
+ // 澶撮儴鏍囬鍖�
+ 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");
+ }
- int totalColCount = reportConfigMap.get(0).size();
- // 澶撮儴鏍囬鍖�
- StringBuilder headTitleHtml = null;
- if (!reportConfigMap.get(1).isEmpty()) {
- headTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head");
- }
+ if (!CollectionUtil.isEmpty(headTitleRows)) {
+ List<List<ReportColumn>> reportHeader = report.getReportHeader();
+ headTitleRows.addAll(reportHeader);
+ report.setReportHeader(headTitleRows);
+ }
+ if (!CollectionUtil.isEmpty(tailTitleRows)) {
+ report.setReportTail(tailTitleRows);
+ }
- // 搴曢儴鏍囬鍖�
- StringBuilder tailTitleHtml = null;
- if (!reportConfigMap.get(3).isEmpty()) {
- tailTitleHtml = dataListReportService.getTitleHtml(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>");
+ return report;
+ }
- 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;
- }
+ /**
+ * 鎶ヨ〃-瑙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);
- /**
- * 鑾峰彇鎶ヨ〃鏁版嵁鍖篽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();
+ // css
+ StringBuilder cssHtml = dataListReportService.getCssHtml();
- StringBuilder dataAreaHtml = new StringBuilder(1024);
- // 鏍囬
- dataAreaHtml.append(getDataAreaTitleHtml(dataAreaFieldConfigMap));
- // 鍐呭
- dataAreaHtml.append(getDataAreaDataHtml(dataAreaFieldConfigMap, recordDte, headAndTailTitleDataMap, headAndTailFieldSet, statisticsMap, totalName));
- return dataAreaHtml.toString();
- }
+ // 鏁版嵁鍖�
+ Map<String, Set<String>> headAndTailTitleDataMap = Maps.newHashMap();
+ String dataAreaHtml = getDataAreaHtml(reportConfigMap, headAndTailTitleDataMap, recordDte, totalName);
- /**
- * 鑾峰彇鏍囬
- *
- * @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;
- }
+ int totalColCount = reportConfigMap.get(0).size();
+ // 澶撮儴鏍囬鍖�
+ StringBuilder headTitleHtml = null;
+ if (!reportConfigMap.get(1).isEmpty()) {
+ headTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head");
+ }
- /**
- * 鑾峰彇鍐呭锛屽寘鍚粺璁�
- *
- * @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);
- }
- }
- });
+ // 搴曢儴鏍囬鍖�
+ StringBuilder tailTitleHtml = null;
+ if (!reportConfigMap.get(3).isEmpty()) {
+ tailTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail");
+ }
- 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);
+ 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>");
- 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);
+ 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;
+ }
- // 鍒嗙粍鍚堝瓧娈靛苟
- 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;
- }
+ /**
+ * 鑾峰彇鎶ヨ〃鏁版嵁鍖篽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();
- // 琛ュ叏鏈熬缁熻
- 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));
- }
- }
- }
+ StringBuilder dataAreaHtml = new StringBuilder(1024);
+ // 鏍囬
+ dataAreaHtml.append(getDataAreaTitleHtml(dataAreaFieldConfigMap));
+ // 鍐呭
+ dataAreaHtml.append(getDataAreaDataHtml(dataAreaFieldConfigMap, recordDte, headAndTailTitleDataMap, headAndTailFieldSet, statisticsMap, totalName));
+ return dataAreaHtml.toString();
+ }
- // 鎬昏
- if (!StringUtils.isEmpty(totalName)) {
- dataAreaDataHtml.append(getDataAreaTotalStatisticsHtml(statisticsMap, dataAreaFieldConfigMap, dataAreaGroupFieldNameList, preFse, dataAreaGroupFieldRecordObj, totalName));
- }
+ 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;
+ }
- String str = dataAreaDataHtml.toString();
- for (Map.Entry<String, String> entry : replaceMap.entrySet()) {
- str = str.replace(entry.getKey(), entry.getValue());
- }
+ private List<ReportColumn> getReportHeader(Map<String, JSONObject> dataAreaFieldConfigMap) {
+ if (CollectionUtil.isEmpty(dataAreaFieldConfigMap)) {
+ return null;
+ }
+ 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);
+ });
+ return reportColumnList;
+ }
- return str;
- }
+ 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);
+ }
+ }
+ });
- /**
- * 娣诲姞鍒嗙粍缁熻淇℃伅
- * @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);
- }
+ 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);
- /**
- * 鑾峰彇缁熻琛岀殑鍏紡璁$畻鍊�
- * @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;
- }
+ combineFlag = true;
- /**
- * 鑾峰彇鏁版嵁鍖哄垎缁勭粺璁″瓧娈电粺璁¤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;
- }
+ 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);
- /**
- * 鑾峰彇鎬昏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();
- }
+ // 鍒嗙粍鍚堝瓧娈靛苟
+ 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);
+ column.setRowspan(NumberUtil.parseInt(paramKey));
+ 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;
+ }
- /**
- * 澶勭悊鍙傛暟鏇挎崲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));
- }
- }
+ // 琛ュ叏鏈熬缁熻
+ 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));
+ }
+ }
+ }
- /**
- * 璁板綍鍒嗙粍瀛楁
- *
- * @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;
- }
- }
+ // 鎬昏
+ if (!StringUtils.isEmpty(totalName)) {
+ reportData.add(getDataAreaTotalStatistics(statisticsMap, dataAreaFieldConfigMap, dataAreaGroupFieldNameList, preFse, dataAreaGroupFieldRecordObj, totalName));
+ }
+ for (Map.Entry<String, String> entry : replaceMap.entrySet()) {
+ reportData.stream().forEach(item -> {
+ item.stream().forEach(column -> {
+ column.replace(entry.getKey(), entry.getValue());
+ });
+ });
+ }
- /**
- * 鑾峰彇鎸囧畾鐨勪笅绾у垎缁勯」
- *
- * @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();
- }
+ 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;
+ }
+
+
+ /**
+ * 鑾峰彇鏍囬
+ *
+ * @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;
+ }
+
+ /**
+ * 鑾峰彇鍐呭锛屽寘鍚粺璁�
+ *
+ * @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);
+ }
+ }
+ });
+
+ 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);
+
+ 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) {
+ 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) {
+ dataAreaDataHtml.append(getDataAreaGroupStatisticsFieldStatisticsRowHtml(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName), statisticsMap, dataAreaFieldConfigMap, tempFieldName, preFse, dataAreaGroupFieldNameList, replaceMap, dataAreaGroupFieldRecordObj));
+ }
+ }
+ }
+
+ // 鎬昏
+ if (!StringUtils.isEmpty(totalName)) {
+ dataAreaDataHtml.append(getDataAreaTotalStatisticsHtml(statisticsMap, dataAreaFieldConfigMap, dataAreaGroupFieldNameList, preFse, dataAreaGroupFieldRecordObj, totalName));
+ }
+
+ String str = dataAreaDataHtml.toString();
+ for (Map.Entry<String, String> entry : replaceMap.entrySet()) {
+ str = str.replace(entry.getKey(), entry.getValue());
+ }
+
+ return str;
+ }
+
+ /**
+ * 娣诲姞鍒嗙粍缁熻淇℃伅
+ *
+ * @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 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 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;
+ }
+
+ /**
+ * 鑾峰彇鎬昏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();
+ }
+
+ /**
+ * 澶勭悊鍙傛暟鏇挎崲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 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();
+ }
}
diff --git a/src/main/java/com/product/server/report/service/DataListReportService.java b/src/main/java/com/product/server/report/service/DataListReportService.java
index f1ce643..ef59fc0 100644
--- a/src/main/java/com/product/server/report/service/DataListReportService.java
+++ b/src/main/java/com/product/server/report/service/DataListReportService.java
@@ -20,6 +20,8 @@
import com.product.core.spring.context.SpringMVCContextHolder;
import com.product.server.report.config.CmnConst;
import com.product.server.report.config.ReportCode;
+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;
@@ -249,6 +251,180 @@
for (Map.Entry<Integer, List<JSONObject>> entry : reportConfigMap.entrySet()) {
RedisUtil.setHash(reportConfigUUID, String.valueOf(entry.getKey()), entry.getValue());
}
+ }
+
+ /**
+ * 鑾峰彇鎶ヨ〃
+ *
+ * @return
+ */
+ public ReportEntity getReportEntity(FieldSetEntity fse) {
+ ReportEntity report = null;
+ String reportConfigUUID = fse.getUUID();
+ if (!StringUtils.isEmpty(fse.getString("~report_config_uuid~"))) {
+ reportConfigUUID = fse.getString("~report_config_uuid~");
+ }
+ DataTableEntity reportConfigDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_CONFIG, new String[]{reportConfigUUID});
+ if (BaseUtil.dataTableIsEmpty(reportConfigDte)) {
+ throw new BaseException(ReportCode.GET_CACHE_FIAL.getValue(), ReportCode.GET_CACHE_FIAL.getText() + ":" + CmnConst.CACHE_REPORT_CONFIG);
+ }
+ FieldSetEntity reportConfigFse = reportConfigDte.getFieldSetEntity(0);
+ if (!"1".equals(reportConfigFse.getString(CmnConst.IS_VALID))) {
+ throw new BaseException(ReportCode.INVALID_REPORT.getValue(), ReportCode.INVALID_REPORT.getText());
+ }
+
+ DataTableEntity reportTypeDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_TYPE, new String[]{reportConfigFse.getString(CmnConst.TYPE_UUID)});
+ if (BaseUtil.dataTableIsEmpty(reportTypeDte)) {
+ throw new BaseException(ReportCode.GET_CACHE_FIAL.getValue(), ReportCode.GET_CACHE_FIAL.getText() + ":" + CmnConst.CACHE_REPORT_TYPE);
+ }
+ FieldSetEntity reportTypeFse = reportTypeDte.getFieldSetEntity(0);
+
+ StringBuilder sort = new StringBuilder(128);
+ // 鑾峰彇鎶ヨ〃缂撳瓨淇℃伅
+ Map<Integer, List<JSONObject>> reportConfigMap = getReportConfig(reportConfigUUID, sort);
+ // 鏍规嵁鍏蜂綋鐨刦unction_uuid鍜宐utton_uuid鑾峰彇瀵瑰簲鐨勮矾鐢憋紝鎷煎噾url
+ String url;
+ JSONObject valueObj;
+ for (Map.Entry<Integer, List<JSONObject>> entry : reportConfigMap.entrySet()) {
+ if (entry.getValue() != null) {
+ for (JSONObject tempValueObj : entry.getValue()) {
+ if (entry.getValue() != null) {
+ for (Map.Entry<String, Object> innerEntry : tempValueObj.entrySet()) {
+ if (innerEntry.getValue() instanceof JSONObject) {
+ valueObj = (JSONObject) innerEntry.getValue();
+ if (!StringUtils.isEmpty(valueObj.getString(CmnConst.SUB_REPORT))) {
+ url = valueObj.getString(CmnConst.SUB_REPORT);
+ if (!StringUtils.isEmpty(valueObj.getString(CmnConst.ATTR_URL_PARAM))) {
+ url += "?" + valueObj.getString(CmnConst.ATTR_URL_PARAM);
+ }
+ valueObj.put(CmnConst.ATTR_URL, url);
+ valueObj.put("~isSubReport~", true);
+ } else {
+ if (!StringUtils.isEmpty(valueObj.getString(CmnConst.FUNCTION_UUID)) && !StringUtils.isEmpty(valueObj.getString(CmnConst.BUTTON_UUID))) {
+ url = routerService.functionSkipByButtonUuid(valueObj.getString(CmnConst.FUNCTION_UUID), valueObj.getString(CmnConst.BUTTON_UUID));
+ if (StringUtils.isEmpty(url)) {
+ valueObj.remove(CmnConst.ATTR_URL);
+ } else {
+ if (!StringUtils.isEmpty(valueObj.getString(CmnConst.ATTR_URL_PARAM))) {
+ url += "?" + valueObj.getString(CmnConst.ATTR_URL_PARAM);
+ }
+ valueObj.put(CmnConst.ATTR_URL, url);
+ }
+ } else {
+ valueObj.remove(CmnConst.ATTR_URL);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ // 鑾峰彇鎶ヨ〃绫诲瀷
+ String reportType = reportTypeFse.getString(CmnConst.TYPE_NAME);
+ // 鑾峰彇鏁版嵁婧�
+ DataTableEntity reportSourceDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_DATASOURCE_CONFIG, new String[]{reportConfigFse.getString(CmnConst.DATASOURCE_UUID)});
+ if (BaseUtil.dataTableIsEmpty(reportSourceDte)) {
+ throw new BaseException(ReportCode.GET_REPORT_DATASOURCE_FIAL.getValue(), ReportCode.GET_REPORT_DATASOURCE_FIAL.getText());
+ }
+ FieldSetEntity reportSourceFse = reportSourceDte.getFieldSetEntity(0);
+ int curPage = fse.getInteger(CmnConst.CPAGE) == null ? 1 : fse.getInteger(CmnConst.CPAGE);
+
+ JSONObject resultObj = new JSONObject();
+ // 棣栨鍔犺浇锛岄粯璁ゆ坊鍔犳潯浠�
+ Map<String, Map<String, String>> outerMap = Maps.newHashMap();
+ if (fse.getBoolean(CmnConst.FIRST_LOAD)) {
+ DataTableEntity allFilterDte = getDefaultSearchFilter(reportSourceFse.getUUID());
+ Map<String, DataTableEntity> subMap = Maps.newHashMap();
+ if (!DataTableEntity.isEmpty(allFilterDte)) {
+ subMap.put("systemFieldMeta", allFilterDte);
+ }
+ DataTableEntity defaultFilterDte = new DataTableEntity();
+
+ FieldSetEntity tempFse;
+
+ Map<String, String> innerMap;
+ for (int i = 0; i < allFilterDte.getRows(); i++) {
+ tempFse = allFilterDte.getFieldSetEntity(i);
+ if (StringUtils.isEmpty(tempFse.getString(CmnConst.LOGICAL_VALUE))) {
+ continue;
+ }
+ defaultFilterDte.addFieldSetEntity(tempFse);
+ innerMap = Maps.newHashMap();
+ innerMap.put(CmnConst.LOGICAL_OPERATOR, tempFse.getString(CmnConst.LOGICAL_OPERATOR));
+ innerMap.put(CmnConst.LOGICAL_VALUE, tempFse.getString(CmnConst.LOGICAL_VALUE));
+ innerMap.put(CmnConst.FIELD_TYPE, tempFse.getString(CmnConst.FIELD_TYPE));
+ outerMap.put(tempFse.getString(CmnConst.FIELD_NAME), innerMap);
+ }
+// resultObj.put("filterInfo", outerMap);
+
+ if (!DataTableEntity.isEmpty(defaultFilterDte)) {
+ subMap.put("systemSeniorQueryString", defaultFilterDte);
+ }
+ fse.setSubData(subMap);
+ }
+
+ DataTableEntity recordDte = getRecordDte(sort, curPage, reportSourceFse, fse, reportConfigFse, null);
+ // 鏄惁娣诲姞鎬诲悎璁�
+ boolean totalStatisticsFlag = "1".equalsIgnoreCase(reportConfigFse.getString(CmnConst.LAST_TOTAL));
+ String totalName = totalStatisticsFlag ? (StringUtils.isEmpty(reportConfigFse.getString(CmnConst.TOTAL_NAME)) ? "鎬昏" : reportConfigFse.getString(CmnConst.TOTAL_NAME)) : "";
+
+// JSONObject checkObj = checkRecordDte(recordDte);
+// if (CmnConst.FALSE.equals(checkObj.getString(CmnConst.RETURN_ATTR_RESULT))) {
+// return checkObj;
+// }
+
+// StringBuilder tableStyle = new StringBuilder(32);
+// String widthType = reportConfigFse.getString(CmnConst.REPORT_WIDTH_TYPE);
+// String width = reportConfigFse.getString(CmnConst.REPORT_WIDTH_VALUE);
+// if (!StringUtils.isEmpty(width)) {
+// if ("1".equals(widthType)) {
+// tableStyle.append(" style=\"width:").append(width).append("%\"");
+// } else if ("0".equals(widthType)) {
+// tableStyle.append(" style=\"width:").append(width).append("px\"");
+// }
+// }
+
+ if (CmnConst.REPORT_TYPE_COMMON.equals(reportType)) {
+ report = commonReportService.getReportEntity(recordDte, totalName, reportConfigMap);
+ //TODO
+ report.setFilterInfo(outerMap);
+ } else if (CmnConst.REPORT_TYPE_GROUP.equals(reportType)) {
+ // 鐗规畩澶勭悊棰濆鏌ヨ鍐呭
+ recordDte.addFieldSetEntity(getRecordDte(sort, curPage, reportSourceFse, fse, reportConfigFse, reportConfigMap));
+// resultObj.putAll(groupReportService.getReport(recordDte, totalName, reportConfigMap, tableStyle));
+ }
+ //TODO
+
+// report.setFilterInfo(outerMap);
+ if (CmnConst.FALSE.equals(resultObj.getString(CmnConst.RETURN_ATTR_RESULT))) {
+ resultObj.put(CmnConst.RETURN_ATTR_RESULT, true);
+ resultObj.put(CmnConst.RETURN_ATTR_MESSAGE, "鑾峰彇鎶ヨ〃澶辫触锛�");
+ } else {
+ // 鍒嗛〉鍙傛暟
+ SQLEntity sqlEntity = recordDte.getSqle();
+ if ("1".equals(reportConfigFse.getString(CmnConst.IS_PAGE)) && sqlEntity != null) {
+ report.setPage(true);
+ report.setTotalPage(sqlEntity.getTotalpage());
+ report.setPageSize(StringUtils.isEmpty(reportConfigFse.getString(CmnConst.PAGE_SIZE)) ? 0 : reportConfigFse.getInteger(CmnConst.PAGE_SIZE));
+ report.setPageIndex(curPage);
+// resultObj.put(CmnConst.IS_PAGE, 1);
+// resultObj.put(CmnConst.CPAGE, curPage);
+// resultObj.put("totalCount", sqlEntity.getTotalCount());
+// resultObj.put("totalpage", sqlEntity.getTotalpage());
+// resultObj.put("pagesize", StringUtils.isEmpty(reportConfigFse.getString(CmnConst.PAGE_SIZE)) ? 0 : reportConfigFse.getInteger(CmnConst.PAGE_SIZE));
+ }
+ }
+// if (!DataTableEntity.isEmpty(recordDte)) {
+// resultObj.put("current_page_count", recordDte.getRows());
+// }
+ report.setSystemFieldMeta(getSearchInfo(reportSourceFse.getUUID()));
+ report.setReportType(reportConfigFse.getString("type_uuid"));
+// resultObj.put("systemFieldMeta", );
+ resultObj.put("report_type", reportConfigFse.getString("type_uuid"));
+// System.out.println(resultObj.getString("html"));
+
+ return report;
}
/**
@@ -1017,6 +1193,74 @@
}
/**
+ * 鎶ヨ〃-瑙f瀽-鑾峰彇澶撮儴鎴栬�呭熬閮ㄦ爣棰楬tml
+ *
+ * @param list 鎶ヨ〃閰嶇疆淇℃伅锛岀紦瀛榣ist
+ * @param totalColCount 鎬诲垪鏁�
+ * @param headAndTailTitleDataMap 澶撮儴銆佸熬閮ㄦ爣棰樺尯鏁版嵁瀛楁map
+ * @param locationType 浣嶇疆绫诲瀷锛宧ead-澶撮儴锛宼ail-灏鹃儴
+ * @return
+ */
+ public List<List<ReportColumn>> getTitle(List<JSONObject> list, int totalColCount, Map<String, Set<String>> headAndTailTitleDataMap, String locationType) {
+ List<List<ReportColumn>> row = new ArrayList<>();
+ StringBuilder html = new StringBuilder(1024);
+ int colspan;
+ int preRow = 0;
+ int preCol = 0;
+ int curRow;
+ int curCol;
+ String value;
+ String style;
+
+ List<ReportColumn> reportColumns = new ArrayList<>();
+ for (JSONObject singleObj : list) {
+ curRow = singleObj.getIntValue(CmnConst.ATTR_Y);
+ curCol = singleObj.getIntValue(CmnConst.ATTR_X);
+ colspan = singleObj.getIntValue(CmnConst.ATTR_COLSPAN);
+ colspan = colspan < 0 ? totalColCount : Math.max(1, colspan);
+ value = replaceFormDataAndSysData(singleObj.getString(CmnConst.ATTR_SHOW_NAME), headAndTailTitleDataMap, singleObj);
+ value = value == null ? "" : value;
+ if ("1".equals(singleObj.getString(CmnConst.ATTR_IS_TITLE))) {
+ style = " class=\"" + CmnConst.CLASS_TR_REPORT_TITLE + "\"";
+ } else {
+ if ("head".equals(locationType)) {
+ style = " class=\"" + CmnConst.CLASS_TR_HEAD + "\"";
+ } else {
+ style = " class=\"" + CmnConst.CLASS_TR_TAIL + "\"";
+ }
+ }
+ if (preRow < curRow) {
+ if (preRow != 0) {
+ row.add(getAimNumTdPlaceholderColumn(totalColCount - preCol, 1));
+ }
+ if (preRow == 0 && preCol == 0 && preCol < curCol - 1) {
+ row.add(getAimNumTdPlaceholderColumn(curCol - preCol - 1, 1));
+ }
+ preCol = curCol;
+ }
+ if (preCol < curCol - 1) {
+ row.add(getAimNumTdPlaceholderColumn(curCol - preCol - 1, 1));
+ }
+ if ("1".equals(singleObj.getString(CmnConst.ATTR_IS_TITLE))) {
+ colspan = totalColCount;
+ }
+ ReportColumn column = new ReportColumn();
+ column.setColspan(colspan);
+ column.setContent(value);
+ reportColumns.add(column);
+ preRow = curRow;
+ preCol = curCol + singleObj.getIntValue(CmnConst.ATTR_COLSPAN) - 1;
+ if ("1".equals(singleObj.getString(CmnConst.ATTR_IS_TITLE))) {
+ preCol = totalColCount;
+ }
+ }
+ row.add(reportColumns);
+ reportColumns.addAll(getAimNumTdPlaceholderColumn(totalColCount - preCol, 1));
+// row.add();
+ return row;
+ }
+
+ /**
* 鑾峰彇鎸囧畾鏁版嵁闆嗕腑鍖呭惈鐨勬暟鎹尯瀛楁闆嗗悎
*
* @param list 鎸囧畾鏁版嵁闆嗗悎
@@ -1500,6 +1744,30 @@
* @param num
* @return
*/
+ public List<ReportColumn> getAimNumTdPlaceholderColumn(int num, int type) {
+ List<ReportColumn> columns = new ArrayList<>();
+ if (num <= 0) {
+ return columns;
+ }
+ if (type == 0) {
+ for (int i = 0; i < num; i++) {
+ columns.add(new ReportColumn());
+ }
+ } else {
+
+ ReportColumn column = new ReportColumn();
+ column.setColspan(num);
+ columns.add(column);
+ }
+ return columns;
+ }
+
+ /**
+ * 鑾峰彇鎸囧畾涓暟鐨則d鍗犱綅
+ *
+ * @param num
+ * @return
+ */
public String getAimNumTdPlaceholder(int num, int type) {
StringBuilder result = new StringBuilder(64);
if (num <= 0) {
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 93b677d..59fa0b1 100644
--- a/src/main/java/com/product/server/report/service/GroupReportService.java
+++ b/src/main/java/com/product/server/report/service/GroupReportService.java
@@ -10,6 +10,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;
@@ -25,993 +26,1374 @@
*/
@Component
public class GroupReportService extends AbstractBaseService {
- @Autowired
- private DataListReportService dataListReportService;
+ @Autowired
+ private DataListReportService dataListReportService;
- /**
- * 鎶ヨ〃-瑙f瀽
- * @param recordDte 涓氬姟鏁版嵁dte
- * @param totalName 鎬昏鍚嶇О
- * @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);
+ /**
+ * 鎶ヨ〃-瑙f瀽
+ *
+ * @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);
- // css
- StringBuilder cssHtml = dataListReportService.getCssHtml();
+ // css
+// StringBuilder cssHtml = dataListReportService.getCssHtml();
- // 鍒嗙粍琛ㄥご鍖哄拰鏁版嵁鍖�
- StringBuilder groupAndDataAreaHtml = new StringBuilder(1024);
- Map<String, Set<String>> headAndTailTitleDataMap = Maps.newHashMap();
- int totalColCount = reportConfigMap.get(0).size();
- int dataAreaColCount = getGroupAndDataAreaHtmlAndReturnDataAreaColCount(groupAndDataAreaHtml, reportConfigMap, headAndTailTitleDataMap, recordDte, totalName);
- totalColCount = Math.max(totalColCount, dataAreaColCount);
+ // 鍒嗙粍琛ㄥご鍖哄拰鏁版嵁鍖�
+ StringBuilder groupAndDataAreaHtml = new StringBuilder(1024);
+ Map<String, Set<String>> headAndTailTitleDataMap = Maps.newHashMap();
+ int totalColCount = reportConfigMap.get(0).size();
+ int dataAreaColCount = getGroupAndDataAreaHtmlAndReturnDataAreaColCount(groupAndDataAreaHtml, reportConfigMap, headAndTailTitleDataMap, recordDte, totalName);
+ totalColCount = Math.max(totalColCount, dataAreaColCount);
- // 澶撮儴鏍囬鍖�
- StringBuilder headTitleHtml = null;
- if (!reportConfigMap.get(1).isEmpty()) {
- headTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head");
- }
+ // 澶撮儴鏍囬鍖�
+ StringBuilder headTitleHtml = null;
+ if (!reportConfigMap.get(1).isEmpty()) {
+ headTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head");
+ }
- // 搴曢儴鏍囬鍖�
- StringBuilder tailTitleHtml = null;
- if (!reportConfigMap.get(3).isEmpty()) {
- tailTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail");
- }
+ // 搴曢儴鏍囬鍖�
+ StringBuilder tailTitleHtml = null;
+ if (!reportConfigMap.get(3).isEmpty()) {
+ tailTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail");
+ }
- reportHtml.append("\n<body>\n<table").append(tableStyle).append(">")
- .append(cssHtml)
- .append(headTitleHtml == null ? "" : headTitleHtml)
- .append(groupAndDataAreaHtml)
- .append(tailTitleHtml == null ? "" : tailTitleHtml)
- .append("\n</table>\n</body>");
+// reportHtml.append("\n<body>\n<table").append(tableStyle).append(">")
+// .append(cssHtml)
+// .append(headTitleHtml == null ? "" : headTitleHtml)
+// .append(groupAndDataAreaHtml)
+// .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;
- }
+ 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;
+ }
- /**
- * 鎶ヨ〃-瑙f瀽-鏀惧叆鍒嗙粍琛ㄥご鍖哄拰鏁版嵁Html锛岃繑鍥炲垪鏁�
- * @param groupAndDataAreaHtml html瀹瑰櫒
- * @param reportConfigMap 鎶ヨ〃缂撳瓨鏁版嵁map
- * @param headAndTailTitleDataMap 澶撮儴銆佸熬閮ㄦ爣棰樺尯鏁版嵁瀛楁map瀹瑰櫒
- * @param recordDte 鏁版嵁婧愰泦鍚�
- * @param totalName 鎬昏鍚嶇О
- * @return 鏁版嵁鍖烘�诲垪鏁�
- */
- private int getGroupAndDataAreaHtmlAndReturnDataAreaColCount(StringBuilder groupAndDataAreaHtml, 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
- Map<String, JSONObject> dataAreaFieldConfigMap = dataListReportService.groupAndDataJSONObject2Map(reportConfigMap.get(0));
+ /**
+ * 鎶ヨ〃-瑙f瀽
+ *
+ * @param recordDte 涓氬姟鏁版嵁dte
+ * @param totalName 鎬昏鍚嶇О
+ * @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);
- // 鍒嗙粍琛ㄥご鍖哄垎缁勭粺璁″瓧娈靛悕绉發ist
- List<String> groupAreaGroupStatisticsFieldNameList = Lists.newArrayList();
- // 鍒嗙粍琛ㄥご鍖哄垎缁勫瓧娈靛悕绉發ist
- List<String> groupAreaGroupFieldNameList = Lists.newArrayList();
- // 鍒嗙粍琛ㄥご鍖哄尯鍩熻寖鍥磑bj
- JSONObject groupAreaRangeObj = new JSONObject();
- groupAreaFieldConfigMap.forEach((fieldName, fieldConfigObj) -> {
- groupAreaGroupFieldNameList.add(fieldName);
- if ("1".equals(fieldConfigObj.getString(CmnConst.ATTR_IS_STATISTICS))) {
- groupAreaGroupStatisticsFieldNameList.add(fieldName);
- }
- if (groupAreaRangeObj.getIntValue(CmnConst.MIN_X) == 0) {
- groupAreaRangeObj.put(CmnConst.MIN_X, fieldConfigObj.getIntValue(CmnConst.ATTR_X));
- } else {
- groupAreaRangeObj.put(CmnConst.MIN_X, Math.min(groupAreaRangeObj.getIntValue(CmnConst.MIN_X), fieldConfigObj.getIntValue(CmnConst.ATTR_X)));
- }
- groupAreaRangeObj.put(CmnConst.MAX_X, Math.max(groupAreaRangeObj.getIntValue(CmnConst.MAX_X), fieldConfigObj.getIntValue(CmnConst.ATTR_X) + Math.max(1, fieldConfigObj.getIntValue(CmnConst.ATTR_COLSPAN)) - 1));
- groupAreaRangeObj.put(CmnConst.MAX_Y, Math.max(groupAreaRangeObj.getIntValue(CmnConst.MAX_Y), fieldConfigObj.getIntValue(CmnConst.ATTR_Y) + Math.max(1, fieldConfigObj.getIntValue(CmnConst.ATTR_ROWSPAN)) - 1));
- });
+ // css
+ StringBuilder cssHtml = dataListReportService.getCssHtml();
- // 鏁版嵁鍖哄垎缁勭粺璁″瓧娈靛悕绉發ist
- List<String> dataAreaGroupStatisticsFieldNameList = Lists.newArrayList();
- // 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist
- List<String> dataAreaGroupFieldNameList = Lists.newArrayList();
- // 鏁版嵁鍖虹壒娈婄粺璁″瓧娈靛悕绉發ist-鍒嗙粍琛ㄥご鍖轰笅缁熻瀛楁
- List<String> dataAreaSpStatisticsFieldNameList = Lists.newArrayList();
- // 鏁版嵁鍖烘櫘閫氱粺璁″瓧娈靛悕绉發ist-闈炴暟鎹尯鍒嗙粍瀛楁锛岄潪鍒嗙粍琛ㄥご鍖轰笅缁熻瀛楁
- List<String> dataAreaCommonStatisticsFieldNameList = Lists.newArrayList();
- dataAreaFieldConfigMap.forEach((fieldName, fieldConfigObj) -> {
- if ("1".equals(fieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) {
- dataAreaGroupFieldNameList.add(fieldName);
- if ("1".equals(fieldConfigObj.getString(CmnConst.ATTR_IS_STATISTICS))) {
- dataAreaGroupStatisticsFieldNameList.add(fieldName);
- }
- } else {
- if (fieldConfigObj.getIntValue(CmnConst.ATTR_X) < groupAreaRangeObj.getIntValue(CmnConst.MIN_X) || fieldConfigObj.getIntValue(CmnConst.ATTR_X) > groupAreaRangeObj.getIntValue(CmnConst.MAX_X)) {
- dataAreaCommonStatisticsFieldNameList.add(fieldName);
- } else {
- dataAreaSpStatisticsFieldNameList.add(fieldName);
- }
- }
- });
+ // 鍒嗙粍琛ㄥご鍖哄拰鏁版嵁鍖�
+ StringBuilder groupAndDataAreaHtml = new StringBuilder(1024);
+ Map<String, Set<String>> headAndTailTitleDataMap = Maps.newHashMap();
+ int totalColCount = reportConfigMap.get(0).size();
+ int dataAreaColCount = getGroupAndDataAreaHtmlAndReturnDataAreaColCount(groupAndDataAreaHtml, reportConfigMap, headAndTailTitleDataMap, recordDte, totalName);
+ totalColCount = Math.max(totalColCount, dataAreaColCount);
- // 鑾峰彇鍒嗙粍琛ㄥご缁熻瀛楁瀵瑰簲鐨勬暟鎹尯瀛楁map
- Map<String, List<String>> groupAreaStatisticsField2DataAreaFieldMap = getGroupAreaStatisticsField2DataAreaFieldMap(groupAreaFieldConfigMap, dataAreaFieldConfigMap);
- // 鑾峰彇鍒嗙粍琛ㄥご鍖烘湯琛屽垎缁勫瓧娈靛搴旀暟鎹尯瀛楁map
- Map<String, List<String>> groupAreaLastStageField2DataAreaFieldMap = getGroupAreaLastStageField2DataAreaFieldMap(groupAreaFieldConfigMap, dataAreaFieldConfigMap, groupAreaRangeObj);
+ // 澶撮儴鏍囬鍖�
+ StringBuilder headTitleHtml = null;
+ if (!reportConfigMap.get(1).isEmpty()) {
+ headTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head");
+ }
- // 鑾峰彇鎸囧畾鏁版嵁闆嗕腑鍖呭惈鐨勬暟鎹尯瀛楁闆嗗悎
- Set<String> headAndTailFieldSet = Sets.newHashSet();
- headAndTailFieldSet.addAll(dataListReportService.getDataFields(reportConfigMap.get(1)));
- headAndTailFieldSet.addAll(dataListReportService.getDataFields(reportConfigMap.get(3)));
+ // 搴曢儴鏍囬鍖�
+ StringBuilder tailTitleHtml = null;
+ if (!reportConfigMap.get(3).isEmpty()) {
+ tailTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail");
+ }
- // 缁熻map
- Map<JSONObject, JSONObject> statisticsMap = Maps.newLinkedHashMap();
- // 鍒嗙粍琛ㄥご鍖烘暟鎹畂bj
- JSONObject groupAreaFieldRecordObj = new JSONObject(Maps.newTreeMap((o1, o2) -> dataListReportService.compare(o1, o2)));
- // 鏁版嵁鍖哄垎缁勫瓧娈祇bj
- JSONObject dataAreaFieldRecordObj = new JSONObject(Maps.newLinkedHashMap());
+ reportHtml.append("\n<body>\n<table").append(tableStyle).append(">")
+ .append(cssHtml)
+ .append(headTitleHtml == null ? "" : headTitleHtml)
+ .append(groupAndDataAreaHtml)
+ .append(tailTitleHtml == null ? "" : tailTitleHtml)
+ .append("\n</table>\n</body>");
- FieldSetEntity recordFse;
- for (int i = 0;i < recordDte.getRows();i++) {
- recordFse = recordDte.getFieldSetEntity(i);
+ 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;
+ }
- // 鑾峰彇澶撮儴銆佸熬閮ㄦ爣棰樺尯鏁版嵁瀛楁
- dataListReportService.getHeadAndTailTitleDataMap(headAndTailTitleDataMap, headAndTailFieldSet, recordFse);
+ /**
+ * 鎶ヨ〃-瑙f瀽-鏀惧叆鍒嗙粍琛ㄥご鍖哄拰鏁版嵁Html锛岃繑鍥炲垪鏁�
+ *
+ * @param groupAndDataAreaHtml html瀹瑰櫒
+ * @param reportConfigMap 鎶ヨ〃缂撳瓨鏁版嵁map
+ * @param headAndTailTitleDataMap 澶撮儴銆佸熬閮ㄦ爣棰樺尯鏁版嵁瀛楁map瀹瑰櫒
+ * @param recordDte 鏁版嵁婧愰泦鍚�
+ * @param totalName 鎬昏鍚嶇О
+ * @return 鏁版嵁鍖烘�诲垪鏁�
+ */
+ private int getGroupAndDataAreaHtmlAndReturnDataAreaColCount(StringBuilder groupAndDataAreaHtml, 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
+ Map<String, JSONObject> dataAreaFieldConfigMap = dataListReportService.groupAndDataJSONObject2Map(reportConfigMap.get(0));
- // 鑾峰彇鍒嗙粍琛ㄥご鍖烘暟鎹畂bj
- getGroupAreaFieldRecordObj(groupAreaFieldRecordObj, groupAreaFieldConfigMap, recordFse, groupAreaStatisticsField2DataAreaFieldMap, groupAreaLastStageField2DataAreaFieldMap);
+ // 鍒嗙粍琛ㄥご鍖哄垎缁勭粺璁″瓧娈靛悕绉發ist
+ List<String> groupAreaGroupStatisticsFieldNameList = Lists.newArrayList();
+ // 鍒嗙粍琛ㄥご鍖哄垎缁勫瓧娈靛悕绉發ist
+ List<String> groupAreaGroupFieldNameList = Lists.newArrayList();
+ // 鍒嗙粍琛ㄥご鍖哄尯鍩熻寖鍥磑bj
+ JSONObject groupAreaRangeObj = new JSONObject();
+ groupAreaFieldConfigMap.forEach((fieldName, fieldConfigObj) -> {
+ groupAreaGroupFieldNameList.add(fieldName);
+ if ("1".equals(fieldConfigObj.getString(CmnConst.ATTR_IS_STATISTICS))) {
+ groupAreaGroupStatisticsFieldNameList.add(fieldName);
+ }
+ if (groupAreaRangeObj.getIntValue(CmnConst.MIN_X) == 0) {
+ groupAreaRangeObj.put(CmnConst.MIN_X, fieldConfigObj.getIntValue(CmnConst.ATTR_X));
+ } else {
+ groupAreaRangeObj.put(CmnConst.MIN_X, Math.min(groupAreaRangeObj.getIntValue(CmnConst.MIN_X), fieldConfigObj.getIntValue(CmnConst.ATTR_X)));
+ }
+ groupAreaRangeObj.put(CmnConst.MAX_X, Math.max(groupAreaRangeObj.getIntValue(CmnConst.MAX_X), fieldConfigObj.getIntValue(CmnConst.ATTR_X) + Math.max(1, fieldConfigObj.getIntValue(CmnConst.ATTR_COLSPAN)) - 1));
+ groupAreaRangeObj.put(CmnConst.MAX_Y, Math.max(groupAreaRangeObj.getIntValue(CmnConst.MAX_Y), fieldConfigObj.getIntValue(CmnConst.ATTR_Y) + Math.max(1, fieldConfigObj.getIntValue(CmnConst.ATTR_ROWSPAN)) - 1));
+ });
- // 鑾峰彇鏁版嵁鍖哄垎缁勫瓧娈祇bj
- getDataAreaGroupFieldRecordObj(dataAreaFieldRecordObj, dataAreaFieldConfigMap, recordFse);
+ // 鏁版嵁鍖哄垎缁勭粺璁″瓧娈靛悕绉發ist
+ List<String> dataAreaGroupStatisticsFieldNameList = Lists.newArrayList();
+ // 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist
+ List<String> dataAreaGroupFieldNameList = Lists.newArrayList();
+ // 鏁版嵁鍖虹壒娈婄粺璁″瓧娈靛悕绉發ist-鍒嗙粍琛ㄥご鍖轰笅缁熻瀛楁
+ List<String> dataAreaSpStatisticsFieldNameList = Lists.newArrayList();
+ // 鏁版嵁鍖烘櫘閫氱粺璁″瓧娈靛悕绉發ist-闈炴暟鎹尯鍒嗙粍瀛楁锛岄潪鍒嗙粍琛ㄥご鍖轰笅缁熻瀛楁
+ List<String> dataAreaCommonStatisticsFieldNameList = Lists.newArrayList();
+ dataAreaFieldConfigMap.forEach((fieldName, fieldConfigObj) -> {
+ if ("1".equals(fieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) {
+ dataAreaGroupFieldNameList.add(fieldName);
+ if ("1".equals(fieldConfigObj.getString(CmnConst.ATTR_IS_STATISTICS))) {
+ dataAreaGroupStatisticsFieldNameList.add(fieldName);
+ }
+ } else {
+ if (fieldConfigObj.getIntValue(CmnConst.ATTR_X) < groupAreaRangeObj.getIntValue(CmnConst.MIN_X) || fieldConfigObj.getIntValue(CmnConst.ATTR_X) > groupAreaRangeObj.getIntValue(CmnConst.MAX_X)) {
+ dataAreaCommonStatisticsFieldNameList.add(fieldName);
+ } else {
+ dataAreaSpStatisticsFieldNameList.add(fieldName);
+ }
+ }
+ });
- // 鑾峰彇鏁版嵁鍖虹壒娈婂瓧娈电殑缁熻
- statisticsDataAreaSpField(statisticsMap, dataAreaFieldConfigMap, dataAreaSpStatisticsFieldNameList, recordFse);
+ // 鑾峰彇鍒嗙粍琛ㄥご缁熻瀛楁瀵瑰簲鐨勬暟鎹尯瀛楁map
+ Map<String, List<String>> groupAreaStatisticsField2DataAreaFieldMap = getGroupAreaStatisticsField2DataAreaFieldMap(groupAreaFieldConfigMap, dataAreaFieldConfigMap);
+ // 鑾峰彇鍒嗙粍琛ㄥご鍖烘湯琛屽垎缁勫瓧娈靛搴旀暟鎹尯瀛楁map
+ Map<String, List<String>> groupAreaLastStageField2DataAreaFieldMap = getGroupAreaLastStageField2DataAreaFieldMap(groupAreaFieldConfigMap, dataAreaFieldConfigMap, groupAreaRangeObj);
- // 鑾峰彇鏁版嵁鍖烘櫘閫氬瓧娈电殑缁熻
- statisticsDataAreaCommonField(statisticsMap, dataAreaFieldConfigMap, dataAreaCommonStatisticsFieldNameList, recordFse);
- }
+ // 鑾峰彇鎸囧畾鏁版嵁闆嗕腑鍖呭惈鐨勬暟鎹尯瀛楁闆嗗悎
+ Set<String> headAndTailFieldSet = Sets.newHashSet();
+ headAndTailFieldSet.addAll(dataListReportService.getDataFields(reportConfigMap.get(1)));
+ headAndTailFieldSet.addAll(dataListReportService.getDataFields(reportConfigMap.get(3)));
- // 鑾峰彇鍒嗙粍琛ㄥご鍖哄拰鏁版嵁鍖烘�诲垪鏁�
- int totalColCount = getTotalColCount(groupAreaFieldRecordObj, dataAreaGroupFieldNameList.size(), dataAreaCommonStatisticsFieldNameList.size());
+ // 缁熻map
+ Map<JSONObject, JSONObject> statisticsMap = Maps.newLinkedHashMap();
+ // 鍒嗙粍琛ㄥご鍖烘暟鎹畂bj
+ JSONObject groupAreaFieldRecordObj = new JSONObject(Maps.newTreeMap((o1, o2) -> dataListReportService.compare(o1, o2)));
+ // 鏁版嵁鍖哄垎缁勫瓧娈祇bj
+ JSONObject dataAreaFieldRecordObj = new JSONObject(Maps.newLinkedHashMap());
- // 鏁版嵁鏍囬list
- List<JSONObject> dataTitleList = Lists.newArrayList();
- // 鑾峰彇鏍囬html
- groupAndDataAreaHtml.append(getDataAreaTitleHtml(dataTitleList, groupAreaFieldRecordObj, dataAreaFieldConfigMap, groupAreaRangeObj, dataAreaCommonStatisticsFieldNameList));
- // 鑾峰彇鍐呭html
- groupAndDataAreaHtml.append(getDataAreaDataHtml(dataTitleList, dataAreaFieldRecordObj, statisticsMap, totalName, dataAreaGroupFieldNameList, dataAreaFieldConfigMap));
+ FieldSetEntity recordFse;
+ for (int i = 0; i < recordDte.getRows(); i++) {
+ recordFse = recordDte.getFieldSetEntity(i);
- return totalColCount;
- }
+ // 鑾峰彇澶撮儴銆佸熬閮ㄦ爣棰樺尯鏁版嵁瀛楁
+ dataListReportService.getHeadAndTailTitleDataMap(headAndTailTitleDataMap, headAndTailFieldSet, recordFse);
- /**
- * 鑾峰彇鍒嗙粍琛ㄥご缁熻瀛楁瀵瑰簲鐨勬暟鎹尯瀛楁map
- * @param groupAreaFieldConfigMap 鍒嗙粍琛ㄥご鍖哄瓧娈电紦瀛榤ap
- * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
- * @return 鍒嗙粍琛ㄥご缁熻瀛楁瀵瑰簲鐨勬暟鎹尯瀛楁map
- */
- private Map<String,List<String>> getGroupAreaStatisticsField2DataAreaFieldMap(Map<String, JSONObject> groupAreaFieldConfigMap, Map<String, JSONObject> dataAreaFieldConfigMap) {
- Map<String, List<String>> resultMap = Maps.newLinkedHashMap();
- String groupAreaFieldName;
- JSONObject groupAreaFieldConfigObj;
- JSONObject dataAreaFieldConfigObj;
- for (Map.Entry<String, JSONObject> groupAreaFieldConfigEntry : groupAreaFieldConfigMap.entrySet()) {
- groupAreaFieldConfigObj = groupAreaFieldConfigEntry.getValue();
- if (!"1".equals(groupAreaFieldConfigObj.getString(CmnConst.ATTR_IS_STATISTICS))) {
- continue;
- }
- groupAreaFieldName = groupAreaFieldConfigEntry.getKey();
- for (Map.Entry<String, JSONObject> dataAreaFieldConfigEntry : dataAreaFieldConfigMap.entrySet()) {
- dataAreaFieldConfigObj = dataAreaFieldConfigEntry.getValue();
- if (dataListReportService.transfer2List(dataAreaFieldConfigObj.get(CmnConst.ATTR_GROUP_AREA_GROUP_FIELD)).contains(groupAreaFieldName)) {
- resultMap.computeIfAbsent(groupAreaFieldName, k -> Lists.newArrayList()).add(dataAreaFieldConfigEntry.getKey());
- }
- }
- }
- return resultMap;
- }
+ // 鑾峰彇鍒嗙粍琛ㄥご鍖烘暟鎹畂bj
+ getGroupAreaFieldRecordObj(groupAreaFieldRecordObj, groupAreaFieldConfigMap, recordFse, groupAreaStatisticsField2DataAreaFieldMap, groupAreaLastStageField2DataAreaFieldMap);
- /**
- * 鑾峰彇鍒嗙粍琛ㄥご鍖烘湯琛屽垎缁勫瓧娈靛搴旀暟鎹尯瀛楁map
- * @param groupAreaFieldConfigMap 鍒嗙粍琛ㄥご鍖哄瓧娈电紦瀛榤ap
- * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
- * @param groupAreaRangeObj 鍒嗙粍琛ㄥご鍖鸿寖鍥磑bj
- * @return 鍒嗙粍琛ㄥご鍖烘湯琛屽垎缁勫瓧娈靛搴旀暟鎹尯瀛楁map
- */
- private Map<String,List<String>> getGroupAreaLastStageField2DataAreaFieldMap(Map<String, JSONObject> groupAreaFieldConfigMap, Map<String, JSONObject> dataAreaFieldConfigMap, JSONObject groupAreaRangeObj) {
- Map<String, List<String>> resultMap = Maps.newLinkedHashMap();
- String groupFieldName;
- JSONObject groupAreaFieldConfigObj;
- JSONObject dataAreaFieldConfigObj;
- for (Map.Entry<String, JSONObject> groupAreaFieldConfigEntry : groupAreaFieldConfigMap.entrySet()) {
- groupAreaFieldConfigObj = groupAreaFieldConfigEntry.getValue();
- if (groupAreaFieldConfigObj.getIntValue(CmnConst.ATTR_Y) + Math.max(1, groupAreaFieldConfigObj.getIntValue(CmnConst.ATTR_ROWSPAN)) - 1 < groupAreaRangeObj.getIntValue(CmnConst.MAX_Y)) {
- continue;
- }
- groupFieldName = groupAreaFieldConfigEntry.getKey();
- for (Map.Entry<String, JSONObject> dataAreaFieldConfigEntry : dataAreaFieldConfigMap.entrySet()) {
- dataAreaFieldConfigObj = dataAreaFieldConfigEntry.getValue();
- if (dataListReportService.transfer2List(dataAreaFieldConfigObj.get(CmnConst.ATTR_GROUP_AREA_GROUP_FIELD)).contains(groupFieldName)) {
- resultMap.computeIfAbsent(groupFieldName, k -> Lists.newArrayList()).add(dataAreaFieldConfigEntry.getKey());
- }
- }
+ // 鑾峰彇鏁版嵁鍖哄垎缁勫瓧娈祇bj
+ getDataAreaGroupFieldRecordObj(dataAreaFieldRecordObj, dataAreaFieldConfigMap, recordFse);
- }
- return resultMap;
- }
+ // 鑾峰彇鏁版嵁鍖虹壒娈婂瓧娈电殑缁熻
+ statisticsDataAreaSpField(statisticsMap, dataAreaFieldConfigMap, dataAreaSpStatisticsFieldNameList, recordFse);
- /**
- * 鑾峰彇鏍囬-鍒嗙粍琛ㄥご鍖烘暟鎹畂bj
- * @param groupAreaFieldRecordObj 鍒嗙粍琛ㄥご鍖哄瓧娈佃褰昽bj
- * @param groupAreaFieldConfigMap 鍒嗙粍琛ㄥご鍖哄瓧娈电紦瀛榤ap
- * @param recordFse 涓氬姟鏁版嵁璁板綍
- * @param groupAreaStatisticsField2DataAreaFieldMap 鍒嗙粍琛ㄥご鍖虹粺璁″瓧娈靛搴旀暟鎹尯瀛楁map
- * @param groupAreaLastStageField2DataAreaFieldMap 鍒嗙粍琛ㄥご鍖烘湯绾у瓧娈靛搴旀暟鎹尯瀛楁map
- */
- private void getGroupAreaFieldRecordObj(JSONObject groupAreaFieldRecordObj, Map<String, JSONObject> groupAreaFieldConfigMap, FieldSetEntity recordFse,
- Map<String, List<String>> groupAreaStatisticsField2DataAreaFieldMap, Map<String, List<String>> groupAreaLastStageField2DataAreaFieldMap) {
- JSONObject parentObj = groupAreaFieldRecordObj;
- JSONObject subObj;
- String value;
- List<String> list;
- String groupAreaGroupFieldName;
- int i = 0;
- List<String> statisticsFieldList;
- String realValue;
- for (Map.Entry<String, JSONObject> entry : groupAreaFieldConfigMap.entrySet()) {
- list = Lists.newArrayList();
- list.addAll(dataListReportService.transfer2List(entry.getValue().get(CmnConst.ATTR_GROUP_AREA_GROUP_FIELD)));
- list.add(entry.getKey());
- for (;i < list.size();i++) {
- groupAreaGroupFieldName = list.get(i);
- realValue = dataListReportService.getRealValue(recordFse, groupAreaGroupFieldName);
- value = recordFse.getString(groupAreaGroupFieldName);
+ // 鑾峰彇鏁版嵁鍖烘櫘閫氬瓧娈电殑缁熻
+ statisticsDataAreaCommonField(statisticsMap, dataAreaFieldConfigMap, dataAreaCommonStatisticsFieldNameList, recordFse);
+ }
- if (parentObj.get(value) == null) {
- subObj = new JSONObject(Maps.newTreeMap((o1, o2) -> dataListReportService.compare(o1, o2)));
- parentObj.put(value, subObj);
- // 娣诲姞鍒嗙粍琛ㄥご鍖哄垎缁勭粺璁″瓧娈靛搴旀暟鎹尯瀛楁
- if (groupAreaStatisticsField2DataAreaFieldMap.containsKey(groupAreaGroupFieldName)) {
- parentObj.put(value + CmnConst.STATISTICS_NAME, groupAreaStatisticsField2DataAreaFieldMap.get(groupAreaGroupFieldName));
- statisticsFieldList = dataListReportService.transfer2List(parentObj.get(CmnConst.ATTR_STATISTICS_FIELD));
- if (statisticsFieldList.isEmpty()) {
- parentObj.put(CmnConst.ATTR_STATISTICS_FIELD, statisticsFieldList);
- }
- if (!statisticsFieldList.contains(value + CmnConst.STATISTICS_NAME)) {
- statisticsFieldList.add(value + CmnConst.STATISTICS_NAME);
- }
- }
- // 娣诲姞鍒嗙粍琛ㄥご鍖烘湯绾у瓧娈靛搴旀暟鎹尯瀛楁
- if (groupAreaLastStageField2DataAreaFieldMap.containsKey(groupAreaGroupFieldName)) {
- parentObj.put(value, groupAreaLastStageField2DataAreaFieldMap.get(groupAreaGroupFieldName));
- }
- // 娣诲姞field_info
- if (StringUtils.isEmpty(parentObj.getString(CmnConst.ATTR_FIELD_INFO))) {
- parentObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(groupAreaGroupFieldName));
- }
- if (!StringUtils.isEmpty(realValue)) {
- subObj.put(CmnConst.ATTR_REAL_VALUE, realValue);
- }
- } else {
- if (!(parentObj.get(value) instanceof JSONObject)) {
- continue;
- }
- subObj = parentObj.getJSONObject(value);
- }
- parentObj = subObj;
- }
- }
- }
+ // 鑾峰彇鍒嗙粍琛ㄥご鍖哄拰鏁版嵁鍖烘�诲垪鏁�
+ int totalColCount = getTotalColCount(groupAreaFieldRecordObj, dataAreaGroupFieldNameList.size(), dataAreaCommonStatisticsFieldNameList.size());
- /**
- * 鑾峰彇鏁版嵁鍖哄垎缁勫瓧娈祇bj
- * @param dataAreaFieldRecordObj 鏁版嵁鍖哄瓧娈佃褰昽bj
- * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
- * @param recordFse 涓氬姟鏁版嵁璁板綍
- */
- private void getDataAreaGroupFieldRecordObj(JSONObject dataAreaFieldRecordObj, Map<String, JSONObject> dataAreaFieldConfigMap, FieldSetEntity recordFse) {
- JSONObject parentObj = dataAreaFieldRecordObj;
- JSONObject subObj;
- String value;
- List<String> list;
- String groupAreaGroupFieldName;
- int i = 0;
- String dataAreaFieldName;
- JSONObject dataAreaFieldConfigObj;
- List<String> statisticsFieldList;
- String realValue;
- for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) {
- dataAreaFieldConfigObj = entry.getValue();
- if (!"1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) {
- break;
- }
- dataAreaFieldName = entry.getKey();
- realValue = dataListReportService.getRealValue(recordFse, dataAreaFieldName);
- list = Lists.newArrayList();
- list.addAll(dataListReportService.transfer2List(dataAreaFieldConfigObj.get(CmnConst.ATTR_DATA_AREA_GROUP_FIELD)));
- list.add(dataAreaFieldName);
- for (;i < list.size();i++) {
- groupAreaGroupFieldName = list.get(i);
- value = recordFse.getString(groupAreaGroupFieldName);
- subObj = parentObj.getJSONObject(value);
- if (subObj == null) {
- subObj = new JSONObject(Maps.newLinkedHashMap());
- parentObj.put(value, subObj);
- }
- // 娣诲姞鏁版嵁鍖哄垎缁勭粺璁″瓧娈�
- if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_STATISTICS))) {
- parentObj.put(value + CmnConst.STATISTICS_NAME, new JSONObject());
- statisticsFieldList = dataListReportService.transfer2List(parentObj.get(CmnConst.ATTR_STATISTICS_FIELD));
- if (statisticsFieldList.isEmpty()) {
- parentObj.put(CmnConst.ATTR_STATISTICS_FIELD, statisticsFieldList);
- }
- if (!statisticsFieldList.contains(value + CmnConst.STATISTICS_NAME)) {
- statisticsFieldList.add(value + CmnConst.STATISTICS_NAME);
- }
- }
- // 娣诲姞field_info
- if (StringUtils.isEmpty(parentObj.getString(CmnConst.ATTR_FIELD_INFO))) {
- parentObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(groupAreaGroupFieldName));
- }
- if (!StringUtils.isEmpty(realValue)) {
- subObj.put(CmnConst.ATTR_REAL_VALUE, realValue);
- }
- parentObj = subObj;
- }
- }
- }
+ // 鏁版嵁鏍囬list
+ List<JSONObject> dataTitleList = Lists.newArrayList();
+ // 鑾峰彇鏍囬html
+ groupAndDataAreaHtml.append(getDataAreaTitleHtml(dataTitleList, groupAreaFieldRecordObj, dataAreaFieldConfigMap, groupAreaRangeObj, dataAreaCommonStatisticsFieldNameList));
+ // 鑾峰彇鍐呭html
+ groupAndDataAreaHtml.append(getDataAreaDataHtml(dataTitleList, dataAreaFieldRecordObj, statisticsMap, totalName, dataAreaGroupFieldNameList, dataAreaFieldConfigMap));
- /**
- * 鑾峰彇鏁版嵁鍖虹壒娈婂瓧娈电殑缁熻
- * @param statisticsMap 缁熻map
- * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
- * @param dataAreaSpStatisticsFieldNameList 鏁版嵁鍖虹壒娈婄粺璁″瓧娈靛悕绉發ist锛堝垎缁勮〃澶村尯涓嬬粺璁″瓧娈碉級
- * @param recordFse 涓氬姟鏁版嵁璁板綍
- */
- private void statisticsDataAreaSpField(Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, List<String> dataAreaSpStatisticsFieldNameList, FieldSetEntity recordFse) {
- JSONObject dataAreaFieldConfigObj;
- List<String> groupAreaGroupFieldNameList;
- List<String> dataAreaGroupFieldNameList;
- String value;
- JSONObject keyObj;
- JSONObject valueObj;
- JSONObject groupAreaKeyObj;
- JSONObject dataAreaKeyObj;
- String statisticsType;
- for (String dataAreaFieldName : dataAreaSpStatisticsFieldNameList) {
- keyObj = new JSONObject();
- groupAreaKeyObj = new JSONObject();
- keyObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaFieldName));
- dataAreaFieldConfigObj = dataAreaFieldConfigMap.get(dataAreaFieldName);
- groupAreaGroupFieldNameList = dataListReportService.transfer2List(dataAreaFieldConfigObj.get(CmnConst.ATTR_GROUP_AREA_GROUP_FIELD));
- dataAreaGroupFieldNameList = dataListReportService.transfer2List(dataAreaFieldConfigObj.get(CmnConst.ATTR_DATA_AREA_GROUP_FIELD));
- value = dataListReportService.getValue(dataAreaFieldConfigObj, recordFse, dataAreaFieldName);
- statisticsType = dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS);
- for (String groupAreaGroupFieldName : groupAreaGroupFieldNameList) {
- dataAreaKeyObj = new JSONObject();
- for (String dataAreaGroupFieldName : dataAreaGroupFieldNameList) {
- keyObj.remove(dataAreaGroupFieldName);
- }
- groupAreaKeyObj.put(groupAreaGroupFieldName, recordFse.getString(groupAreaGroupFieldName));
- dataListReportService.extendJSONObject(keyObj, groupAreaKeyObj, null);
- valueObj = statisticsMap.get(keyObj);
- valueObj = dataListReportService.getStatisticsValueObj(valueObj, dataAreaFieldConfigObj, value, statisticsType, true);
- statisticsMap.put((JSONObject) keyObj.clone(), valueObj);
- for (String dataAreaGroupFieldName : dataAreaGroupFieldNameList) {
- dataAreaKeyObj.put(dataAreaGroupFieldName, recordFse.getString(dataAreaGroupFieldName));
- keyObj = dataListReportService.extendJSONObject(keyObj, dataAreaKeyObj, null);
- valueObj = statisticsMap.get(keyObj);
- valueObj = dataListReportService.getStatisticsValueObj(valueObj, dataAreaFieldConfigObj, value, statisticsType, true);
- statisticsMap.put((JSONObject) keyObj.clone(), valueObj);
- }
- }
- }
- }
+ return totalColCount;
+ }
- /**
- * 鍙栨暟鎹尯鏅�氬瓧娈电殑缁熻
- * @param statisticsMap 缁熻map
- * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
- * @param dataAreaCommonStatisticsFieldNameList 鏁版嵁鍖烘櫘閫氱粺璁″瓧娈靛悕绉發ist
- * @param recordFse 涓氬姟鏁版嵁璁板綍
- */
- private void statisticsDataAreaCommonField(Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, List<String> dataAreaCommonStatisticsFieldNameList, FieldSetEntity recordFse) {
- JSONObject dataAreaFieldConfigObj;
- List<String> dataAreaGroupFieldNameList;
- String value;
- JSONObject dataAreaKeyObj = new JSONObject();
- JSONObject keyObj;
- JSONObject valueObj;
- String statisticsType;
- int i;
- for (String dataAreaFieldName : dataAreaCommonStatisticsFieldNameList) {
- i = 0;
- keyObj = new JSONObject();
- dataAreaFieldConfigObj = dataAreaFieldConfigMap.get(dataAreaFieldName);
- dataAreaGroupFieldNameList = dataListReportService.transfer2List(dataAreaFieldConfigObj.get(CmnConst.ATTR_DATA_AREA_GROUP_FIELD));
- statisticsType = dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS);
- value = dataListReportService.getValue(dataAreaFieldConfigObj, recordFse, dataAreaFieldName);
- keyObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaFieldName));
- valueObj = statisticsMap.get(keyObj);
- valueObj = dataListReportService.getStatisticsValueObj(valueObj, dataAreaFieldConfigObj, value, statisticsType, false);
- statisticsMap.put((JSONObject) keyObj.clone(), valueObj);
- for (String dataAreaGroupFieldName : dataAreaGroupFieldNameList) {
- i++;
- dataAreaKeyObj.put(dataAreaGroupFieldName, recordFse.getString(dataAreaGroupFieldName));
- keyObj = dataListReportService.extendJSONObject(keyObj, dataAreaKeyObj, null);
- valueObj = statisticsMap.get(keyObj);
- valueObj = dataListReportService.getStatisticsValueObj(valueObj, dataAreaFieldConfigObj, value, statisticsType, i == dataAreaGroupFieldNameList.size());
- statisticsMap.put((JSONObject) keyObj.clone(), valueObj);
- }
- }
- }
+ /**
+ * 鎶ヨ〃-瑙f瀽-鏀惧叆鍒嗙粍琛ㄥご鍖哄拰鏁版嵁锛岃繑鍥炲垪鏁�
+ *
+ * @param groupAndDataArea 瀹瑰櫒
+ * @param reportConfigMap 鎶ヨ〃缂撳瓨鏁版嵁map
+ * @param headAndTailTitleDataMap 澶撮儴銆佸熬閮ㄦ爣棰樺尯鏁版嵁瀛楁map瀹瑰櫒
+ * @param recordDte 鏁版嵁婧愰泦鍚�
+ * @param totalName 鎬昏鍚嶇О
+ * @return 鏁版嵁鍖烘�诲垪鏁�
+ */
+ 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
+ Map<String, JSONObject> dataAreaFieldConfigMap = dataListReportService.groupAndDataJSONObject2Map(reportConfigMap.get(0));
- /**
- * 鑾峰彇鍒嗙粍琛ㄥご鍖哄拰鏁版嵁鍖烘�诲垪鏁�
- * @param groupAreaFieldRecordObj 鍒嗙粍琛ㄥご鍖哄瓧娈佃褰昽bj
- * @param dataAreaGroupFieldCount 鏁版嵁鍖哄垎缁勫瓧娈典釜鏁�
- * @param dataAreaCommonStatisticsFieldCount 鏁版嵁鍖烘櫘閫氱粺璁″瓧娈典釜鏁�
- * @return 鍒嗙粍琛ㄥご鍖哄拰鏁版嵁鍖烘�诲垪鏁�
- */
- private int getTotalColCount(JSONObject groupAreaFieldRecordObj, int dataAreaGroupFieldCount, int dataAreaCommonStatisticsFieldCount) {
- int groupAreaColCount = getGroupAreaColCount(groupAreaFieldRecordObj, 0);
- return groupAreaColCount + dataAreaGroupFieldCount + dataAreaCommonStatisticsFieldCount;
- }
+ // 鍒嗙粍琛ㄥご鍖哄垎缁勭粺璁″瓧娈靛悕绉發ist
+ List<String> groupAreaGroupStatisticsFieldNameList = Lists.newArrayList();
+ // 鍒嗙粍琛ㄥご鍖哄垎缁勫瓧娈靛悕绉發ist
+ List<String> groupAreaGroupFieldNameList = Lists.newArrayList();
+ // 鍒嗙粍琛ㄥご鍖哄尯鍩熻寖鍥磑bj
+ JSONObject groupAreaRangeObj = new JSONObject();
+ groupAreaFieldConfigMap.forEach((fieldName, fieldConfigObj) -> {
+ groupAreaGroupFieldNameList.add(fieldName);
+ if ("1".equals(fieldConfigObj.getString(CmnConst.ATTR_IS_STATISTICS))) {
+ groupAreaGroupStatisticsFieldNameList.add(fieldName);
+ }
+ if (groupAreaRangeObj.getIntValue(CmnConst.MIN_X) == 0) {
+ groupAreaRangeObj.put(CmnConst.MIN_X, fieldConfigObj.getIntValue(CmnConst.ATTR_X));
+ } else {
+ groupAreaRangeObj.put(CmnConst.MIN_X, Math.min(groupAreaRangeObj.getIntValue(CmnConst.MIN_X), fieldConfigObj.getIntValue(CmnConst.ATTR_X)));
+ }
+ groupAreaRangeObj.put(CmnConst.MAX_X, Math.max(groupAreaRangeObj.getIntValue(CmnConst.MAX_X), fieldConfigObj.getIntValue(CmnConst.ATTR_X) + Math.max(1, fieldConfigObj.getIntValue(CmnConst.ATTR_COLSPAN)) - 1));
+ groupAreaRangeObj.put(CmnConst.MAX_Y, Math.max(groupAreaRangeObj.getIntValue(CmnConst.MAX_Y), fieldConfigObj.getIntValue(CmnConst.ATTR_Y) + Math.max(1, fieldConfigObj.getIntValue(CmnConst.ATTR_ROWSPAN)) - 1));
+ });
- /**
- * 鑾峰彇鍒嗙粍琛ㄥご鍖烘�诲垪鏁�
- * @param curOperateObj 褰撳墠鎿嶄綔鐨刼bj
- * @param groupAreaColCount 鍒嗙粍琛ㄥご鍖哄垪鏁�
- * @return 鍒嗙粍琛ㄥご鍖烘�诲垪鏁�
- */
- private int getGroupAreaColCount(JSONObject curOperateObj, int groupAreaColCount) {
- if (curOperateObj == null) {
- return groupAreaColCount;
- }
- String key;
- Object value;
- for (Map.Entry<String, Object> entry : curOperateObj.entrySet()) {
- key = entry.getKey();
- if (CmnConst.ATTR_FIELD_INFO.equals(key) || CmnConst.ATTR_STATISTICS_FIELD.equals(key)) {
- continue;
- }
- value = entry.getValue();
- if (value == null) {
- continue;
- }
- if (value instanceof List) {
- groupAreaColCount += ((List) value).size();
- } else if (value instanceof JSONObject) {
- groupAreaColCount = getGroupAreaColCount((JSONObject) value, groupAreaColCount);
- }
- }
- return groupAreaColCount;
- }
+ // 鏁版嵁鍖哄垎缁勭粺璁″瓧娈靛悕绉發ist
+ List<String> dataAreaGroupStatisticsFieldNameList = Lists.newArrayList();
+ // 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist
+ List<String> dataAreaGroupFieldNameList = Lists.newArrayList();
+ // 鏁版嵁鍖虹壒娈婄粺璁″瓧娈靛悕绉發ist-鍒嗙粍琛ㄥご鍖轰笅缁熻瀛楁
+ List<String> dataAreaSpStatisticsFieldNameList = Lists.newArrayList();
+ // 鏁版嵁鍖烘櫘閫氱粺璁″瓧娈靛悕绉發ist-闈炴暟鎹尯鍒嗙粍瀛楁锛岄潪鍒嗙粍琛ㄥご鍖轰笅缁熻瀛楁
+ List<String> dataAreaCommonStatisticsFieldNameList = Lists.newArrayList();
+ dataAreaFieldConfigMap.forEach((fieldName, fieldConfigObj) -> {
+ if ("1".equals(fieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) {
+ dataAreaGroupFieldNameList.add(fieldName);
+ if ("1".equals(fieldConfigObj.getString(CmnConst.ATTR_IS_STATISTICS))) {
+ dataAreaGroupStatisticsFieldNameList.add(fieldName);
+ }
+ } else {
+ if (fieldConfigObj.getIntValue(CmnConst.ATTR_X) < groupAreaRangeObj.getIntValue(CmnConst.MIN_X) || fieldConfigObj.getIntValue(CmnConst.ATTR_X) > groupAreaRangeObj.getIntValue(CmnConst.MAX_X)) {
+ dataAreaCommonStatisticsFieldNameList.add(fieldName);
+ } else {
+ dataAreaSpStatisticsFieldNameList.add(fieldName);
+ }
+ }
+ });
- /**
- * 鑾峰彇鏍囬html
- * @param dataTitleList 鏁版嵁鏍囬list
- * @param groupAreaFieldRecordObj 鍒嗙粍琛ㄥご鍖哄瓧娈佃褰昽bj
- * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
- * @param groupAreaRangeObj 鍒嗙粍琛ㄥご鍘昏寖鍥磑bj
- * @param dataAreaCommonStatisticsFieldNameList 鏁版嵁鍖烘櫘閫氱粺璁″瓧娈靛悕绉發ist
- * @return 鏁版嵁鏍囬html
- */
- private StringBuilder getDataAreaTitleHtml(List<JSONObject> dataTitleList, JSONObject groupAreaFieldRecordObj, Map<String, JSONObject> dataAreaFieldConfigMap, JSONObject groupAreaRangeObj, List<String> dataAreaCommonStatisticsFieldNameList) {
- int maxRow = groupAreaRangeObj.getIntValue(CmnConst.MAX_Y);
- List<List<JSONObject>> groupAreaRangeTitleList = Lists.newArrayList();
- for (int i = 0;i <= maxRow;i++) {
- groupAreaRangeTitleList.add(Lists.newArrayList());
- }
- getGroupAreaRangeTitleList(dataAreaFieldConfigMap, groupAreaFieldRecordObj, groupAreaRangeTitleList, new JSONObject(), 0, maxRow, null);
-
- List<JSONObject> beforeGroupAreaTitleList = Lists.newArrayList();
- List<JSONObject> afterGroupAreaTitleList = Lists.newArrayList();
+ // 鑾峰彇鍒嗙粍琛ㄥご缁熻瀛楁瀵瑰簲鐨勬暟鎹尯瀛楁map
+ Map<String, List<String>> groupAreaStatisticsField2DataAreaFieldMap = getGroupAreaStatisticsField2DataAreaFieldMap(groupAreaFieldConfigMap, dataAreaFieldConfigMap);
+ // 鑾峰彇鍒嗙粍琛ㄥご鍖烘湯琛屽垎缁勫瓧娈靛搴旀暟鎹尯瀛楁map
+ Map<String, List<String>> groupAreaLastStageField2DataAreaFieldMap = getGroupAreaLastStageField2DataAreaFieldMap(groupAreaFieldConfigMap, dataAreaFieldConfigMap, groupAreaRangeObj);
- String dataAreaFieldName;
- JSONObject dataAreaFieldConfigObj;
- JSONObject titleObj;
- for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) {
- dataAreaFieldName = entry.getKey();
- dataAreaFieldConfigObj = entry.getValue();
- titleObj = new JSONObject();
+ // 鑾峰彇鎸囧畾鏁版嵁闆嗕腑鍖呭惈鐨勬暟鎹尯瀛楁闆嗗悎
+ 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();
+ // 鍒嗙粍琛ㄥご鍖烘暟鎹畂bj
+ JSONObject groupAreaFieldRecordObj = new JSONObject(Maps.newTreeMap((o1, o2) -> dataListReportService.compare(o1, o2)));
+ // 鏁版嵁鍖哄垎缁勫瓧娈祇bj
+ JSONObject dataAreaFieldRecordObj = new JSONObject(Maps.newLinkedHashMap());
+
+ FieldSetEntity recordFse;
+ for (int i = 0; i < recordDte.getRows(); i++) {
+ recordFse = recordDte.getFieldSetEntity(i);
+
+ // 鑾峰彇澶撮儴銆佸熬閮ㄦ爣棰樺尯鏁版嵁瀛楁
+ dataListReportService.getHeadAndTailTitleDataMap(headAndTailTitleDataMap, headAndTailFieldSet, recordFse);
+
+ // 鑾峰彇鍒嗙粍琛ㄥご鍖烘暟鎹畂bj
+ getGroupAreaFieldRecordObj(groupAreaFieldRecordObj, groupAreaFieldConfigMap, recordFse, groupAreaStatisticsField2DataAreaFieldMap, groupAreaLastStageField2DataAreaFieldMap);
+
+ // 鑾峰彇鏁版嵁鍖哄垎缁勫瓧娈祇bj
+ getDataAreaGroupFieldRecordObj(dataAreaFieldRecordObj, dataAreaFieldConfigMap, recordFse);
+
+ // 鑾峰彇鏁版嵁鍖虹壒娈婂瓧娈电殑缁熻
+ statisticsDataAreaSpField(statisticsMap, dataAreaFieldConfigMap, dataAreaSpStatisticsFieldNameList, recordFse);
+
+ // 鑾峰彇鏁版嵁鍖烘櫘閫氬瓧娈电殑缁熻
+ statisticsDataAreaCommonField(statisticsMap, dataAreaFieldConfigMap, dataAreaCommonStatisticsFieldNameList, recordFse);
+ }
+
+ // 鑾峰彇鍒嗙粍琛ㄥご鍖哄拰鏁版嵁鍖烘�诲垪鏁�
+ int totalColCount = getTotalColCount(groupAreaFieldRecordObj, dataAreaGroupFieldNameList.size(), dataAreaCommonStatisticsFieldNameList.size());
+
+ // 鏁版嵁鏍囬list
+ List<JSONObject> dataTitleList = Lists.newArrayList();
+ // 鑾峰彇鏍囬html
+ groupAndDataArea.addAll(getDataAreaTitle(dataTitleList, groupAreaFieldRecordObj, dataAreaFieldConfigMap, groupAreaRangeObj, dataAreaCommonStatisticsFieldNameList));
+ // 鑾峰彇鍐呭html
+// groupAndDataAreaHtml.append(getDataAreaDataHtml(dataTitleList, dataAreaFieldRecordObj, statisticsMap, totalName, dataAreaGroupFieldNameList, dataAreaFieldConfigMap));
+
+ return totalColCount;
+ }
+
+ /**
+ * 鑾峰彇鍒嗙粍琛ㄥご缁熻瀛楁瀵瑰簲鐨勬暟鎹尯瀛楁map
+ *
+ * @param groupAreaFieldConfigMap 鍒嗙粍琛ㄥご鍖哄瓧娈电紦瀛榤ap
+ * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
+ * @return 鍒嗙粍琛ㄥご缁熻瀛楁瀵瑰簲鐨勬暟鎹尯瀛楁map
+ */
+ private Map<String, List<String>> getGroupAreaStatisticsField2DataAreaFieldMap(Map<String, JSONObject> groupAreaFieldConfigMap, Map<String, JSONObject> dataAreaFieldConfigMap) {
+ Map<String, List<String>> resultMap = Maps.newLinkedHashMap();
+ String groupAreaFieldName;
+ JSONObject groupAreaFieldConfigObj;
+ JSONObject dataAreaFieldConfigObj;
+ for (Map.Entry<String, JSONObject> groupAreaFieldConfigEntry : groupAreaFieldConfigMap.entrySet()) {
+ groupAreaFieldConfigObj = groupAreaFieldConfigEntry.getValue();
+ if (!"1".equals(groupAreaFieldConfigObj.getString(CmnConst.ATTR_IS_STATISTICS))) {
+ continue;
+ }
+ groupAreaFieldName = groupAreaFieldConfigEntry.getKey();
+ for (Map.Entry<String, JSONObject> dataAreaFieldConfigEntry : dataAreaFieldConfigMap.entrySet()) {
+ dataAreaFieldConfigObj = dataAreaFieldConfigEntry.getValue();
+ if (dataListReportService.transfer2List(dataAreaFieldConfigObj.get(CmnConst.ATTR_GROUP_AREA_GROUP_FIELD)).contains(groupAreaFieldName)) {
+ resultMap.computeIfAbsent(groupAreaFieldName, k -> Lists.newArrayList()).add(dataAreaFieldConfigEntry.getKey());
+ }
+ }
+ }
+ return resultMap;
+ }
+
+ /**
+ * 鑾峰彇鍒嗙粍琛ㄥご鍖烘湯琛屽垎缁勫瓧娈靛搴旀暟鎹尯瀛楁map
+ *
+ * @param groupAreaFieldConfigMap 鍒嗙粍琛ㄥご鍖哄瓧娈电紦瀛榤ap
+ * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
+ * @param groupAreaRangeObj 鍒嗙粍琛ㄥご鍖鸿寖鍥磑bj
+ * @return 鍒嗙粍琛ㄥご鍖烘湯琛屽垎缁勫瓧娈靛搴旀暟鎹尯瀛楁map
+ */
+ private Map<String, List<String>> getGroupAreaLastStageField2DataAreaFieldMap(Map<String, JSONObject> groupAreaFieldConfigMap, Map<String, JSONObject> dataAreaFieldConfigMap, JSONObject groupAreaRangeObj) {
+ Map<String, List<String>> resultMap = Maps.newLinkedHashMap();
+ String groupFieldName;
+ JSONObject groupAreaFieldConfigObj;
+ JSONObject dataAreaFieldConfigObj;
+ for (Map.Entry<String, JSONObject> groupAreaFieldConfigEntry : groupAreaFieldConfigMap.entrySet()) {
+ groupAreaFieldConfigObj = groupAreaFieldConfigEntry.getValue();
+ if (groupAreaFieldConfigObj.getIntValue(CmnConst.ATTR_Y) + Math.max(1, groupAreaFieldConfigObj.getIntValue(CmnConst.ATTR_ROWSPAN)) - 1 < groupAreaRangeObj.getIntValue(CmnConst.MAX_Y)) {
+ continue;
+ }
+ groupFieldName = groupAreaFieldConfigEntry.getKey();
+ for (Map.Entry<String, JSONObject> dataAreaFieldConfigEntry : dataAreaFieldConfigMap.entrySet()) {
+ dataAreaFieldConfigObj = dataAreaFieldConfigEntry.getValue();
+ if (dataListReportService.transfer2List(dataAreaFieldConfigObj.get(CmnConst.ATTR_GROUP_AREA_GROUP_FIELD)).contains(groupFieldName)) {
+ resultMap.computeIfAbsent(groupFieldName, k -> Lists.newArrayList()).add(dataAreaFieldConfigEntry.getKey());
+ }
+ }
+
+ }
+ return resultMap;
+ }
+
+ /**
+ * 鑾峰彇鏍囬-鍒嗙粍琛ㄥご鍖烘暟鎹畂bj
+ *
+ * @param groupAreaFieldRecordObj 鍒嗙粍琛ㄥご鍖哄瓧娈佃褰昽bj
+ * @param groupAreaFieldConfigMap 鍒嗙粍琛ㄥご鍖哄瓧娈电紦瀛榤ap
+ * @param recordFse 涓氬姟鏁版嵁璁板綍
+ * @param groupAreaStatisticsField2DataAreaFieldMap 鍒嗙粍琛ㄥご鍖虹粺璁″瓧娈靛搴旀暟鎹尯瀛楁map
+ * @param groupAreaLastStageField2DataAreaFieldMap 鍒嗙粍琛ㄥご鍖烘湯绾у瓧娈靛搴旀暟鎹尯瀛楁map
+ */
+ private void getGroupAreaFieldRecordObj(JSONObject groupAreaFieldRecordObj, Map<String, JSONObject> groupAreaFieldConfigMap, FieldSetEntity recordFse,
+ Map<String, List<String>> groupAreaStatisticsField2DataAreaFieldMap, Map<String, List<String>> groupAreaLastStageField2DataAreaFieldMap) {
+ JSONObject parentObj = groupAreaFieldRecordObj;
+ JSONObject subObj;
+ String value;
+ List<String> list;
+ String groupAreaGroupFieldName;
+ int i = 0;
+ List<String> statisticsFieldList;
+ String realValue;
+ for (Map.Entry<String, JSONObject> entry : groupAreaFieldConfigMap.entrySet()) {
+ list = Lists.newArrayList();
+ list.addAll(dataListReportService.transfer2List(entry.getValue().get(CmnConst.ATTR_GROUP_AREA_GROUP_FIELD)));
+ list.add(entry.getKey());
+ for (; i < list.size(); i++) {
+ groupAreaGroupFieldName = list.get(i);
+ realValue = dataListReportService.getRealValue(recordFse, groupAreaGroupFieldName);
+ value = recordFse.getString(groupAreaGroupFieldName);
+
+ if (parentObj.get(value) == null) {
+ subObj = new JSONObject(Maps.newTreeMap((o1, o2) -> dataListReportService.compare(o1, o2)));
+ parentObj.put(value, subObj);
+ // 娣诲姞鍒嗙粍琛ㄥご鍖哄垎缁勭粺璁″瓧娈靛搴旀暟鎹尯瀛楁
+ if (groupAreaStatisticsField2DataAreaFieldMap.containsKey(groupAreaGroupFieldName)) {
+ parentObj.put(value + CmnConst.STATISTICS_NAME, groupAreaStatisticsField2DataAreaFieldMap.get(groupAreaGroupFieldName));
+ statisticsFieldList = dataListReportService.transfer2List(parentObj.get(CmnConst.ATTR_STATISTICS_FIELD));
+ if (statisticsFieldList.isEmpty()) {
+ parentObj.put(CmnConst.ATTR_STATISTICS_FIELD, statisticsFieldList);
+ }
+ if (!statisticsFieldList.contains(value + CmnConst.STATISTICS_NAME)) {
+ statisticsFieldList.add(value + CmnConst.STATISTICS_NAME);
+ }
+ }
+ // 娣诲姞鍒嗙粍琛ㄥご鍖烘湯绾у瓧娈靛搴旀暟鎹尯瀛楁
+ if (groupAreaLastStageField2DataAreaFieldMap.containsKey(groupAreaGroupFieldName)) {
+ parentObj.put(value, groupAreaLastStageField2DataAreaFieldMap.get(groupAreaGroupFieldName));
+ }
+ // 娣诲姞field_info
+ if (StringUtils.isEmpty(parentObj.getString(CmnConst.ATTR_FIELD_INFO))) {
+ parentObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(groupAreaGroupFieldName));
+ }
+ if (!StringUtils.isEmpty(realValue)) {
+ subObj.put(CmnConst.ATTR_REAL_VALUE, realValue);
+ }
+ } else {
+ if (!(parentObj.get(value) instanceof JSONObject)) {
+ continue;
+ }
+ subObj = parentObj.getJSONObject(value);
+ }
+ parentObj = subObj;
+ }
+ }
+ }
+
+ /**
+ * 鑾峰彇鏁版嵁鍖哄垎缁勫瓧娈祇bj
+ *
+ * @param dataAreaFieldRecordObj 鏁版嵁鍖哄瓧娈佃褰昽bj
+ * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
+ * @param recordFse 涓氬姟鏁版嵁璁板綍
+ */
+ private void getDataAreaGroupFieldRecordObj(JSONObject dataAreaFieldRecordObj, Map<String, JSONObject> dataAreaFieldConfigMap, FieldSetEntity recordFse) {
+ JSONObject parentObj = dataAreaFieldRecordObj;
+ JSONObject subObj;
+ String value;
+ List<String> list;
+ String groupAreaGroupFieldName;
+ int i = 0;
+ String dataAreaFieldName;
+ JSONObject dataAreaFieldConfigObj;
+ List<String> statisticsFieldList;
+ String realValue;
+ for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) {
+ dataAreaFieldConfigObj = entry.getValue();
+ if (!"1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) {
+ break;
+ }
+ dataAreaFieldName = entry.getKey();
+ realValue = dataListReportService.getRealValue(recordFse, dataAreaFieldName);
+ list = Lists.newArrayList();
+ list.addAll(dataListReportService.transfer2List(dataAreaFieldConfigObj.get(CmnConst.ATTR_DATA_AREA_GROUP_FIELD)));
+ list.add(dataAreaFieldName);
+ for (; i < list.size(); i++) {
+ groupAreaGroupFieldName = list.get(i);
+ value = recordFse.getString(groupAreaGroupFieldName);
+ subObj = parentObj.getJSONObject(value);
+ if (subObj == null) {
+ subObj = new JSONObject(Maps.newLinkedHashMap());
+ parentObj.put(value, subObj);
+ }
+ // 娣诲姞鏁版嵁鍖哄垎缁勭粺璁″瓧娈�
+ if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_STATISTICS))) {
+ parentObj.put(value + CmnConst.STATISTICS_NAME, new JSONObject());
+ statisticsFieldList = dataListReportService.transfer2List(parentObj.get(CmnConst.ATTR_STATISTICS_FIELD));
+ if (statisticsFieldList.isEmpty()) {
+ parentObj.put(CmnConst.ATTR_STATISTICS_FIELD, statisticsFieldList);
+ }
+ if (!statisticsFieldList.contains(value + CmnConst.STATISTICS_NAME)) {
+ statisticsFieldList.add(value + CmnConst.STATISTICS_NAME);
+ }
+ }
+ // 娣诲姞field_info
+ if (StringUtils.isEmpty(parentObj.getString(CmnConst.ATTR_FIELD_INFO))) {
+ parentObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(groupAreaGroupFieldName));
+ }
+ if (!StringUtils.isEmpty(realValue)) {
+ subObj.put(CmnConst.ATTR_REAL_VALUE, realValue);
+ }
+ parentObj = subObj;
+ }
+ }
+ }
+
+ /**
+ * 鑾峰彇鏁版嵁鍖虹壒娈婂瓧娈电殑缁熻
+ *
+ * @param statisticsMap 缁熻map
+ * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
+ * @param dataAreaSpStatisticsFieldNameList 鏁版嵁鍖虹壒娈婄粺璁″瓧娈靛悕绉發ist锛堝垎缁勮〃澶村尯涓嬬粺璁″瓧娈碉級
+ * @param recordFse 涓氬姟鏁版嵁璁板綍
+ */
+ private void statisticsDataAreaSpField(Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, List<String> dataAreaSpStatisticsFieldNameList, FieldSetEntity recordFse) {
+ JSONObject dataAreaFieldConfigObj;
+ List<String> groupAreaGroupFieldNameList;
+ List<String> dataAreaGroupFieldNameList;
+ String value;
+ JSONObject keyObj;
+ JSONObject valueObj;
+ JSONObject groupAreaKeyObj;
+ JSONObject dataAreaKeyObj;
+ String statisticsType;
+ for (String dataAreaFieldName : dataAreaSpStatisticsFieldNameList) {
+ keyObj = new JSONObject();
+ groupAreaKeyObj = new JSONObject();
+ keyObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaFieldName));
+ dataAreaFieldConfigObj = dataAreaFieldConfigMap.get(dataAreaFieldName);
+ groupAreaGroupFieldNameList = dataListReportService.transfer2List(dataAreaFieldConfigObj.get(CmnConst.ATTR_GROUP_AREA_GROUP_FIELD));
+ dataAreaGroupFieldNameList = dataListReportService.transfer2List(dataAreaFieldConfigObj.get(CmnConst.ATTR_DATA_AREA_GROUP_FIELD));
+ value = dataListReportService.getValue(dataAreaFieldConfigObj, recordFse, dataAreaFieldName);
+ statisticsType = dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS);
+ for (String groupAreaGroupFieldName : groupAreaGroupFieldNameList) {
+ dataAreaKeyObj = new JSONObject();
+ for (String dataAreaGroupFieldName : dataAreaGroupFieldNameList) {
+ keyObj.remove(dataAreaGroupFieldName);
+ }
+ groupAreaKeyObj.put(groupAreaGroupFieldName, recordFse.getString(groupAreaGroupFieldName));
+ dataListReportService.extendJSONObject(keyObj, groupAreaKeyObj, null);
+ valueObj = statisticsMap.get(keyObj);
+ valueObj = dataListReportService.getStatisticsValueObj(valueObj, dataAreaFieldConfigObj, value, statisticsType, true);
+ statisticsMap.put((JSONObject) keyObj.clone(), valueObj);
+ for (String dataAreaGroupFieldName : dataAreaGroupFieldNameList) {
+ dataAreaKeyObj.put(dataAreaGroupFieldName, recordFse.getString(dataAreaGroupFieldName));
+ keyObj = dataListReportService.extendJSONObject(keyObj, dataAreaKeyObj, null);
+ valueObj = statisticsMap.get(keyObj);
+ valueObj = dataListReportService.getStatisticsValueObj(valueObj, dataAreaFieldConfigObj, value, statisticsType, true);
+ statisticsMap.put((JSONObject) keyObj.clone(), valueObj);
+ }
+ }
+ }
+ }
+
+ /**
+ * 鍙栨暟鎹尯鏅�氬瓧娈电殑缁熻
+ *
+ * @param statisticsMap 缁熻map
+ * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
+ * @param dataAreaCommonStatisticsFieldNameList 鏁版嵁鍖烘櫘閫氱粺璁″瓧娈靛悕绉發ist
+ * @param recordFse 涓氬姟鏁版嵁璁板綍
+ */
+ private void statisticsDataAreaCommonField(Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, List<String> dataAreaCommonStatisticsFieldNameList, FieldSetEntity recordFse) {
+ JSONObject dataAreaFieldConfigObj;
+ List<String> dataAreaGroupFieldNameList;
+ String value;
+ JSONObject dataAreaKeyObj = new JSONObject();
+ JSONObject keyObj;
+ JSONObject valueObj;
+ String statisticsType;
+ int i;
+ for (String dataAreaFieldName : dataAreaCommonStatisticsFieldNameList) {
+ i = 0;
+ keyObj = new JSONObject();
+ dataAreaFieldConfigObj = dataAreaFieldConfigMap.get(dataAreaFieldName);
+ dataAreaGroupFieldNameList = dataListReportService.transfer2List(dataAreaFieldConfigObj.get(CmnConst.ATTR_DATA_AREA_GROUP_FIELD));
+ statisticsType = dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS);
+ value = dataListReportService.getValue(dataAreaFieldConfigObj, recordFse, dataAreaFieldName);
+ keyObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaFieldName));
+ valueObj = statisticsMap.get(keyObj);
+ valueObj = dataListReportService.getStatisticsValueObj(valueObj, dataAreaFieldConfigObj, value, statisticsType, false);
+ statisticsMap.put((JSONObject) keyObj.clone(), valueObj);
+ for (String dataAreaGroupFieldName : dataAreaGroupFieldNameList) {
+ i++;
+ dataAreaKeyObj.put(dataAreaGroupFieldName, recordFse.getString(dataAreaGroupFieldName));
+ keyObj = dataListReportService.extendJSONObject(keyObj, dataAreaKeyObj, null);
+ valueObj = statisticsMap.get(keyObj);
+ valueObj = dataListReportService.getStatisticsValueObj(valueObj, dataAreaFieldConfigObj, value, statisticsType, i == dataAreaGroupFieldNameList.size());
+ statisticsMap.put((JSONObject) keyObj.clone(), valueObj);
+ }
+ }
+ }
+
+ /**
+ * 鑾峰彇鍒嗙粍琛ㄥご鍖哄拰鏁版嵁鍖烘�诲垪鏁�
+ *
+ * @param groupAreaFieldRecordObj 鍒嗙粍琛ㄥご鍖哄瓧娈佃褰昽bj
+ * @param dataAreaGroupFieldCount 鏁版嵁鍖哄垎缁勫瓧娈典釜鏁�
+ * @param dataAreaCommonStatisticsFieldCount 鏁版嵁鍖烘櫘閫氱粺璁″瓧娈典釜鏁�
+ * @return 鍒嗙粍琛ㄥご鍖哄拰鏁版嵁鍖烘�诲垪鏁�
+ */
+ private int getTotalColCount(JSONObject groupAreaFieldRecordObj, int dataAreaGroupFieldCount, int dataAreaCommonStatisticsFieldCount) {
+ int groupAreaColCount = getGroupAreaColCount(groupAreaFieldRecordObj, 0);
+ return groupAreaColCount + dataAreaGroupFieldCount + dataAreaCommonStatisticsFieldCount;
+ }
+
+ /**
+ * 鑾峰彇鍒嗙粍琛ㄥご鍖烘�诲垪鏁�
+ *
+ * @param curOperateObj 褰撳墠鎿嶄綔鐨刼bj
+ * @param groupAreaColCount 鍒嗙粍琛ㄥご鍖哄垪鏁�
+ * @return 鍒嗙粍琛ㄥご鍖烘�诲垪鏁�
+ */
+ private int getGroupAreaColCount(JSONObject curOperateObj, int groupAreaColCount) {
+ if (curOperateObj == null) {
+ return groupAreaColCount;
+ }
+ String key;
+ Object value;
+ for (Map.Entry<String, Object> entry : curOperateObj.entrySet()) {
+ key = entry.getKey();
+ if (CmnConst.ATTR_FIELD_INFO.equals(key) || CmnConst.ATTR_STATISTICS_FIELD.equals(key)) {
+ continue;
+ }
+ value = entry.getValue();
+ if (value == null) {
+ continue;
+ }
+ if (value instanceof List) {
+ groupAreaColCount += ((List) value).size();
+ } else if (value instanceof JSONObject) {
+ groupAreaColCount = getGroupAreaColCount((JSONObject) value, groupAreaColCount);
+ }
+ }
+ return groupAreaColCount;
+ }
+
+ /**
+ * 鑾峰彇鏍囬
+ *
+ * @param dataTitleList 鏁版嵁鏍囬list
+ * @param groupAreaFieldRecordObj 鍒嗙粍琛ㄥご鍖哄瓧娈佃褰昽bj
+ * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
+ * @param groupAreaRangeObj 鍒嗙粍琛ㄥご鍘昏寖鍥磑bj
+ * @param dataAreaCommonStatisticsFieldNameList 鏁版嵁鍖烘櫘閫氱粺璁″瓧娈靛悕绉發ist
+ * @return 鏁版嵁鏍囬html
+ */
+ private List<List<ReportColumn>> getDataAreaTitle(List<JSONObject> dataTitleList, JSONObject groupAreaFieldRecordObj, Map<String, JSONObject> dataAreaFieldConfigMap, JSONObject groupAreaRangeObj, List<String> dataAreaCommonStatisticsFieldNameList) {
+ int maxRow = groupAreaRangeObj.getIntValue(CmnConst.MAX_Y);
+ List<List<JSONObject>> groupAreaRangeTitleList = Lists.newArrayList();
+ for (int i = 0; i <= maxRow; i++) {
+ groupAreaRangeTitleList.add(Lists.newArrayList());
+ }
+ getGroupAreaRangeTitleList(dataAreaFieldConfigMap, groupAreaFieldRecordObj, groupAreaRangeTitleList, new JSONObject(), 0, maxRow, null);
+
+ List<JSONObject> beforeGroupAreaTitleList = Lists.newArrayList();
+ List<JSONObject> afterGroupAreaTitleList = Lists.newArrayList();
+
+ String dataAreaFieldName;
+ JSONObject dataAreaFieldConfigObj;
+ JSONObject titleObj;
+ for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) {
+ dataAreaFieldName = entry.getKey();
+ dataAreaFieldConfigObj = entry.getValue();
+ titleObj = new JSONObject();
// titleObj.put(CmnConst.ATTR_FIELD_INFO, getFieldInfo(dataAreaFieldConfigObj));
- titleObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaFieldName));
- if (dataAreaCommonStatisticsFieldNameList.contains(dataAreaFieldName)) {
- titleObj.put(CmnConst.ATTR_SHOW_NAME, dataListReportService.getStatisticsDesc(dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS), dataAreaFieldConfigObj.getString(CmnConst.ATTR_SHOW_NAME)));
- } else {
- titleObj.put(CmnConst.ATTR_SHOW_NAME, dataAreaFieldConfigObj.getString(CmnConst.ATTR_SHOW_NAME));
- }
- titleObj.put(CmnConst.ATTR_ROWSPAN, maxRow + 1);
- titleObj.put(CmnConst.ATTR_COLSPAN, 1);
- if (dataAreaFieldConfigObj.getIntValue(CmnConst.ATTR_X) < groupAreaRangeObj.getIntValue(CmnConst.MIN_X)) {
- beforeGroupAreaTitleList.add(titleObj);
- }
- if (dataAreaFieldConfigObj.getIntValue(CmnConst.ATTR_X) > groupAreaRangeObj.getIntValue(CmnConst.MAX_X)) {
- if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) {
- beforeGroupAreaTitleList.add(titleObj);
- } else {
- afterGroupAreaTitleList.add(titleObj);
- }
- }
- }
+ titleObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaFieldName));
+ if (dataAreaCommonStatisticsFieldNameList.contains(dataAreaFieldName)) {
+ titleObj.put(CmnConst.ATTR_SHOW_NAME, dataListReportService.getStatisticsDesc(dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS), dataAreaFieldConfigObj.getString(CmnConst.ATTR_SHOW_NAME)));
+ } else {
+ titleObj.put(CmnConst.ATTR_SHOW_NAME, dataAreaFieldConfigObj.getString(CmnConst.ATTR_SHOW_NAME));
+ }
+ titleObj.put(CmnConst.ATTR_ROWSPAN, maxRow + 1);
+ titleObj.put(CmnConst.ATTR_COLSPAN, 1);
+ if (dataAreaFieldConfigObj.getIntValue(CmnConst.ATTR_X) < groupAreaRangeObj.getIntValue(CmnConst.MIN_X)) {
+ beforeGroupAreaTitleList.add(titleObj);
+ }
+ if (dataAreaFieldConfigObj.getIntValue(CmnConst.ATTR_X) > groupAreaRangeObj.getIntValue(CmnConst.MAX_X)) {
+ if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) {
+ beforeGroupAreaTitleList.add(titleObj);
+ } else {
+ afterGroupAreaTitleList.add(titleObj);
+ }
+ }
+ }
- dataTitleList.addAll(groupAreaRangeTitleList.get(maxRow));
- dataTitleList.addAll(afterGroupAreaTitleList);
+ dataTitleList.addAll(groupAreaRangeTitleList.get(maxRow));
+ dataTitleList.addAll(afterGroupAreaTitleList);
- List<JSONObject> firstList = Lists.newArrayList();
- firstList.addAll(beforeGroupAreaTitleList);
- firstList.addAll(groupAreaRangeTitleList.get(0));
- firstList.addAll(afterGroupAreaTitleList);
+ List<JSONObject> firstList = Lists.newArrayList();
+ firstList.addAll(beforeGroupAreaTitleList);
+ firstList.addAll(groupAreaRangeTitleList.get(0));
+ firstList.addAll(afterGroupAreaTitleList);
- groupAreaRangeTitleList.set(0, firstList);
+ groupAreaRangeTitleList.set(0, firstList);
- StringBuilder html = new StringBuilder(1024);
- int rowspan;
- int colspan;
- String value;
- for (List<JSONObject> rowList : groupAreaRangeTitleList) {
- html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_TITLE).append("\">\n ");
- for (JSONObject dataTitleObj : rowList) {
- 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);
- }
- html.append("<td rowspan=\"").append(rowspan).append("\" colspan=\"").append(colspan).append("\">").append(value == null ? "" : value).append("</td>");
- }
- html.append("\n</tr>");
- }
- return html;
- }
+// StringBuilder html = new StringBuilder(1024);
+ int rowspan;
+ int colspan;
+ String value;
+ List<List<ReportColumn>> rowColumn = new ArrayList<>();
+ for (List<JSONObject> rowList : groupAreaRangeTitleList) {
+ List<ReportColumn> columns = new ArrayList<>();
+// html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_TITLE).append("\">\n ");
+ for (JSONObject dataTitleObj : rowList) {
+ 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);
+ }
+ 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>");
+ }
+ rowColumn.add(columns);
+// html.append("\n</tr>");
+ }
+ return rowColumn;
+ }
- /**
- * 鑾峰彇鍒嗙粍琛ㄥご鍖鸿寖鍥寸殑鏍囬list
- * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
- * @param curOperateObj 褰撳墠鎿嶄綔obj
- * @param groupAreaRangeTitleList 鍒嗙粍琛ㄥご鍖鸿寖鍥翠笅鏁版嵁鏍囬list
- * @param preTitleObj 鏈�杩戞搷浣滅殑鏍囬obj
- * @param row 褰撳墠琛屾暟
- * @param maxRow 鏈�澶ц鏁�
- */
- private void getGroupAreaRangeTitleList(Map<String, JSONObject> dataAreaFieldConfigMap, JSONObject curOperateObj, List<List<JSONObject>> groupAreaRangeTitleList, JSONObject preTitleObj, int row, int maxRow, String parentFieldName) {
- if (curOperateObj == null || curOperateObj.isEmpty()) {
- return;
- }
- String key;
- Object value;
- JSONObject curTitleObj;
- String groupAreaFieldName = dataListReportService.fieldInfo2FieldName(curOperateObj.getString(CmnConst.ATTR_FIELD_INFO));
- List<String> statisticsFieldList = dataListReportService.transfer2List(curOperateObj.get(CmnConst.ATTR_STATISTICS_FIELD));
- String realValue = curOperateObj.getString(CmnConst.ATTR_REAL_VALUE);
- String fieldName = dataListReportService.fieldInfo2FieldName(curOperateObj.getString(CmnConst.ATTR_FIELD_INFO));
- String newKey;
- JSONObject realValueObj;
- for (Map.Entry<String, Object> entry : curOperateObj.entrySet()) {
- curTitleObj = dataListReportService.extendJSONObject(null, preTitleObj, null);
- if (!StringUtils.isEmpty(realValue) && !StringUtils.isEmpty(parentFieldName)) {
- if (curTitleObj.get(CmnConst.ATTR_REAL_VALUE) == null) {
- realValueObj = new JSONObject();
- curTitleObj.put(CmnConst.ATTR_REAL_VALUE, realValueObj);
- } else {
- realValueObj = (JSONObject) curTitleObj.get(CmnConst.ATTR_REAL_VALUE);
- }
- realValueObj.put(parentFieldName, realValue);
- }
- key = entry.getKey();
- if (CmnConst.ATTR_FIELD_INFO.equals(key) || CmnConst.ATTR_STATISTICS_FIELD.equals(key) || CmnConst.ATTR_REAL_VALUE.equals(key)) {
- continue;
- }
- value = entry.getValue();
- if (value == null) {
- continue;
- }
- curTitleObj.put(CmnConst.ATTR_SHOW_NAME, key);
- if (statisticsFieldList.contains(key)) {
- curTitleObj.put(CmnConst.ATTR_IS_STATISTICS_FIELD, "1");
- newKey = key.replace(CmnConst.STATISTICS_NAME, "");
- curTitleObj.put(groupAreaFieldName, newKey);
- curTitleObj.put(CmnConst.ATTR_GROUP_AREA_SUB_CNT, getSubCnt(curOperateObj.getJSONObject(newKey)));
- } else {
- curTitleObj.put(groupAreaFieldName, key);
- }
- groupAreaRangeTitleList.get(row).add(curTitleObj);
- if (value instanceof List) {
- curTitleObj.put(CmnConst.ATTR_COLSPAN, ((List) value).size());
- curTitleObj.put(CmnConst.ATTR_ROWSPAN, maxRow - row);
- for (String dataAreaFieldName : (List<String>) value) {
- JSONObject cloneTitleObj = (JSONObject) curTitleObj.clone();
- cloneTitleObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaFieldName));
- cloneTitleObj.put(CmnConst.ATTR_COLSPAN, 1);
- cloneTitleObj.put(CmnConst.ATTR_ROWSPAN, 1);
- JSONObject dataAreaFieldConfigObj = dataAreaFieldConfigMap.get(dataAreaFieldName);
- cloneTitleObj.put(CmnConst.ATTR_SHOW_NAME, dataListReportService.getStatisticsDesc(dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS), dataAreaFieldConfigObj.getString(CmnConst.ATTR_SHOW_NAME)));
- groupAreaRangeTitleList.get(maxRow).add(cloneTitleObj);
- }
- } else {
- if (value instanceof JSONObject) {
- curTitleObj.put(CmnConst.ATTR_COLSPAN, getGroupAreaColCount((JSONObject) value, 0));
- curTitleObj.put(CmnConst.ATTR_ROWSPAN, 1);
- getGroupAreaRangeTitleList(dataAreaFieldConfigMap, (JSONObject) value, groupAreaRangeTitleList, curTitleObj, row + 1, maxRow, fieldName);
- }
- }
- }
- }
+ /**
+ * 鑾峰彇鏍囬html
+ *
+ * @param dataTitleList 鏁版嵁鏍囬list
+ * @param groupAreaFieldRecordObj 鍒嗙粍琛ㄥご鍖哄瓧娈佃褰昽bj
+ * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
+ * @param groupAreaRangeObj 鍒嗙粍琛ㄥご鍘昏寖鍥磑bj
+ * @param dataAreaCommonStatisticsFieldNameList 鏁版嵁鍖烘櫘閫氱粺璁″瓧娈靛悕绉發ist
+ * @return 鏁版嵁鏍囬html
+ */
+ private StringBuilder getDataAreaTitleHtml(List<JSONObject> dataTitleList, JSONObject groupAreaFieldRecordObj, Map<String, JSONObject> dataAreaFieldConfigMap, JSONObject groupAreaRangeObj, List<String> dataAreaCommonStatisticsFieldNameList) {
+ int maxRow = groupAreaRangeObj.getIntValue(CmnConst.MAX_Y);
+ List<List<JSONObject>> groupAreaRangeTitleList = Lists.newArrayList();
+ for (int i = 0; i <= maxRow; i++) {
+ groupAreaRangeTitleList.add(Lists.newArrayList());
+ }
+ getGroupAreaRangeTitleList(dataAreaFieldConfigMap, groupAreaFieldRecordObj, groupAreaRangeTitleList, new JSONObject(), 0, maxRow, null);
- /**
- * 鑾峰彇涓嬬骇鍒嗙粍椤规暟
- * @param obj 寰呮搷浣滅殑obj
- * @return 涓嬬骇鍒嗙粍椤规暟
- */
- private int getSubCnt(JSONObject obj) {
- int count = 0;
- List<String> statisticsFieldList = dataListReportService.transfer2List(obj.get(CmnConst.ATTR_STATISTICS_FIELD));
- for (String key : obj.keySet()) {
- if (CmnConst.ATTR_FIELD_INFO.equals(key) || CmnConst.ATTR_STATISTICS_FIELD.equals(key) || statisticsFieldList.contains(key)) {
- continue;
- }
- count++;
- }
- return count;
- }
+ List<JSONObject> beforeGroupAreaTitleList = Lists.newArrayList();
+ List<JSONObject> afterGroupAreaTitleList = Lists.newArrayList();
- /**
- * 鑾峰彇鍐呭html
- * @param dataTitleList 鏁版嵁鏍囬list
- * @param dataAreaFieldRecordObj 鏁版嵁鍖哄瓧娈佃褰昽bj
- * @param statisticsMap 缁熻map
- * @param totalName 鎬昏鍚嶇О锛岄潪绌�-闇�瑕佹�昏
- * @param dataAreaGroupFieldNameList 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist
- * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
- * @return 涓氬姟鏁版嵁鍐呭html
- */
- private StringBuilder getDataAreaDataHtml(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);
+ String dataAreaFieldName;
+ JSONObject dataAreaFieldConfigObj;
+ JSONObject titleObj;
+ for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) {
+ dataAreaFieldName = entry.getKey();
+ dataAreaFieldConfigObj = entry.getValue();
+ titleObj = new JSONObject();
+// titleObj.put(CmnConst.ATTR_FIELD_INFO, getFieldInfo(dataAreaFieldConfigObj));
+ titleObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaFieldName));
+ if (dataAreaCommonStatisticsFieldNameList.contains(dataAreaFieldName)) {
+ titleObj.put(CmnConst.ATTR_SHOW_NAME, dataListReportService.getStatisticsDesc(dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS), dataAreaFieldConfigObj.getString(CmnConst.ATTR_SHOW_NAME)));
+ } else {
+ titleObj.put(CmnConst.ATTR_SHOW_NAME, dataAreaFieldConfigObj.getString(CmnConst.ATTR_SHOW_NAME));
+ }
+ titleObj.put(CmnConst.ATTR_ROWSPAN, maxRow + 1);
+ titleObj.put(CmnConst.ATTR_COLSPAN, 1);
+ if (dataAreaFieldConfigObj.getIntValue(CmnConst.ATTR_X) < groupAreaRangeObj.getIntValue(CmnConst.MIN_X)) {
+ beforeGroupAreaTitleList.add(titleObj);
+ }
+ if (dataAreaFieldConfigObj.getIntValue(CmnConst.ATTR_X) > groupAreaRangeObj.getIntValue(CmnConst.MAX_X)) {
+ if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) {
+ beforeGroupAreaTitleList.add(titleObj);
+ } else {
+ afterGroupAreaTitleList.add(titleObj);
+ }
+ }
+ }
- List<JSONObject> groupTitleList = Lists.newArrayList();
- JSONObject obj;
- for (List<JSONObject> rowList : dataAreaGroupFieldDataList) {
- obj = dataListReportService.extendJSONObject(null, rowList.get(rowList.size() - 1), Arrays.asList(CmnConst.ATTR_ROWSPAN, CmnConst.ATTR_COLSPAN, CmnConst.ATTR_SHOW_NAME, CmnConst.ATTR_IS_STATISTICS_FIELD), -1);
- groupTitleList.add(obj);
- }
+ dataTitleList.addAll(groupAreaRangeTitleList.get(maxRow));
+ dataTitleList.addAll(afterGroupAreaTitleList);
- StringBuilder html = new StringBuilder(1024);
- JSONObject dataAreaGroupFieldObj;
- int rowspan;
- int colspan;
- String value;
- JSONObject groupTitleObj;
- JSONObject keyObj;
- JSONObject valueObj;
- String statisticsType;
- JSONObject dataAreaFieldConfigObj;
- int groupAreaSubCnt;
- int dataAreaSubCnt;
- List<JSONObject> curRowList;
- int index;
- for (int i = 0;i < dataAreaGroupFieldDataList.size();i++) {
- index = 0;
- curRowList = dataAreaGroupFieldDataList.get(i);
- if (!curRowList.isEmpty()) {
- for (int j = 0; j < curRowList.size(); j++) {
- dataAreaGroupFieldObj = curRowList.get(j);
- 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 ");
- }
- }
- 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>");
- index++;
- }
- } 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);
- dataAreaFieldConfigObj = dataAreaFieldConfigMap.get(dataListReportService.fieldInfo2FieldName(dataTitleObj.getString(CmnConst.ATTR_FIELD_INFO)));
- if (dataAreaFieldConfigObj != null) {
- groupAreaSubCnt = keyObj.getIntValue(CmnConst.ATTR_GROUP_AREA_SUB_CNT);
- dataAreaSubCnt = keyObj.getIntValue(CmnConst.ATTR_DATA_AREA_SUB_CNT);
- keyObj.remove(CmnConst.ATTR_GROUP_AREA_SUB_CNT);
- keyObj.remove(CmnConst.ATTR_DATA_AREA_SUB_CNT);
- keyObj.remove(CmnConst.ATTR_REAL_VALUE);
- 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))) {
- if (dataAreaSubCnt == 0 && groupAreaSubCnt == 0) {
- value = valueObj.getString(statisticsType);
- } else {
- 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, groupTitleObj);
- dataListReportService.getTdAttrObj(keyObj, dataTitleObj);
- html.append(dataListReportService.getTdAttrByObj(keyObj));
- // 鏍煎紡
- value = dataListReportService.formatValue(dataAreaFieldConfigObj, value);
- }
- html.append(">").append(value == null ? "" : value).append("</td>");
- }
- html.append("\n</tr>");
- }
+ List<JSONObject> firstList = Lists.newArrayList();
+ firstList.addAll(beforeGroupAreaTitleList);
+ firstList.addAll(groupAreaRangeTitleList.get(0));
+ firstList.addAll(afterGroupAreaTitleList);
- // 鎬昏
- if (!StringUtils.isEmpty(totalName)) {
- html.append(getTotalStatisticsHtml(statisticsMap, dataTitleList, dataAreaFieldConfigMap, dataAreaGroupFieldNameList.size(), getSubCnt(dataAreaFieldRecordObj), totalName));
- }
+ groupAreaRangeTitleList.set(0, firstList);
- return html;
- }
+ StringBuilder html = new StringBuilder(1024);
+ int rowspan;
+ int colspan;
+ String value;
+ for (List<JSONObject> rowList : groupAreaRangeTitleList) {
+ html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_TITLE).append("\">\n ");
+ for (JSONObject dataTitleObj : rowList) {
+ 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);
+ }
+ html.append("<td rowspan=\"").append(rowspan).append("\" colspan=\"").append(colspan).append("\">").append(value == null ? "" : value).append("</td>");
+ }
+ html.append("\n</tr>");
+ }
+ return html;
+ }
- /**
- * 鑾峰彇鏁版嵁鍖哄垎缁勫瓧娈垫暟鎹甽ist
- * @param curOperateObj 褰撳墠鎿嶄綔obj
- * @param dataAreaGroupFieldDataList 鏁版嵁鍖哄垎缁勫瓧娈垫暟鎹甽ist
- * @param preObj 鏈�杩戞搷浣滅殑obj
- * @param row 褰撳墠琛屾暟
- * @param maxCol 鏈�澶у垪鏁�
- * @return 鏁版嵁鍖哄垎缁勫瓧娈垫暟鎹甽ist
- */
- private int getDataAreaGroupFieldDataList(JSONObject curOperateObj, List<List<JSONObject>> dataAreaGroupFieldDataList, JSONObject preObj, int row, int col, int maxCol, String parentFieldName) {
- String key;
- Object value;
- JSONObject curObj;
- JSONObject topLeftCornerObj;
- String dataAreaFieldName = dataListReportService.fieldInfo2FieldName(curOperateObj.getString(CmnConst.ATTR_FIELD_INFO));
- List<String> statisticsFieldList = dataListReportService.transfer2List(curOperateObj.get(CmnConst.ATTR_STATISTICS_FIELD));
- String realValue = curOperateObj.getString(CmnConst.ATTR_REAL_VALUE);
- JSONObject objValue;
- String newKey;
- List<JSONObject> curRowList;
- JSONObject realValueObj;
- for (Map.Entry<String, Object> entry : curOperateObj.entrySet()) {
- curObj = dataListReportService.extendJSONObject(null, preObj, null);
- key = entry.getKey();
- if (CmnConst.ATTR_FIELD_INFO.equals(key) || CmnConst.ATTR_STATISTICS_FIELD.equals(key) || CmnConst.ATTR_REAL_VALUE.equals(key)) {
- continue;
- }
- value = entry.getValue();
- if (value == null) {
- continue;
- }
- if (!StringUtils.isEmpty(realValue) && !StringUtils.isEmpty(parentFieldName)) {
- if (curObj.get(CmnConst.ATTR_REAL_VALUE) == null) {
- realValueObj = new JSONObject();
- curObj.put(CmnConst.ATTR_REAL_VALUE, realValueObj);
- } else {
- realValueObj = (JSONObject) curObj.get(CmnConst.ATTR_REAL_VALUE);
- }
- realValueObj.put(parentFieldName, realValue);
- }
- if (dataAreaGroupFieldDataList.size() < row) {
- curRowList = Lists.newArrayList();
- dataAreaGroupFieldDataList.add(curRowList);
- } else {
- curRowList = dataAreaGroupFieldDataList.get(row - 1);
- }
- if (curRowList.size() < col - 1) {
- for (int i = 0; i < col - 1; i++) {
- curRowList.add(new JSONObject());
- }
- }
- curObj.put(CmnConst.ATTR_SHOW_NAME, key);
- if (statisticsFieldList.contains(key)) {
- curObj.put(CmnConst.ATTR_IS_STATISTICS_FIELD, "1");
- newKey = key.replace(CmnConst.STATISTICS_NAME, "");
- curObj.put(dataAreaFieldName, newKey);
- curObj.put(CmnConst.ATTR_DATA_AREA_SUB_CNT, getSubCnt(curOperateObj.getJSONObject(newKey)));
- } else {
- curObj.put(dataAreaFieldName, key);
- }
- curObj.put(CmnConst.ATTR_ROWSPAN, 1);
- curObj.put(CmnConst.ATTR_COLSPAN, 1);
- curRowList.add(curObj);
- if (value instanceof JSONObject) {
- objValue = (JSONObject) value;
- if (objValue.isEmpty()) {
- curObj.put(CmnConst.ATTR_COLSPAN, maxCol - col + 1);
- if (row > 1 && col > 1) {
- int emptyCount = 0;
- for (JSONObject obj : curRowList) {
- if (obj.isEmpty()) {
- emptyCount++;
- } else {
- break;
- }
- }
- for (int j = 0; j < emptyCount; j++) {
- int curRow = row - 2;
- topLeftCornerObj = dataAreaGroupFieldDataList.get(curRow).get(j);
- while (topLeftCornerObj.isEmpty() && curRow > 0) {
- curRow--;
- topLeftCornerObj = dataAreaGroupFieldDataList.get(curRow).get(j);
- }
- topLeftCornerObj.put(CmnConst.ATTR_ROWSPAN, topLeftCornerObj.getIntValue(CmnConst.ATTR_ROWSPAN) + 1);
- }
- }
- row++;
- continue;
- }
- if (objValue.size() == 1&& objValue.containsKey(CmnConst.ATTR_REAL_VALUE)) {
- row++;
- continue;
- }
- row = getDataAreaGroupFieldDataList(objValue, dataAreaGroupFieldDataList, curObj, row, col + 1, maxCol, dataAreaFieldName);
- }
- }
- return row;
- }
+ /**
+ * 鑾峰彇鍒嗙粍琛ㄥご鍖鸿寖鍥寸殑鏍囬list
+ *
+ * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
+ * @param curOperateObj 褰撳墠鎿嶄綔obj
+ * @param groupAreaRangeTitleList 鍒嗙粍琛ㄥご鍖鸿寖鍥翠笅鏁版嵁鏍囬list
+ * @param preTitleObj 鏈�杩戞搷浣滅殑鏍囬obj
+ * @param row 褰撳墠琛屾暟
+ * @param maxRow 鏈�澶ц鏁�
+ */
+ private void getGroupAreaRangeTitleList(Map<String, JSONObject> dataAreaFieldConfigMap, JSONObject curOperateObj, List<List<JSONObject>> groupAreaRangeTitleList, JSONObject preTitleObj, int row, int maxRow, String parentFieldName) {
+ if (curOperateObj == null || curOperateObj.isEmpty()) {
+ return;
+ }
+ String key;
+ Object value;
+ JSONObject curTitleObj;
+ String groupAreaFieldName = dataListReportService.fieldInfo2FieldName(curOperateObj.getString(CmnConst.ATTR_FIELD_INFO));
+ List<String> statisticsFieldList = dataListReportService.transfer2List(curOperateObj.get(CmnConst.ATTR_STATISTICS_FIELD));
+ String realValue = curOperateObj.getString(CmnConst.ATTR_REAL_VALUE);
+ String fieldName = dataListReportService.fieldInfo2FieldName(curOperateObj.getString(CmnConst.ATTR_FIELD_INFO));
+ String newKey;
+ JSONObject realValueObj;
+ for (Map.Entry<String, Object> entry : curOperateObj.entrySet()) {
+ curTitleObj = dataListReportService.extendJSONObject(null, preTitleObj, null);
+ if (!StringUtils.isEmpty(realValue) && !StringUtils.isEmpty(parentFieldName)) {
+ if (curTitleObj.get(CmnConst.ATTR_REAL_VALUE) == null) {
+ realValueObj = new JSONObject();
+ curTitleObj.put(CmnConst.ATTR_REAL_VALUE, realValueObj);
+ } else {
+ realValueObj = (JSONObject) curTitleObj.get(CmnConst.ATTR_REAL_VALUE);
+ }
+ realValueObj.put(parentFieldName, realValue);
+ }
+ key = entry.getKey();
+ if (CmnConst.ATTR_FIELD_INFO.equals(key) || CmnConst.ATTR_STATISTICS_FIELD.equals(key) || CmnConst.ATTR_REAL_VALUE.equals(key)) {
+ continue;
+ }
+ value = entry.getValue();
+ if (value == null) {
+ continue;
+ }
+ curTitleObj.put(CmnConst.ATTR_SHOW_NAME, key);
+ if (statisticsFieldList.contains(key)) {
+ curTitleObj.put(CmnConst.ATTR_IS_STATISTICS_FIELD, "1");
+ newKey = key.replace(CmnConst.STATISTICS_NAME, "");
+ curTitleObj.put(groupAreaFieldName, newKey);
+ curTitleObj.put(CmnConst.ATTR_GROUP_AREA_SUB_CNT, getSubCnt(curOperateObj.getJSONObject(newKey)));
+ } else {
+ curTitleObj.put(groupAreaFieldName, key);
+ }
+ groupAreaRangeTitleList.get(row).add(curTitleObj);
+ if (value instanceof List) {
+ curTitleObj.put(CmnConst.ATTR_COLSPAN, ((List) value).size());
+ curTitleObj.put(CmnConst.ATTR_ROWSPAN, maxRow - row);
+ for (String dataAreaFieldName : (List<String>) value) {
+ JSONObject cloneTitleObj = (JSONObject) curTitleObj.clone();
+ cloneTitleObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaFieldName));
+ cloneTitleObj.put(CmnConst.ATTR_COLSPAN, 1);
+ cloneTitleObj.put(CmnConst.ATTR_ROWSPAN, 1);
+ JSONObject dataAreaFieldConfigObj = dataAreaFieldConfigMap.get(dataAreaFieldName);
+ cloneTitleObj.put(CmnConst.ATTR_SHOW_NAME, dataListReportService.getStatisticsDesc(dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS), dataAreaFieldConfigObj.getString(CmnConst.ATTR_SHOW_NAME)));
+ groupAreaRangeTitleList.get(maxRow).add(cloneTitleObj);
+ }
+ } else {
+ if (value instanceof JSONObject) {
+ curTitleObj.put(CmnConst.ATTR_COLSPAN, getGroupAreaColCount((JSONObject) value, 0));
+ curTitleObj.put(CmnConst.ATTR_ROWSPAN, 1);
+ getGroupAreaRangeTitleList(dataAreaFieldConfigMap, (JSONObject) value, groupAreaRangeTitleList, curTitleObj, row + 1, maxRow, fieldName);
+ }
+ }
+ }
+ }
- /**
- * 鑾峰彇鎬昏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 ");
- html.append("<td colspan=\"").append(dataAreaGroupFieldCount).append("\">").append(totalName).append("</td>");
- JSONObject dataTitleObj;
- JSONObject keyObj;
- JSONObject dataAreaFieldConfigObj;
- String statisticsType;
- JSONObject valueObj;
- String value;
- int groupAreaSubCnt;
- for (int i = 0;i < dataTitleList.size();i++) {
- 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);
- html.append(dataListReportService.getTdAttrByObj(keyObj));
- // 鏍煎紡
- value = dataListReportService.formatValue(dataAreaFieldConfigObj, value);
- }
- html.append(">").append(value == null ? "" : value).append("</td>");
- }
- html.append("\n</tr>");
- return html;
- }
+ /**
+ * 鑾峰彇涓嬬骇鍒嗙粍椤规暟
+ *
+ * @param obj 寰呮搷浣滅殑obj
+ * @return 涓嬬骇鍒嗙粍椤规暟
+ */
+ private int getSubCnt(JSONObject obj) {
+ int count = 0;
+ List<String> statisticsFieldList = dataListReportService.transfer2List(obj.get(CmnConst.ATTR_STATISTICS_FIELD));
+ for (String key : obj.keySet()) {
+ if (CmnConst.ATTR_FIELD_INFO.equals(key) || CmnConst.ATTR_STATISTICS_FIELD.equals(key) || statisticsFieldList.contains(key)) {
+ continue;
+ }
+ count++;
+ }
+ return count;
+ }
- /**
- * 鑾峰彇缁熻鏂瑰紡涓衡�滄渶缁堢粺璁♀�濈殑鍊�
- * @param keyObj
- * @param dataAreaFieldConfigObj
- * @param statisticsMap
- * @return
- */
- private String getFinalValue(JSONObject keyObj, JSONObject dataAreaFieldConfigObj, Map<JSONObject, JSONObject> statisticsMap) {
- JSONObject valueObj;
- String value;
- if (CmnConst.ATTR_STATISTICS_FINAL_STATISTICS.equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS))
- && "1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD)) && !StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_FORMULA))) {
- // 缁熻鏂瑰紡涓衡�滄渶缁堢粺璁♀��
- String formula = dataAreaFieldConfigObj.getString(CmnConst.ATTR_FORMULA);
- List<String> suitList = dataListReportService.getSuitContent(formula, "\\{#((?!\\{).)+#\\}");
- JSONObject tempObj = (JSONObject) keyObj.clone();
- for (String suitContent : suitList) {
- tempObj.put(CmnConst.ATTR_FIELD_INFO, suitContent);
- valueObj = statisticsMap.get(tempObj);
- formula = formula.replace(suitContent, (valueObj == null || valueObj.getString(CmnConst.ATTR_FINAL_VALUE) == null ? "0" : valueObj.getString(CmnConst.ATTR_FINAL_VALUE)) + "d");
- }
- try {
- value = BaseUtil.executeExpression(formula.replace("/0", "/1").replaceAll("\\/\\{#[\\w]+#}", "/1").replaceAll("\\{#[\\w]+#}", "0"), Maps.newHashMap()).toString();
- } catch (Exception e) {
- SpringMVCContextHolder.getSystemLogger().error(e);
- value = "";
- }
- } else {
- value = "";
- }
- return value;
- }
+ /**
+ * 鑾峰彇鍐呭html
+ *
+ * @param dataTitleList 鏁版嵁鏍囬list
+ * @param dataAreaFieldRecordObj 鏁版嵁鍖哄瓧娈佃褰昽bj
+ * @param statisticsMap 缁熻map
+ * @param totalName 鎬昏鍚嶇О锛岄潪绌�-闇�瑕佹�昏
+ * @param dataAreaGroupFieldNameList 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist
+ * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
+ * @return 涓氬姟鏁版嵁鍐呭html
+ */
+ private StringBuilder getDataAreaDataHtml(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);
- /**
- * 鑾峰彇琛屽垪涓ょ涓嶅悓鐨勪笅绾у垎缁勫钩鍧囧��
- * @param dataAreaSubCnt 鎸夌収鏁版嵁鍖哄垎缁勭殑涓嬬骇鍒嗙粍椤规暟
- * @param groupAreaSubCnt 鎸夌収鍒嗙粍琛ㄥご鍘诲垎缁勭殑涓嬬骇鍒嗙粍椤规暟
- * @param curFieldStatisticsObj 褰撳墠瀛楁缁熻obj
- * @param dataAreaFieldConfigObj 褰撳墠鏁版嵁鍖哄瓧娈电紦瀛榦bj
- * @param statisticsType 缁熻绫诲瀷
- * @return 鎸夌収涓嬬骇鍒嗙粍椤硅繘琛屽钩鍧囩殑琛屽垪骞冲潎鍊�
- */
- private String getTwoTypesGroupAvgStatisticsValue(int dataAreaSubCnt, int groupAreaSubCnt, JSONObject curFieldStatisticsObj, JSONObject dataAreaFieldConfigObj, String statisticsType) {
- // 鍒椾笅绾у垎缁�
- StringBuilder value = new StringBuilder(32);
- String dataAreaValue = getGroupAreaGroupAvgStatisticsValue(dataAreaSubCnt, curFieldStatisticsObj, dataAreaFieldConfigObj, statisticsType, CmnConst.ATTR_STATISTICS_DATA_AREA_AVG, dataAreaSubCnt == 0);
- String groupAreaValue = getGroupAreaGroupAvgStatisticsValue(groupAreaSubCnt, curFieldStatisticsObj, dataAreaFieldConfigObj, statisticsType, CmnConst.ATTR_STATISTICS_GROUP_AREA_AVG, groupAreaSubCnt == 0);
+ List<JSONObject> groupTitleList = Lists.newArrayList();
+ JSONObject obj;
+ for (List<JSONObject> rowList : dataAreaGroupFieldDataList) {
+ obj = dataListReportService.extendJSONObject(null, rowList.get(rowList.size() - 1), Arrays.asList(CmnConst.ATTR_ROWSPAN, CmnConst.ATTR_COLSPAN, CmnConst.ATTR_SHOW_NAME, CmnConst.ATTR_IS_STATISTICS_FIELD), -1);
+ groupTitleList.add(obj);
+ }
- if (dataAreaSubCnt > 0) {
- value.append(dataAreaValue);
- }
- if (dataAreaSubCnt > 0 && groupAreaSubCnt > 0) {
- value.append("\\");
- }
- if (groupAreaSubCnt > 0) {
- value.append(groupAreaValue);
- }
- return value.toString();
- }
+ StringBuilder html = new StringBuilder(1024);
+ JSONObject dataAreaGroupFieldObj;
+ int rowspan;
+ int colspan;
+ String value;
+ JSONObject groupTitleObj;
+ JSONObject keyObj;
+ JSONObject valueObj;
+ String statisticsType;
+ JSONObject dataAreaFieldConfigObj;
+ int groupAreaSubCnt;
+ int dataAreaSubCnt;
+ List<JSONObject> curRowList;
+ int index;
+ for (int i = 0; i < dataAreaGroupFieldDataList.size(); i++) {
+ index = 0;
+ curRowList = dataAreaGroupFieldDataList.get(i);
+ if (!curRowList.isEmpty()) {
+ for (int j = 0; j < curRowList.size(); j++) {
+ dataAreaGroupFieldObj = curRowList.get(j);
+ 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 ");
+ }
+ }
+ 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>");
+ index++;
+ }
+ } 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);
+ dataAreaFieldConfigObj = dataAreaFieldConfigMap.get(dataListReportService.fieldInfo2FieldName(dataTitleObj.getString(CmnConst.ATTR_FIELD_INFO)));
+ if (dataAreaFieldConfigObj != null) {
+ groupAreaSubCnt = keyObj.getIntValue(CmnConst.ATTR_GROUP_AREA_SUB_CNT);
+ dataAreaSubCnt = keyObj.getIntValue(CmnConst.ATTR_DATA_AREA_SUB_CNT);
+ keyObj.remove(CmnConst.ATTR_GROUP_AREA_SUB_CNT);
+ keyObj.remove(CmnConst.ATTR_DATA_AREA_SUB_CNT);
+ keyObj.remove(CmnConst.ATTR_REAL_VALUE);
+ 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))) {
+ if (dataAreaSubCnt == 0 && groupAreaSubCnt == 0) {
+ value = valueObj.getString(statisticsType);
+ } else {
+ 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, groupTitleObj);
+ dataListReportService.getTdAttrObj(keyObj, dataTitleObj);
+ html.append(dataListReportService.getTdAttrByObj(keyObj));
+ // 鏍煎紡
+ value = dataListReportService.formatValue(dataAreaFieldConfigObj, value);
+ }
+ html.append(">").append(value == null ? "" : value).append("</td>");
+ }
+ html.append("\n</tr>");
+ }
- /**
- * 鑾峰彇鎸囧畾绫诲瀷鐨勪笅绾у垎缁勫钩鍧囧��
- * @param subCnt 涓嬬骇鍒嗙粍椤规暟
- * @param curFieldStatisticsObj 褰撳墠瀛楁缁熻obj
- * @param dataAreaFieldConfigObj 褰撳墠鏁版嵁鍖哄瓧娈电紦瀛榦bj
- * @param statisticsType 缁熻绫诲瀷
- * @param avgType CmnConst.ATTR_STATISTICS_DATA_AREA_AVG-琛岋紱CmnConst.ATTR_STATISTICS_GROUP_AREA_AVG-鍒�
- * @return 鎸夌収涓嬬骇鍒嗙粍椤硅繘琛屽钩鍧囩殑骞冲潎鍊�
- */
- private String getGroupAreaGroupAvgStatisticsValue(int subCnt, JSONObject curFieldStatisticsObj, JSONObject dataAreaFieldConfigObj, String statisticsType, String avgType, boolean lastStage) {
- String value;
- if (subCnt > 0) {
- curFieldStatisticsObj.put(CmnConst.ATTR_STATISTICS_SUB_CNT, subCnt);
- dataListReportService.getAvgValue(curFieldStatisticsObj, dataAreaFieldConfigObj, lastStage);
- value = curFieldStatisticsObj.getString(statisticsType);
- curFieldStatisticsObj.put(avgType, value);
- } else {
- value = curFieldStatisticsObj.getString(statisticsType);
- }
- return value == null ? "" : value;
- }
+ // 鎬昏
+ if (!StringUtils.isEmpty(totalName)) {
+ html.append(getTotalStatisticsHtml(statisticsMap, dataTitleList, dataAreaFieldConfigMap, dataAreaGroupFieldNameList.size(), getSubCnt(dataAreaFieldRecordObj), totalName));
+ }
+
+ return html;
+ }
+
+ /**
+ * 鑾峰彇鍐呭html
+ *
+ * @param dataTitleList 鏁版嵁鏍囬list
+ * @param dataAreaFieldRecordObj 鏁版嵁鍖哄瓧娈佃褰昽bj
+ * @param statisticsMap 缁熻map
+ * @param totalName 鎬昏鍚嶇О锛岄潪绌�-闇�瑕佹�昏
+ * @param dataAreaGroupFieldNameList 鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist
+ * @param dataAreaFieldConfigMap 鏁版嵁鍖哄瓧娈电紦瀛榤ap
+ * @return 涓氬姟鏁版嵁鍐呭html
+ */
+ 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<JSONObject> groupTitleList = Lists.newArrayList();
+ JSONObject obj;
+ for (List<JSONObject> rowList : dataAreaGroupFieldDataList) {
+ obj = dataListReportService.extendJSONObject(null, rowList.get(rowList.size() - 1), Arrays.asList(CmnConst.ATTR_ROWSPAN, CmnConst.ATTR_COLSPAN, CmnConst.ATTR_SHOW_NAME, CmnConst.ATTR_IS_STATISTICS_FIELD), -1);
+ groupTitleList.add(obj);
+ }
+
+ StringBuilder html = new StringBuilder(1024);
+ JSONObject dataAreaGroupFieldObj;
+ int rowspan;
+ int colspan;
+ String value;
+ JSONObject groupTitleObj;
+ JSONObject keyObj;
+ JSONObject valueObj;
+ String statisticsType;
+ JSONObject dataAreaFieldConfigObj;
+ int groupAreaSubCnt;
+ int dataAreaSubCnt;
+ List<JSONObject> curRowList;
+ int index;
+ for (int i = 0; i < dataAreaGroupFieldDataList.size(); i++) {
+ index = 0;
+ curRowList = dataAreaGroupFieldDataList.get(i);
+ if (!curRowList.isEmpty()) {
+ for (int j = 0; j < curRowList.size(); j++) {
+ dataAreaGroupFieldObj = curRowList.get(j);
+ 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 ");
+ }
+ }
+ 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>");
+ index++;
+ }
+ } 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);
+ dataAreaFieldConfigObj = dataAreaFieldConfigMap.get(dataListReportService.fieldInfo2FieldName(dataTitleObj.getString(CmnConst.ATTR_FIELD_INFO)));
+ if (dataAreaFieldConfigObj != null) {
+ groupAreaSubCnt = keyObj.getIntValue(CmnConst.ATTR_GROUP_AREA_SUB_CNT);
+ dataAreaSubCnt = keyObj.getIntValue(CmnConst.ATTR_DATA_AREA_SUB_CNT);
+ keyObj.remove(CmnConst.ATTR_GROUP_AREA_SUB_CNT);
+ keyObj.remove(CmnConst.ATTR_DATA_AREA_SUB_CNT);
+ keyObj.remove(CmnConst.ATTR_REAL_VALUE);
+ 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))) {
+ if (dataAreaSubCnt == 0 && groupAreaSubCnt == 0) {
+ value = valueObj.getString(statisticsType);
+ } else {
+ 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, groupTitleObj);
+ dataListReportService.getTdAttrObj(keyObj, dataTitleObj);
+ html.append(dataListReportService.getTdAttrByObj(keyObj));
+ // 鏍煎紡
+ value = dataListReportService.formatValue(dataAreaFieldConfigObj, value);
+ }
+ html.append(">").append(value == null ? "" : value).append("</td>");
+ }
+ html.append("\n</tr>");
+ }
+
+ // 鎬昏
+ if (!StringUtils.isEmpty(totalName)) {
+ html.append(getTotalStatisticsHtml(statisticsMap, dataTitleList, dataAreaFieldConfigMap, dataAreaGroupFieldNameList.size(), getSubCnt(dataAreaFieldRecordObj), totalName));
+ }
+
+ return null;
+ }
+
+ /**
+ * 鑾峰彇鏁版嵁鍖哄垎缁勫瓧娈垫暟鎹甽ist
+ *
+ * @param curOperateObj 褰撳墠鎿嶄綔obj
+ * @param dataAreaGroupFieldDataList 鏁版嵁鍖哄垎缁勫瓧娈垫暟鎹甽ist
+ * @param preObj 鏈�杩戞搷浣滅殑obj
+ * @param row 褰撳墠琛屾暟
+ * @param maxCol 鏈�澶у垪鏁�
+ * @return 鏁版嵁鍖哄垎缁勫瓧娈垫暟鎹甽ist
+ */
+ private int getDataAreaGroupFieldDataList(JSONObject curOperateObj, List<List<JSONObject>> dataAreaGroupFieldDataList, JSONObject preObj, int row, int col, int maxCol, String parentFieldName) {
+ String key;
+ Object value;
+ JSONObject curObj;
+ JSONObject topLeftCornerObj;
+ String dataAreaFieldName = dataListReportService.fieldInfo2FieldName(curOperateObj.getString(CmnConst.ATTR_FIELD_INFO));
+ List<String> statisticsFieldList = dataListReportService.transfer2List(curOperateObj.get(CmnConst.ATTR_STATISTICS_FIELD));
+ String realValue = curOperateObj.getString(CmnConst.ATTR_REAL_VALUE);
+ JSONObject objValue;
+ String newKey;
+ List<JSONObject> curRowList;
+ JSONObject realValueObj;
+ for (Map.Entry<String, Object> entry : curOperateObj.entrySet()) {
+ curObj = dataListReportService.extendJSONObject(null, preObj, null);
+ key = entry.getKey();
+ if (CmnConst.ATTR_FIELD_INFO.equals(key) || CmnConst.ATTR_STATISTICS_FIELD.equals(key) || CmnConst.ATTR_REAL_VALUE.equals(key)) {
+ continue;
+ }
+ value = entry.getValue();
+ if (value == null) {
+ continue;
+ }
+ if (!StringUtils.isEmpty(realValue) && !StringUtils.isEmpty(parentFieldName)) {
+ if (curObj.get(CmnConst.ATTR_REAL_VALUE) == null) {
+ realValueObj = new JSONObject();
+ curObj.put(CmnConst.ATTR_REAL_VALUE, realValueObj);
+ } else {
+ realValueObj = (JSONObject) curObj.get(CmnConst.ATTR_REAL_VALUE);
+ }
+ realValueObj.put(parentFieldName, realValue);
+ }
+ if (dataAreaGroupFieldDataList.size() < row) {
+ curRowList = Lists.newArrayList();
+ dataAreaGroupFieldDataList.add(curRowList);
+ } else {
+ curRowList = dataAreaGroupFieldDataList.get(row - 1);
+ }
+ if (curRowList.size() < col - 1) {
+ for (int i = 0; i < col - 1; i++) {
+ curRowList.add(new JSONObject());
+ }
+ }
+ curObj.put(CmnConst.ATTR_SHOW_NAME, key);
+ if (statisticsFieldList.contains(key)) {
+ curObj.put(CmnConst.ATTR_IS_STATISTICS_FIELD, "1");
+ newKey = key.replace(CmnConst.STATISTICS_NAME, "");
+ curObj.put(dataAreaFieldName, newKey);
+ curObj.put(CmnConst.ATTR_DATA_AREA_SUB_CNT, getSubCnt(curOperateObj.getJSONObject(newKey)));
+ } else {
+ curObj.put(dataAreaFieldName, key);
+ }
+ curObj.put(CmnConst.ATTR_ROWSPAN, 1);
+ curObj.put(CmnConst.ATTR_COLSPAN, 1);
+ curRowList.add(curObj);
+ if (value instanceof JSONObject) {
+ objValue = (JSONObject) value;
+ if (objValue.isEmpty()) {
+ curObj.put(CmnConst.ATTR_COLSPAN, maxCol - col + 1);
+ if (row > 1 && col > 1) {
+ int emptyCount = 0;
+ for (JSONObject obj : curRowList) {
+ if (obj.isEmpty()) {
+ emptyCount++;
+ } else {
+ break;
+ }
+ }
+ for (int j = 0; j < emptyCount; j++) {
+ int curRow = row - 2;
+ topLeftCornerObj = dataAreaGroupFieldDataList.get(curRow).get(j);
+ while (topLeftCornerObj.isEmpty() && curRow > 0) {
+ curRow--;
+ topLeftCornerObj = dataAreaGroupFieldDataList.get(curRow).get(j);
+ }
+ topLeftCornerObj.put(CmnConst.ATTR_ROWSPAN, topLeftCornerObj.getIntValue(CmnConst.ATTR_ROWSPAN) + 1);
+ }
+ }
+ row++;
+ continue;
+ }
+ if (objValue.size() == 1 && objValue.containsKey(CmnConst.ATTR_REAL_VALUE)) {
+ row++;
+ continue;
+ }
+ row = getDataAreaGroupFieldDataList(objValue, dataAreaGroupFieldDataList, curObj, row, col + 1, maxCol, dataAreaFieldName);
+ }
+ }
+ return row;
+ }
+
+ /**
+ * 鑾峰彇鎬昏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 ");
+ html.append("<td colspan=\"").append(dataAreaGroupFieldCount).append("\">").append(totalName).append("</td>");
+ JSONObject dataTitleObj;
+ JSONObject keyObj;
+ JSONObject dataAreaFieldConfigObj;
+ String statisticsType;
+ JSONObject valueObj;
+ String value;
+ int groupAreaSubCnt;
+ for (int i = 0; i < dataTitleList.size(); i++) {
+ 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);
+ html.append(dataListReportService.getTdAttrByObj(keyObj));
+ // 鏍煎紡
+ value = dataListReportService.formatValue(dataAreaFieldConfigObj, value);
+ }
+ html.append(">").append(value == null ? "" : value).append("</td>");
+ }
+ html.append("\n</tr>");
+ return html;
+ }
+
+ /**
+ * 鑾峰彇缁熻鏂瑰紡涓衡�滄渶缁堢粺璁♀�濈殑鍊�
+ *
+ * @param keyObj
+ * @param dataAreaFieldConfigObj
+ * @param statisticsMap
+ * @return
+ */
+ private String getFinalValue(JSONObject keyObj, JSONObject dataAreaFieldConfigObj, Map<JSONObject, JSONObject> statisticsMap) {
+ JSONObject valueObj;
+ String value;
+ if (CmnConst.ATTR_STATISTICS_FINAL_STATISTICS.equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS))
+ && "1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD)) && !StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_FORMULA))) {
+ // 缁熻鏂瑰紡涓衡�滄渶缁堢粺璁♀��
+ String formula = dataAreaFieldConfigObj.getString(CmnConst.ATTR_FORMULA);
+ List<String> suitList = dataListReportService.getSuitContent(formula, "\\{#((?!\\{).)+#\\}");
+ JSONObject tempObj = (JSONObject) keyObj.clone();
+ for (String suitContent : suitList) {
+ tempObj.put(CmnConst.ATTR_FIELD_INFO, suitContent);
+ valueObj = statisticsMap.get(tempObj);
+ formula = formula.replace(suitContent, (valueObj == null || valueObj.getString(CmnConst.ATTR_FINAL_VALUE) == null ? "0" : valueObj.getString(CmnConst.ATTR_FINAL_VALUE)) + "d");
+ }
+ try {
+ value = BaseUtil.executeExpression(formula.replace("/0", "/1").replaceAll("\\/\\{#[\\w]+#}", "/1").replaceAll("\\{#[\\w]+#}", "0"), Maps.newHashMap()).toString();
+ } catch (Exception e) {
+ SpringMVCContextHolder.getSystemLogger().error(e);
+ value = "";
+ }
+ } else {
+ value = "";
+ }
+ return value;
+ }
+
+ /**
+ * 鑾峰彇琛屽垪涓ょ涓嶅悓鐨勪笅绾у垎缁勫钩鍧囧��
+ *
+ * @param dataAreaSubCnt 鎸夌収鏁版嵁鍖哄垎缁勭殑涓嬬骇鍒嗙粍椤规暟
+ * @param groupAreaSubCnt 鎸夌収鍒嗙粍琛ㄥご鍘诲垎缁勭殑涓嬬骇鍒嗙粍椤规暟
+ * @param curFieldStatisticsObj 褰撳墠瀛楁缁熻obj
+ * @param dataAreaFieldConfigObj 褰撳墠鏁版嵁鍖哄瓧娈电紦瀛榦bj
+ * @param statisticsType 缁熻绫诲瀷
+ * @return 鎸夌収涓嬬骇鍒嗙粍椤硅繘琛屽钩鍧囩殑琛屽垪骞冲潎鍊�
+ */
+ private String getTwoTypesGroupAvgStatisticsValue(int dataAreaSubCnt, int groupAreaSubCnt, JSONObject curFieldStatisticsObj, JSONObject dataAreaFieldConfigObj, String statisticsType) {
+ // 鍒椾笅绾у垎缁�
+ StringBuilder value = new StringBuilder(32);
+ String dataAreaValue = getGroupAreaGroupAvgStatisticsValue(dataAreaSubCnt, curFieldStatisticsObj, dataAreaFieldConfigObj, statisticsType, CmnConst.ATTR_STATISTICS_DATA_AREA_AVG, dataAreaSubCnt == 0);
+ String groupAreaValue = getGroupAreaGroupAvgStatisticsValue(groupAreaSubCnt, curFieldStatisticsObj, dataAreaFieldConfigObj, statisticsType, CmnConst.ATTR_STATISTICS_GROUP_AREA_AVG, groupAreaSubCnt == 0);
+
+ if (dataAreaSubCnt > 0) {
+ value.append(dataAreaValue);
+ }
+ if (dataAreaSubCnt > 0 && groupAreaSubCnt > 0) {
+ value.append("\\");
+ }
+ if (groupAreaSubCnt > 0) {
+ value.append(groupAreaValue);
+ }
+ return value.toString();
+ }
+
+ /**
+ * 鑾峰彇鎸囧畾绫诲瀷鐨勪笅绾у垎缁勫钩鍧囧��
+ *
+ * @param subCnt 涓嬬骇鍒嗙粍椤规暟
+ * @param curFieldStatisticsObj 褰撳墠瀛楁缁熻obj
+ * @param dataAreaFieldConfigObj 褰撳墠鏁版嵁鍖哄瓧娈电紦瀛榦bj
+ * @param statisticsType 缁熻绫诲瀷
+ * @param avgType CmnConst.ATTR_STATISTICS_DATA_AREA_AVG-琛岋紱CmnConst.ATTR_STATISTICS_GROUP_AREA_AVG-鍒�
+ * @return 鎸夌収涓嬬骇鍒嗙粍椤硅繘琛屽钩鍧囩殑骞冲潎鍊�
+ */
+ private String getGroupAreaGroupAvgStatisticsValue(int subCnt, JSONObject curFieldStatisticsObj, JSONObject dataAreaFieldConfigObj, String statisticsType, String avgType, boolean lastStage) {
+ String value;
+ if (subCnt > 0) {
+ curFieldStatisticsObj.put(CmnConst.ATTR_STATISTICS_SUB_CNT, subCnt);
+ dataListReportService.getAvgValue(curFieldStatisticsObj, dataAreaFieldConfigObj, lastStage);
+ value = curFieldStatisticsObj.getString(statisticsType);
+ curFieldStatisticsObj.put(avgType, value);
+ } else {
+ value = curFieldStatisticsObj.getString(statisticsType);
+ }
+ return value == null ? "" : value;
+ }
}
diff --git a/src/main/java/com/product/server/report/service/ReportConfigService.java b/src/main/java/com/product/server/report/service/ReportConfigService.java
index 76180f4..6a8915c 100644
--- a/src/main/java/com/product/server/report/service/ReportConfigService.java
+++ b/src/main/java/com/product/server/report/service/ReportConfigService.java
@@ -317,7 +317,7 @@
fseFunction.setValue(CmnConst.FUNCTION_NAME, fseReport.getString(CmnConst.REPORT_NAME)); //鍔熻兘鍚嶇О
fseFunction.setValue(CmnConst.FUNCTION_DESCRIPTION, fseReport.getString(CmnConst.REPORT_NAME)); //鍔熻兘鎻忚堪
fseFunction.setValue(CmnConst.STATUS_UUID, 1); //鏄惁鍚敤
- fseFunction.setValue(CmnConst.FUNCTION_TYPE_UUID, 1); //鍔熻兘绫诲瀷-涓氬姟鍔熻兘
+ fseFunction.setValue(CmnConst.FUNCTION_TYPE_UUID, 5); //鍔熻兘绫诲瀷-涓氬姟鍚庡彴绠$悊 绠$悊鍛樺拰鏅�氱敤鎴烽兘鑳藉垎閰嶈鎶ヨ〃鐨勬潈闄�
fseFunction.setValue(CmnConst.CLIENT_TYPE_UUID, "Web"); //瀹㈡埛绔被鍨�
fseFunction.setValue(CmnConst.VERSION_UUID, "001");
fseFunction.setValue(CmnConst.DATA_TYPE, 1);// 鏁版嵁绫诲瀷
@@ -384,11 +384,11 @@
// 鎻愬彇鍙戝竷鐨勮鑹茬浉鍏虫暟鎹�
List<String> roleUUIDList = Lists.newArrayList();
List<String> clientUUIDList = Lists.newArrayList();
- String[] singleRoleInfoArr;
+ clientUUIDList.add(SpringMVCContextHolder.getCurrentUser().getClientUuid());
+// String[] singleRoleInfoArr;
for (String singleRoleInfo : fse.getString(CmnConst.ROLE_UUID).split("#")) {
- singleRoleInfoArr = singleRoleInfo.split(",");
- roleUUIDList.add(singleRoleInfoArr[2]);
- clientUUIDList.add(singleRoleInfoArr[0]);
+// singleRoleInfoArr = singleRoleInfo.split(",");
+ roleUUIDList.add(singleRoleInfo);
}
// 2.缁戝畾瑙掕壊(缁欐煇涓�瑙掕壊璧嬩簣璇ュ姛鑳�)
--
Gitblit v1.9.2