poi、easyexcel、poi-tl升级 ,合并空调中的报表、数据源模块
| | |
| | | <?xml version="1.0"?> |
| | | <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" |
| | | xmlns="http://maven.apache.org/POM/4.0.0" |
| | | <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | <parent> |
| | |
| | | <dependency> |
| | | <groupId>junit</groupId> |
| | | <artifactId>junit</artifactId> |
| | | <version>3.8.1</version> |
| | | <scope>test</scope> |
| | | </dependency> |
| | | <dependency> |
| | |
| | | <groupId>com.lx</groupId> |
| | | <artifactId>product-server-data-export-import</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.lx</groupId> |
| | | <artifactId>product-server-datasource</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>cn.hutool</groupId> |
| | | <artifactId>hutool-all</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | </project> |
| | |
| | | package com.product.server.report.config; |
| | | |
| | | public class CmnConst { |
| | | import com.product.core.config.CoreConst; |
| | | |
| | | public class CmnConst extends CoreConst { |
| | | |
| | | // 表å常éå®ä¹ |
| | | public static final String PRODUCT_SYS_PRODUCTS = "product_sys_products"; // 产å表å |
| | |
| | | public static final String UUID = "uuid"; |
| | | public static final String ID = "id"; |
| | | public static final String OPTION = "option"; |
| | | public static final String TABLE_NAME = "table_name"; |
| | | //æ°æ®åºç±»å |
| | | public static final String MYSQL = "mysql"; |
| | | |
| | |
| | | public static final String FIELD_FORMAT = "field_format"; |
| | | public static final String FIELD_PROMPT = "field_prompt"; |
| | | public static final String SEARCH_TYPE = "search_type"; |
| | | public static final String TABLE_NAME = "table_name"; |
| | | //PRODUCT_SYS_report_type_attribute æ¥è¡¨é
ç½®å±æ§è¡¨å段 |
| | | public static final String REPORT_TYPE_ATTR = "report_type_attr"; |
| | | public static final String ATTRIBUTE_NAME = "attribute_name"; |
| | | public static final String UNPIVOT_INFO = "unpivot_info"; |
| | | public static final String IS_UNPIVOT = "is_unpivot"; |
| | | |
| | | public static final String REPORT_TYPE = "report_type"; |
| | | public static final String REPORT_TYPE_COMMON = "æ®éæ°æ®å表"; |
| | |
| | | SYTEM_REPORT_DATASOURCE_UPDATE_ERROR("æ¥è¡¨æ°æ®æºä¿®æ¹å¤±è´¥ï¼",ModuleEnum.REPORT.getValue()+"003"), |
| | | SYTEM_REPORT_DATASOURCE_DELETE_ERROR("æ¥è¡¨æ°æ®æºå é¤å¤±è´¥ï¼",ModuleEnum.REPORT.getValue()+"004"), |
| | | SYTEM_REPORT_DATA_PROCESS_ERROR("æ¥è¡¨æ°æ®å¤ç失败",ModuleEnum.REPORT.getValue()+"005"), |
| | | |
| | | PUBLISH_REPORT_FAIL_MODULE_NO_EXIST("徿 åå¸å¤±è´¥ï¼æå®æ¨¡åä¸åå¨", ModuleEnum.REPORT.getValue()+"005"), |
| | | NO_MATCH_TABLE("æªå¹é
å°è¡¨å",ModuleEnum.REPORT.getValue()+"006"), |
| | | PUBLISH_REPORT_FAIL_MODULE_NO_EXIST("徿 åå¸å¤±è´¥ï¼æå®æ¨¡åä¸åå¨", ModuleEnum.REPORT.getValue()+"007"), |
| | | ; |
| | | |
| | | private String text; |
| | |
| | | package com.product.server.report.controller; |
| | | |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import com.product.core.config.CoreConst; |
| | | import com.product.core.controller.support.AbstractBaseController; |
| | | import com.product.core.entity.FieldSetEntity; |
| | |
| | | import com.product.core.exception.BaseException; |
| | | import com.product.core.spring.context.SpringMVCContextHolder; |
| | | import com.product.module.data.config.CmnCode; |
| | | import com.product.module.data.config.CmnConst; |
| | | import com.product.module.data.service.SystemDataExportService; |
| | | import com.product.module.sys.version.ApiVersion; |
| | | import com.product.server.report.config.CmnConst; |
| | | import com.product.server.report.config.ReportCode; |
| | | import com.product.server.report.config.SystemCode; |
| | | import com.product.server.report.entity.ReportColumn; |
| | | import com.product.server.report.entity.ReportEntity; |
| | | import com.product.server.report.service.DataListReportService; |
| | | import com.product.util.BaseUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | import org.springframework.web.bind.annotation.RequestMethod; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.List; |
| | | import java.util.TimeZone; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * Copyright © 6c |
| | |
| | | */ |
| | | @RequestMapping(value = "/get-report/{version}", method = RequestMethod.POST) |
| | | @ApiVersion(1) |
| | | public String getReport(HttpServletRequest request) { |
| | | public String getTableInfo(HttpServletRequest request) { |
| | | try { |
| | | FieldSetEntity fse = null; |
| | | Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA); |
| | |
| | | SpringMVCContextHolder.getSystemLogger().error(SystemCode.SYSTEM_FORM_NODATA.getValue(), SystemCode.SYSTEM_FORM_NODATA.getText()); |
| | | return this.error(SystemCode.SYSTEM_FORM_NODATA.getValue(), SystemCode.SYSTEM_FORM_NODATA.getText()); |
| | | } |
| | | return BaseUtil.success(dataListReportService.getReportEntity(fse)); |
| | | return BaseUtil.success(dataListReportService.getReport(fse)); |
| | | } catch (BaseException e) { |
| | | SpringMVCContextHolder.getSystemLogger().error(e); |
| | | return this.error(e.getCode(), e.getMessageInfo()); |
| | |
| | | return error(CmnCode.EXPORT_GENERAL_LIST_DATA_IMPORT_FIAL.getValue(), CmnCode.EXPORT_GENERAL_LIST_DATA_IMPORT_FIAL.getText() + e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | return OK_List(dt); |
| | | } catch (BaseException e) { |
| | | e.printStackTrace(); |
| | | return this.error(e.getCode()); |
| | | return this.error(e); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return this.error("", ReportCode.REPORT_DATASOURCE_ERROR.getText()+e.getMessage()); |
| | |
| | | */ |
| | | public class ReportColumn { |
| | | //è·¨å |
| | | private int colspan = 1; |
| | | private String colspan = "1"; |
| | | //è·¨è¡ |
| | | private int rowspan = 1; |
| | | private String rowspan = "1"; |
| | | //åå
æ ¼å
容 |
| | | private String content; |
| | | //ç©¿éåæ®µ |
| | |
| | | |
| | | private Map<String, String> otherParams = new HashMap<>(); |
| | | |
| | | public ReportColumn() { |
| | | } |
| | | |
| | | public ReportColumn(String content) { |
| | | this.content = content; |
| | | } |
| | | |
| | | public ReportColumn(int colspan, int rowspan) { |
| | | this.colspan = String.valueOf(colspan); |
| | | this.rowspan = String.valueOf(rowspan); |
| | | } |
| | | |
| | | public ReportColumn(String content, int colspan, int rowspan) { |
| | | this.content = content; |
| | | this.colspan = String.valueOf(colspan); |
| | | this.rowspan = String.valueOf(rowspan); |
| | | } |
| | | |
| | | public void replace(String key, String value) { |
| | | if (!otherParams.isEmpty()) { |
| | | Map<String, String> otherParams = this.otherParams; |
| | | this.otherParams = new HashMap<>(); |
| | | |
| | | otherParams.forEach((k, v) -> { |
| | | if ("rowspan".equals(v) && NumberUtil.isNumber(value) && k.equals(key)) { |
| | | this.rowspan = NumberUtil.parseInt(value); |
| | | } |
| | | this.otherParams.put(k.replace(key, value), v.replace(key, value)); |
| | | }); |
| | | } |
| | |
| | | if (!StringUtils.isEmpty(content)) { |
| | | content = content.replace(key, value); |
| | | } |
| | | if (key.equals(this.colspan)) { |
| | | this.colspan = value; |
| | | } |
| | | if (key.equals(this.rowspan)) { |
| | | this.rowspan = value; |
| | | } |
| | | } |
| | | |
| | | public void addProperty(String key, String value) { |
| | | otherParams.put(key, value); |
| | | } |
| | | |
| | | public int getColspan() { |
| | | public String getColspan() { |
| | | return colspan; |
| | | } |
| | | |
| | | public void setColspan(int colspan) { |
| | | this.colspan = String.valueOf(colspan); |
| | | } |
| | | |
| | | public void setColspan(String colspan) { |
| | | this.colspan = colspan; |
| | | } |
| | | |
| | | public int getRowspan() { |
| | | public String getRowspan() { |
| | | return rowspan; |
| | | } |
| | | |
| | | public void setRowspan(int rowspan) { |
| | | public int getRowspanInt() { |
| | | return NumberUtil.parseInt(rowspan); |
| | | } |
| | | public int getColspanInt() { |
| | | return NumberUtil.parseInt(colspan); |
| | | } |
| | | |
| | | public void setRowspan(String rowspan) { |
| | | this.rowspan = rowspan; |
| | | } |
| | | |
| | | public void setRowspan(int rowspan) { |
| | | this.rowspan = String.valueOf(rowspan); |
| | | } |
| | | |
| | | public String getContent() { |
| | | return getContent(false); |
| | | } |
| | |
| | | package com.product.server.report.service; |
| | | |
| | | import cn.hutool.core.collection.CollectionUtil; |
| | | import cn.hutool.core.util.IdUtil; |
| | | import cn.hutool.core.util.NumberUtil; |
| | | import com.alibaba.fastjson.JSONObject; |
| | |
| | | import com.product.core.spring.context.SpringMVCContextHolder; |
| | | import com.product.server.report.config.CmnConst; |
| | | import com.product.server.report.entity.ReportColumn; |
| | | import com.product.server.report.entity.ReportEntity; |
| | | import com.product.util.BaseUtil; |
| | | import com.product.util.SystemParamReplace; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | |
| | | @Autowired |
| | | private DataListReportService dataListReportService; |
| | | |
| | | /** |
| | | * æ¥è¡¨-è§£æ |
| | | * |
| | | * @param recordDte ä¸å¡æ°æ®dte |
| | | * @param totalStatisticsFlag æ¯å¦å计æ è¯ |
| | | * @param reportConfigMap æ¥è¡¨é
ç½®ç¼åmap |
| | | * @return |
| | | */ |
| | | public ReportEntity getReportEntity(DataTableEntity recordDte, String totalName, Map<Integer, List<JSONObject>> reportConfigMap) { |
| | | ReportEntity report = null; |
| | | Map<String, Set<String>> headAndTailTitleDataMap = Maps.newHashMap(); |
| | | // æ°æ®åº |
| | | report = getDataArea(reportConfigMap, headAndTailTitleDataMap, recordDte, totalName); |
| | | |
| | | int totalColCount = reportConfigMap.get(0).size(); |
| | | |
| | | // 头鍿 é¢åº |
| | | List<List<ReportColumn>> headTitleRows = null; |
| | | if (!reportConfigMap.get(1).isEmpty()) { |
| | | headTitleRows = dataListReportService.getTitle(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head"); |
| | | } |
| | | // åºé¨æ é¢åº |
| | | List<List<ReportColumn>> tailTitleRows = null; |
| | | if (!reportConfigMap.get(3).isEmpty()) { |
| | | tailTitleRows = dataListReportService.getTitle(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail"); |
| | | } |
| | | |
| | | if (!CollectionUtil.isEmpty(headTitleRows)) { |
| | | List<List<ReportColumn>> reportHeader = report.getReportHeader(); |
| | | if (reportHeader != null) { |
| | | headTitleRows.addAll(reportHeader); |
| | | } |
| | | report.setReportHeader(headTitleRows); |
| | | } |
| | | if (!CollectionUtil.isEmpty(tailTitleRows)) { |
| | | report.setReportTail(tailTitleRows); |
| | | } |
| | | |
| | | |
| | | return report; |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¡¨-è§£æ |
| | | * |
| | | * @param recordDte ä¸å¡æ°æ®dte |
| | | * @param totalStatisticsFlag æ¯å¦å计æ è¯ |
| | | * @param totalName æ»è®¡åç§° |
| | | * @param reportConfigMap æ¥è¡¨é
ç½®ç¼åmap |
| | | * @param tableStyle |
| | | * @param unpivotInfoContainer è¡å转æ¢ä¿¡æ¯ |
| | | * @return |
| | | */ |
| | | public JSONObject getReport(DataTableEntity recordDte, String totalName, Map<Integer, List<JSONObject>> reportConfigMap, StringBuilder tableStyle) { |
| | | StringBuilder reportHtml = new StringBuilder(4096); |
| | | |
| | | // css |
| | | StringBuilder cssHtml = dataListReportService.getCssHtml(); |
| | | public List<List<ReportColumn>>[] getReport(DataTableEntity recordDte, String totalName, Map<Integer, List<JSONObject>> reportConfigMap, Collection<String> unpivotInfoContainer) { |
| | | List<List<ReportColumn>>[] reportColumnList = new List[]{new ArrayList(), new ArrayList(), new ArrayList()}; |
| | | |
| | | // æ°æ®åº |
| | | Map<String, Set<String>> headAndTailTitleDataMap = Maps.newHashMap(); |
| | | String dataAreaHtml = getDataAreaHtml(reportConfigMap, headAndTailTitleDataMap, recordDte, totalName); |
| | | |
| | | int totalColCount = reportConfigMap.get(0).size(); |
| | | List<List<ReportColumn>> reportRows = getDataArea(reportConfigMap, headAndTailTitleDataMap, recordDte, totalName, unpivotInfoContainer); |
| | | int totalColCount = reportConfigMap.get(0).size() + unpivotInfoContainer.size() - 1; |
| | | // 头鍿 é¢åº |
| | | StringBuilder headTitleHtml = null; |
| | | if (!reportConfigMap.get(1).isEmpty()) { |
| | | headTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head"); |
| | | reportColumnList[0] = (dataListReportService.getTitleRows(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head")); |
| | | } |
| | | |
| | | //妿reportRows è¡æ°å¤§äº0å°ç¬¬ä¸è¡çæ°æ®æ¾å
¥å¤´é¨æ é¢åº |
| | | if (reportRows.size() >= 0) { |
| | | reportColumnList[0].add(reportRows.get(0)); |
| | | reportRows.remove(0); |
| | | } |
| | | reportColumnList[1] = reportRows; |
| | | // åºé¨æ é¢åº |
| | | StringBuilder tailTitleHtml = null; |
| | | if (!reportConfigMap.get(3).isEmpty()) { |
| | | tailTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail"); |
| | | reportColumnList[2] = (dataListReportService.getTitleRows(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail")); |
| | | } |
| | | |
| | | reportHtml.append("\n<body>\n<table class=\"report_main\"").append(tableStyle).append(">") |
| | | .append(cssHtml) |
| | | .append(headTitleHtml == null ? "" : headTitleHtml) |
| | | .append(dataAreaHtml) |
| | | .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; |
| | | // reportHtml.append("\n<body>\n<table class=\"report_main\"").append(tableStyle).append(">") |
| | | // .append(headTitleHtml == null ? "" : headTitleHtml) |
| | | // .append(dataAreaHtml) |
| | | // .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 reportColumnList; |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param totalName æ»è®¡åç§°ï¼é空-éè¦æ»è®¡ |
| | | * @return |
| | | */ |
| | | private String getDataAreaHtml(Map<Integer, List<JSONObject>> reportConfigMap, Map<String, Set<String>> headAndTailTitleDataMap, DataTableEntity recordDte, String totalName) { |
| | | private List<List<ReportColumn>> getDataArea(Map<Integer, List<JSONObject>> reportConfigMap, Map<String, Set<String>> headAndTailTitleDataMap, DataTableEntity recordDte, String totalName, Collection<String> unpivotInfoContainer) { |
| | | List<List<ReportColumn>> reportColumnList = Lists.newArrayList(); |
| | | // æ°æ®åºå段ç¼åmap |
| | | Map<String, JSONObject> dataAreaFieldConfigMap = dataListReportService.groupAndDataJSONObject2Map(reportConfigMap.get(0)); |
| | | // è·åæå®æ°æ®éä¸å
å«çæ°æ®åºå段éå |
| | |
| | | // ç»è®¡map |
| | | Map<JSONObject, JSONObject> statisticsMap = Maps.newLinkedHashMap(); |
| | | |
| | | StringBuilder dataAreaHtml = new StringBuilder(1024); |
| | | // å°è¡å转æ¢çä¿¡æ¯æ·»å å°æ°æ®åºå段ç¼åmapéé¢ |
| | | Map<String, JSONObject> newDataAreaFieldConfigMap = Maps.newLinkedHashMap(); |
| | | int x = 0; |
| | | if (!unpivotInfoContainer.isEmpty()) { |
| | | for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) { |
| | | String fieldName = entry.getKey(); |
| | | JSONObject fieldConfigObj = entry.getValue(); |
| | | if (fieldConfigObj.getIntValue(CmnConst.IS_UNPIVOT) == 1) { |
| | | x = fieldConfigObj.getIntValue(CmnConst.ATTR_X); |
| | | fieldConfigObj.put(CmnConst.IS_UNPIVOT, 0); |
| | | fieldConfigObj.put(CmnConst.ATTR_IS_CUSTOM_FIELD, 0); |
| | | for (String unpivotField : unpivotInfoContainer) { |
| | | JSONObject newFieldConfigObj = new JSONObject(); |
| | | newFieldConfigObj.putAll(fieldConfigObj); |
| | | newFieldConfigObj.put(CmnConst.ATTR_X, ++x); |
| | | newFieldConfigObj.put(CmnConst.ATTR_SHOW_NAME, newFieldConfigObj.getString(CmnConst.ATTR_SHOW_NAME).replace("{#unpivot_name#}", unpivotField)); |
| | | newDataAreaFieldConfigMap.put(unpivotField, newFieldConfigObj); |
| | | } |
| | | } else { |
| | | if (x > fieldConfigObj.getIntValue(CmnConst.ATTR_X)) { |
| | | fieldConfigObj.put(CmnConst.ATTR_X, ++x); |
| | | } |
| | | newDataAreaFieldConfigMap.put(fieldName, fieldConfigObj); |
| | | } |
| | | } |
| | | } else { |
| | | newDataAreaFieldConfigMap = dataAreaFieldConfigMap; |
| | | } |
| | | |
| | | // æ é¢ |
| | | dataAreaHtml.append(getDataAreaTitleHtml(dataAreaFieldConfigMap)); |
| | | reportColumnList.add(getDataAreaTitle(newDataAreaFieldConfigMap)); |
| | | // å
容 |
| | | dataAreaHtml.append(getDataAreaDataHtml(dataAreaFieldConfigMap, recordDte, headAndTailTitleDataMap, headAndTailFieldSet, statisticsMap, totalName)); |
| | | return dataAreaHtml.toString(); |
| | | } |
| | | |
| | | private ReportEntity getDataArea(Map<Integer, List<JSONObject>> reportConfigMap, Map<String, Set<String>> headAndTailTitleDataMap, DataTableEntity recordDte, String totalName) { |
| | | // æ°æ®åºå段ç¼åmap |
| | | Map<String, JSONObject> dataAreaFieldConfigMap = dataListReportService.groupAndDataJSONObject2Map(reportConfigMap.get(0)); |
| | | // è·åæå®æ°æ®éä¸å
å«çæ°æ®åºå段éå |
| | | Set<String> headAndTailFieldSet = Sets.newHashSet(); |
| | | headAndTailFieldSet.addAll(dataListReportService.getDataFields(reportConfigMap.get(1))); |
| | | headAndTailFieldSet.addAll(dataListReportService.getDataFields(reportConfigMap.get(3))); |
| | | // ç»è®¡map |
| | | Map<JSONObject, JSONObject> statisticsMap = Maps.newLinkedHashMap(); |
| | | List<ReportColumn> reportHeader = getReportHeader(dataAreaFieldConfigMap); |
| | | List<List<ReportColumn>> reportData = getReportData(dataAreaFieldConfigMap, recordDte, headAndTailTitleDataMap, headAndTailFieldSet, statisticsMap, totalName); |
| | | ReportEntity report = new ReportEntity(); |
| | | report.addReportHeader(reportHeader); |
| | | report.setReportData(reportData); |
| | | return report; |
| | | } |
| | | |
| | | private List<ReportColumn> getReportHeader(Map<String, JSONObject> dataAreaFieldConfigMap) { |
| | | if (CollectionUtil.isEmpty(dataAreaFieldConfigMap)) { |
| | | return null; |
| | | } |
| | | List<ReportColumn> reportColumnList = new ArrayList<>(); |
| | | dataAreaFieldConfigMap.forEach((k, v) -> { |
| | | ReportColumn column = new ReportColumn(); |
| | | column.setContent(v.getString(CmnConst.ATTR_SHOW_NAME)); |
| | | column.setColumnWidth(NumberUtil.isNumber(v.getString(CmnConst.ATTR_WIDTH)) ? NumberUtil.parseInt(v.getString(CmnConst.ATTR_WIDTH)) : 0); |
| | | reportColumnList.add(column); |
| | | }); |
| | | List<List<ReportColumn>> dataAreaData = getDataAreaData(newDataAreaFieldConfigMap, recordDte, headAndTailTitleDataMap, headAndTailFieldSet, statisticsMap, totalName); |
| | | reportColumnList.addAll(dataAreaData); |
| | | return reportColumnList; |
| | | } |
| | | |
| | | private List<List<ReportColumn>> getReportData(Map<String, JSONObject> dataAreaFieldConfigMap, DataTableEntity recordDte, Map<String, Set<String>> headAndTailTitleDataMap, Set<String> headAndTailFieldSet, Map<JSONObject, JSONObject> statisticsMap, String totalName) { |
| | | List<List<ReportColumn>> reportData = new ArrayList<>(); |
| | | // æ°æ®åºåç»ç»è®¡å段åç§°list |
| | | List<String> dataAreaGroupStatisticsFieldNameList = Lists.newArrayList(); |
| | | // æ°æ®åºåç»å段åç§°list |
| | | List<String> dataAreaGroupFieldNameList = Lists.newArrayList(); |
| | | dataAreaFieldConfigMap.forEach((dataAreaFieldName, dataAreaFieldConfigObj) -> { |
| | | if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) { |
| | | dataAreaGroupFieldNameList.add(dataAreaFieldName); |
| | | if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_STATISTICS))) { |
| | | dataAreaGroupStatisticsFieldNameList.add(dataAreaFieldName); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | FieldSetEntity recordFse; |
| | | FieldSetEntity preFse = null; |
| | | String dataAreaFieldName; |
| | | JSONObject dataAreaFieldConfigObj; |
| | | String value; |
| | | JSONObject keyObj; |
| | | Map<String, String> replaceMap = Maps.newHashMap(); |
| | | Map<String, String> dataAreaClosestGroupStatisticsFieldValueMap = Maps.newHashMap(); |
| | | Map<String, String> dataAreaClosestGroupFieldValueMap = Maps.newHashMap(); |
| | | String closestGroupStatisticsFieldName = null; |
| | | String closestGroupFieldName = null; |
| | | String tempFieldName; |
| | | String paramKey; |
| | | boolean combineFlag; |
| | | JSONObject dataAreaGroupFieldRecordObj = new JSONObject(); |
| | | for (int i = 0; i < recordDte.getRows(); i++) { |
| | | recordFse = recordDte.getFieldSetEntity(i); |
| | | // è·å头é¨ã尾鍿 é¢åºæ°æ®å段 |
| | | dataListReportService.getHeadAndTailTitleDataMap(headAndTailTitleDataMap, headAndTailFieldSet, recordFse); |
| | | |
| | | combineFlag = true; |
| | | |
| | | List<ReportColumn> columns = new ArrayList<>(); |
| | | for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) { |
| | | ReportColumn column = new ReportColumn(); |
| | | dataAreaFieldName = entry.getKey(); |
| | | dataAreaFieldConfigObj = entry.getValue(); |
| | | value = dataListReportService.getValue(dataAreaFieldConfigObj, recordFse, dataAreaFieldName); |
| | | // è¥æ¯èªå®ä¹å段ï¼åæ¾å
¥ä¸å¡æ°æ®è®°å½ä¸ |
| | | if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD))) { |
| | | recordFse.setValue(dataAreaFieldName, value); |
| | | } |
| | | if (dataAreaGroupFieldNameList.contains(dataAreaFieldName)) { |
| | | int curFieldIndex = dataAreaGroupFieldNameList.indexOf(dataAreaFieldName); |
| | | // è®°å½åç»å段 |
| | | recordDataAreaGroupField(dataAreaGroupFieldRecordObj, dataAreaGroupFieldNameList, curFieldIndex, recordFse); |
| | | |
| | | // åç»ååæ®µå¹¶ |
| | | closestGroupFieldName = dataAreaFieldName; |
| | | if (preFse != null && combineFlag) { |
| | | if (value.equals(dataAreaClosestGroupFieldValueMap.get(closestGroupFieldName))) { |
| | | dealReplaceMapAddRowspan(replaceMap, dataAreaGroupFieldNameList.subList(0, curFieldIndex + 1), preFse, true); |
| | | continue; |
| | | } else { |
| | | combineFlag = false; |
| | | } |
| | | } |
| | | dataAreaClosestGroupFieldValueMap.put(dataAreaFieldName, value); |
| | | } |
| | | // åç»ç»è®¡ |
| | | if (dataAreaGroupStatisticsFieldNameList.contains(dataAreaFieldName)) { |
| | | int minK = dataAreaGroupStatisticsFieldNameList.size(); |
| | | for (int j = 0; j < dataAreaGroupStatisticsFieldNameList.size(); j++) { |
| | | tempFieldName = dataAreaGroupStatisticsFieldNameList.get(j); |
| | | if (!StringUtils.isEmpty(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName)) && !recordFse.getString(tempFieldName).equals(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName))) { |
| | | minK = j; |
| | | break; |
| | | } |
| | | } |
| | | for (int k = dataAreaGroupStatisticsFieldNameList.size() - 1; k >= minK; k--) { |
| | | tempFieldName = dataAreaGroupStatisticsFieldNameList.get(k); |
| | | if (preFse != null && dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName) != null) { |
| | | reportData.add(getDataAreaGroupStatisticsFieldStatisticsRow(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName), statisticsMap, dataAreaFieldConfigMap, tempFieldName, preFse, dataAreaGroupFieldNameList, replaceMap, dataAreaGroupFieldRecordObj)); |
| | | dataAreaClosestGroupStatisticsFieldValueMap.remove(tempFieldName); |
| | | } |
| | | } |
| | | closestGroupStatisticsFieldName = dataAreaFieldName; |
| | | dataAreaClosestGroupStatisticsFieldValueMap.put(dataAreaFieldName, value); |
| | | } |
| | | // éåç»ç»è®¡åæ®µï¼æ®é+èªå®ä¹ï¼ |
| | | if (!"1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_GROUP)) && !StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS))) { |
| | | addStatisticsRowInfo(statisticsMap, dataAreaGroupStatisticsFieldNameList, recordFse, dataAreaFieldConfigObj, dataAreaFieldName, value); |
| | | } |
| | | // èªå®ä¹ç»è®¡åæ®µï¼æªæå®ç»è®¡ç±»åï¼ä½¿ç¨åºç¡å段å
¬å¼è¿è¡è®¡ç®ï¼ |
| | | if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD)) |
| | | && StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS)) |
| | | && !StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_FORMULA))) { |
| | | String formula = dataAreaFieldConfigObj.getString(CmnConst.ATTR_FORMULA); |
| | | List<String> formFieldList = dataListReportService.getSuitContent(formula, CmnConst.REGEXP_FORM_FIELD); |
| | | Map<String, String> formulaMap = Maps.newHashMap(); |
| | | boolean statisticsFlag = true; |
| | | JSONObject tempObj; |
| | | for (String formFieldInfo : formFieldList) { |
| | | tempObj = dataAreaFieldConfigMap.get(dataListReportService.fieldInfo2FieldName(formFieldInfo)); |
| | | if (tempObj == null || StringUtils.isEmpty(tempObj.getString(CmnConst.ATTR_STATISTICS))) { |
| | | statisticsFlag = false; |
| | | break; |
| | | } |
| | | formulaMap.put(formFieldInfo, tempObj.getString(CmnConst.ATTR_STATISTICS)); |
| | | } |
| | | if (statisticsFlag) { |
| | | addStatisticsRowInfo(statisticsMap, dataAreaGroupStatisticsFieldNameList, recordFse, dataAreaFieldConfigObj, dataAreaFieldName, value, formulaMap); |
| | | } |
| | | } |
| | | if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) { |
| | | keyObj = new JSONObject(); |
| | | for (String dataAreaGroupFieldName : dataAreaGroupFieldNameList) { |
| | | keyObj.put(dataAreaGroupFieldName, recordFse.getString(dataAreaGroupFieldName)); |
| | | if (dataAreaGroupFieldName.equals(dataAreaFieldName)) { |
| | | keyObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaGroupFieldName)); |
| | | break; |
| | | } |
| | | } |
| | | paramKey = dataListReportService.concat(keyObj, CmnConst.ATTR_ROWSPAN); |
| | | if (NumberUtil.isNumber(paramKey)) { |
| | | column.setRowspan(NumberUtil.parseInt(paramKey)); |
| | | } else { |
| | | column.addProperty(paramKey, "rowspan"); |
| | | } |
| | | replaceMap.put(paramKey, "1"); |
| | | } |
| | | // class |
| | | if (!StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL))) { |
| | | //åæ¥è¡¨ |
| | | String url = dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL); |
| | | url = SystemParamReplace.replaceParams(url, recordFse); |
| | | column.setSubReport("true".equals(dataAreaFieldConfigObj.getString("~isSubReport~"))); |
| | | if (!column.isSubReport()) { |
| | | column.setPenetrate(true); |
| | | column.setPenetrateProperty(url); |
| | | } else { |
| | | column.setSubReportProperty(url); |
| | | } |
| | | } |
| | | String attrValue = recordFse.getString(dataAreaFieldName + CmnConst.PROMPT_REAL_VALUE_TAIL); |
| | | if (StringUtils.isEmpty(attrValue)) { |
| | | attrValue = recordFse.getString(dataAreaFieldName); |
| | | } |
| | | column.addProperty(dataAreaFieldName, attrValue); |
| | | // æ ¼å¼ |
| | | value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); |
| | | column.setContent(value); |
| | | columns.add(column); |
| | | } |
| | | reportData.add(columns); |
| | | preFse = recordFse; |
| | | } |
| | | |
| | | // è¡¥å
¨æ«å°¾ç»è®¡ |
| | | if (!StringUtils.isEmpty(closestGroupStatisticsFieldName)) { |
| | | int maxK = -1; |
| | | for (int j = 0; j < dataAreaGroupStatisticsFieldNameList.size(); j++) { |
| | | tempFieldName = dataAreaGroupStatisticsFieldNameList.get(j); |
| | | if (closestGroupStatisticsFieldName.equals(tempFieldName)) { |
| | | maxK = j; |
| | | } |
| | | } |
| | | for (int k = maxK; k >= 0; k--) { |
| | | tempFieldName = dataAreaGroupStatisticsFieldNameList.get(k); |
| | | if (preFse != null) { |
| | | reportData.add(getDataAreaGroupStatisticsFieldStatisticsRow(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName), statisticsMap, dataAreaFieldConfigMap, tempFieldName, preFse, dataAreaGroupFieldNameList, replaceMap, dataAreaGroupFieldRecordObj)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // æ»è®¡ |
| | | if (!StringUtils.isEmpty(totalName)) { |
| | | reportData.add(getDataAreaTotalStatistics(statisticsMap, dataAreaFieldConfigMap, dataAreaGroupFieldNameList, preFse, dataAreaGroupFieldRecordObj, totalName)); |
| | | } |
| | | reportData.stream().forEach(item -> { |
| | | item.stream().forEach(column -> { |
| | | for (Map.Entry<String, String> entry : replaceMap.entrySet()) { |
| | | column.replace(entry.getKey(), entry.getValue()); |
| | | } |
| | | }); |
| | | }); |
| | | |
| | | |
| | | return reportData; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ»è®¡è¡ |
| | | * |
| | | * @param statisticsMap ç»è®¡map |
| | | * @param dataAreaFieldConfigMap æ°æ®åºå段ç¼åmap |
| | | * @param dataAreaGroupFieldNameList æ°æ®åºåç»å段åç§°list |
| | | * @param preFse æè¿æä½çæ°æ®fse |
| | | * @param dataAreaGroupFieldRecordObj æ°æ®åºåç»å段记å½obj |
| | | * @param totalName æ»è®¡åç§° |
| | | * @return |
| | | */ |
| | | private List<ReportColumn> getDataAreaTotalStatistics(Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, List<String> dataAreaGroupFieldNameList, FieldSetEntity preFse, JSONObject dataAreaGroupFieldRecordObj, String totalName) { |
| | | List<ReportColumn> columns = new ArrayList<>(); |
| | | // StringBuilder html = new StringBuilder(512); |
| | | String dataAreaFieldName; |
| | | JSONObject dataAreaFieldConfigObj; |
| | | String value; |
| | | JSONObject keyObj = new JSONObject(); |
| | | String statisticsType; |
| | | // html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_STATISTICS).append("\">\n "); |
| | | if (preFse == null) { |
| | | return null; |
| | | } |
| | | int index = 0; |
| | | for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) { |
| | | ReportColumn column = new ReportColumn(); |
| | | index++; |
| | | dataAreaFieldName = entry.getKey(); |
| | | if (!dataAreaGroupFieldNameList.contains(dataAreaFieldName)) { |
| | | dataAreaFieldConfigObj = entry.getValue(); |
| | | statisticsType = dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS); |
| | | keyObj.put(CmnConst.ATTR_FIELD_INFO, dataAreaFieldConfigObj.getString(CmnConst.ATTR_FIELD_INFO)); |
| | | if ((!"1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD)) && StringUtils.isEmpty(statisticsType)) || statisticsMap.get(keyObj) == null) { |
| | | value = ""; |
| | | } else { |
| | | JSONObject valueObj = statisticsMap.get(keyObj); |
| | | if (StringUtils.isEmpty(statisticsType)) { |
| | | statisticsType = CmnConst.ATTR_STATISTICS_DEFAULT; |
| | | } |
| | | if (CmnConst.ATTR_STATISTICS_AVG.equals(statisticsType) && "1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_AVG_TYPE))) { |
| | | int subCnt = dataAreaGroupFieldRecordObj.size(); |
| | | valueObj.put(CmnConst.ATTR_STATISTICS_SUB_CNT, subCnt); |
| | | dataListReportService.getAvgValue(valueObj, dataAreaFieldConfigObj, false); |
| | | } |
| | | value = valueObj.getString(statisticsType); |
| | | } |
| | | // æ ¼å¼ |
| | | value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); |
| | | column.setContent(value); |
| | | // html.append("<td>").append(value == null ? "" : value).append("</td>"); |
| | | } else { |
| | | if (index == 1) { |
| | | column.setColspan(dataAreaGroupFieldNameList.size()); |
| | | column.setContent(totalName); |
| | | // html.append("<td colspan=\"").append(dataAreaGroupFieldNameList.size()).append("\">").append(totalName).append("</td>"); |
| | | } |
| | | } |
| | | columns.add(column); |
| | | } |
| | | // html.append("\n</tr>"); |
| | | return columns; |
| | | } |
| | | |
| | | private List<ReportColumn> getDataAreaGroupStatisticsFieldStatisticsRow(String waitStatisticsValue, Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, |
| | | String tempFieldName, FieldSetEntity recordFse, List<String> dataAreaGroupFieldNameList, Map<String, String> replaceMap, JSONObject dataAreaGroupFieldRecordObj) { |
| | | List<ReportColumn> columns = new ArrayList<>(); |
| | | // StringBuilder html = new StringBuilder(); |
| | | // html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_STATISTICS).append("\">\n "); |
| | | String dataAreaFieldName; |
| | | JSONObject dataAreaFieldConfigObj; |
| | | boolean flag = false; |
| | | JSONObject keyObj = new JSONObject(); |
| | | String value; |
| | | String statisticsType; |
| | | int index = 0; |
| | | List<String> needAddRowspanDataAreaGroupFieldNameList = Lists.newArrayList(); |
| | | for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) { |
| | | ReportColumn column = new ReportColumn(); |
| | | index++; |
| | | dataAreaFieldName = entry.getKey(); |
| | | if (!flag) { |
| | | if (dataAreaGroupFieldNameList.contains(dataAreaFieldName)) { |
| | | keyObj.put(dataAreaFieldName, recordFse.getString(dataAreaFieldName)); |
| | | if (dataAreaFieldName.equals(tempFieldName)) { |
| | | column.setColspan(dataAreaGroupFieldNameList.size() - index + 1); |
| | | column.setContent(waitStatisticsValue + CmnConst.STATISTICS_NAME); |
| | | } |
| | | if (!flag) { |
| | | needAddRowspanDataAreaGroupFieldNameList.add(dataAreaFieldName); |
| | | } |
| | | } |
| | | } else { |
| | | dataAreaFieldConfigObj = entry.getValue(); |
| | | statisticsType = dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS); |
| | | if (!"1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD)) && StringUtils.isEmpty(statisticsType)) { |
| | | if (!"1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) { |
| | | // html.append("<td></td>"); |
| | | } |
| | | } else { |
| | | keyObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaFieldName)); |
| | | if (statisticsMap.get(keyObj) == null) { |
| | | value = ""; |
| | | } else { |
| | | JSONObject valueObj = statisticsMap.get(keyObj); |
| | | if (StringUtils.isEmpty(statisticsType)) { |
| | | statisticsType = CmnConst.ATTR_STATISTICS_DEFAULT; |
| | | } |
| | | if (CmnConst.ATTR_STATISTICS_AVG.equals(statisticsType) && "1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_AVG_TYPE))) { |
| | | int subCnt = getAimSubCnt(keyObj, dataAreaGroupFieldNameList, dataAreaGroupFieldRecordObj); |
| | | valueObj.put(CmnConst.ATTR_STATISTICS_SUB_CNT, subCnt); |
| | | dataListReportService.getAvgValue(valueObj, dataAreaFieldConfigObj, false); |
| | | } |
| | | value = valueObj.getString(statisticsType); |
| | | } |
| | | // æ ¼å¼ |
| | | value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); |
| | | column.setContent(value); |
| | | // html.append("<td>").append(value == null ? "" : value).append("</td>"); |
| | | } |
| | | } |
| | | columns.add(column); |
| | | } |
| | | // html.append("\n</tr>"); |
| | | dealReplaceMapAddRowspan(replaceMap, needAddRowspanDataAreaGroupFieldNameList, recordFse, false); |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * è·åæ é¢ |
| | |
| | | * @param dataAreaFieldConfigMap æ°æ®åºå段ç¼åmap |
| | | * @return |
| | | */ |
| | | private StringBuilder getDataAreaTitleHtml(Map<String, JSONObject> dataAreaFieldConfigMap) { |
| | | StringBuilder html = new StringBuilder(256); |
| | | html.append("<tr class=\"").append(CmnConst.CLASS_TR_DATA_TITLE).append("\">"); |
| | | private List<ReportColumn> getDataAreaTitle(Map<String, JSONObject> dataAreaFieldConfigMap) { |
| | | List<ReportColumn> columnRow = new ArrayList<>(); |
| | | dataAreaFieldConfigMap.forEach((dataAreaFieldName, dataAreaFieldConfigObj) -> { |
| | | html.append("<td>").append(dataListReportService.dealTdWidth(dataAreaFieldConfigObj, dataAreaFieldConfigObj.getString(CmnConst.ATTR_SHOW_NAME))).append("</td>"); |
| | | ReportColumn column = new ReportColumn(); |
| | | column.setContent(dataAreaFieldConfigObj.getString(CmnConst.ATTR_SHOW_NAME)); |
| | | String width = dataAreaFieldConfigObj.getString(CmnConst.ATTR_WIDTH); |
| | | //å¤æå®½åº¦æ¯å¦ä¸ºç©ºå¹¶ä¸æ¯æ°åï¼æ£æ´æ°åå°æ°é½å¯ä»¥ï¼ |
| | | if (StringUtils.isNotBlank(width) && width.matches("^[0-9]+(.[0-9]+)?$")) { |
| | | //å°å®½åº¦è½¬æ¢ä¸ºdoubleç±»å |
| | | column.setColumnWidth(NumberUtil.parseInt(width)); |
| | | } |
| | | columnRow.add(column); |
| | | }); |
| | | html.append("</tr>"); |
| | | return html; |
| | | return columnRow; |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param totalName æ»è®¡åç§° |
| | | * @return |
| | | */ |
| | | private String getDataAreaDataHtml(Map<String, JSONObject> dataAreaFieldConfigMap, DataTableEntity recordDte, Map<String, Set<String>> headAndTailTitleDataMap, Set<String> headAndTailFieldSet, Map<JSONObject, JSONObject> statisticsMap, String totalName) { |
| | | private List<List<ReportColumn>> getDataAreaData(Map<String, JSONObject> dataAreaFieldConfigMap, DataTableEntity recordDte, Map<String, Set<String>> headAndTailTitleDataMap, Set<String> headAndTailFieldSet, Map<JSONObject, JSONObject> statisticsMap, String totalName) { |
| | | List<List<ReportColumn>> reportColumnList = Lists.newArrayList(); |
| | | // æ°æ®åºåç»ç»è®¡å段åç§°list |
| | | List<String> dataAreaGroupStatisticsFieldNameList = Lists.newArrayList(); |
| | | // æ°æ®åºåç»å段åç§°list |
| | |
| | | } |
| | | }); |
| | | |
| | | StringBuilder dataAreaDataHtml = new StringBuilder(1024); |
| | | StringBuilder curRowHtml = new StringBuilder(256); |
| | | // StringBuilder dataAreaDataHtml = new StringBuilder(1024); |
| | | // StringBuilder curRowHtml = new StringBuilder(256); |
| | | List<ReportColumn> curRowColumn = new ArrayList<>(); |
| | | FieldSetEntity recordFse; |
| | | FieldSetEntity preFse = null; |
| | | String dataAreaFieldName; |
| | |
| | | String tempFieldName; |
| | | String paramKey; |
| | | boolean combineFlag; |
| | | ReportColumn currentColumn = new ReportColumn(); |
| | | JSONObject dataAreaGroupFieldRecordObj = new JSONObject(); |
| | | for (int i = 0; i < recordDte.getRows(); i++) { |
| | | recordFse = recordDte.getFieldSetEntity(i); |
| | | // è·å头é¨ã尾鍿 é¢åºæ°æ®å段 |
| | | dataListReportService.getHeadAndTailTitleDataMap(headAndTailTitleDataMap, headAndTailFieldSet, recordFse); |
| | | |
| | | curRowHtml.setLength(0); |
| | | // curRowHtml.setLength(0); |
| | | curRowColumn = new ArrayList<>(); |
| | | |
| | | String rowUuid = IdUtil.simpleUUID(); |
| | | curRowHtml.append("\n<tr rowIndex=\"" + (i + 1) + "\" id=\"" + rowUuid + "\" class=\"").append(CmnConst.CLASS_TR_DATA_COMMON).append("\">\n "); |
| | | // curRowHtml.append("\n<tr rowIndex=\"" + (i + 1) + "\" id=\"" + rowUuid + "\" class=\"").append(CmnConst.CLASS_TR_DATA_COMMON).append("\">\n "); |
| | | combineFlag = true; |
| | | for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) { |
| | | dataAreaFieldName = entry.getKey(); |
| | |
| | | for (int k = dataAreaGroupStatisticsFieldNameList.size() - 1; k >= minK; k--) { |
| | | tempFieldName = dataAreaGroupStatisticsFieldNameList.get(k); |
| | | if (preFse != null && dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName) != null) { |
| | | dataAreaDataHtml.append(getDataAreaGroupStatisticsFieldStatisticsRowHtml(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName), statisticsMap, dataAreaFieldConfigMap, tempFieldName, preFse, dataAreaGroupFieldNameList, replaceMap, dataAreaGroupFieldRecordObj)); |
| | | reportColumnList.add(getDataAreaGroupStatisticsFieldStatisticsRow(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName), statisticsMap, dataAreaFieldConfigMap, tempFieldName, preFse, dataAreaGroupFieldNameList, replaceMap, dataAreaGroupFieldRecordObj)); |
| | | dataAreaClosestGroupStatisticsFieldValueMap.remove(tempFieldName); |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | paramKey = dataListReportService.concat(keyObj, CmnConst.ATTR_ROWSPAN); |
| | | curRowHtml.append("<td rowspan=\"").append(paramKey).append("\""); |
| | | // curRowHtml.append("<td rowspan=\"").append(paramKey).append("\""); |
| | | currentColumn.setRowspan(paramKey); |
| | | replaceMap.put(paramKey, "1"); |
| | | } else { |
| | | curRowHtml.append("<td"); |
| | | } |
| | | // else { |
| | | // curRowHtml.append("<td"); |
| | | // } |
| | | // class |
| | | if (!StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL))) { |
| | | curRowHtml.append(" class=\"").append(CmnConst.CLASS_TD_CAN_TURN).append("true".equals(dataAreaFieldConfigObj.getString("~isSubReport~")) ? "\"skipSubReport=true" : "\"").append(" router=\"").append(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL)).append("\""); |
| | | currentColumn.setSubReport("true".equals(dataAreaFieldConfigObj.getString("~isSubReport~"))); |
| | | if (!currentColumn.isSubReport()) { |
| | | currentColumn.setPenetrate(true); |
| | | currentColumn.setPenetrateProperty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL)); |
| | | } else { |
| | | currentColumn.setSubReportProperty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL)); |
| | | } |
| | | // curRowHtml.append(" class=\"").append(CmnConst.CLASS_TD_CAN_TURN).append("true".equals(dataAreaFieldConfigObj.getString("~isSubReport~")) ? "\"skipSubReport=true" : "\"").append(" router=\"").append(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL)).append("\""); |
| | | } |
| | | String attrValue = recordFse.getString(dataAreaFieldName + CmnConst.PROMPT_REAL_VALUE_TAIL); |
| | | if (StringUtils.isEmpty(attrValue)) { |
| | | attrValue = recordFse.getString(dataAreaFieldName); |
| | | } |
| | | curRowHtml.append(" ").append(dataAreaFieldName).append("=\"").append(attrValue).append("\""); |
| | | curRowHtml.append(">"); |
| | | if (!dataAreaFieldName.matches("\\d+")) { |
| | | currentColumn.addProperty(dataAreaFieldName, attrValue); |
| | | // curRowHtml.append(" ").append(dataAreaFieldName).append("=\"").append(attrValue).append("\""); |
| | | } |
| | | // è§£æç©¿éåæ° |
| | | String urlParam = dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL_PARAM); |
| | | String attrParam; |
| | | if (!StringUtils.isEmpty(urlParam)) { |
| | | List<String> suitFieldList = BaseUtil.getSuitContent(urlParam, "\\{#\\w+#\\}"); |
| | | for (String singleSuitFieldName : suitFieldList) { |
| | | attrParam = singleSuitFieldName.substring(2, singleSuitFieldName.length() - 2); |
| | | currentColumn.addProperty(attrParam, recordFse.getString(attrParam)); |
| | | // curRowHtml.append(" ").append(attrParam).append("=\"").append(recordFse.getString(attrParam)).append("\""); |
| | | } |
| | | } |
| | | // curRowHtml.append(">"); |
| | | // æ ¼å¼ |
| | | value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); |
| | | curRowHtml.append(value == null ? "" : value); |
| | | curRowHtml.append("</td>"); |
| | | // curRowHtml.append(value == null ? "" : value); |
| | | // curRowHtml.append("</td>"); |
| | | currentColumn.setContent(value); |
| | | curRowColumn.add(currentColumn); |
| | | currentColumn = new ReportColumn(); |
| | | } |
| | | curRowHtml.append("\n</tr>"); |
| | | dataAreaDataHtml.append(curRowHtml); |
| | | // curRowHtml.append("\n</tr>"); |
| | | // dataAreaDataHtml.append(curRowHtml); |
| | | reportColumnList.add(curRowColumn); |
| | | preFse = recordFse; |
| | | } |
| | | |
| | |
| | | for (int k = maxK; k >= 0; k--) { |
| | | tempFieldName = dataAreaGroupStatisticsFieldNameList.get(k); |
| | | if (preFse != null) { |
| | | dataAreaDataHtml.append(getDataAreaGroupStatisticsFieldStatisticsRowHtml(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName), statisticsMap, dataAreaFieldConfigMap, tempFieldName, preFse, dataAreaGroupFieldNameList, replaceMap, dataAreaGroupFieldRecordObj)); |
| | | reportColumnList.add(getDataAreaGroupStatisticsFieldStatisticsRow(dataAreaClosestGroupStatisticsFieldValueMap.get(tempFieldName), statisticsMap, dataAreaFieldConfigMap, tempFieldName, preFse, dataAreaGroupFieldNameList, replaceMap, dataAreaGroupFieldRecordObj)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // æ»è®¡ |
| | | if (!StringUtils.isEmpty(totalName)) { |
| | | dataAreaDataHtml.append(getDataAreaTotalStatisticsHtml(statisticsMap, dataAreaFieldConfigMap, dataAreaGroupFieldNameList, preFse, dataAreaGroupFieldRecordObj, totalName)); |
| | | List<ReportColumn> reportColumns = getDataAreaTotalStatisticsRow(statisticsMap, dataAreaFieldConfigMap, dataAreaGroupFieldNameList, preFse, dataAreaGroupFieldRecordObj, totalName); |
| | | if (reportColumns != null && reportColumns.size() > 0) { |
| | | reportColumnList.add(reportColumns); |
| | | } |
| | | } |
| | | //å¾ªç¯ææçcolumnè¿è¡åæ°æ¿æ¢ |
| | | for (List<ReportColumn> reportColumns : reportColumnList) { |
| | | if (reportColumns != null) { |
| | | for (ReportColumn reportColumn : reportColumns) { |
| | | if (reportColumn != null) { |
| | | |
| | | String str = dataAreaDataHtml.toString(); |
| | | for (Map.Entry<String, String> entry : replaceMap.entrySet()) { |
| | | str = str.replace(entry.getKey(), entry.getValue()); |
| | | reportColumn.replace(entry.getKey(), entry.getValue()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return str; |
| | | } |
| | | } |
| | | |
| | | return reportColumnList; |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param dataAreaGroupFieldRecordObj æ°æ®åºåç»å段记å½obj |
| | | * @return |
| | | */ |
| | | private StringBuilder getDataAreaGroupStatisticsFieldStatisticsRowHtml(String waitStatisticsValue, Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, |
| | | private List<ReportColumn> getDataAreaGroupStatisticsFieldStatisticsRow(String waitStatisticsValue, Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, |
| | | String tempFieldName, FieldSetEntity recordFse, List<String> dataAreaGroupFieldNameList, Map<String, String> replaceMap, JSONObject dataAreaGroupFieldRecordObj) { |
| | | StringBuilder html = new StringBuilder(); |
| | | html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_STATISTICS).append("\">\n "); |
| | | List<ReportColumn> columnRow = new ArrayList<>(); |
| | | String dataAreaFieldName; |
| | | JSONObject dataAreaFieldConfigObj; |
| | | boolean flag = false; |
| | |
| | | if (dataAreaGroupFieldNameList.contains(dataAreaFieldName)) { |
| | | keyObj.put(dataAreaFieldName, recordFse.getString(dataAreaFieldName)); |
| | | if (dataAreaFieldName.equals(tempFieldName)) { |
| | | html.append("<td colspan=\"").append(dataAreaGroupFieldNameList.size() - index + 1).append("\">").append(waitStatisticsValue).append(CmnConst.STATISTICS_NAME).append("</td>"); |
| | | ReportColumn column = new ReportColumn(); |
| | | column.setColspan(dataAreaGroupFieldNameList.size() - index + 1); |
| | | column.setContent(waitStatisticsValue); |
| | | // html.append("<td colspan=\"").append(dataAreaGroupFieldNameList.size() - index + 1).append("\">").append(waitStatisticsValue).append(CmnConst.STATISTICS_NAME).append("</td>"); |
| | | flag = true; |
| | | columnRow.add(column); |
| | | } |
| | | if (!flag) { |
| | | needAddRowspanDataAreaGroupFieldNameList.add(dataAreaFieldName); |
| | |
| | | statisticsType = dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS); |
| | | if (!"1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD)) && StringUtils.isEmpty(statisticsType)) { |
| | | if (!"1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_GROUP))) { |
| | | html.append("<td></td>"); |
| | | // html.append("<td></td>"); |
| | | columnRow.add(new ReportColumn()); |
| | | } |
| | | } else { |
| | | keyObj.put(CmnConst.ATTR_FIELD_INFO, dataListReportService.fieldName2FieldInfo(dataAreaFieldName)); |
| | |
| | | } |
| | | // æ ¼å¼ |
| | | value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); |
| | | html.append("<td>").append(value == null ? "" : value).append("</td>"); |
| | | // html.append("<td>").append(value == null ? "" : value).append("</td>"); |
| | | columnRow.add(new ReportColumn(value == null ? "" : value)); |
| | | } |
| | | } |
| | | } |
| | | html.append("\n</tr>"); |
| | | dealReplaceMapAddRowspan(replaceMap, needAddRowspanDataAreaGroupFieldNameList, recordFse, false); |
| | | return html; |
| | | return columnRow; |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param totalName æ»è®¡åç§° |
| | | * @return |
| | | */ |
| | | private String getDataAreaTotalStatisticsHtml(Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, List<String> dataAreaGroupFieldNameList, FieldSetEntity preFse, JSONObject dataAreaGroupFieldRecordObj, String totalName) { |
| | | StringBuilder html = new StringBuilder(512); |
| | | private List<ReportColumn> getDataAreaTotalStatisticsRow(Map<JSONObject, JSONObject> statisticsMap, Map<String, JSONObject> dataAreaFieldConfigMap, List<String> dataAreaGroupFieldNameList, FieldSetEntity preFse, JSONObject dataAreaGroupFieldRecordObj, String totalName) { |
| | | List<ReportColumn> reportColumns = new ArrayList<>(); |
| | | String dataAreaFieldName; |
| | | JSONObject dataAreaFieldConfigObj; |
| | | String value; |
| | | JSONObject keyObj = new JSONObject(); |
| | | String statisticsType; |
| | | html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_STATISTICS).append("\">\n "); |
| | | // html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_STATISTICS).append("\">\n "); |
| | | if (preFse == null) { |
| | | return html.toString(); |
| | | return null; |
| | | } |
| | | int index = 0; |
| | | for (Map.Entry<String, JSONObject> entry : dataAreaFieldConfigMap.entrySet()) { |
| | |
| | | } |
| | | // æ ¼å¼ |
| | | value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); |
| | | html.append("<td>").append(value == null ? "" : value).append("</td>"); |
| | | reportColumns.add(new ReportColumn(value == null ? "" : value)); |
| | | } else { |
| | | if (index == 1) { |
| | | html.append("<td colspan=\"").append(dataAreaGroupFieldNameList.size()).append("\">").append(totalName).append("</td>"); |
| | | ReportColumn column = new ReportColumn(); |
| | | column.setColspan(dataAreaGroupFieldNameList.size()); |
| | | column.setContent(totalName); |
| | | reportColumns.add(column); |
| | | } |
| | | } |
| | | } |
| | | html.append("\n</tr>"); |
| | | return html.toString(); |
| | | return reportColumns; |
| | | } |
| | | |
| | | /** |
| | |
| | | package com.product.server.report.service; |
| | | |
| | | import cn.hutool.core.collection.CollectionUtil; |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.util.NumberUtil; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.google.common.collect.Lists; |
| | |
| | | import com.product.server.report.config.ReportCode; |
| | | import com.product.server.report.entity.ReportColumn; |
| | | import com.product.server.report.entity.ReportEntity; |
| | | import com.product.server.report.util.QuerySqlParseUtil; |
| | | import com.product.util.BaseUtil; |
| | | import com.product.util.SystemParamReplace; |
| | | import org.jsoup.Jsoup; |
| | | import org.jsoup.nodes.Document; |
| | | import org.jsoup.nodes.Element; |
| | | import org.jsoup.select.Elements; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | |
| | | private SystemDataExportService exportService; |
| | | |
| | | public void outReportExcel(HttpServletResponse response, FieldSetEntity fse) throws BaseException, IOException { |
| | | ReportEntity reportEntity = getReportEntity(fse); |
| | | ReportEntity reportEntity = getReport(fse); |
| | | List<List<ReportColumn>> reportHeader = reportEntity.getReportHeader(); |
| | | |
| | | List<List<String>> headerTemp = processingMergeData(reportHeader); |
| | |
| | | List<ReportColumn> columns = data.get(i); |
| | | for (ReportColumn column : columns) { |
| | | //è·¨è¡ |
| | | int rowspan = column.getRowspan() < 1 ? 1 : column.getRowspan(); |
| | | int rowspan = column.getRowspanInt() < 1 ? 1 : column.getRowspanInt(); |
| | | //è·¨å |
| | | int colspan = column.getColspan() < 1 ? 1 : column.getColspan(); |
| | | int colspan = column.getColspanInt() < 1 ? 1 : column.getColspanInt(); |
| | | List<String> currentCell = new ArrayList<>(); |
| | | for (int k = 0; k < colspan; k++) { |
| | | currentCell.add(column.getContent(true)); |
| | |
| | | for (int j = 0; j < rowspan; j++) { |
| | | resultData.get(j + i).addAll(currentCell); |
| | | } |
| | | System.out.println(resultData); |
| | | } |
| | | } |
| | | return resultData; |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @param target |
| | | * @param content |
| | | * @param colspan |
| | | * @param rowspan |
| | | * @param currentColspan |
| | | * @param currentRowsSpan |
| | | */ |
| | | private void rowspanAndColspan(String[][] target, String content, int colspan, int rowspan, int currentColspan, int currentRowsSpan) { |
| | | int k = currentColspan; |
| | | int i = currentRowsSpan; |
| | | if (colspan > 1) { |
| | | for (int j = 1; j < colspan; j++) { |
| | | int index = j + k; |
| | | while (target[i][index] != null) { |
| | | index++; |
| | | } |
| | | target[i][index] = content; |
| | | } |
| | | } |
| | | if (rowspan > 1) { |
| | | for (int j = 1; j < rowspan; j++) { |
| | | int index = i + k; |
| | | while (target[index][k] != null) { |
| | | index++; |
| | | } |
| | | target[index][k] = content; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å è½½ææç¼å |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * è·åæ¥è¡¨ |
| | | * |
| | | * @return |
| | | */ |
| | | public ReportEntity getReportEntity(FieldSetEntity fse) { |
| | | ReportEntity report = null; |
| | | public ReportEntity getReport(FieldSetEntity fse) { |
| | | ReportEntity reportEntity = new ReportEntity(); |
| | | String reportConfigUUID = fse.getUUID(); |
| | | if (!StringUtils.isEmpty(fse.getString("~report_config_uuid~"))) { |
| | | //åæ¥è¡¨ä¼ä¼ å
¥æ¤keyä½ä¸ºæ¥è¡¨çuuid è§é¿åæ°ä¸æuuidçkey |
| | |
| | | FieldSetEntity reportSourceFse = reportSourceDte.getFieldSetEntity(0); |
| | | int curPage = fse.getInteger(CmnConst.CPAGE) == null ? 1 : fse.getInteger(CmnConst.CPAGE); |
| | | |
| | | JSONObject resultObj = new JSONObject(); |
| | | // JSONObject resultObj = new JSONObject(); |
| | | // 馿¬¡å è½½ï¼é»è®¤æ·»å æ¡ä»¶ |
| | | Map<String, Map<String, String>> outerMap = Maps.newHashMap(); |
| | | if (fse.getBoolean(CmnConst.FIRST_LOAD)) { |
| | | DataTableEntity allFilterDte = getDefaultSearchFilter(reportSourceFse.getUUID()); |
| | | Map<String, DataTableEntity> subMap = Maps.newHashMap(); |
| | |
| | | DataTableEntity defaultFilterDte = new DataTableEntity(); |
| | | |
| | | FieldSetEntity tempFse; |
| | | |
| | | Map<String, Map<String, String>> outerMap = Maps.newHashMap(); |
| | | Map<String, String> innerMap; |
| | | for (int i = 0; i < allFilterDte.getRows(); i++) { |
| | | tempFse = allFilterDte.getFieldSetEntity(i); |
| | |
| | | outerMap.put(tempFse.getString(CmnConst.FIELD_NAME), innerMap); |
| | | } |
| | | // resultObj.put("filterInfo", outerMap); |
| | | |
| | | reportEntity.setFilterInfo(outerMap); |
| | | if (!DataTableEntity.isEmpty(defaultFilterDte)) { |
| | | subMap.put("systemSeniorQueryString", defaultFilterDte); |
| | | } |
| | | fse.setSubData(subMap); |
| | | } |
| | | |
| | | DataTableEntity recordDte = getRecordDte(sort, curPage, reportSourceFse, fse, reportConfigFse, null); |
| | | List<String> unpivotInfoContainer = Lists.newArrayList(); |
| | | DataTableEntity recordDte = getRecordDte(sort, curPage, reportSourceFse, fse, reportConfigFse, null, unpivotInfoContainer); |
| | | // æ¯å¦æ·»å æ»å计 |
| | | boolean totalStatisticsFlag = "1".equalsIgnoreCase(reportConfigFse.getString(CmnConst.LAST_TOTAL)); |
| | | String totalName = totalStatisticsFlag ? (StringUtils.isEmpty(reportConfigFse.getString(CmnConst.TOTAL_NAME)) ? "æ»è®¡" : reportConfigFse.getString(CmnConst.TOTAL_NAME)) : ""; |
| | | |
| | | // JSONObject checkObj = checkRecordDte(recordDte); |
| | | // if (CmnConst.FALSE.equals(checkObj.getString(CmnConst.RETURN_ATTR_RESULT))) { |
| | | // return checkObj; |
| | | // } |
| | | |
| | | // StringBuilder tableStyle = new StringBuilder(32); |
| | | // String widthType = reportConfigFse.getString(CmnConst.REPORT_WIDTH_TYPE); |
| | |
| | | // tableStyle.append(" style=\"width:").append(width).append("px\""); |
| | | // } |
| | | // } |
| | | |
| | | List<List<ReportColumn>>[] report = null; |
| | | if (CmnConst.REPORT_TYPE_COMMON.equals(reportType)) { |
| | | report = commonReportService.getReportEntity(recordDte, totalName, reportConfigMap); |
| | | report.setFilterInfo(outerMap); |
| | | report = commonReportService.getReport(recordDte, totalName, reportConfigMap, unpivotInfoContainer); |
| | | |
| | | } else if (CmnConst.REPORT_TYPE_GROUP.equals(reportType)) { |
| | | // ç¹æ®å¤çé¢å¤æ¥è¯¢å
容 |
| | | recordDte.addFieldSetEntity(getRecordDte(sort, curPage, reportSourceFse, fse, reportConfigFse, reportConfigMap)); |
| | | report = groupReportService.getReportEntity(recordDte, totalName, reportConfigMap); |
| | | // resultObj.putAll(groupReportService.getReport(recordDte, totalName, reportConfigMap, tableStyle)); |
| | | recordDte.addFieldSetEntity(getRecordDte(sort, curPage, reportSourceFse, fse, reportConfigFse, reportConfigMap, null)); |
| | | report = groupReportService.getReport(recordDte, totalName, reportConfigMap); |
| | | } |
| | | report.setReportConfigUid(reportConfigFse.getUUID()); |
| | | report.setReportName(reportConfigFse.getString(CmnConst.REPORT_NAME)); |
| | | // report.setFilterInfo(outerMap); |
| | | if (CmnConst.FALSE.equals(resultObj.getString(CmnConst.RETURN_ATTR_RESULT))) { |
| | | resultObj.put(CmnConst.RETURN_ATTR_RESULT, true); |
| | | resultObj.put(CmnConst.RETURN_ATTR_MESSAGE, "è·åæ¥è¡¨å¤±è´¥ï¼"); |
| | | } else { |
| | | if (report != null) { |
| | | List<List<ReportColumn>> head = report[0]; |
| | | List<List<ReportColumn>> data = report[1]; |
| | | List<List<ReportColumn>> tail = report[2]; |
| | | reportEntity.setReportHeader(head); |
| | | reportEntity.setReportData(data); |
| | | reportEntity.setReportTail(tail); |
| | | } |
| | | |
| | | |
| | | reportEntity.setReportConfigUid(reportConfigFse.getUUID()); |
| | | reportEntity.setReportName(reportConfigFse.getString(CmnConst.REPORT_NAME)); |
| | | |
| | | // å页忰 |
| | | SQLEntity sqlEntity = recordDte.getSqle(); |
| | | if ("1".equals(reportConfigFse.getString(CmnConst.IS_PAGE)) && sqlEntity != null) { |
| | | report.setPage(true); |
| | | report.setTotalCount(sqlEntity.getTotalCount()); |
| | | report.setPageSize(StringUtils.isEmpty(reportConfigFse.getString(CmnConst.PAGE_SIZE)) ? 0 : reportConfigFse.getInteger(CmnConst.PAGE_SIZE)); |
| | | report.setPageIndex(curPage); |
| | | // resultObj.put(CmnConst.IS_PAGE, 1); |
| | | // resultObj.put(CmnConst.CPAGE, curPage); |
| | | // resultObj.put("totalCount", sqlEntity.getTotalCount()); |
| | | // resultObj.put("totalpage", sqlEntity.getTotalpage()); |
| | | // resultObj.put("pagesize", StringUtils.isEmpty(reportConfigFse.getString(CmnConst.PAGE_SIZE)) ? 0 : reportConfigFse.getInteger(CmnConst.PAGE_SIZE)); |
| | | } |
| | | reportEntity.setPage(true); |
| | | reportEntity.setPageIndex(curPage); |
| | | reportEntity.setTotalCount(sqlEntity.getTotalCount()); |
| | | reportEntity.setPageSize(StringUtils.isEmpty(reportConfigFse.getString(CmnConst.PAGE_SIZE)) ? 0 : reportConfigFse.getInteger(CmnConst.PAGE_SIZE)); |
| | | } else { |
| | | reportEntity.setPage(false); |
| | | } |
| | | // if (!DataTableEntity.isEmpty(recordDte)) { |
| | | // resultObj.put("current_page_count", recordDte.getRows()); |
| | | // |
| | | // } |
| | | report.setSystemFieldMeta(getSearchInfo(reportSourceFse.getUUID())); |
| | | report.setReportType(reportConfigFse.getString("type_uuid")); |
| | | // resultObj.put("systemFieldMeta", ); |
| | | // resultObj.put("report_type", reportConfigFse.getString("type_uuid")); |
| | | // System.out.println(resultObj.getString("html")); |
| | | |
| | | return report; |
| | | reportEntity.setReportType(reportConfigFse.getString("type_uuid")); |
| | | reportEntity.setSystemFieldMeta(getSearchInfo(reportSourceFse.getUUID())); |
| | | return reportEntity; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * è·åæ¥è¡¨ç¼åä¿¡æ¯ |
| | |
| | | * @param reportConfigFse |
| | | * @return |
| | | */ |
| | | private DataTableEntity getRecordDte(StringBuilder sort, int curPage, FieldSetEntity |
| | | reportSourceFse, FieldSetEntity fse, FieldSetEntity |
| | | reportConfigFse, Map<Integer, List<JSONObject>> reportConfigMap) { |
| | | private DataTableEntity getRecordDte(StringBuilder sort, int curPage, FieldSetEntity reportSourceFse, FieldSetEntity fse, FieldSetEntity reportConfigFse, Map<Integer, List<JSONObject>> reportConfigMap, Collection<String> unpivotInfoContainer) { |
| | | boolean spTimeFlag = reportConfigMap != null; |
| | | String sql; |
| | | String sqlText = reportSourceFse.getString(CmnConst.SQL_TEXT); |
| | | Map<String, List<String>> queryFilterMap = queryFilterService.getQueryFilterMore(fse); |
| | | // [=table_name=]åæ³å¤çââæ¿æ¢ä¸ºå¯¹åºçwithè¯å¥,0-è¿æï¼1-ææ |
| | | int year = queryFilterMap == null || queryFilterMap.get("query_time") == null || "0".equals(queryFilterMap.get("query_time").get(0)) ? 2 : 0; |
| | | sqlText = QuerySqlParseUtil.parseSplitTableSql(baseDao, sqlText, year); |
| | | // {==}åæ³å¤ç-æ¿æ¢ä¸ºå¯¹åºçè¡å转æ¢è¯å¥ |
| | | sqlText = dealUnpivot(sqlText, queryFilterMap, unpivotInfoContainer); |
| | | |
| | | DataTableEntity recordDte = new DataTableEntity(); |
| | | |
| | | if (spTimeFlag) { |
| | |
| | | Set<String> spTimeStatisticsTypeSet = Sets.newHashSet(); |
| | | spTimeStatisticsTypeSet.addAll(getFieldAndSpTimeStatisticsTypeSet(baseFieldSet, spTimeStatisticsFieldMap, reportConfigMap.get(0))); |
| | | spTimeStatisticsTypeSet.addAll(getFieldAndSpTimeStatisticsTypeSet(baseFieldSet, spTimeStatisticsFieldMap, reportConfigMap.get(2))); |
| | | Map<String, List<String>> queryFilterMap = queryFilterService.getQueryFilterMore(fse); |
| | | Set<String> selectedFieldSet; |
| | | String headContent; |
| | | DataTableEntity tempDte; |
| | |
| | | } |
| | | |
| | | /** |
| | | * åæ¹æ³-å¤çè¡å转æ¢çè¯å¥ |
| | | * |
| | | * @param sql å¾
å¤ççsql |
| | | * @param queryFilterMap è¿æ»¤æ¡ä»¶map |
| | | * @param unpivotInfoContainer è¡å转æ¢å®¹å¨ï¼è¯¥æ¹æ³ä¼å°å¤ç好äºçå
å®¹ç´æ¥æ¾å
¥è¯¥å®¹å¨ä¸ |
| | | * @return |
| | | */ |
| | | private String dealUnpivot(String sql, Map<String, List<String>> queryFilterMap, Collection<String> unpivotInfoContainer) { |
| | | String regexp = "\\{=.+=\\}"; |
| | | List<String> suitList = getSuitContent(sql, regexp); |
| | | String tempStr; |
| | | List<String> fieldInfoList; |
| | | String[] fieldArr; |
| | | String filter; |
| | | String startTimeStr; |
| | | String finalTimeStr; |
| | | int beginIndex; |
| | | SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | List<String> timeList; |
| | | for (String content : suitList) { |
| | | tempStr = content.substring(2, content.length() - 2).trim(); |
| | | fieldInfoList = getSuitContent(tempStr, "\\{\\$((?!\\{\\$).)+\\$\\}"); |
| | | for (String fieldInfo : fieldInfoList) { |
| | | fieldArr = fieldInfo.substring(2, fieldInfo.length() - 2).trim().split(" "); |
| | | if (fieldArr.length != 3) { |
| | | continue; |
| | | } |
| | | if ("date".equalsIgnoreCase(fieldArr[1])) { |
| | | if (queryFilterMap == null || queryFilterMap.isEmpty()) { |
| | | return sql.replaceAll(regexp, ""); |
| | | } |
| | | filter = queryFilterMap.get(fieldArr[0]).get(0); |
| | | beginIndex = filter.indexOf("str_to_date('") + "str_to_date('".length(); |
| | | startTimeStr = filter.substring(beginIndex, beginIndex + 19); |
| | | beginIndex = filter.lastIndexOf("str_to_date('") + "str_to_date('".length(); |
| | | finalTimeStr = filter.substring(beginIndex, beginIndex + 19); |
| | | try { |
| | | timeList = enumTime(dateFormat.parse(startTimeStr), dateFormat.parse(finalTimeStr), fieldArr[2]); |
| | | } catch (Exception e) { |
| | | SpringMVCContextHolder.getSystemLogger().error("transfer error: " + filter); |
| | | timeList = Lists.newArrayList(); |
| | | } |
| | | unpivotInfoContainer.addAll(timeList); |
| | | tempStr = joinSql(timeList, tempStr, fieldInfo); |
| | | } else if ("prompt".equalsIgnoreCase(fieldArr[1])) { |
| | | String promptName = fieldArr[2]; |
| | | DataTableEntity dte; |
| | | StringBuilder promptSql = new StringBuilder(); |
| | | FieldSetEntity fse; |
| | | if (promptName.startsWith("ã")) { |
| | | promptSql.append("select dict_label show_value,dict_value real_value from product_sys_dict where is_used=1 and dict_name=?"); |
| | | if (queryFilterMap != null && !queryFilterMap.isEmpty() && queryFilterMap.get(fieldArr[0]) != null && !StringUtils.isEmpty(queryFilterMap.get(fieldArr[0]).get(1))) { |
| | | promptSql.append(" and (dict_value").append(queryFilterMap.get(fieldArr[0]).get(1)).append(")"); |
| | | } |
| | | dte = baseDao.listTable(promptSql.toString(), new Object[]{promptName.substring(1, promptName.length() - 1)}); |
| | | } else { |
| | | fse = baseDao.getFieldSetEntityByFilter("product_sys_prompt", "prompt_name=?", new Object[]{promptName}, false); |
| | | promptSql.append("select ").append(fse.getString("view_fields")).append(" show_value,").append(fse.getString("value_field")).append(" real_value from ").append(fse.getString("source_table")); |
| | | if (!StringUtils.isEmpty(fse.getString("filter"))) { |
| | | promptSql.append(" where (").append(fse.getString("filter")).append(")"); |
| | | } |
| | | if (queryFilterMap != null && !queryFilterMap.isEmpty() && queryFilterMap.get(fieldArr[0]) != null && !StringUtils.isEmpty(queryFilterMap.get(fieldArr[0]).get(1))) { |
| | | if (!StringUtils.isEmpty(fse.getString("filter"))) { |
| | | promptSql.append(" and"); |
| | | } else { |
| | | promptSql.append(" where"); |
| | | } |
| | | promptSql.append(" (").append(fse.getString("value_field")).append(queryFilterMap.get(fieldArr[0]).get(1)).append(")"); |
| | | } |
| | | dte = baseDao.listTable(promptSql.toString(), new Object[]{}); |
| | | } |
| | | for (int i = 0; i < dte.getRows(); i++) { |
| | | fse = dte.getFieldSetEntity(i); |
| | | unpivotInfoContainer.add(fse.getString("show_value")); |
| | | } |
| | | tempStr = joinSql(dte, tempStr, fieldInfo); |
| | | } |
| | | } |
| | | sql = sql.replace(content, tempStr.contains("{$") ? "" : tempStr); |
| | | } |
| | | return sql; |
| | | } |
| | | |
| | | private String joinSql(Collection<String> collection, String unpivotContent, String fieldInfo) { |
| | | StringBuilder unpivotSb = new StringBuilder(128); |
| | | for (String singleStr : collection) { |
| | | if (unpivotSb.length() > 0) { |
| | | unpivotSb.append("\n "); |
| | | } |
| | | unpivotSb.append(unpivotContent.replace(fieldInfo, singleStr)).append(" '").append(singleStr).append("'"); |
| | | } |
| | | return unpivotSb.toString(); |
| | | } |
| | | |
| | | private String joinSql(DataTableEntity dte, String unpivotContent, String fieldInfo) { |
| | | StringBuilder unpivotSb = new StringBuilder(128); |
| | | for (int i = 0; i < dte.getRows(); i++) { |
| | | FieldSetEntity fse = dte.getFieldSetEntity(i); |
| | | if (unpivotSb.length() > 0) { |
| | | unpivotSb.append("\n "); |
| | | } |
| | | unpivotSb.append(unpivotContent.replace(fieldInfo, fse.getString("real_value"))).append(" '").append(fse.getString("show_value")).append("'"); |
| | | } |
| | | return unpivotSb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * æç
§æ¶é´æ¥é¿æä¸¾æ¶é´èå´ä¹å
çæ¶é´ |
| | | * |
| | | * @param startTime |
| | | * @param finalTime |
| | | * @param formatInfo |
| | | * @return |
| | | */ |
| | | public static List<String> enumTime(Date startTime, Date finalTime, String formatInfo) { |
| | | Calendar c1 = Calendar.getInstance(); |
| | | Calendar c2 = Calendar.getInstance(); |
| | | c1.setTime(startTime); |
| | | c2.setTime(finalTime); |
| | | int step = 1; |
| | | String format = formatInfo; |
| | | if (formatInfo.contains("[")) { |
| | | step = Integer.parseInt(formatInfo.substring(formatInfo.indexOf("[") + 1, formatInfo.indexOf("]"))); |
| | | format = formatInfo.substring(0, formatInfo.indexOf("[")); |
| | | } |
| | | SimpleDateFormat dateFormat = new SimpleDateFormat(format); |
| | | List<String> timeList = Lists.newArrayList(); |
| | | if (formatInfo.contains("H")) { |
| | | enumTime(c1, c2, timeList, dateFormat, step, Calendar.HOUR); |
| | | } else if (formatInfo.contains("d")) { |
| | | enumTime(c1, c2, timeList, dateFormat, step, Calendar.DATE); |
| | | } else if (formatInfo.contains("M")) { |
| | | enumTime(c1, c2, timeList, dateFormat, step, Calendar.MONTH); |
| | | } else if (formatInfo.contains("y")) { |
| | | enumTime(c1, c2, timeList, dateFormat, step, Calendar.YEAR); |
| | | } |
| | | return timeList; |
| | | } |
| | | |
| | | private static void enumTime(Calendar c1, Calendar c2, List<String> timeList, SimpleDateFormat dateFormat, int step, int param) { |
| | | if (c1.compareTo(c2) <= 0) { |
| | | timeList.add(dateFormat.format(c1.getTime())); |
| | | c1.add(param, step); |
| | | enumTime(c1, c2, timeList, dateFormat, step, param); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åæ¹æ³-getRecordDte-å è½½åç
§ |
| | | * |
| | | * @param recordDte |
| | |
| | | * @param sort |
| | | * @return |
| | | */ |
| | | private String replaceSqlContent(String sqlText, FieldSetEntity fse, StringBuilder sort, FieldSetEntity |
| | | reportConfigFse, int curPage, String selectedFields, Map<String, List<String>> queryFilterMap) { |
| | | private String replaceSqlContent(String sqlText, FieldSetEntity fse, StringBuilder sort, FieldSetEntity reportConfigFse, int curPage, String selectedFields, Map<String, List<String>> queryFilterMap) { |
| | | queryFilterMap = queryFilterMap == null ? queryFilterService.getQueryFilterMore(fse) : queryFilterMap; |
| | | // å¤çæè¿æåææçè¿æ»¤æ¡ä»¶ |
| | | queryFilterMap.remove("query_time"); |
| | | selectedFields = StringUtils.isEmpty(selectedFields) ? "*" : selectedFields; |
| | | // æ¿æ¢sqlä¸çç³»ç»åæ° |
| | | sqlText = SystemParamReplace.replaceParams(sqlText, fse); |
| | |
| | | } |
| | | } |
| | | // åé¤å¼å¸¸åºå |
| | | sqlText = sqlText.replaceAll(CmnConst.REGEXP_FILTER_AREA, "").replaceAll(CmnConst.REGEXP_ALL_TYPE, "null").replaceAll(CmnConst.REGEXP_ALWAYS_TRUE, ""); |
| | | sqlText = sqlText.replaceAll(CmnConst.REGEXP_FILTER_AREA, "").replaceAll(CmnConst.REGEXP_ALL_TYPE, "null").replaceAll(CmnConst.REGEXP_ALWAYS_TRUE, "").replaceAll("(\\t*\\n){2,}", "\n"); |
| | | String queryFilter = ""; |
| | | if (signCount > 0) { |
| | | for (Map.Entry<String, List<String>> entry : residueQueryFilterMap.entrySet()) { |
| | |
| | | queryFilter += " (" + entry.getValue().get(2) + ") "; |
| | | } |
| | | } else { |
| | | queryFilter = queryFilterMap.isEmpty() ? queryFilterService.getQueryFilter(fse) : queryFilterMap.get(CmnConst.SYSTEM_SENIOR_QUERY_STRING).get(0); |
| | | queryFilter = queryFilterMap.isEmpty() || queryFilterMap.size() == 1 ? queryFilterService.getQueryFilter(fse) : queryFilterMap.get(CmnConst.SYSTEM_SENIOR_QUERY_STRING).get(0); |
| | | } |
| | | |
| | | StringBuilder sql = new StringBuilder(1024); |
| | |
| | | return sql.toString(); |
| | | } |
| | | |
| | | private String replaceSqlContent(String sqlText, FieldSetEntity fse, StringBuilder sort, FieldSetEntity |
| | | reportConfigFse, int curPage) { |
| | | private String replaceSqlContent(String sqlText, FieldSetEntity fse, StringBuilder sort, FieldSetEntity reportConfigFse, int curPage) { |
| | | return replaceSqlContent(sqlText, fse, sort, reportConfigFse, curPage, null, null); |
| | | } |
| | | |
| | |
| | | * @param queryFilterMap |
| | | * @return |
| | | */ |
| | | private String spReplaceSqlContent(String suitContent, String regexp, int num, Map< |
| | | String, List<String>> queryFilterMap, Map<String, List<String>> residueQueryFilterMap) { |
| | | private String spReplaceSqlContent(String suitContent, String regexp, int num, Map<String, List<String>> queryFilterMap, Map<String, List<String>> residueQueryFilterMap) { |
| | | List<String> innerSuitList = getSuitContent(suitContent, regexp); |
| | | String curField; |
| | | String filter; |
| | |
| | | // 䏿 |
| | | spDealFilterForPrePeriod(tempQueryFilterMap, queryFilterMap, curField); |
| | | } |
| | | } |
| | | filter = tempQueryFilterMap.get(curField).get(num); |
| | | suitContent = suitContent.replace(innerSuitContent, filter); |
| | | } else if ("split".equals(spStatisticsWay)) { |
| | | // åªæ¯æåå¹¶æååºåçå¼ï¼åªæè·åèå´çå¼çæ¶åå¯ä»¥è¿æ ·æä½ |
| | | List<String> paramList = tempQueryFilterMap.get(curField); |
| | | String[] timeArr = paramList.get(0).split("~"); |
| | | suitContent = suitContent.replace(innerSuitContent, timeArr[Integer.parseInt(spStatisticsWayValue)]); |
| | | } else { |
| | | filter = tempQueryFilterMap.get(curField).get(num); |
| | | suitContent = suitContent.replace(innerSuitContent, filter); |
| | | } |
| | | residueQueryFilterMap.remove(curField); |
| | | if (getSuitContent(suitContent, CmnConst.REGEXP_ALL_TYPE).isEmpty() && suitContent.matches(CmnConst.REGEXP_FILTER_AREA)) { |
| | | suitContent = suitContent.substring(2, suitContent.length() - 2); |
| | |
| | | * @param queryFilterMap |
| | | * @param curFieldName |
| | | */ |
| | | private void spDealFilterForLastYear |
| | | (Map<String, List<String>> tempQueryFilterMap, Map<String, List<String>> queryFilterMap, String |
| | | curFieldName) { |
| | | private void spDealFilterForLastYear(Map<String, List<String>> tempQueryFilterMap, Map<String, List<String>> queryFilterMap, String curFieldName) { |
| | | List<String> paramList = tempQueryFilterMap.get(curFieldName); |
| | | for (int i = 0; i < paramList.size(); i++) { |
| | | paramList.set(i, paramList.get(i).replace("str_to_date(", "date_add(str_to_date(") |
| | |
| | | * @param queryFilterMap |
| | | * @param curFieldName |
| | | */ |
| | | private void spDealFilterForPrePeriod |
| | | (Map<String, List<String>> tempQueryFilterMap, Map<String, List<String>> queryFilterMap, String |
| | | curFieldName) { |
| | | private void spDealFilterForPrePeriod(Map<String, List<String>> tempQueryFilterMap, Map<String, List<String>> queryFilterMap, String curFieldName) { |
| | | List<String> paramList = tempQueryFilterMap.get(curFieldName); |
| | | String[] timeArr = paramList.get(0).split("~"); |
| | | try { |
| | |
| | | * @param dataList |
| | | * @return |
| | | */ |
| | | private Set<String> getFieldAndSpTimeStatisticsTypeSet |
| | | (Set<String> baseFieldSet, Map<String, Map<String, JSONObject>> spTimeStatisticsFieldMap, List<JSONObject> dataList) { |
| | | private Set<String> getFieldAndSpTimeStatisticsTypeSet(Set<String> baseFieldSet, Map<String, Map<String, JSONObject>> spTimeStatisticsFieldMap, List<JSONObject> dataList) { |
| | | Set<String> spTimeStatisticsTypeSet = Sets.newHashSet(); |
| | | JSONObject curFieldObj; |
| | | String fieldName; |
| | |
| | | tempObj.put("table_name", reportSourceFieldFse.getString(CmnConst.TABLE_NAME)); |
| | | tempObj.put(CmnConst.SEARCH_TYPE, reportSourceFieldFse.getObject(CmnConst.SEARCH_TYPE)); |
| | | tempObj.put("is_multiple", "2".equals(reportSourceFieldFse.getString(CmnConst.SEARCH_TYPE))); |
| | | tempObj.put("field_prompt_filter", reportSourceFieldFse.getString("field_prompt_filter")); |
| | | } |
| | | } |
| | | } |
| | |
| | | * @param locationType ä½ç½®ç±»åï¼head-头é¨ï¼tail-å°¾é¨ |
| | | * @return |
| | | */ |
| | | public StringBuilder getTitleHtml(List<JSONObject> list, int totalColCount, Map< |
| | | String, Set<String>> headAndTailTitleDataMap, String locationType) { |
| | | public List<List<ReportColumn>> getTitleRows(List<JSONObject> list, int totalColCount, Map<String, Set<String>> headAndTailTitleDataMap, String locationType) { |
| | | List<List<ReportColumn>> reportColumnList = new ArrayList<>(); |
| | | StringBuilder html = new StringBuilder(1024); |
| | | int colspan; |
| | | int preRow = 0; |
| | |
| | | int curRow; |
| | | int curCol; |
| | | String value; |
| | | String style; |
| | | for (JSONObject singleObj : list) { |
| | | curRow = singleObj.getIntValue(CmnConst.ATTR_Y); |
| | | curCol = singleObj.getIntValue(CmnConst.ATTR_X); |
| | |
| | | colspan = colspan < 0 ? totalColCount : Math.max(1, colspan); |
| | | value = replaceFormDataAndSysData(singleObj.getString(CmnConst.ATTR_SHOW_NAME), headAndTailTitleDataMap, singleObj); |
| | | value = value == null ? "" : value; |
| | | if ("1".equals(singleObj.getString(CmnConst.ATTR_IS_TITLE))) { |
| | | style = " class=\"" + CmnConst.CLASS_TR_REPORT_TITLE + "\""; |
| | | } else { |
| | | if ("head".equals(locationType)) { |
| | | style = " class=\"" + CmnConst.CLASS_TR_HEAD + "\""; |
| | | } else { |
| | | style = " class=\"" + CmnConst.CLASS_TR_TAIL + "\""; |
| | | } |
| | | } |
| | | if (preRow < curRow) { |
| | | if (preRow == 0) { |
| | | html.append("\n<tr "); |
| | |
| | | html.append(getAimNumTdPlaceholder(totalColCount - preCol, 1)); |
| | | html.append("\n</tr>\n<tr "); |
| | | } |
| | | html.append(style).append(">\n "); |
| | | html.append(">\n "); |
| | | if (preRow == 0 && preCol == 0 && preCol < curCol - 1) { |
| | | html.append(getAimNumTdPlaceholder(curCol - preCol - 1, 1)); |
| | | } |
| | |
| | | } |
| | | html.append(getAimNumTdPlaceholder(totalColCount - preCol, 1)); |
| | | html.append("\n</tr>"); |
| | | return html; |
| | | // è§£æhtml |
| | | Document doc = Jsoup.parse(html.toString()); |
| | | Elements trs = doc.select("tr"); |
| | | Elements tds; |
| | | List<ReportColumn> reportColumn; |
| | | ReportColumn column; |
| | | for (Element tr : trs) { |
| | | tds = tr.select("td"); |
| | | reportColumn = new ArrayList<>(); |
| | | for (Element td : tds) { |
| | | column = new ReportColumn(); |
| | | column.setColspan(Integer.parseInt(BaseUtil.ifNull(td.attr("colspan"), "1"))); |
| | | column.setRowspan(Integer.parseInt(BaseUtil.ifNull(td.attr("rowspan"), "1"))); |
| | | column.setContent(td.text()); |
| | | reportColumn.add(column); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¡¨-è§£æ-è·å头鍿è
尾鍿 é¢Html |
| | | * |
| | | * @param list æ¥è¡¨é
置信æ¯ï¼ç¼ålist |
| | | * @param totalColCount æ»åæ° |
| | | * @param headAndTailTitleDataMap 头é¨ã尾鍿 é¢åºæ°æ®å段map |
| | | * @param locationType ä½ç½®ç±»åï¼head-头é¨ï¼tail-å°¾é¨ |
| | | * @return |
| | | */ |
| | | public List<List<ReportColumn>> getTitle(List<JSONObject> list, int totalColCount, Map< |
| | | String, Set<String>> headAndTailTitleDataMap, String locationType) { |
| | | List<List<ReportColumn>> row = new ArrayList<>(); |
| | | // StringBuilder html = new StringBuilder(1024); |
| | | int colspan; |
| | | int preRow = 0; |
| | | int preCol = 0; |
| | | int curRow; |
| | | int curCol; |
| | | String value; |
| | | // String style; |
| | | |
| | | List<ReportColumn> reportColumns = new ArrayList<>(); |
| | | for (JSONObject singleObj : list) { |
| | | curRow = singleObj.getIntValue(CmnConst.ATTR_Y); |
| | | curCol = singleObj.getIntValue(CmnConst.ATTR_X); |
| | | colspan = singleObj.getIntValue(CmnConst.ATTR_COLSPAN); |
| | | colspan = colspan < 0 ? totalColCount : Math.max(1, colspan); |
| | | value = replaceFormDataAndSysData(singleObj.getString(CmnConst.ATTR_SHOW_NAME), headAndTailTitleDataMap, singleObj); |
| | | value = value == null ? "" : value; |
| | | // if ("1".equals(singleObj.getString(CmnConst.ATTR_IS_TITLE))) { |
| | | // style = " class=\"" + CmnConst.CLASS_TR_REPORT_TITLE + "\""; |
| | | // } else { |
| | | // if ("head".equals(locationType)) { |
| | | // style = " class=\"" + CmnConst.CLASS_TR_HEAD + "\""; |
| | | // } else { |
| | | // style = " class=\"" + CmnConst.CLASS_TR_TAIL + "\""; |
| | | // } |
| | | // } |
| | | if (preRow < curRow) { |
| | | if(!reportColumns.isEmpty()){ |
| | | row.add(reportColumns); |
| | | reportColumns=new ArrayList<>(); |
| | | reportColumnList.add(reportColumn); |
| | | } |
| | | // if (preRow != 0) { |
| | | // row.add(getAimNumTdPlaceholderColumn(totalColCount - preCol, 1)); |
| | | // } |
| | | // if (preRow == 0 && preCol == 0 && preCol < curCol - 1) { |
| | | // row.add(getAimNumTdPlaceholderColumn(curCol - preCol - 1, 1)); |
| | | // } |
| | | preCol = curCol; |
| | | } |
| | | if (preCol < curCol - 1) { |
| | | row.add(getAimNumTdPlaceholderColumn(curCol - preCol - 1, 1)); |
| | | } |
| | | if ("1".equals(singleObj.getString(CmnConst.ATTR_IS_TITLE))) { |
| | | colspan = totalColCount; |
| | | } |
| | | ReportColumn column = new ReportColumn(); |
| | | column.setColspan(colspan); |
| | | column.setContent(value); |
| | | reportColumns.add(column); |
| | | preRow = curRow; |
| | | preCol = curCol + singleObj.getIntValue(CmnConst.ATTR_COLSPAN) - 1; |
| | | if ("1".equals(singleObj.getString(CmnConst.ATTR_IS_TITLE))) { |
| | | preCol = totalColCount; |
| | | } |
| | | } |
| | | row.add(reportColumns); |
| | | // reportColumns.addAll(getAimNumTdPlaceholderColumn(totalColCount - preCol, 1)); |
| | | // row.add(); |
| | | return row; |
| | | return reportColumnList; |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param lastStageFlag æ¯å¦æ«çº§ï¼æ°æ®åºåç»å段æ«çº§ååç»è¡¨å¤´åºåæ®µé½æ¯æ«çº§æä¸ºæ«çº§ï¼ |
| | | * @return |
| | | */ |
| | | public JSONObject getStatisticsValueObj(JSONObject valueJsonObject, JSONObject dataAreaFieldConfigObj, String |
| | | actualValue, String type, boolean lastStageFlag) { |
| | | public JSONObject getStatisticsValueObj(JSONObject valueJsonObject, JSONObject dataAreaFieldConfigObj, String actualValue, String type, boolean lastStageFlag) { |
| | | if (valueJsonObject == null) { |
| | | valueJsonObject = new JSONObject(); |
| | | } |
| | |
| | | * @param set |
| | | * @param recordFse |
| | | */ |
| | | public void getHeadAndTailTitleDataMap |
| | | (Map<String, Set<String>> headAndTailTitleDataMap, Set<String> set, FieldSetEntity recordFse) { |
| | | public void getHeadAndTailTitleDataMap(Map<String, Set<String>> headAndTailTitleDataMap, Set<String> set, FieldSetEntity recordFse) { |
| | | for (String fieldName : set) { |
| | | headAndTailTitleDataMap.computeIfAbsent(fieldName, k -> Sets.newLinkedHashSet()).add(recordFse.getString(fieldName)); |
| | | } |
| | |
| | | return dealedValueSb.toString(); |
| | | } |
| | | |
| | | public int dealColumnWidth(JSONObject dataAreaFieldConfigObj) { |
| | | return NumberUtil.isNumber(dataAreaFieldConfigObj.getString(CmnConst.ATTR_WIDTH)) ? NumberUtil.parseInt(dataAreaFieldConfigObj.getString(CmnConst.ATTR_WIDTH)) : 0; |
| | | } |
| | | |
| | | /** |
| | | * è·åtdç屿§ |
| | | * |
| | |
| | | * @param singleObj |
| | | * @return |
| | | */ |
| | | public String replaceFormDataAndSysData(String |
| | | str, Map<String, Set<String>> headAndTailTitleDataMap, JSONObject singleObj) { |
| | | public String replaceFormDataAndSysData(String str, Map<String, Set<String>> headAndTailTitleDataMap, JSONObject singleObj) { |
| | | if (StringUtils.isEmpty(str)) { |
| | | return ""; |
| | | } |
| | |
| | | * @param num |
| | | * @return |
| | | */ |
| | | public List<ReportColumn> getAimNumTdPlaceholderColumn(int num, int type) { |
| | | List<ReportColumn> columns = new ArrayList<>(); |
| | | if (num <= 0) { |
| | | return columns; |
| | | } |
| | | if (type == 0) { |
| | | for (int i = 0; i < num; i++) { |
| | | columns.add(new ReportColumn()); |
| | | } |
| | | } else { |
| | | |
| | | ReportColumn column = new ReportColumn(); |
| | | column.setColspan(num); |
| | | columns.add(column); |
| | | } |
| | | return columns; |
| | | } |
| | | |
| | | /** |
| | | * è·åæå®ä¸ªæ°çtdå ä½ |
| | | * |
| | | * @param num |
| | | * @return |
| | | */ |
| | | public String getAimNumTdPlaceholder(int num, int type) { |
| | | StringBuilder result = new StringBuilder(64); |
| | | if (num <= 0) { |
| | |
| | | * @param type ç±»åï¼1-è·åç®æ 屿§ï¼å
¶ä»-æé¤ç®æ 屿§ |
| | | * @return |
| | | */ |
| | | public JSONObject extendJSONObject(JSONObject aimObj, JSONObject sourceObj, Collection<String> aimAttr, |
| | | int type) { |
| | | public JSONObject extendJSONObject(JSONObject aimObj, JSONObject sourceObj, Collection<String> aimAttr, int type) { |
| | | if (aimObj == null) { |
| | | aimObj = new JSONObject(); |
| | | } |
| | |
| | | package com.product.server.report.service; |
| | | |
| | | import cn.hutool.core.util.NumberUtil; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.google.common.collect.Lists; |
| | | import com.google.common.collect.Maps; |
| | |
| | | import com.product.core.spring.context.SpringMVCContextHolder; |
| | | import com.product.server.report.config.CmnConst; |
| | | import com.product.server.report.entity.ReportColumn; |
| | | import com.product.server.report.entity.ReportEntity; |
| | | import com.product.util.BaseUtil; |
| | | import org.jsoup.Jsoup; |
| | | import org.jsoup.nodes.Document; |
| | | import org.jsoup.nodes.Element; |
| | | import org.jsoup.select.Elements; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | |
| | | * @param reportConfigMap æ¥è¡¨é
ç½®ç¼åmap |
| | | * @return è·ååç»æ¥è¡¨ç详æ
|
| | | */ |
| | | public ReportEntity getReportEntity(DataTableEntity recordDte, String totalName, Map<Integer, List<JSONObject>> reportConfigMap) { |
| | | public List<List<ReportColumn>>[] getReport(DataTableEntity recordDte, String totalName, Map<Integer, List<JSONObject>> reportConfigMap) { |
| | | // StringBuilder reportHtml = new StringBuilder(4096); |
| | | ReportEntity report = new ReportEntity(); |
| | | List<List<ReportColumn>>[] reportColumnList = new List[]{new ArrayList(), new ArrayList(), new ArrayList()}; |
| | | // css |
| | | // StringBuilder cssHtml = dataListReportService.getCssHtml(); |
| | | |
| | | // åç»è¡¨å¤´åºåæ°æ®åº |
| | | // StringBuilder groupAndDataAreaHtml = new StringBuilder(1024); |
| | | List<List<ReportColumn>>[] rows = new List[2]; |
| | | Map<String, Set<String>> headAndTailTitleDataMap = Maps.newHashMap(); |
| | | int totalColCount = reportConfigMap.get(0).size(); |
| | | int dataAreaColCount = getGroupAndDataAreaAndReturnDataAreaColCount(rows, reportConfigMap, headAndTailTitleDataMap, recordDte, totalName); |
| | | //æ°æ®åºåæ°æ® |
| | | List<List<ReportColumn>> dataAreaList = new ArrayList<>(); |
| | | int[] number = getGroupAndDataAreaHtmlAndReturnDataAreaColCount(dataAreaList, reportConfigMap, headAndTailTitleDataMap, recordDte, totalName); |
| | | int dataAreaColCount = number[0]; |
| | | //æ é¢è¡æ° |
| | | int titleAreaRow = number[1]; |
| | | totalColCount = Math.max(totalColCount, dataAreaColCount); |
| | | |
| | | reportColumnList[1] = dataAreaList; |
| | | // 头鍿 é¢åº |
| | | |
| | | List<List<ReportColumn>> headTitle = null; |
| | | if (!reportConfigMap.get(1).isEmpty()) { |
| | | headTitle = dataListReportService.getTitle(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head"); |
| | | reportColumnList[0] = dataListReportService.getTitleRows(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head"); |
| | | } |
| | | |
| | | //仿°æ®åºåååºæ é¢è¡æ¾å
¥å¤´é¨æ é¢åºå¹¶å°æ é¢è¡ä»æ°æ®åºåå é¤ |
| | | if (titleAreaRow > 0) { |
| | | for (int i = 0; i < titleAreaRow; i++) { |
| | | reportColumnList[0].add(dataAreaList.get(0)); |
| | | dataAreaList.remove(0); |
| | | } |
| | | } |
| | | // åºé¨æ é¢åº |
| | | List<List<ReportColumn>> tailTitle = null; |
| | | if (!reportConfigMap.get(3).isEmpty()) { |
| | | tailTitle = dataListReportService.getTitle(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail"); |
| | | reportColumnList[2] = dataListReportService.getTitleRows(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail"); |
| | | } |
| | | |
| | | // reportHtml.append("\n<body>\n<table").append(tableStyle).append(">") |
| | | // .append(cssHtml) |
| | | // .append(headTitleHtml == null ? "" : headTitleHtml) |
| | | // .append(groupAndDataAreaHtml) |
| | | // .append(tailTitleHtml == null ? "" : tailTitleHtml) |
| | | // .append("\n</table>\n</body>"); |
| | | |
| | | if (rows[0] != null) { |
| | | if (headTitle == null) { |
| | | headTitle = new ArrayList<>(); |
| | | } |
| | | headTitle.addAll(rows[0]); |
| | | } |
| | | report.setReportHeader(headTitle); |
| | | |
| | | report.setReportData(rows[1]); |
| | | report.setReportTail(tailTitle); |
| | | return report; |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¡¨-è§£æ |
| | | * |
| | | * @param recordDte ä¸å¡æ°æ®dte |
| | | * @param totalName æ»è®¡åç§° |
| | | * @param reportConfigMap æ¥è¡¨é
ç½®ç¼åmap |
| | | * @param tableStyle |
| | | * @return è·ååç»æ¥è¡¨ç详æ
|
| | | */ |
| | | public JSONObject getReport(DataTableEntity recordDte, String totalName, Map<Integer, List<JSONObject>> reportConfigMap, StringBuilder tableStyle) { |
| | | StringBuilder reportHtml = new StringBuilder(4096); |
| | | |
| | | // css |
| | | StringBuilder cssHtml = dataListReportService.getCssHtml(); |
| | | |
| | | // åç»è¡¨å¤´åºåæ°æ®åº |
| | | StringBuilder groupAndDataAreaHtml = new StringBuilder(1024); |
| | | Map<String, Set<String>> headAndTailTitleDataMap = Maps.newHashMap(); |
| | | int totalColCount = reportConfigMap.get(0).size(); |
| | | int dataAreaColCount = getGroupAndDataAreaHtmlAndReturnDataAreaColCount(groupAndDataAreaHtml, reportConfigMap, headAndTailTitleDataMap, recordDte, totalName); |
| | | totalColCount = Math.max(totalColCount, dataAreaColCount); |
| | | |
| | | // 头鍿 é¢åº |
| | | StringBuilder headTitleHtml = null; |
| | | if (!reportConfigMap.get(1).isEmpty()) { |
| | | headTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(1), totalColCount, headAndTailTitleDataMap, "head"); |
| | | } |
| | | |
| | | // åºé¨æ é¢åº |
| | | StringBuilder tailTitleHtml = null; |
| | | if (!reportConfigMap.get(3).isEmpty()) { |
| | | tailTitleHtml = dataListReportService.getTitleHtml(reportConfigMap.get(3), totalColCount, headAndTailTitleDataMap, "tail"); |
| | | } |
| | | |
| | | reportHtml.append("\n<body>\n<table").append(tableStyle).append(">") |
| | | .append(cssHtml) |
| | | .append(headTitleHtml == null ? "" : headTitleHtml) |
| | | .append(groupAndDataAreaHtml) |
| | | .append(tailTitleHtml == null ? "" : tailTitleHtml) |
| | | .append("\n</table>\n</body>"); |
| | | |
| | | JSONObject resultObj = new JSONObject(); |
| | | resultObj.put(CmnConst.RETURN_ATTR_RESULT, true); |
| | | resultObj.put(CmnConst.RETURN_ATTR_MESSAGE, "è·åæ¥è¡¨æåï¼"); |
| | | resultObj.put(CmnConst.RETURN_ATTR_HTML, reportHtml); |
| | | return resultObj; |
| | | return reportColumnList; |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¡¨-è§£æ-æ¾å
¥åç»è¡¨å¤´åºåæ°æ®Htmlï¼è¿ååæ° |
| | | * |
| | | * @param groupAndDataAreaHtml htmlå®¹å¨ |
| | | * @param dataAreaList æ°æ®åºåæ°æ® |
| | | * @param reportConfigMap æ¥è¡¨ç¼åæ°æ®map |
| | | * @param headAndTailTitleDataMap 头é¨ã尾鍿 é¢åºæ°æ®å段mapå®¹å¨ |
| | | * @param recordDte æ°æ®æºéå |
| | | * @param totalName æ»è®¡åç§° |
| | | * @return æ°æ®åºæ»åæ° |
| | | */ |
| | | private int getGroupAndDataAreaHtmlAndReturnDataAreaColCount(StringBuilder groupAndDataAreaHtml, Map<Integer, List<JSONObject>> reportConfigMap, Map<String, Set<String>> headAndTailTitleDataMap, DataTableEntity recordDte, String totalName) { |
| | | private int[] getGroupAndDataAreaHtmlAndReturnDataAreaColCount(List<List<ReportColumn>> dataAreaList, Map<Integer, List<JSONObject>> reportConfigMap, Map<String, Set<String>> headAndTailTitleDataMap, DataTableEntity recordDte, String totalName) { |
| | | // åç»è¡¨å¤´åºå段ç¼åmap |
| | | Map<String, JSONObject> groupAreaFieldConfigMap = dataListReportService.groupAndDataJSONObject2Map(reportConfigMap.get(2)); |
| | | // æ°æ®åºå段ç¼åmap |
| | |
| | | // æ°æ®æ é¢list |
| | | List<JSONObject> dataTitleList = Lists.newArrayList(); |
| | | // è·åæ é¢html |
| | | groupAndDataAreaHtml.append(getDataAreaTitleHtml(dataTitleList, groupAreaFieldRecordObj, dataAreaFieldConfigMap, groupAreaRangeObj, dataAreaCommonStatisticsFieldNameList)); |
| | | List<List<ReportColumn>> dataAreaTitleRows = getDataAreaTitleRows(dataTitleList, groupAreaFieldRecordObj, dataAreaFieldConfigMap, groupAreaRangeObj, dataAreaCommonStatisticsFieldNameList); |
| | | dataAreaList.addAll(dataAreaTitleRows); |
| | | // è·åå
容html |
| | | groupAndDataAreaHtml.append(getDataAreaDataHtml(dataTitleList, dataAreaFieldRecordObj, statisticsMap, totalName, dataAreaGroupFieldNameList, dataAreaFieldConfigMap)); |
| | | List<List<ReportColumn>> dataAreaDataRows = getDataAreaDataRows(dataTitleList, dataAreaFieldRecordObj, statisticsMap, totalName, dataAreaGroupFieldNameList, dataAreaFieldConfigMap); |
| | | dataAreaList.addAll(dataAreaDataRows); |
| | | |
| | | return totalColCount; |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¡¨-è§£æ-æ¾å
¥åç»è¡¨å¤´åºåæ°æ®ï¼è¿ååæ° |
| | | * |
| | | * @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)); |
| | | |
| | | // åç»è¡¨å¤´åºåç»ç»è®¡å段åç§°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)); |
| | | }); |
| | | |
| | | // æ°æ®åºåç»ç»è®¡å段åç§°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); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | // è·ååç»è¡¨å¤´ç»è®¡å段对åºçæ°æ®åºå段map |
| | | Map<String, List<String>> groupAreaStatisticsField2DataAreaFieldMap = getGroupAreaStatisticsField2DataAreaFieldMap(groupAreaFieldConfigMap, dataAreaFieldConfigMap); |
| | | // è·ååç»è¡¨å¤´åºæ«è¡åç»åæ®µå¯¹åºæ°æ®åºå段map |
| | | Map<String, List<String>> groupAreaLastStageField2DataAreaFieldMap = getGroupAreaLastStageField2DataAreaFieldMap(groupAreaFieldConfigMap, dataAreaFieldConfigMap, groupAreaRangeObj); |
| | | |
| | | // è·åæå®æ°æ®éä¸å
å«çæ°æ®åºå段éå |
| | | Set<String> headAndTailFieldSet = Sets.newHashSet(); |
| | | headAndTailFieldSet.addAll(dataListReportService.getDataFields(reportConfigMap.get(1))); |
| | | headAndTailFieldSet.addAll(dataListReportService.getDataFields(reportConfigMap.get(3))); |
| | | |
| | | // ç»è®¡map |
| | | Map<JSONObject, JSONObject> statisticsMap = Maps.newLinkedHashMap(); |
| | | // åç»è¡¨å¤´åºæ°æ®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[0] = (getDataAreaTitle(dataTitleList, groupAreaFieldRecordObj, dataAreaFieldConfigMap, groupAreaRangeObj, dataAreaCommonStatisticsFieldNameList)); |
| | | // è·åå
容html |
| | | groupAndDataArea[1] = (getDataAreaData(dataTitleList, dataAreaFieldRecordObj, statisticsMap, totalName, dataAreaGroupFieldNameList, dataAreaFieldConfigMap)); |
| | | |
| | | return totalColCount; |
| | | return new int[]{totalColCount, dataAreaTitleRows.size()}; |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | /** |
| | | * è·åæ é¢ |
| | | * |
| | | * @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); |
| | | } |
| | | } |
| | | } |
| | | |
| | | dataTitleList.addAll(groupAreaRangeTitleList.get(maxRow)); |
| | | dataTitleList.addAll(afterGroupAreaTitleList); |
| | | |
| | | List<JSONObject> firstList = Lists.newArrayList(); |
| | | firstList.addAll(beforeGroupAreaTitleList); |
| | | firstList.addAll(groupAreaRangeTitleList.get(0)); |
| | | firstList.addAll(afterGroupAreaTitleList); |
| | | |
| | | groupAreaRangeTitleList.set(0, firstList); |
| | | |
| | | // StringBuilder html = new StringBuilder(1024); |
| | | int rowspan; |
| | | int colspan; |
| | | String value; |
| | | List<List<ReportColumn>> rowColumn = new ArrayList<>(); |
| | | for (List<JSONObject> rowList : groupAreaRangeTitleList) { |
| | | List<ReportColumn> columns = new ArrayList<>(); |
| | | // html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_TITLE).append("\">\n "); |
| | | for (JSONObject dataTitleObj : rowList) { |
| | | ReportColumn column = new ReportColumn(); |
| | | rowspan = Math.max(1, dataTitleObj.getIntValue(CmnConst.ATTR_ROWSPAN)); |
| | | colspan = Math.max(1, dataTitleObj.getIntValue(CmnConst.ATTR_COLSPAN)); |
| | | value = dataTitleObj.getString(CmnConst.ATTR_SHOW_NAME); |
| | | if (!StringUtils.isEmpty(dataTitleObj.getString(CmnConst.ATTR_FIELD_INFO))) { |
| | | dataAreaFieldName = dataListReportService.fieldInfo2FieldName(dataTitleObj.getString(CmnConst.ATTR_FIELD_INFO)); |
| | | column.setColumnWidth(dataListReportService.dealColumnWidth(dataAreaFieldConfigMap.get(dataAreaFieldName))); |
| | | // value = dataListReportService.dealTdWidth(dataAreaFieldConfigMap.get(dataAreaFieldName), value); |
| | | } |
| | | column.setRowspan(rowspan); |
| | | column.setColspan(colspan); |
| | | column.setContent(value); |
| | | columns.add(column); |
| | | // html.append("<td rowspan=\"").append(rowspan).append("\" colspan=\"").append(colspan).append("\">").append(value == null ? "" : value).append("</td>"); |
| | | } |
| | | rowColumn.add(columns); |
| | | // html.append("\n</tr>"); |
| | | } |
| | | return rowColumn; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ é¢html |
| | | * |
| | | * @param dataTitleList æ°æ®æ é¢list |
| | |
| | | * @param dataAreaCommonStatisticsFieldNameList æ°æ®åºæ®éç»è®¡å段åç§°list |
| | | * @return æ°æ®æ é¢html |
| | | */ |
| | | private StringBuilder getDataAreaTitleHtml(List<JSONObject> dataTitleList, JSONObject groupAreaFieldRecordObj, Map<String, JSONObject> dataAreaFieldConfigMap, JSONObject groupAreaRangeObj, List<String> dataAreaCommonStatisticsFieldNameList) { |
| | | private List<List<ReportColumn>> getDataAreaTitleRows(List<JSONObject> dataTitleList, JSONObject groupAreaFieldRecordObj, Map<String, JSONObject> dataAreaFieldConfigMap, JSONObject groupAreaRangeObj, List<String> dataAreaCommonStatisticsFieldNameList) { |
| | | List<List<ReportColumn>> reportColumnList = Lists.newArrayList(); |
| | | int maxRow = groupAreaRangeObj.getIntValue(CmnConst.MAX_Y); |
| | | List<List<JSONObject>> groupAreaRangeTitleList = Lists.newArrayList(); |
| | | for (int i = 0; i <= maxRow; i++) { |
| | |
| | | int colspan; |
| | | String value; |
| | | for (List<JSONObject> rowList : groupAreaRangeTitleList) { |
| | | html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_TITLE).append("\">\n "); |
| | | List<ReportColumn> reportColumns = new ArrayList<>(); |
| | | // html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_TITLE).append("\">\n "); |
| | | for (JSONObject dataTitleObj : rowList) { |
| | | rowspan = Math.max(1, dataTitleObj.getIntValue(CmnConst.ATTR_ROWSPAN)); |
| | | colspan = Math.max(1, dataTitleObj.getIntValue(CmnConst.ATTR_COLSPAN)); |
| | | value = dataTitleObj.getString(CmnConst.ATTR_SHOW_NAME); |
| | | ReportColumn column = new ReportColumn(colspan, rowspan); |
| | | if (!StringUtils.isEmpty(dataTitleObj.getString(CmnConst.ATTR_FIELD_INFO))) { |
| | | dataAreaFieldName = dataListReportService.fieldInfo2FieldName(dataTitleObj.getString(CmnConst.ATTR_FIELD_INFO)); |
| | | value = dataListReportService.dealTdWidth(dataAreaFieldConfigMap.get(dataAreaFieldName), value); |
| | | JSONObject dataAreaFieldConfigObjTemp = dataAreaFieldConfigMap.get(dataAreaFieldName); |
| | | String width = dataAreaFieldConfigObjTemp == null ? null : dataAreaFieldConfigObjTemp.getString(CmnConst.ATTR_WIDTH); |
| | | if (!StringUtils.isEmpty(width) && NumberUtil.isNumber(width)) { |
| | | column.setColumnWidth(NumberUtil.parseInt(width)); |
| | | } |
| | | html.append("<td rowspan=\"").append(rowspan).append("\" colspan=\"").append(colspan).append("\">").append(value == null ? "" : value).append("</td>"); |
| | | } |
| | | html.append("\n</tr>"); |
| | | column.setContent(value); |
| | | reportColumns.add(column); |
| | | } |
| | | return html; |
| | | reportColumnList.add(reportColumns); |
| | | } |
| | | return reportColumnList; |
| | | } |
| | | |
| | | /** |
| | |
| | | * @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) { |
| | | private List<List<ReportColumn>> getDataAreaDataRows(List<JSONObject> dataTitleList, JSONObject dataAreaFieldRecordObj, Map<JSONObject, JSONObject> statisticsMap, String totalName, List<String> dataAreaGroupFieldNameList, Map<String, JSONObject> dataAreaFieldConfigMap) { |
| | | List<List<JSONObject>> dataAreaGroupFieldDataList = Lists.newArrayList(); |
| | | getDataAreaGroupFieldDataList(dataAreaFieldRecordObj, dataAreaGroupFieldDataList, new JSONObject(), 1, 1, dataAreaGroupFieldNameList.size(), null); |
| | | |
| | |
| | | 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<List<ReportColumn>> dataRows = new ArrayList<>(); |
| | | 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++) { |
| | | List<ReportColumn> columns = new ArrayList<>(); |
| | | 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); |
| | | ReportColumn column = new ReportColumn(); |
| | | column.setRowspan(rowspan); |
| | | column.setColspan(colspan); |
| | | column.setContent(value); |
| | | columns.add(column); |
| | | // html.append("<td rowspan=\"").append(rowspan).append("\" colspan=\"").append(colspan).append("\">").append(value == null ? "" : value).append("</td>"); |
| | | index++; |
| | | } |
| | | } |
| | | // else { |
| | | // html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_COMMON).append("\">\n "); |
| | | // } |
| | | 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"); |
| | | ReportColumn column = new ReportColumn(); |
| | | if (!StringUtils.isEmpty(value)) { |
| | | // class |
| | | if (!StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL))) { |
| | | dataListReportService.extendJSONObject(keyObj, dataAreaFieldConfigObj, Collections.singletonList(CmnConst.ATTR_URL)); |
| | | // html.append(" class=\"").append(CmnConst.CLASS_TD_CAN_TURN).append("\""); |
| | | } |
| | | // åæ®µå±æ§ |
| | | dataListReportService.getTdAttrObj(keyObj, groupTitleObj); |
| | | dataListReportService.getTdAttrObj(keyObj, dataTitleObj); |
| | | String attrUrL = keyObj.getString(CmnConst.ATTR_URL); |
| | | if (!StringUtils.isEmpty(attrUrL)) { |
| | | column.setPenetrateProperty(attrUrL.toString()); |
| | | List<List<ReportColumn>> reportColumnList = new ArrayList<>(); |
| | | //è§£æhtml |
| | | //å¨htmlå颿¼æ¥ä¸ä¸ªtableæ ç¾åtbodyï¼å¦åJsoupè§£æä¼æ¥é |
| | | html.insert(0, "<table><tbody>"); |
| | | html.append("</tbody></table>"); |
| | | Document doc = Jsoup.parse(html.toString()); |
| | | Elements trs = doc.select("tr"); |
| | | Elements tds; |
| | | List<ReportColumn> reportColumn; |
| | | ReportColumn column; |
| | | for (Element tr : trs) { |
| | | tds = tr.select("td"); |
| | | reportColumn = new ArrayList<>(); |
| | | for (Element td : tds) { |
| | | column = new ReportColumn(); |
| | | column.setColspan(Integer.parseInt(BaseUtil.ifNull(td.attr("colspan"), "1"))); |
| | | column.setRowspan(Integer.parseInt(BaseUtil.ifNull(td.attr("rowspan"), "1"))); |
| | | Set<String> classNames = td.classNames(); |
| | | if (classNames.contains(CmnConst.CLASS_TD_CAN_TURN)) { |
| | | column.setPenetrate(true); |
| | | column.setPenetrateProperty(td.attr("router")); |
| | | } |
| | | for (String key : keyObj.keySet()) { |
| | | column.addProperty(key, keyObj.getString(key)); |
| | | column.setContent(td.text()); |
| | | reportColumn.add(column); |
| | | } |
| | | // html.append(dataListReportService.getTdAttrByObj(keyObj)); |
| | | // æ ¼å¼ |
| | | value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); |
| | | reportColumnList.add(reportColumn); |
| | | } |
| | | // html.append(">").append(value == null ? "" : value).append("</td>"); |
| | | column.setContent(value); |
| | | columns.add(column); |
| | | } |
| | | // html.append("\n</tr>"); |
| | | dataRows.add(columns); |
| | | } |
| | | |
| | | // æ»è®¡ |
| | | if (!StringUtils.isEmpty(totalName)) { |
| | | dataRows.add(getTotalStatistics(statisticsMap, dataTitleList, dataAreaFieldConfigMap, dataAreaGroupFieldNameList.size(), getSubCnt(dataAreaFieldRecordObj), totalName)); |
| | | } |
| | | |
| | | return dataRows; |
| | | return reportColumnList; |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | } |
| | | return row; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ»è®¡html |
| | | * |
| | | * @param statisticsMap ç»è®¡map |
| | | * @param dataTitleList æ°æ®æ é¢list |
| | | * @param dataAreaFieldConfigMap æ°æ®åºå段ç¼åmap |
| | | * @param dataAreaGroupFieldCount æ°æ®åºåç»åæ®µä¸ªæ° |
| | | * @param dataAreaSubCnt æ°æ®åºä¸çº§åç»é¡¹æ° |
| | | * @param totalName æ»è®¡åç§° |
| | | * @return |
| | | */ |
| | | private List<ReportColumn> getTotalStatistics(Map<JSONObject, JSONObject> statisticsMap, List<JSONObject> dataTitleList, Map<String, JSONObject> dataAreaFieldConfigMap, int dataAreaGroupFieldCount, int dataAreaSubCnt, String totalName) { |
| | | List<ReportColumn> columns = new ArrayList<>(); |
| | | // StringBuilder html = new StringBuilder(256); |
| | | // html.append("\n<tr class=\"").append(CmnConst.CLASS_TR_DATA_STATISTICS).append("\">\n "); |
| | | // html.append("<td colspan=\"").append(dataAreaGroupFieldCount).append("\">").append(totalName).append("</td>"); |
| | | ReportColumn column = new ReportColumn(); |
| | | columns.add(column); |
| | | column.setColspan(dataAreaGroupFieldCount); |
| | | column.setContent(totalName); |
| | | JSONObject dataTitleObj; |
| | | JSONObject keyObj; |
| | | JSONObject dataAreaFieldConfigObj; |
| | | String statisticsType; |
| | | JSONObject valueObj; |
| | | String value; |
| | | int groupAreaSubCnt; |
| | | for (int i = 0; i < dataTitleList.size(); i++) { |
| | | column = new ReportColumn(); |
| | | columns.add(column); |
| | | dataTitleObj = dataTitleList.get(i); |
| | | keyObj = dataListReportService.extendJSONObject(null, dataTitleObj, Arrays.asList(CmnConst.ATTR_ROWSPAN, CmnConst.ATTR_COLSPAN, CmnConst.ATTR_SHOW_NAME, CmnConst.ATTR_IS_STATISTICS_FIELD, CmnConst.ATTR_REAL_VALUE), -1); |
| | | dataAreaFieldConfigObj = dataAreaFieldConfigMap.get(dataListReportService.fieldInfo2FieldName(dataTitleObj.getString(CmnConst.ATTR_FIELD_INFO))); |
| | | if (dataAreaFieldConfigObj != null) { |
| | | groupAreaSubCnt = keyObj.getIntValue(CmnConst.ATTR_GROUP_AREA_SUB_CNT); |
| | | keyObj.remove(CmnConst.ATTR_GROUP_AREA_SUB_CNT); |
| | | statisticsType = dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS); |
| | | valueObj = statisticsMap.get(keyObj); |
| | | if (valueObj == null || valueObj.isEmpty()) { |
| | | value = getFinalValue(keyObj, dataAreaFieldConfigObj, statisticsMap); |
| | | } else { |
| | | if (CmnConst.ATTR_STATISTICS_AVG.equals(statisticsType) && "1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_AVG_TYPE))) { |
| | | value = getTwoTypesGroupAvgStatisticsValue(dataAreaSubCnt, groupAreaSubCnt, valueObj, dataAreaFieldConfigObj, statisticsType); |
| | | } else { |
| | | value = valueObj.getString(statisticsType); |
| | | } |
| | | valueObj.put(CmnConst.ATTR_FINAL_VALUE, value); |
| | | } |
| | | } else { |
| | | value = ""; |
| | | } |
| | | // html.append("<td"); |
| | | if (!StringUtils.isEmpty(value)) { |
| | | // class |
| | | if (!StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_URL))) { |
| | | dataListReportService.extendJSONObject(keyObj, dataAreaFieldConfigObj, Collections.singletonList(CmnConst.ATTR_URL)); |
| | | // html.append(" class=\"").append(CmnConst.CLASS_TD_CAN_TURN).append("\""); |
| | | } |
| | | // åæ®µå±æ§ |
| | | dataListReportService.getTdAttrObj(keyObj, dataTitleObj); |
| | | String attrUrL = keyObj.getString(CmnConst.ATTR_URL); |
| | | if (!StringUtils.isEmpty(attrUrL)) { |
| | | column.setPenetrateProperty(attrUrL.toString()); |
| | | column.setPenetrate(true); |
| | | } |
| | | for (String key : keyObj.keySet()) { |
| | | column.addProperty(key, keyObj.getString(key)); |
| | | } |
| | | // html.append(dataListReportService.getTdAttrByObj(keyObj)); |
| | | // æ ¼å¼ |
| | | value = dataListReportService.formatValue(dataAreaFieldConfigObj, value); |
| | | |
| | | } |
| | | column.setContent(value); |
| | | // html.append(">").append(value == null ? "" : value).append("</td>"); |
| | | } |
| | | // html.append("\n</tr>"); |
| | | return columns; |
| | | } |
| | | |
| | | /** |
| | |
| | | import com.product.admin.service.UpdateLoginUserInfoService; |
| | | import com.product.common.lang.StringUtils; |
| | | import com.product.core.cache.DataPoolCacheImpl; |
| | | import com.product.core.config.CoreConst; |
| | | import com.product.core.dao.BaseDao; |
| | | import com.product.core.entity.DataTableEntity; |
| | | import com.product.core.entity.FieldSetEntity; |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.xml.crypto.Data; |
| | | import java.util.*; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @Component |
| | | public class ReportConfigService extends AbstractBaseService implements IReportConfigService { |
| | |
| | | |
| | | List<Object> paramList = Lists.newArrayList(); |
| | | StringBuilder sql = new StringBuilder(512); |
| | | String queryFilter = " "; |
| | | if(!BaseUtil.dataTableIsEmpty(fse.getSubDataTable("systemSeniorQueryString"))){ |
| | | queryFilter ="AND"+ queryFilterService.getQueryFilter(fse); |
| | | } |
| | | sql.append("\nSELECT a.uuid,a.type_uuid,a.is_valid,a.org_level_uuid,a.report_name,b.type_name,b.type_group") |
| | | .append("\nFROM product_sys_report_config a") |
| | | .append("\nLEFT JOIN product_sys_report_type_config b ON a.type_uuid = b.uuid") |
| | | .append("\nwhere (function_uuid is null or function_uuid='') ") |
| | | .append(queryFilter); |
| | | |
| | | .append("\nwhere (function_uuid is null or function_uuid='') "); |
| | | if (!StringUtils.isEmpty(fse.getString(CmnConst.TYPE_UUID))) { |
| | | sql.append("\nand b.type_group=? "); |
| | | paramList.add(fse.getString(CmnConst.TYPE_UUID)); |
| | |
| | | if (StringUtils.isEmpty(fse.getString(CmnConst.PAGE_SIZE))) { |
| | | fse.setValue(CmnConst.PAGE_SIZE, null); |
| | | } |
| | | System.out.println(System.currentTimeMillis()); |
| | | |
| | | String uuid = baseDao.add(fse); |
| | | System.out.println(System.currentTimeMillis()); |
| | | |
| | | if ("1".equals(fse.getString(CmnConst.RELATE_FLAG))) { |
| | | // éæ°è®¾ç½®ç¼å |
| | |
| | | String tempUUID; |
| | | for (int i = 0; i < reportAttrDte.getRows(); i++) { |
| | | tempFse = reportAttrDte.getFieldSetEntity(i); |
| | | tempFse.setValue("report_type_attr_show_name", tempFse.getString(CmnConst.REPORT_TYPE_ATTR)); |
| | | tempFse.setValue(CmnConst.REPORT_TYPE_ATTR, reportTypeAttrMap.get(tempFse.getString(CmnConst.REPORT_TYPE_ATTR))); |
| | | tempFse.setValue(CmnConst.CELL_POSITION_X, tempFse.getString(CmnConst.ATTR_X)); |
| | | tempFse.setValue(CmnConst.CELL_POSITION_Y, tempFse.getString(CmnConst.ATTR_Y)); |
| | | String x = tempFse.getString(CmnConst.ATTR_X); |
| | | |
| | | tempObj = new JSONObject(); |
| | | tempObj.put(CmnConst.ATTR_REPORT_AREA, tempFse.getString(CmnConst.ATTR_REPORT_AREA)); |
| | | tempObj.put(CmnConst.CELL_POSITION_X, tempFse.getString(CmnConst.CELL_POSITION_X)); |
| | |
| | | tempUUID = preReportAttrMap.get(tempObj); |
| | | if (!StringUtils.isEmpty(tempUUID)) { |
| | | tempFse.setValue(CmnConst.UUID, tempUUID); |
| | | } |
| | | if (StringUtils.isEmpty(tempFse.getString(CmnConst.REPORT_TYPE_ATTR_VALUE))) { |
| | | //屿§å¼æ¯å¦ä¸ºç©º |
| | | if (StringUtils.isEmpty(tempFse.getUUID())) { |
| | | //没æä¿åè¿ç屿§ |
| | | reportAttrDte.removeFieldSetEntity(i); |
| | | i--; |
| | | } else { |
| | | //æ 记为å é¤ |
| | | tempFse.setValue(CoreConst.SYSTEM_DATA_OPERATE_TYPE, "del"); |
| | | } |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | |
| | | package com.product.server.report.service; |
| | | |
| | | import java.sql.Connection; |
| | | import java.sql.PreparedStatement; |
| | | import java.sql.ResultSetMetaData; |
| | | import java.sql.SQLException; |
| | | import java.sql.*; |
| | | import java.util.*; |
| | | import java.util.Date; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | import com.google.common.collect.Lists; |
| | | import com.google.common.collect.Maps; |
| | | import com.google.common.collect.Sets; |
| | | import com.product.core.entity.RequestParameterEntity; |
| | | import com.product.core.service.support.QueryFilterService; |
| | | import com.product.server.report.util.QuerySqlParseUtil; |
| | | import com.product.util.BaseUtil; |
| | | import com.product.util.CallBack; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | /** |
| | | * sqlè§£æä¸éªè¯ |
| | | * |
| | | * @param sqlText |
| | | * @param fse |
| | | * @return |
| | | */ |
| | | public DataTableEntity sqlVerify(FieldSetEntity fse) throws SQLException { |
| | |
| | | sql = sql.replace(ternaryOperator, ""); |
| | | } |
| | | } |
| | | sql = sql.replaceAll("\\[\\[((?!\\[).)+\\]\\]", ""); |
| | | sql = sql.replaceAll("\\[\\[((?!\\[).)+\\]\\]", "") |
| | | .replaceAll("and\\s+1\\s*=\\s*1", "") |
| | | .replaceAll("\\{=.+=\\}", "") |
| | | .replaceAll("(\\t*\\n){2,}", "\n"); |
| | | sql = QuerySqlParseUtil.parseSplitTableSql(baseDao, sql, true); |
| | | SpringMVCContextHolder.getSystemLogger().info(sql); |
| | | //䏿°æ®åºçè¿æ¥ |
| | | PreparedStatement ps = null; |
| | | Connection con = null; |
| | | con = ConnectionManager.getConnection(); |
| | | sql = sql.replaceAll("and\\s+1\\s*=\\s*1", ""); |
| | | ps = con.prepareStatement(sql); |
| | | try (Connection con = ConnectionManager.getConnection(); |
| | | PreparedStatement ps = con.prepareStatement(sql); |
| | | ResultSet rs = ps.executeQuery()) { |
| | | //ç»æéå
æ°æ® |
| | | ResultSetMetaData rsmd = ps.getMetaData(); |
| | | ResultSetMetaData rsmd = rs.getMetaData(); |
| | | //è¡¨åæ° |
| | | int size = rsmd.getColumnCount(); |
| | | Set<String> fieldNameSet = Sets.newHashSet(); |
| | |
| | | } |
| | | return dataTableEntity; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æ°æ®æºé
ç½®ï¼æ¥è¯¢åºæ°æ® |