From 340049ec6c2c1d830f5331e2cbb02204ee1572b1 Mon Sep 17 00:00:00 2001
From: 许鹏程 <1821349743@qq.com>
Date: 星期五, 26 五月 2023 18:09:36 +0800
Subject: [PATCH] 菜单bug

---
 src/main/java/com/product/server/report/service/DataListReportService.java |  370 ++++++++++++++++++++++++----------------------------
 1 files changed, 172 insertions(+), 198 deletions(-)

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 ef59fc0..e8f226b 100644
--- a/src/main/java/com/product/server/report/service/DataListReportService.java
+++ b/src/main/java/com/product/server/report/service/DataListReportService.java
@@ -1,5 +1,8 @@
 package com.product.server.report.service;
 
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.util.NumberUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Lists;
@@ -18,6 +21,7 @@
 import com.product.core.service.support.AbstractBaseService;
 import com.product.core.service.support.QueryFilterService;
 import com.product.core.spring.context.SpringMVCContextHolder;
+import com.product.module.data.service.SystemDataExportService;
 import com.product.server.report.config.CmnConst;
 import com.product.server.report.config.ReportCode;
 import com.product.server.report.entity.ReportColumn;
@@ -27,6 +31,9 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.text.DecimalFormat;
 import java.text.ParseException;
@@ -34,6 +41,7 @@
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 /**
  * Copyright 漏 6c
@@ -54,6 +62,107 @@
 	private QueryFilterService queryFilterService;
 	@Autowired
 	private RouterService routerService;
+	@Resource
+	private SystemDataExportService exportService;
+
+	public void outReportExcel(HttpServletResponse response, FieldSetEntity fse) throws BaseException, IOException {
+		ReportEntity reportEntity = getReportEntity(fse);
+		List<List<ReportColumn>> reportHeader = reportEntity.getReportHeader();
+
+		List<List<String>> headerTemp = processingMergeData(reportHeader);
+		List<List<String>> header = headerTemp.get(0).stream().map(item -> new ArrayList<String>()).collect(Collectors.toList());
+		int size = headerTemp.get(0).size();
+		for (int i = 0; i < size; i++) {
+			for (int k = 0; k < headerTemp.size(); k++) {
+				header.get(i).add(headerTemp.get(k).get(i));
+			}
+		}
+
+		List<List<ReportColumn>> reportData = reportEntity.getReportData();
+		if (!CollectionUtil.isEmpty(reportEntity.getReportTail())) {
+			reportData.addAll(reportEntity.getReportTail());
+		}
+
+		List<List<String>> data = processingMergeData(reportData);
+		exportService.writeExcel(header, data, "娴嬭瘯", response);
+	}
+
+
+	private static List<List<String>> processingMergeData(List<List<ReportColumn>> data) {
+		if (CollectionUtil.isEmpty(data)) {
+			return null;
+		}
+		List<List<String>> resultData = data.stream().map(item -> new ArrayList<String>()).collect(Collectors.toList());
+		for (int i = 0; i < data.size(); i++) {
+			List<ReportColumn> columns = data.get(i);
+			for (ReportColumn column : columns) {
+				//璺ㄨ
+				int rowspan = column.getRowspan() < 1 ? 1 : column.getRowspan();
+				//璺ㄥ垪
+				int colspan = column.getColspan() < 1 ? 1 : column.getColspan();
+				List<String> currentCell = new ArrayList<>();
+				for (int k = 0; k < colspan; k++) {
+					currentCell.add(column.getContent(true));
+				}
+				for (int j = 0; j < rowspan; j++) {
+					resultData.get(j + i).addAll(currentCell);
+				}
+				System.out.println(resultData);
+			}
+		}
+		return resultData;
+	}
+
+	public static void main(String[] args) {
+		List<List<ReportColumn>> data = new ArrayList<>();
+		List<ReportColumn> columns = new ArrayList<>();
+		ReportColumn column = new ReportColumn();
+		column.setRowspan(2);
+		column.setColspan(4);
+		column.setContent("璺ㄨ鏁帮細2锛岃法鍒楁暟锛�4");
+		columns.add(column);
+		data.add(columns);
+		columns = new ArrayList<>();
+		data.add(columns);
+		for (int i = 0; i < 3; i++) {
+			column = new ReportColumn();
+			column.setContent("璺ㄨ鏁帮細1锛岃法鍒楁暟锛�1,涓嬫爣:" + i);
+			columns.add(column);
+		}
+		processingMergeData(data);
+	}
+
+
+	/**
+	 * @param target
+	 * @param content
+	 * @param colspan
+	 * @param rowspan
+	 * @param currentColspan
+	 * @param currentRowsSpan
+	 */
+	private void rowspanAndColspan(String[][] target, String content, int colspan, int rowspan, int currentColspan, int currentRowsSpan) {
+		int k = currentColspan;
+		int i = currentRowsSpan;
+		if (colspan > 1) {
+			for (int j = 1; j < colspan; j++) {
+				int index = j + k;
+				while (target[i][index] != null) {
+					index++;
+				}
+				target[i][index] = content;
+			}
+		}
+		if (rowspan > 1) {
+			for (int j = 1; j < rowspan; j++) {
+				int index = i + k;
+				while (target[index][k] != null) {
+					index++;
+				}
+				target[index][k] = content;
+			}
+		}
+	}
 
 	/**
 	 * 鍔犺浇鎵�鏈夌紦瀛�
@@ -134,11 +243,9 @@
 			if (preX != x || preY != y) {
 				fieldConfigObj = new JSONObject();
 				areaList.add(fieldConfigObj);
-			} else if (areaList.size() > 0) {
-				fieldConfigObj = areaList.get(areaList.size() - 1);
 			} else {
-				continue;
-			}
+                fieldConfigObj = areaList.get(areaList.size() - 1);
+            }
 			fieldConfigObj.put(attrFse.getString(CmnConst.ATTR_NAME), attrFse.getString(CmnConst.ATTR_VALUE));
 			fieldConfigObj.put(CmnConst.ATTR_X, x);
 			fieldConfigObj.put(CmnConst.ATTR_Y, y);
@@ -253,6 +360,7 @@
 		}
 	}
 
+
 	/**
 	 * 鑾峰彇鎶ヨ〃
 	 *
@@ -262,6 +370,7 @@
 		ReportEntity report = null;
 		String reportConfigUUID = fse.getUUID();
 		if (!StringUtils.isEmpty(fse.getString("~report_config_uuid~"))) {
+			//瀛愭姤琛ㄤ細浼犲叆姝ey浣滀负鎶ヨ〃鐨剈uid 瑙勯伩鍙傛暟涓湁uuid鐨刱ey
 			reportConfigUUID = fse.getString("~report_config_uuid~");
 		}
 		DataTableEntity reportConfigDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_CONFIG, new String[]{reportConfigUUID});
@@ -387,15 +496,15 @@
 
 		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));
+			report = groupReportService.getReportEntity(recordDte, totalName, reportConfigMap);
 //			resultObj.putAll(groupReportService.getReport(recordDte, totalName, reportConfigMap, tableStyle));
 		}
-		//TODO
-
+		report.setReportConfigUid(reportConfigFse.getUUID());
+		report.setReportName(reportConfigFse.getString(CmnConst.REPORT_NAME));
 //		report.setFilterInfo(outerMap);
 		if (CmnConst.FALSE.equals(resultObj.getString(CmnConst.RETURN_ATTR_RESULT))) {
 			resultObj.put(CmnConst.RETURN_ATTR_RESULT, true);
@@ -405,7 +514,7 @@
 			SQLEntity sqlEntity = recordDte.getSqle();
 			if ("1".equals(reportConfigFse.getString(CmnConst.IS_PAGE)) && sqlEntity != null) {
 				report.setPage(true);
-				report.setTotalPage(sqlEntity.getTotalpage());
+				report.setTotalCount(sqlEntity.getTotalCount());
 				report.setPageSize(StringUtils.isEmpty(reportConfigFse.getString(CmnConst.PAGE_SIZE)) ? 0 : reportConfigFse.getInteger(CmnConst.PAGE_SIZE));
 				report.setPageIndex(curPage);
 //				resultObj.put(CmnConst.IS_PAGE, 1);
@@ -421,172 +530,13 @@
 		report.setSystemFieldMeta(getSearchInfo(reportSourceFse.getUUID()));
 		report.setReportType(reportConfigFse.getString("type_uuid"));
 //		resultObj.put("systemFieldMeta", );
-		resultObj.put("report_type", reportConfigFse.getString("type_uuid"));
+//		resultObj.put("report_type", reportConfigFse.getString("type_uuid"));
 //        System.out.println(resultObj.getString("html"));
 
 		return report;
 	}
 
-	/**
-	 * 鑾峰彇鎶ヨ〃
-	 *
-	 * @return
-	 */
-	public JSONObject getReport(FieldSetEntity fse) {
-		String reportConfigUUID = fse.getUUID();
-		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();
-		// 棣栨鍔犺浇锛岄粯璁ゆ坊鍔犳潯浠�
-		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, Map<String, String>> outerMap = Maps.newHashMap();
-			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)) {
-			resultObj.putAll(commonReportService.getReport(recordDte, totalName, reportConfigMap, tableStyle));
-		} 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));
-		}
-
-		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) {
-				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));
-			} else {
-				resultObj.put(CmnConst.IS_PAGE, 0);
-			}
-		}
-		if (!DataTableEntity.isEmpty(recordDte)) {
-			resultObj.put("current_page_count", recordDte.getRows());
-		}
-		resultObj.put("systemFieldMeta", getSearchInfo(reportSourceFse.getUUID()));
-		resultObj.put("report_type", reportConfigFse.getString("type_uuid"));
-//        System.out.println(resultObj.getString("html"));
-
-		return resultObj;
-	}
 
 	/**
 	 * 鑾峰彇鎶ヨ〃缂撳瓨淇℃伅
@@ -628,7 +578,9 @@
 	 * @param reportConfigFse
 	 * @return
 	 */
-	private DataTableEntity getRecordDte(StringBuilder sort, int curPage, FieldSetEntity reportSourceFse, FieldSetEntity fse, FieldSetEntity reportConfigFse, Map<Integer, List<JSONObject>> reportConfigMap) {
+	private DataTableEntity getRecordDte(StringBuilder sort, int curPage, FieldSetEntity
+			reportSourceFse, FieldSetEntity fse, FieldSetEntity
+												 reportConfigFse, Map<Integer, List<JSONObject>> reportConfigMap) {
 		boolean spTimeFlag = reportConfigMap != null;
 		String sql;
 		String sqlText = reportSourceFse.getString(CmnConst.SQL_TEXT);
@@ -766,7 +718,8 @@
 	 * @param sort
 	 * @return
 	 */
-	private String replaceSqlContent(String sqlText, FieldSetEntity fse, StringBuilder sort, FieldSetEntity reportConfigFse, int curPage, String selectedFields, Map<String, List<String>> queryFilterMap) {
+	private String replaceSqlContent(String sqlText, FieldSetEntity fse, StringBuilder sort, FieldSetEntity
+			reportConfigFse, int curPage, String selectedFields, Map<String, List<String>> queryFilterMap) {
 		queryFilterMap = queryFilterMap == null ? queryFilterService.getQueryFilterMore(fse) : queryFilterMap;
 		selectedFields = StringUtils.isEmpty(selectedFields) ? "*" : selectedFields;
 		// 鏇挎崲sql涓殑绯荤粺鍙傛暟
@@ -841,7 +794,8 @@
 		return sql.toString();
 	}
 
-	private String replaceSqlContent(String sqlText, FieldSetEntity fse, StringBuilder sort, FieldSetEntity reportConfigFse, int curPage) {
+	private String replaceSqlContent(String sqlText, FieldSetEntity fse, StringBuilder sort, FieldSetEntity
+			reportConfigFse, int curPage) {
 		return replaceSqlContent(sqlText, fse, sort, reportConfigFse, curPage, null, null);
 	}
 
@@ -854,7 +808,8 @@
 	 * @param queryFilterMap
 	 * @return
 	 */
-	private String spReplaceSqlContent(String suitContent, String regexp, int num, Map<String, List<String>> queryFilterMap, Map<String, List<String>> residueQueryFilterMap) {
+	private String spReplaceSqlContent(String suitContent, String regexp, int num, Map<
+			String, List<String>> queryFilterMap, Map<String, List<String>> residueQueryFilterMap) {
 		List<String> innerSuitList = getSuitContent(suitContent, regexp);
 		String curField;
 		String filter;
@@ -933,7 +888,9 @@
 	 * @param queryFilterMap
 	 * @param curFieldName
 	 */
-	private void spDealFilterForLastYear(Map<String, List<String>> tempQueryFilterMap, Map<String, List<String>> queryFilterMap, String curFieldName) {
+	private void spDealFilterForLastYear
+	(Map<String, List<String>> tempQueryFilterMap, Map<String, List<String>> queryFilterMap, String
+			curFieldName) {
 		List<String> paramList = tempQueryFilterMap.get(curFieldName);
 		for (int i = 0; i < paramList.size(); i++) {
 			paramList.set(i, paramList.get(i).replace("str_to_date(", "date_add(str_to_date(")
@@ -954,7 +911,9 @@
 	 * @param queryFilterMap
 	 * @param curFieldName
 	 */
-	private void spDealFilterForPrePeriod(Map<String, List<String>> tempQueryFilterMap, Map<String, List<String>> queryFilterMap, String curFieldName) {
+	private void spDealFilterForPrePeriod
+	(Map<String, List<String>> tempQueryFilterMap, Map<String, List<String>> queryFilterMap, String
+			curFieldName) {
 		List<String> paramList = tempQueryFilterMap.get(curFieldName);
 		String[] timeArr = paramList.get(0).split("~");
 		try {
@@ -987,7 +946,8 @@
 	 * @param dataList
 	 * @return
 	 */
-	private Set<String> getFieldAndSpTimeStatisticsTypeSet(Set<String> baseFieldSet, Map<String, Map<String, JSONObject>> spTimeStatisticsFieldMap, List<JSONObject> dataList) {
+	private Set<String> getFieldAndSpTimeStatisticsTypeSet
+	(Set<String> baseFieldSet, Map<String, Map<String, JSONObject>> spTimeStatisticsFieldMap, List<JSONObject> dataList) {
 		Set<String> spTimeStatisticsTypeSet = Sets.newHashSet();
 		JSONObject curFieldObj;
 		String fieldName;
@@ -1133,7 +1093,8 @@
 	 * @param locationType            浣嶇疆绫诲瀷锛宧ead-澶撮儴锛宼ail-灏鹃儴
 	 * @return
 	 */
-	public StringBuilder getTitleHtml(List<JSONObject> list, int totalColCount, Map<String, Set<String>> headAndTailTitleDataMap, String locationType) {
+	public StringBuilder getTitleHtml(List<JSONObject> list, int totalColCount, Map<
+			String, Set<String>> headAndTailTitleDataMap, String locationType) {
 		StringBuilder html = new StringBuilder(1024);
 		int colspan;
 		int preRow = 0;
@@ -1201,16 +1162,17 @@
 	 * @param locationType            浣嶇疆绫诲瀷锛宧ead-澶撮儴锛宼ail-灏鹃儴
 	 * @return
 	 */
-	public List<List<ReportColumn>> getTitle(List<JSONObject> list, int totalColCount, Map<String, Set<String>> headAndTailTitleDataMap, String locationType) {
+	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);
+//		StringBuilder html = new StringBuilder(1024);
 		int colspan;
 		int preRow = 0;
 		int preCol = 0;
 		int curRow;
 		int curCol;
 		String value;
-		String style;
+//		String style;
 
 		List<ReportColumn> reportColumns = new ArrayList<>();
 		for (JSONObject singleObj : list) {
@@ -1220,22 +1182,26 @@
 			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 ("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(!reportColumns.isEmpty()){
+					row.add(reportColumns);
+					reportColumns=new ArrayList<>();
 				}
-				if (preRow == 0 && preCol == 0 && preCol < curCol - 1) {
-					row.add(getAimNumTdPlaceholderColumn(curCol - preCol - 1, 1));
-				}
+//				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) {
@@ -1255,7 +1221,7 @@
 			}
 		}
 		row.add(reportColumns);
-		reportColumns.addAll(getAimNumTdPlaceholderColumn(totalColCount - preCol, 1));
+//		reportColumns.addAll(getAimNumTdPlaceholderColumn(totalColCount - preCol, 1));
 //		row.add();
 		return row;
 	}
@@ -1295,7 +1261,8 @@
 	 * @param lastStageFlag          鏄惁鏈骇锛堟暟鎹尯鍒嗙粍瀛楁鏈骇鍜屽垎缁勮〃澶村尯瀛楁閮芥槸鏈骇鎵嶄负鏈骇锛�
 	 * @return
 	 */
-	public JSONObject getStatisticsValueObj(JSONObject valueJsonObject, JSONObject dataAreaFieldConfigObj, String actualValue, String type, boolean lastStageFlag) {
+	public JSONObject getStatisticsValueObj(JSONObject valueJsonObject, JSONObject dataAreaFieldConfigObj, String
+			actualValue, String type, boolean lastStageFlag) {
 		if (valueJsonObject == null) {
 			valueJsonObject = new JSONObject();
 		}
@@ -1356,7 +1323,8 @@
 	 * @param set
 	 * @param recordFse
 	 */
-	public void getHeadAndTailTitleDataMap(Map<String, Set<String>> headAndTailTitleDataMap, Set<String> set, FieldSetEntity recordFse) {
+	public void getHeadAndTailTitleDataMap
+	(Map<String, Set<String>> headAndTailTitleDataMap, Set<String> set, FieldSetEntity recordFse) {
 		for (String fieldName : set) {
 			headAndTailTitleDataMap.computeIfAbsent(fieldName, k -> Sets.newLinkedHashSet()).add(recordFse.getString(fieldName));
 		}
@@ -1498,6 +1466,10 @@
 		return dealedValueSb.toString();
 	}
 
+	public int dealColumnWidth(JSONObject dataAreaFieldConfigObj) {
+		return NumberUtil.isNumber(dataAreaFieldConfigObj.getString(CmnConst.ATTR_WIDTH)) ? NumberUtil.parseInt(dataAreaFieldConfigObj.getString(CmnConst.ATTR_WIDTH)) : 0;
+	}
+
 	/**
 	 * 鑾峰彇td鐨勫睘鎬�
 	 *
@@ -1577,7 +1549,8 @@
 	 * @param singleObj
 	 * @return
 	 */
-	public String replaceFormDataAndSysData(String str, Map<String, Set<String>> headAndTailTitleDataMap, JSONObject singleObj) {
+	public String replaceFormDataAndSysData(String
+													str, Map<String, Set<String>> headAndTailTitleDataMap, JSONObject singleObj) {
 		if (StringUtils.isEmpty(str)) {
 			return "";
 		}
@@ -1825,7 +1798,8 @@
 	 * @param type      绫诲瀷锛�1-鑾峰彇鐩爣灞炴�э紝鍏朵粬-鎺掗櫎鐩爣灞炴��
 	 * @return
 	 */
-	public JSONObject extendJSONObject(JSONObject aimObj, JSONObject sourceObj, Collection<String> aimAttr, int type) {
+	public JSONObject extendJSONObject(JSONObject aimObj, JSONObject sourceObj, Collection<String> aimAttr,
+									   int type) {
 		if (aimObj == null) {
 			aimObj = new JSONObject();
 		}

--
Gitblit v1.9.2