| | |
| | | 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; |
| | |
| | | */ |
| | | @Component |
| | | public class GroupReportService extends AbstractBaseService { |
| | | @Autowired |
| | | private DataListReportService dataListReportService; |
| | | @Autowired |
| | | private DataListReportService dataListReportService; |
| | | |
| | | /** |
| | | * æ¥è¡¨-è§£æ |
| | | * @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); |
| | | /** |
| | | * æ¥è¡¨-è§£æ |
| | | * |
| | | * @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; |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¡¨-è§£æ-æ¾å
¥åç»è¡¨å¤´åºåæ°æ®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) { |
| | | // åç»è¡¨å¤´åºå段ç¼åmap |
| | | Map<String, JSONObject> groupAreaFieldConfigMap = dataListReportService.groupAndDataJSONObject2Map(reportConfigMap.get(2)); |
| | | // æ°æ®åºå段ç¼åmap |
| | | Map<String, JSONObject> dataAreaFieldConfigMap = dataListReportService.groupAndDataJSONObject2Map(reportConfigMap.get(0)); |
| | | /** |
| | | * æ¥è¡¨-è§£æ |
| | | * |
| | | * @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); |
| | | |
| | | // åç»è¡¨å¤´åºåç»ç»è®¡å段åç§°list |
| | | List<String> groupAreaGroupStatisticsFieldNameList = Lists.newArrayList(); |
| | | // åç»è¡¨å¤´åºåç»å段åç§°list |
| | | List<String> groupAreaGroupFieldNameList = Lists.newArrayList(); |
| | | // åç»è¡¨å¤´åºåºåèå´obj |
| | | 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(); |
| | | |
| | | // æ°æ®åºåç»ç»è®¡å段åç§°list |
| | | List<String> dataAreaGroupStatisticsFieldNameList = Lists.newArrayList(); |
| | | // æ°æ®åºåç»å段åç§°list |
| | | List<String> dataAreaGroupFieldNameList = Lists.newArrayList(); |
| | | // æ°æ®åºç¹æ®ç»è®¡å段åç§°list-åç»è¡¨å¤´åºä¸ç»è®¡å段 |
| | | List<String> dataAreaSpStatisticsFieldNameList = Lists.newArrayList(); |
| | | // æ°æ®åºæ®éç»è®¡å段åç§°list-éæ°æ®åºåç»å段ï¼éåç»è¡¨å¤´åºä¸ç»è®¡å段 |
| | | 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(); |
| | | // åç»è¡¨å¤´åºæ°æ®obj |
| | | JSONObject groupAreaFieldRecordObj = new JSONObject(Maps.newTreeMap((o1, o2) -> dataListReportService.compare(o1, o2))); |
| | | // æ°æ®åºåç»å段obj |
| | | 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); |
| | | /** |
| | | * æ¥è¡¨-è§£æ-æ¾å
¥åç»è¡¨å¤´åºåæ°æ®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) { |
| | | // åç»è¡¨å¤´åºå段ç¼åmap |
| | | Map<String, JSONObject> groupAreaFieldConfigMap = dataListReportService.groupAndDataJSONObject2Map(reportConfigMap.get(2)); |
| | | // æ°æ®åºå段ç¼åmap |
| | | Map<String, JSONObject> dataAreaFieldConfigMap = dataListReportService.groupAndDataJSONObject2Map(reportConfigMap.get(0)); |
| | | |
| | | // è·ååç»è¡¨å¤´åºæ°æ®obj |
| | | getGroupAreaFieldRecordObj(groupAreaFieldRecordObj, groupAreaFieldConfigMap, recordFse, groupAreaStatisticsField2DataAreaFieldMap, groupAreaLastStageField2DataAreaFieldMap); |
| | | // åç»è¡¨å¤´åºåç»ç»è®¡å段åç§°list |
| | | List<String> groupAreaGroupStatisticsFieldNameList = Lists.newArrayList(); |
| | | // åç»è¡¨å¤´åºåç»å段åç§°list |
| | | List<String> groupAreaGroupFieldNameList = Lists.newArrayList(); |
| | | // åç»è¡¨å¤´åºåºåèå´obj |
| | | 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)); |
| | | }); |
| | | |
| | | // è·åæ°æ®åºåç»å段obj |
| | | getDataAreaGroupFieldRecordObj(dataAreaFieldRecordObj, dataAreaFieldConfigMap, recordFse); |
| | | // æ°æ®åºåç»ç»è®¡å段åç§°list |
| | | List<String> dataAreaGroupStatisticsFieldNameList = Lists.newArrayList(); |
| | | // æ°æ®åºåç»å段åç§°list |
| | | List<String> dataAreaGroupFieldNameList = Lists.newArrayList(); |
| | | // æ°æ®åºç¹æ®ç»è®¡å段åç§°list-åç»è¡¨å¤´åºä¸ç»è®¡å段 |
| | | List<String> dataAreaSpStatisticsFieldNameList = Lists.newArrayList(); |
| | | // æ°æ®åºæ®éç»è®¡å段åç§°list-éæ°æ®åºåç»å段ï¼éåç»è¡¨å¤´åºä¸ç»è®¡å段 |
| | | 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(); |
| | | // åç»è¡¨å¤´åºæ°æ®obj |
| | | JSONObject groupAreaFieldRecordObj = new JSONObject(Maps.newTreeMap((o1, o2) -> dataListReportService.compare(o1, o2))); |
| | | // æ°æ®åºåç»å段obj |
| | | 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 åç»è¡¨å¤´åºå段ç¼åmap |
| | | * @param dataAreaFieldConfigMap æ°æ®åºå段ç¼åmap |
| | | * @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; |
| | | } |
| | | // è·ååç»è¡¨å¤´åºæ°æ®obj |
| | | getGroupAreaFieldRecordObj(groupAreaFieldRecordObj, groupAreaFieldConfigMap, recordFse, groupAreaStatisticsField2DataAreaFieldMap, groupAreaLastStageField2DataAreaFieldMap); |
| | | |
| | | /** |
| | | * è·ååç»è¡¨å¤´åºæ«è¡åç»åæ®µå¯¹åºæ°æ®åºå段map |
| | | * @param groupAreaFieldConfigMap åç»è¡¨å¤´åºå段ç¼åmap |
| | | * @param dataAreaFieldConfigMap æ°æ®åºå段ç¼åmap |
| | | * @param groupAreaRangeObj åç»è¡¨å¤´åºèå´obj |
| | | * @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()); |
| | | } |
| | | } |
| | | // è·åæ°æ®åºåç»å段obj |
| | | getDataAreaGroupFieldRecordObj(dataAreaFieldRecordObj, dataAreaFieldConfigMap, recordFse); |
| | | |
| | | } |
| | | return resultMap; |
| | | } |
| | | // è·åæ°æ®åºç¹æ®å段çç»è®¡ |
| | | statisticsDataAreaSpField(statisticsMap, dataAreaFieldConfigMap, dataAreaSpStatisticsFieldNameList, recordFse); |
| | | |
| | | /** |
| | | * è·åæ é¢-åç»è¡¨å¤´åºæ°æ®obj |
| | | * @param groupAreaFieldRecordObj åç»è¡¨å¤´åºå段记å½obj |
| | | * @param groupAreaFieldConfigMap åç»è¡¨å¤´åºå段ç¼åmap |
| | | * @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()); |
| | | |
| | | /** |
| | | * è·åæ°æ®åºåç»å段obj |
| | | * @param dataAreaFieldRecordObj æ°æ®åºå段记å½obj |
| | | * @param dataAreaFieldConfigMap æ°æ®åºå段ç¼åmap |
| | | * @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 æ°æ®åºå段ç¼åmap |
| | | * @param dataAreaSpStatisticsFieldNameList æ°æ®åºç¹æ®ç»è®¡å段åç§°listï¼åç»è¡¨å¤´åºä¸ç»è®¡åæ®µï¼ |
| | | * @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 æ°æ®åºå段ç¼åmap |
| | | * @param dataAreaCommonStatisticsFieldNameList æ°æ®åºæ®éç»è®¡å段åç§°list |
| | | * @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 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) { |
| | | // åç»è¡¨å¤´åºå段ç¼åmap |
| | | Map<String, JSONObject> groupAreaFieldConfigMap = dataListReportService.groupAndDataJSONObject2Map(reportConfigMap.get(2)); |
| | | // æ°æ®åºå段ç¼åmap |
| | | Map<String, JSONObject> dataAreaFieldConfigMap = dataListReportService.groupAndDataJSONObject2Map(reportConfigMap.get(0)); |
| | | |
| | | /** |
| | | * è·ååç»è¡¨å¤´åºåæ°æ®åºæ»åæ° |
| | | * @param groupAreaFieldRecordObj åç»è¡¨å¤´åºå段记å½obj |
| | | * @param dataAreaGroupFieldCount æ°æ®åºåç»åæ®µä¸ªæ° |
| | | * @param dataAreaCommonStatisticsFieldCount æ°æ®åºæ®éç»è®¡åæ®µä¸ªæ° |
| | | * @return åç»è¡¨å¤´åºåæ°æ®åºæ»åæ° |
| | | */ |
| | | private int getTotalColCount(JSONObject groupAreaFieldRecordObj, int dataAreaGroupFieldCount, int dataAreaCommonStatisticsFieldCount) { |
| | | int groupAreaColCount = getGroupAreaColCount(groupAreaFieldRecordObj, 0); |
| | | return groupAreaColCount + dataAreaGroupFieldCount + dataAreaCommonStatisticsFieldCount; |
| | | } |
| | | // åç»è¡¨å¤´åºåç»ç»è®¡å段åç§°list |
| | | List<String> groupAreaGroupStatisticsFieldNameList = Lists.newArrayList(); |
| | | // åç»è¡¨å¤´åºåç»å段åç§°list |
| | | List<String> groupAreaGroupFieldNameList = Lists.newArrayList(); |
| | | // åç»è¡¨å¤´åºåºåèå´obj |
| | | 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 å½åæä½çobj |
| | | * @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; |
| | | } |
| | | // æ°æ®åºåç»ç»è®¡å段åç§°list |
| | | List<String> dataAreaGroupStatisticsFieldNameList = Lists.newArrayList(); |
| | | // æ°æ®åºåç»å段åç§°list |
| | | List<String> dataAreaGroupFieldNameList = Lists.newArrayList(); |
| | | // æ°æ®åºç¹æ®ç»è®¡å段åç§°list-åç»è¡¨å¤´åºä¸ç»è®¡å段 |
| | | List<String> dataAreaSpStatisticsFieldNameList = Lists.newArrayList(); |
| | | // æ°æ®åºæ®éç»è®¡å段åç§°list-éæ°æ®åºåç»å段ï¼éåç»è¡¨å¤´åºä¸ç»è®¡å段 |
| | | 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 åç»è¡¨å¤´åºå段记å½obj |
| | | * @param dataAreaFieldConfigMap æ°æ®åºå段ç¼åmap |
| | | * @param groupAreaRangeObj åç»è¡¨å¤´å»èå´obj |
| | | * @param dataAreaCommonStatisticsFieldNameList æ°æ®åºæ®éç»è®¡å段åç§°list |
| | | * @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(); |
| | | // åç»è¡¨å¤´åºæ°æ®obj |
| | | JSONObject groupAreaFieldRecordObj = new JSONObject(Maps.newTreeMap((o1, o2) -> dataListReportService.compare(o1, o2))); |
| | | // æ°æ®åºåç»å段obj |
| | | 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); |
| | | |
| | | // è·ååç»è¡¨å¤´åºæ°æ®obj |
| | | getGroupAreaFieldRecordObj(groupAreaFieldRecordObj, groupAreaFieldConfigMap, recordFse, groupAreaStatisticsField2DataAreaFieldMap, groupAreaLastStageField2DataAreaFieldMap); |
| | | |
| | | // è·åæ°æ®åºåç»å段obj |
| | | 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 åç»è¡¨å¤´åºå段ç¼åmap |
| | | * @param dataAreaFieldConfigMap æ°æ®åºå段ç¼åmap |
| | | * @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 åç»è¡¨å¤´åºå段ç¼åmap |
| | | * @param dataAreaFieldConfigMap æ°æ®åºå段ç¼åmap |
| | | * @param groupAreaRangeObj åç»è¡¨å¤´åºèå´obj |
| | | * @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; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ é¢-åç»è¡¨å¤´åºæ°æ®obj |
| | | * |
| | | * @param groupAreaFieldRecordObj åç»è¡¨å¤´åºå段记å½obj |
| | | * @param groupAreaFieldConfigMap åç»è¡¨å¤´åºå段ç¼åmap |
| | | * @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; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åæ°æ®åºåç»å段obj |
| | | * |
| | | * @param dataAreaFieldRecordObj æ°æ®åºå段记å½obj |
| | | * @param dataAreaFieldConfigMap æ°æ®åºå段ç¼åmap |
| | | * @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 æ°æ®åºå段ç¼åmap |
| | | * @param dataAreaSpStatisticsFieldNameList æ°æ®åºç¹æ®ç»è®¡å段åç§°listï¼åç»è¡¨å¤´åºä¸ç»è®¡åæ®µï¼ |
| | | * @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 æ°æ®åºå段ç¼åmap |
| | | * @param dataAreaCommonStatisticsFieldNameList æ°æ®åºæ®éç»è®¡å段åç§°list |
| | | * @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 åç»è¡¨å¤´åºå段记å½obj |
| | | * @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 å½åæä½çobj |
| | | * @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 åç»è¡¨å¤´åºå段记å½obj |
| | | * @param dataAreaFieldConfigMap æ°æ®åºå段ç¼åmap |
| | | * @param groupAreaRangeObj åç»è¡¨å¤´å»èå´obj |
| | | * @param dataAreaCommonStatisticsFieldNameList æ°æ®åºæ®éç»è®¡å段åç§°list |
| | | * @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 æ°æ®åºå段ç¼åmap |
| | | * @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 åç»è¡¨å¤´åºå段记å½obj |
| | | * @param dataAreaFieldConfigMap æ°æ®åºå段ç¼åmap |
| | | * @param groupAreaRangeObj åç»è¡¨å¤´å»èå´obj |
| | | * @param dataAreaCommonStatisticsFieldNameList æ°æ®åºæ®éç»è®¡å段åç§°list |
| | | * @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 æ°æ®åºå段记å½obj |
| | | * @param statisticsMap ç»è®¡map |
| | | * @param totalName æ»è®¡åç§°ï¼é空-éè¦æ»è®¡ |
| | | * @param dataAreaGroupFieldNameList æ°æ®åºåç»å段åç§°list |
| | | * @param dataAreaFieldConfigMap æ°æ®åºå段ç¼åmap |
| | | * @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; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ°æ®åºåç»åæ®µæ°æ®list |
| | | * @param curOperateObj å½åæä½obj |
| | | * @param dataAreaGroupFieldDataList æ°æ®åºåç»åæ®µæ°æ®list |
| | | * @param preObj æè¿æä½çobj |
| | | * @param row å½åè¡æ° |
| | | * @param maxCol æå¤§åæ° |
| | | * @return æ°æ®åºåç»åæ®µæ°æ®list |
| | | */ |
| | | 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 æ°æ®åºå段ç¼åmap |
| | | * @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 æ°æ®åºå段ç¼åmap |
| | | * @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 æ°æ®åºå段记å½obj |
| | | * @param statisticsMap ç»è®¡map |
| | | * @param totalName æ»è®¡åç§°ï¼é空-éè¦æ»è®¡ |
| | | * @param dataAreaGroupFieldNameList æ°æ®åºåç»å段åç§°list |
| | | * @param dataAreaFieldConfigMap æ°æ®åºå段ç¼åmap |
| | | * @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 å½åæ°æ®åºå段ç¼åobj |
| | | * @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 å½åæ°æ®åºå段ç¼åobj |
| | | * @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 æ°æ®åºå段记å½obj |
| | | * @param statisticsMap ç»è®¡map |
| | | * @param totalName æ»è®¡åç§°ï¼é空-éè¦æ»è®¡ |
| | | * @param dataAreaGroupFieldNameList æ°æ®åºåç»å段åç§°list |
| | | * @param dataAreaFieldConfigMap æ°æ®åºå段ç¼åmap |
| | | * @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; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ°æ®åºåç»åæ®µæ°æ®list |
| | | * |
| | | * @param curOperateObj å½åæä½obj |
| | | * @param dataAreaGroupFieldDataList æ°æ®åºåç»åæ®µæ°æ®list |
| | | * @param preObj æè¿æä½çobj |
| | | * @param row å½åè¡æ° |
| | | * @param maxCol æå¤§åæ° |
| | | * @return æ°æ®åºåç»åæ®µæ°æ®list |
| | | */ |
| | | 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 æ°æ®åºå段ç¼åmap |
| | | * @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 å½åæ°æ®åºå段ç¼åobj |
| | | * @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 å½åæ°æ®åºå段ç¼åobj |
| | | * @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; |
| | | } |
| | | } |