From cb4df5a1c9cda76e828fa202990df33be0735105 Mon Sep 17 00:00:00 2001 From: 许鹏程 <1821349743@qq.com> Date: 星期四, 29 六月 2023 09:32:34 +0800 Subject: [PATCH] poi、easyexcel、poi-tl升级 ,合并空调中的报表、数据源模块 --- src/main/java/com/product/server/report/service/GroupReportService.java | 472 +++++++++------------------------------------------------- 1 files changed, 74 insertions(+), 398 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..df67eb8 100644 --- a/src/main/java/com/product/server/report/service/GroupReportService.java +++ b/src/main/java/com/product/server/report/service/GroupReportService.java @@ -1,5 +1,6 @@ package com.product.server.report.service; +import cn.hutool.core.util.NumberUtil; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -12,6 +13,10 @@ import com.product.server.report.config.CmnConst; import com.product.server.report.entity.ReportColumn; import com.product.util.BaseUtil; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -35,107 +40,56 @@ * @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 List<List<ReportColumn>>[] getReport(DataTableEntity recordDte, String totalName, Map<Integer, List<JSONObject>> reportConfigMap) { +// StringBuilder reportHtml = new StringBuilder(4096); + List<List<ReportColumn>>[] reportColumnList = new List[]{new ArrayList(), new ArrayList(), new ArrayList()}; // css -// StringBuilder cssHtml = dataListReportService.getCssHtml(); +// StringBuilder cssHtml = dataListReportService.getCssHtml(); // 鍒嗙粍琛ㄥご鍖哄拰鏁版嵁鍖� - StringBuilder groupAndDataAreaHtml = new StringBuilder(1024); +// 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); + //鏁版嵁鍖哄煙鏁版嵁 + List<List<ReportColumn>> dataAreaList = new ArrayList<>(); + int[] number = getGroupAndDataAreaHtmlAndReturnDataAreaColCount(dataAreaList, reportConfigMap, headAndTailTitleDataMap, recordDte, totalName); + int dataAreaColCount = number[0]; + //鏍囬琛屾暟 + int titleAreaRow = number[1]; totalColCount = Math.max(totalColCount, dataAreaColCount); - + reportColumnList[1] = dataAreaList; // 澶撮儴鏍囬鍖� - StringBuilder headTitleHtml = null; if (!reportConfigMap.get(1).isEmpty()) { - headTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head"); + reportColumnList[0] = dataListReportService.getTitleRows(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head"); } - + //浠庢暟鎹尯鍩熷彇鍑烘爣棰樿鏀惧叆澶撮儴鏍囬鍖哄苟灏嗘爣棰樿浠庢暟鎹尯鍩熷垹闄� + if (titleAreaRow > 0) { + for (int i = 0; i < titleAreaRow; i++) { + reportColumnList[0].add(dataAreaList.get(0)); + dataAreaList.remove(0); + } + } // 搴曢儴鏍囬鍖� - StringBuilder tailTitleHtml = null; if (!reportConfigMap.get(3).isEmpty()) { - tailTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail"); + reportColumnList[2] = dataListReportService.getTitleRows(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail"); } -// reportHtml.append("\n<body>\n<table").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; - } - - /** - * 鎶ヨ〃-瑙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); - - // 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 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"); - } - - 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; + return reportColumnList; } /** * 鎶ヨ〃-瑙f瀽-鏀惧叆鍒嗙粍琛ㄥご鍖哄拰鏁版嵁Html锛岃繑鍥炲垪鏁� * - * @param groupAndDataAreaHtml html瀹瑰櫒 + * @param dataAreaList 鏁版嵁鍖哄煙鏁版嵁 * @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) { + private int[] getGroupAndDataAreaHtmlAndReturnDataAreaColCount(List<List<ReportColumn>> dataAreaList, 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 @@ -227,120 +181,13 @@ // 鏁版嵁鏍囬list List<JSONObject> dataTitleList = Lists.newArrayList(); // 鑾峰彇鏍囬html - groupAndDataAreaHtml.append(getDataAreaTitleHtml(dataTitleList, groupAreaFieldRecordObj, dataAreaFieldConfigMap, groupAreaRangeObj, dataAreaCommonStatisticsFieldNameList)); + List<List<ReportColumn>> dataAreaTitleRows = getDataAreaTitleRows(dataTitleList, groupAreaFieldRecordObj, dataAreaFieldConfigMap, groupAreaRangeObj, dataAreaCommonStatisticsFieldNameList); + dataAreaList.addAll(dataAreaTitleRows); // 鑾峰彇鍐呭html - groupAndDataAreaHtml.append(getDataAreaDataHtml(dataTitleList, dataAreaFieldRecordObj, statisticsMap, totalName, dataAreaGroupFieldNameList, dataAreaFieldConfigMap)); + List<List<ReportColumn>> dataAreaDataRows = getDataAreaDataRows(dataTitleList, dataAreaFieldRecordObj, statisticsMap, totalName, dataAreaGroupFieldNameList, dataAreaFieldConfigMap); + dataAreaList.addAll(dataAreaDataRows); - return totalColCount; - } - - /** - * 鎶ヨ〃-瑙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)); - - // 鍒嗙粍琛ㄥご鍖哄垎缁勭粺璁″瓧娈靛悕绉發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)); - }); - - // 鏁版嵁鍖哄垎缁勭粺璁″瓧娈靛悕绉發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); - } - } - }); - - // 鑾峰彇鍒嗙粍琛ㄥご缁熻瀛楁瀵瑰簲鐨勬暟鎹尯瀛楁map - Map<String, List<String>> groupAreaStatisticsField2DataAreaFieldMap = getGroupAreaStatisticsField2DataAreaFieldMap(groupAreaFieldConfigMap, dataAreaFieldConfigMap); - // 鑾峰彇鍒嗙粍琛ㄥご鍖烘湯琛屽垎缁勫瓧娈靛搴旀暟鎹尯瀛楁map - Map<String, List<String>> groupAreaLastStageField2DataAreaFieldMap = getGroupAreaLastStageField2DataAreaFieldMap(groupAreaFieldConfigMap, dataAreaFieldConfigMap, groupAreaRangeObj); - - // 鑾峰彇鎸囧畾鏁版嵁闆嗕腑鍖呭惈鐨勬暟鎹尯瀛楁闆嗗悎 - 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; + return new int[]{totalColCount, dataAreaTitleRows.size()}; } /** @@ -656,94 +503,6 @@ } /** - * 鑾峰彇鏍囬 - * - * @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); - } - } - } - - dataTitleList.addAll(groupAreaRangeTitleList.get(maxRow)); - dataTitleList.addAll(afterGroupAreaTitleList); - - List<JSONObject> firstList = Lists.newArrayList(); - firstList.addAll(beforeGroupAreaTitleList); - firstList.addAll(groupAreaRangeTitleList.get(0)); - firstList.addAll(afterGroupAreaTitleList); - - groupAreaRangeTitleList.set(0, firstList); - -// 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; - } - - /** * 鑾峰彇鏍囬html * * @param dataTitleList 鏁版嵁鏍囬list @@ -753,7 +512,8 @@ * @param dataAreaCommonStatisticsFieldNameList 鏁版嵁鍖烘櫘閫氱粺璁″瓧娈靛悕绉發ist * @return 鏁版嵁鏍囬html */ - private StringBuilder getDataAreaTitleHtml(List<JSONObject> dataTitleList, JSONObject groupAreaFieldRecordObj, Map<String, JSONObject> dataAreaFieldConfigMap, JSONObject groupAreaRangeObj, List<String> dataAreaCommonStatisticsFieldNameList) { + private List<List<ReportColumn>> getDataAreaTitleRows(List<JSONObject> dataTitleList, JSONObject groupAreaFieldRecordObj, Map<String, JSONObject> dataAreaFieldConfigMap, JSONObject groupAreaRangeObj, List<String> dataAreaCommonStatisticsFieldNameList) { + List<List<ReportColumn>> reportColumnList = Lists.newArrayList(); int maxRow = groupAreaRangeObj.getIntValue(CmnConst.MAX_Y); List<List<JSONObject>> groupAreaRangeTitleList = Lists.newArrayList(); for (int i = 0; i <= maxRow; i++) { @@ -807,20 +567,27 @@ int colspan; String value; for (List<JSONObject> rowList : groupAreaRangeTitleList) { - html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_TITLE).append("\">\n "); + List<ReportColumn> reportColumns = 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); + ReportColumn column = new ReportColumn(colspan, rowspan); 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); + JSONObject dataAreaFieldConfigObjTemp = dataAreaFieldConfigMap.get(dataAreaFieldName); + String width = dataAreaFieldConfigObjTemp == null ? null : dataAreaFieldConfigObjTemp.getString(CmnConst.ATTR_WIDTH); + if (!StringUtils.isEmpty(width) && NumberUtil.isNumber(width)) { + column.setColumnWidth(NumberUtil.parseInt(width)); + } } - html.append("<td rowspan=\"").append(rowspan).append("\" colspan=\"").append(colspan).append("\">").append(value == null ? "" : value).append("</td>"); + column.setContent(value); + reportColumns.add(column); } - html.append("\n</tr>"); + reportColumnList.add(reportColumns); } - return html; + return reportColumnList; } /** @@ -926,7 +693,7 @@ * @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) { + private List<List<ReportColumn>> getDataAreaDataRows(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); @@ -1028,125 +795,34 @@ 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++; + List<List<ReportColumn>> reportColumnList = new ArrayList<>(); + //瑙f瀽html + //鍦╤tml鍓嶉潰鎷兼帴涓�涓猼able鏍囩鍜宼body锛屽惁鍒橨soup瑙f瀽浼氭姤閿� + html.insert(0, "<table><tbody>"); + html.append("</tbody></table>"); + Document doc = Jsoup.parse(html.toString()); + Elements trs = doc.select("tr"); + Elements tds; + List<ReportColumn> reportColumn; + ReportColumn column; + for (Element tr : trs) { + tds = tr.select("td"); + reportColumn = new ArrayList<>(); + for (Element td : tds) { + column = new ReportColumn(); + column.setColspan(Integer.parseInt(BaseUtil.ifNull(td.attr("colspan"), "1"))); + column.setRowspan(Integer.parseInt(BaseUtil.ifNull(td.attr("rowspan"), "1"))); + Set<String> classNames = td.classNames(); + if (classNames.contains(CmnConst.CLASS_TD_CAN_TURN)) { + column.setPenetrate(true); + column.setPenetrateProperty(td.attr("router")); } - } else { - html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_COMMON).append("\">\n "); + column.setContent(td.text()); + reportColumn.add(column); } - 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>"); + reportColumnList.add(reportColumn); } - - // 鎬昏 - if (!StringUtils.isEmpty(totalName)) { - html.append(getTotalStatisticsHtml(statisticsMap, dataTitleList, dataAreaFieldConfigMap, dataAreaGroupFieldNameList.size(), getSubCnt(dataAreaFieldRecordObj), totalName)); - } - - return null; + return reportColumnList; } /** -- Gitblit v1.9.2