From 1156a6e9619864201de922f4cfa93f6db989ff2e Mon Sep 17 00:00:00 2001
From: 1821349743@qq.com <1821349743@qq.com>
Date: 星期一, 17 四月 2023 12:09:07 +0800
Subject: [PATCH] report update

---
 src/main/java/com/product/server/report/service/GroupReportService.java |  186 ++++++++++++++++++++++++++++++++++++---------
 1 files changed, 147 insertions(+), 39 deletions(-)

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

--
Gitblit v1.9.2