From adaa62aade124c5180bfa1cbb17a671f7f407325 Mon Sep 17 00:00:00 2001
From: 杜洪波 <1074825718@qq.com>
Date: 星期二, 08 七月 2025 18:15:55 +0800
Subject: [PATCH] 图表保存mysql关键字处理
---
src/main/java/com/product/server/report/service/DataListReportService.java | 3439 +++++++++++++++++++++++++++++++---------------------------
1 files changed, 1,852 insertions(+), 1,587 deletions(-)
diff --git a/src/main/java/com/product/server/report/service/DataListReportService.java b/src/main/java/com/product/server/report/service/DataListReportService.java
index ea5274c..adc1c2b 100644
--- a/src/main/java/com/product/server/report/service/DataListReportService.java
+++ b/src/main/java/com/product/server/report/service/DataListReportService.java
@@ -1,5 +1,6 @@
package com.product.server.report.service;
+import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
@@ -18,13 +19,24 @@
import com.product.core.service.support.AbstractBaseService;
import com.product.core.service.support.QueryFilterService;
import com.product.core.spring.context.SpringMVCContextHolder;
+import com.product.module.data.service.SystemDataExportService;
import com.product.server.report.config.CmnConst;
import com.product.server.report.config.ReportCode;
+import com.product.server.report.entity.ReportColumn;
+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;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.ParseException;
@@ -32,6 +44,7 @@
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
/**
* Copyright 漏 6c
@@ -42,1648 +55,1900 @@
*/
@Component
public class DataListReportService extends AbstractBaseService {
- @Autowired
- private BaseDao baseDao;
- @Autowired
- private GroupReportService groupReportService;
- @Autowired
- private CommonReportService commonReportService;
- @Autowired
- private QueryFilterService queryFilterService;
- @Autowired
- private RouterService routerService;
+ @Autowired
+ private BaseDao baseDao;
+ @Autowired
+ private GroupReportService groupReportService;
+ @Autowired
+ private CommonReportService commonReportService;
+ @Autowired
+ private QueryFilterService queryFilterService;
+ @Autowired
+ private RouterService routerService;
+ @Resource
+ private SystemDataExportService exportService;
- /**
- * 鍔犺浇鎵�鏈夌紦瀛�
- */
- public void setAllConfig() {
- DataTableEntity reportTypeDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_TYPE);
- if (BaseUtil.dataTableIsEmpty(reportTypeDte)) {
- return;
- }
- List<String> dataListUUIDList = Lists.newArrayList();
- FieldSetEntity fse;
- for (int i = 0; i < reportTypeDte.getRows(); i++) {
- fse = reportTypeDte.getFieldSetEntity(i);
- if ("DataList".equals(fse.getString(CmnConst.TYPE_GROUP))) {
- dataListUUIDList.add(fse.getUUID());
- }
- }
- DataTableEntity reportConfigDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_CONFIG);
- if (reportConfigDte == null) {
- return;
- }
- for (int i = 0; i < reportConfigDte.getRows(); i++) {
- fse = reportConfigDte.getFieldSetEntity(i);
- try {
- if (!dataListUUIDList.contains(fse.getString(CmnConst.TYPE_UUID)) || (StringUtils.isEmpty(fse.getString(CmnConst.FUNCTION_UUID)) && !"1".equals(fse.getString(CmnConst.RELATE_FLAG)))) {
- continue;
- }
- setConfig(fse.getUUID());
- } catch (Exception e) {
- logger.error(ReportCode.GET_REPORT_CONFIG_FIAL.getText() + ": " + fse.getUUID(), e);
- }
- }
- }
+ public void outReportExcel(HttpServletResponse response, FieldSetEntity fse) throws BaseException, IOException {
+ ReportEntity reportEntity = getReport(fse);
+ List<List<ReportColumn>> reportHeader = reportEntity.getReportHeader();
- /**
- * 璁剧疆鎶ヨ〃鍔犺浇缂撳瓨
- *
- * @param reportConfigUUID 鎶ヨ〃閰嶇疆UUID
- */
- public void setConfig(String reportConfigUUID) {
- // 灞炴�ц幏鍙�
- StringBuilder sql = new StringBuilder(128);
- sql.append("select report_area report_area,cell_position_y y,cell_position_x x,attribute_name name,report_type_attr_value value")
- .append("\nfrom (")
- .append("\n select report_area,cell_position_y,cell_position_x,report_type_attr_value,report_type_attr FROM product_sys_report_config_attribute ca")
- .append("\n where report_config_uuid=?")
- .append("\n) ca")
- .append("\nleft join (")
- .append("\n select uuid,attribute_name FROM product_sys_report_type_attribute where type_group='DataList'")
- .append("\n) ta on ca.report_type_attr=ta.uuid")
- .append("\nwhere ta.attribute_name is not null")
- .append("\norder by report_area,cell_position_y,cell_position_x");
- DataTableEntity attrDte = baseDao.listTable(sql.toString(), new Object[]{reportConfigUUID});
- if (BaseUtil.dataTableIsEmpty(attrDte)) {
- throw new BaseException(ReportCode.SET_REPORT_CACHE_FAIL.getValue(), ReportCode.SET_REPORT_CACHE_FAIL.getText());
- }
+ List<List<String>> headerTemp = processingMergeData(reportHeader);
+ List<List<String>> header = headerTemp.get(0).stream().map(item -> new ArrayList<String>()).collect(Collectors.toList());
+ int size = headerTemp.get(0).size();
+ for (int i = 0; i < size; i++) {
+ for (int k = 0; k < headerTemp.size(); k++) {
+ header.get(i).add(headerTemp.get(k).get(i));
+ }
+ }
- // 鐢熸垚obj锛屾斁鍏ap锛岀粺璁″垎缁勮〃澶村尯琛屾暟
- FieldSetEntity attrFse;
- Map<Integer, List<JSONObject>> reportConfigMap = Maps.newHashMap();
- List<JSONObject> areaList;
- JSONObject fieldConfigObj;
- int reportArea;
- int x;
- int y;
- int preX = -1;
- int preY = -1;
- int groupAreaRowCount = 0;
- for (int i = 0; i < attrDte.getRows(); i++) {
- attrFse = attrDte.getFieldSetEntity(i);
- if (attrFse.getInteger(CmnConst.ATTR_REPORT_AREA) == null) {
- continue;
- }
- reportArea = attrFse.getInteger(CmnConst.ATTR_REPORT_AREA);
- areaList = reportConfigMap.computeIfAbsent(reportArea, k -> Lists.newArrayList());
- x = attrFse.getInteger(CmnConst.ATTR_X);
- y = attrFse.getInteger(CmnConst.ATTR_Y);
- if (preX != x || preY != y) {
- fieldConfigObj = new JSONObject();
- areaList.add(fieldConfigObj);
- } else {
- fieldConfigObj = areaList.get(areaList.size() - 1);
- }
- fieldConfigObj.put(attrFse.getString(CmnConst.ATTR_NAME), attrFse.getString(CmnConst.ATTR_VALUE));
- fieldConfigObj.put(CmnConst.ATTR_X, x);
- fieldConfigObj.put(CmnConst.ATTR_Y, y);
- fieldConfigObj.put(CmnConst.ATTR_REPORT_AREA, reportArea);
- if (reportArea == 2) {
- groupAreaRowCount = Math.max(groupAreaRowCount, y);
- }
- preX = x;
- preY = y;
- }
+ List<List<ReportColumn>> reportData = reportEntity.getReportData();
+ if (!CollectionUtil.isEmpty(reportEntity.getReportTail())) {
+ reportData.addAll(reportEntity.getReportTail());
+ }
- // 娓呯悊绌烘牸
- List<JSONObject> valueList;
- JSONObject tempObj;
- for (Map.Entry<Integer, List<JSONObject>> entry : reportConfigMap.entrySet()) {
- valueList = entry.getValue();
- for (int i = valueList.size() - 1; i >= 0; i--) {
- tempObj = valueList.get(i);
- if (StringUtils.isEmpty(tempObj.getString(CmnConst.ATTR_FIELD_INFO))) {
- valueList.remove(i);
- }
- }
- }
-
- // 鎻愬彇鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist锛屽鏁版嵁鍖哄瓧娈祇bj鏀惧叆鏁版嵁鍖哄垎缁勫瓧娈�
- List<JSONObject> dataAreaReportConfigList = reportConfigMap.get(0);
- String fieldName;
- ArrayList<String> dataAreaGroupFieldNameList = Lists.newArrayList();
- if (dataAreaReportConfigList != null) {
- for (int i = 0; i < dataAreaReportConfigList.size(); i++) {
- tempObj = dataAreaReportConfigList.get(i);
- fieldName = fieldInfo2FieldName(tempObj.getString(CmnConst.ATTR_FIELD_INFO));
- if (!dataAreaGroupFieldNameList.isEmpty()) {
- tempObj.put(CmnConst.ATTR_DATA_AREA_GROUP_FIELD, dataAreaGroupFieldNameList.clone());
- }
- fieldConfigObj = new JSONObject();
- fieldConfigObj.put(fieldName, tempObj);
- dataAreaReportConfigList.set(i, fieldConfigObj);
- if ("1".equals(tempObj.getString(CmnConst.ATTR_IS_GROUP))) {
- dataAreaGroupFieldNameList.add(fieldName);
- }
- }
- }
-
- // 鎻愬彇鍒嗙粍琛ㄥご鍖哄垎缁勫瓧娈靛悕绉發ist锛屽鍒嗙粍琛ㄥご鍖哄瓧娈祇bj鏀惧叆鏁版嵁鍖哄垎缁勫瓧娈点�佸垎缁勮〃澶村尯鍒嗙粍瀛楁
- List<JSONObject> groupAreaReportConfigList = reportConfigMap.get(2);
- ArrayList<String> groupAreaGroupFieldNameList = Lists.newArrayList();
- JSONObject dataAreaFieldConfigOuterObj;
- JSONObject dataAreaFieldConfigInnerObj;
- JSONObject groupAreaFieldConfigInnerObj;
- if (groupAreaReportConfigList != null) {
- for (int i = 0; i < groupAreaReportConfigList.size(); i++) {
- tempObj = groupAreaReportConfigList.get(i);
- fieldName = fieldInfo2FieldName(tempObj.getString(CmnConst.ATTR_FIELD_INFO));
- if (!dataAreaGroupFieldNameList.isEmpty()) {
- tempObj.put(CmnConst.ATTR_DATA_AREA_GROUP_FIELD, dataAreaGroupFieldNameList);
- }
- if (!groupAreaGroupFieldNameList.isEmpty()) {
- tempObj.put(CmnConst.ATTR_GROUP_AREA_GROUP_FIELD, groupAreaGroupFieldNameList.clone());
- }
- fieldConfigObj = new JSONObject();
- fieldConfigObj.put(fieldName, tempObj);
- groupAreaReportConfigList.set(i, fieldConfigObj);
- if ("1".equals(tempObj.getString(CmnConst.ATTR_IS_GROUP))) {
- groupAreaGroupFieldNameList.add(fieldName);
- }
- // 娣诲姞鏁版嵁鍖虹殑鍒嗙粍琛ㄥご鍖哄垎缁勫瓧娈�
- if (dataAreaReportConfigList != null) {
- for (int j = 0; j < dataAreaReportConfigList.size(); j++) {
- dataAreaFieldConfigOuterObj = dataAreaReportConfigList.get(j);
- dataAreaFieldConfigInnerObj = (JSONObject) dataAreaFieldConfigOuterObj.entrySet().iterator().next().getValue();
- groupAreaFieldConfigInnerObj = tempObj;
- if (groupAreaFieldConfigInnerObj.getIntValue(CmnConst.ATTR_X) + Math.max(1, groupAreaFieldConfigInnerObj.getIntValue(CmnConst.ATTR_COLSPAN)) - 1 >= dataAreaFieldConfigInnerObj.getIntValue(CmnConst.ATTR_X)
- && groupAreaFieldConfigInnerObj.getIntValue(CmnConst.ATTR_X) <= dataAreaFieldConfigInnerObj.getIntValue(CmnConst.ATTR_X)) {
- dataAreaFieldConfigInnerObj.put(CmnConst.ATTR_GROUP_AREA_GROUP_FIELD, groupAreaGroupFieldNameList);
- }
- }
- }
- }
- }
-
- // 鏁版嵁婧愭帓搴�
- StringBuilder sort = new StringBuilder(128);
- JSONObject innerObj;
- if (dataAreaReportConfigList != null) {
- for (JSONObject outerObj : dataAreaReportConfigList) {
- fieldName = outerObj.keySet().iterator().next();
- if (dataAreaGroupFieldNameList.contains(fieldName)) {
- innerObj = outerObj.getJSONObject(fieldName);
- sort.append(fieldName).append(StringUtils.isEmpty(innerObj.getString(CmnConst.ATTR_ORDER_BY)) ? "" : " " + innerObj.getString(CmnConst.ATTR_ORDER_BY)).append(",");
- }
- }
- }
- if (groupAreaReportConfigList != null) {
- for (JSONObject outerObj : groupAreaReportConfigList) {
- fieldName = outerObj.keySet().iterator().next();
- if (StringUtils.isEmpty(fieldName)) {
- continue;
- }
- innerObj = outerObj.getJSONObject(fieldName);
- sort.append(fieldName).append(StringUtils.isEmpty(innerObj.getString(CmnConst.ATTR_ORDER_BY)) ? "" : " " + innerObj.getString(CmnConst.ATTR_ORDER_BY)).append(",");
- }
- }
- if (sort.length() > 0) {
- sort.deleteCharAt(sort.length() - 1);
- }
-
- // 鏀惧叆缂撳瓨
- RedisUtil.setHash(reportConfigUUID, "sort", sort);
- for (Map.Entry<Integer, List<JSONObject>> entry : reportConfigMap.entrySet()) {
- RedisUtil.setHash(reportConfigUUID, String.valueOf(entry.getKey()), entry.getValue());
- }
- }
-
- /**
- * 鑾峰彇鎶ヨ〃
- *
- * @return
- */
- public JSONObject getReport(FieldSetEntity fse) {
- String reportConfigUUID = fse.getUUID();
- DataTableEntity reportConfigDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_CONFIG, new String[]{reportConfigUUID});
- if (BaseUtil.dataTableIsEmpty(reportConfigDte)) {
- throw new BaseException(ReportCode.GET_CACHE_FIAL.getValue(), ReportCode.GET_CACHE_FIAL.getText() + ":" + CmnConst.CACHE_REPORT_CONFIG);
- }
- FieldSetEntity reportConfigFse = reportConfigDte.getFieldSetEntity(0);
- if (!"1".equals(reportConfigFse.getString(CmnConst.IS_VALID))) {
- throw new BaseException(ReportCode.INVALID_REPORT.getValue(), ReportCode.INVALID_REPORT.getText());
- }
-
- DataTableEntity reportTypeDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_TYPE, new String[]{reportConfigFse.getString(CmnConst.TYPE_UUID)});
- if (BaseUtil.dataTableIsEmpty(reportTypeDte)) {
- throw new BaseException(ReportCode.GET_CACHE_FIAL.getValue(), ReportCode.GET_CACHE_FIAL.getText() + ":" + CmnConst.CACHE_REPORT_TYPE);
- }
- FieldSetEntity reportTypeFse = reportTypeDte.getFieldSetEntity(0);
-
- StringBuilder sort = new StringBuilder(128);
- // 鑾峰彇鎶ヨ〃缂撳瓨淇℃伅
- Map<Integer, List<JSONObject>> reportConfigMap = getReportConfig(reportConfigUUID, sort);
- // 鏍规嵁鍏蜂綋鐨刦unction_uuid鍜宐utton_uuid鑾峰彇瀵瑰簲鐨勮矾鐢憋紝鎷煎噾url
- String url;
- JSONObject valueObj;
- for (Map.Entry<Integer, List<JSONObject>> entry : reportConfigMap.entrySet()) {
- if (entry.getValue() != null) {
- for (JSONObject tempValueObj : entry.getValue()) {
- if (entry.getValue() != null) {
- for (Map.Entry<String, Object> innerEntry : tempValueObj.entrySet()) {
- if (innerEntry.getValue() instanceof JSONObject) {
- valueObj = (JSONObject) innerEntry.getValue();
- if (!StringUtils.isEmpty(valueObj.getString(CmnConst.SUB_REPORT))) {
- url = valueObj.getString(CmnConst.SUB_REPORT);
- if (!StringUtils.isEmpty(valueObj.getString(CmnConst.ATTR_URL_PARAM))) {
- url += "?" + valueObj.getString(CmnConst.ATTR_URL_PARAM);
- }
- valueObj.put(CmnConst.ATTR_URL, url);
- valueObj.put("~isSubReport~", true);
- } else {
- if (!StringUtils.isEmpty(valueObj.getString(CmnConst.FUNCTION_UUID)) && !StringUtils.isEmpty(valueObj.getString(CmnConst.BUTTON_UUID))) {
- url = routerService.functionSkipByButtonUuid(valueObj.getString(CmnConst.FUNCTION_UUID), valueObj.getString(CmnConst.BUTTON_UUID));
- if (StringUtils.isEmpty(url)) {
- valueObj.remove(CmnConst.ATTR_URL);
- } else {
- if (!StringUtils.isEmpty(valueObj.getString(CmnConst.ATTR_URL_PARAM))) {
- url += "?" + valueObj.getString(CmnConst.ATTR_URL_PARAM);
- }
- valueObj.put(CmnConst.ATTR_URL, url);
- }
- } else {
- valueObj.remove(CmnConst.ATTR_URL);
- }
- }
- }
- }
- }
- }
- }
- }
- // 鑾峰彇鎶ヨ〃绫诲瀷
- String reportType = reportTypeFse.getString(CmnConst.TYPE_NAME);
- // 鑾峰彇鏁版嵁婧�
- DataTableEntity reportSourceDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_DATASOURCE_CONFIG, new String[]{reportConfigFse.getString(CmnConst.DATASOURCE_UUID)});
- if (BaseUtil.dataTableIsEmpty(reportSourceDte)) {
- throw new BaseException(ReportCode.GET_REPORT_DATASOURCE_FIAL.getValue(), ReportCode.GET_REPORT_DATASOURCE_FIAL.getText());
- }
- FieldSetEntity reportSourceFse = reportSourceDte.getFieldSetEntity(0);
- int curPage = fse.getInteger(CmnConst.CPAGE) == null ? 1 : fse.getInteger(CmnConst.CPAGE);
-
- JSONObject resultObj = new JSONObject();
- // 棣栨鍔犺浇锛岄粯璁ゆ坊鍔犳潯浠�
- if (fse.getBoolean(CmnConst.FIRST_LOAD)) {
- DataTableEntity allFilterDte = getDefaultSearchFilter(reportSourceFse.getUUID());
- Map<String, DataTableEntity> subMap = Maps.newHashMap();
- if (!DataTableEntity.isEmpty(allFilterDte)) {
- subMap.put("systemFieldMeta", allFilterDte);
- }
- DataTableEntity defaultFilterDte = new DataTableEntity();
-
- FieldSetEntity tempFse;
- Map<String, Map<String, String>> outerMap = Maps.newHashMap();
- Map<String, String> innerMap;
- for (int i = 0; i < allFilterDte.getRows(); i++) {
- tempFse = allFilterDte.getFieldSetEntity(i);
- if (StringUtils.isEmpty(tempFse.getString(CmnConst.LOGICAL_VALUE))) {
- continue;
- }
- defaultFilterDte.addFieldSetEntity(tempFse);
- innerMap = Maps.newHashMap();
- innerMap.put(CmnConst.LOGICAL_OPERATOR, tempFse.getString(CmnConst.LOGICAL_OPERATOR));
- innerMap.put(CmnConst.LOGICAL_VALUE, tempFse.getString(CmnConst.LOGICAL_VALUE));
- innerMap.put(CmnConst.FIELD_TYPE, tempFse.getString(CmnConst.FIELD_TYPE));
- outerMap.put(tempFse.getString(CmnConst.FIELD_NAME), innerMap);
- }
- resultObj.put("filterInfo", outerMap);
-
- if (!DataTableEntity.isEmpty(defaultFilterDte)) {
- subMap.put("systemSeniorQueryString", defaultFilterDte);
- }
- fse.setSubData(subMap);
- }
-
- DataTableEntity recordDte = getRecordDte(sort, curPage, reportSourceFse, fse, reportConfigFse, null);
- // 鏄惁娣诲姞鎬诲悎璁�
- boolean totalStatisticsFlag = "1".equalsIgnoreCase(reportConfigFse.getString(CmnConst.LAST_TOTAL));
- String totalName = totalStatisticsFlag ? (StringUtils.isEmpty(reportConfigFse.getString(CmnConst.TOTAL_NAME)) ? "鎬昏" : reportConfigFse.getString(CmnConst.TOTAL_NAME)) : "";
-
-// JSONObject checkObj = checkRecordDte(recordDte);
-// if (CmnConst.FALSE.equals(checkObj.getString(CmnConst.RETURN_ATTR_RESULT))) {
-// return checkObj;
-// }
-
- StringBuilder tableStyle = new StringBuilder(32);
- String widthType = reportConfigFse.getString(CmnConst.REPORT_WIDTH_TYPE);
- String width = reportConfigFse.getString(CmnConst.REPORT_WIDTH_VALUE);
- if (!StringUtils.isEmpty(width)) {
- if ("1".equals(widthType)) {
- tableStyle.append(" style=\"width:").append(width).append("%\"");
- } else if ("0".equals(widthType)) {
- tableStyle.append(" style=\"width:").append(width).append("px\"");
- }
- }
-
- if (CmnConst.REPORT_TYPE_COMMON.equals(reportType)) {
- resultObj.putAll(commonReportService.getReport(recordDte, totalName, reportConfigMap, tableStyle));
- } else if (CmnConst.REPORT_TYPE_GROUP.equals(reportType)) {
- // 鐗规畩澶勭悊棰濆鏌ヨ鍐呭
- recordDte.addFieldSetEntity(getRecordDte(sort, curPage, reportSourceFse, fse, reportConfigFse, reportConfigMap));
- resultObj.putAll(groupReportService.getReport(recordDte, totalName, reportConfigMap, tableStyle));
- }
-
- if (CmnConst.FALSE.equals(resultObj.getString(CmnConst.RETURN_ATTR_RESULT))) {
- resultObj.put(CmnConst.RETURN_ATTR_RESULT, true);
- resultObj.put(CmnConst.RETURN_ATTR_MESSAGE, "鑾峰彇鎶ヨ〃澶辫触锛�");
- } else {
- // 鍒嗛〉鍙傛暟
- SQLEntity sqlEntity = recordDte.getSqle();
- if ("1".equals(reportConfigFse.getString(CmnConst.IS_PAGE)) && sqlEntity != null) {
- resultObj.put(CmnConst.IS_PAGE, 1);
- resultObj.put(CmnConst.CPAGE, curPage);
- resultObj.put("totalCount", sqlEntity.getTotalCount());
- resultObj.put("totalpage", sqlEntity.getTotalpage());
- resultObj.put("pagesize", StringUtils.isEmpty(reportConfigFse.getString(CmnConst.PAGE_SIZE)) ? 0 : reportConfigFse.getInteger(CmnConst.PAGE_SIZE));
- } else {
- resultObj.put(CmnConst.IS_PAGE, 0);
- }
- }
- if (!DataTableEntity.isEmpty(recordDte)) {
- resultObj.put("current_page_count", recordDte.getRows());
- }
- resultObj.put("systemFieldMeta", getSearchInfo(reportSourceFse.getUUID()));
- resultObj.put("report_type", reportConfigFse.getString("type_uuid"));
-// System.out.println(resultObj.getString("html"));
-
- return resultObj;
- }
-
- /**
- * 鑾峰彇鎶ヨ〃缂撳瓨淇℃伅
- *
- * @param reportConfigUUID
- * @param sort
- * @return
- */
- private Map<Integer, List<JSONObject>> getReportConfig(String reportConfigUUID, StringBuilder sort) {
- Object obj;
- Map<Integer, List<JSONObject>> reportConfigMap = Maps.newHashMap();
- List<JSONObject> list;
- for (int i = 0; i < 4; i++) {
- obj = RedisUtil.getHash(reportConfigUUID, String.valueOf(i));
- if (obj == null) {
- continue;
- }
- list = (List<JSONObject>) obj;
- reportConfigMap.put(i, list);
- }
-
- if (reportConfigMap.isEmpty()) {
- throw new BaseException(ReportCode.GET_REPORT_CONFIG_FIAL.getValue(), ReportCode.GET_REPORT_CONFIG_FIAL.getText());
- }
- obj = RedisUtil.getHash(reportConfigUUID, "sort");
- if (obj != null) {
- sort.append(obj.toString());
- }
- return reportConfigMap;
- }
-
- /**
- * 鑾峰彇鏁版嵁婧�
- *
- * @param sort
- * @param curPage
- * @param reportSourceFse
- * @param fse
- * @param reportConfigFse
- * @return
- */
- private DataTableEntity getRecordDte(StringBuilder sort, int curPage, FieldSetEntity reportSourceFse, FieldSetEntity fse, FieldSetEntity reportConfigFse, Map<Integer, List<JSONObject>> reportConfigMap) {
- boolean spTimeFlag = reportConfigMap != null;
- String sql;
- String sqlText = reportSourceFse.getString(CmnConst.SQL_TEXT);
- DataTableEntity recordDte = new DataTableEntity();
-
- if (spTimeFlag) {
- // 鑾峰彇鎵�鏈夌殑瀛楁
- Set<String> baseFieldSet = Sets.newHashSet();
- Map<String, Map<String, JSONObject>> spTimeStatisticsFieldMap = Maps.newHashMap();
- 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;
- String curFieldName;
- String curCommonFieldName;
- Map<String, List<String>> tempQueryFilterMap;
- List<String> tempList;
- Map<String, String> tempFieldMap;
- Set<String> tempDateFieldInfoSet;
- JSONObject obj;
-
- for (String spTimeStatisticsType : spTimeStatisticsTypeSet) {
- selectedFieldSet = Sets.newHashSet();
- tempFieldMap = Maps.newHashMap();
- tempDateFieldInfoSet = Sets.newHashSet();
- tempQueryFilterMap = Maps.newHashMap();
- for (Map.Entry<String, JSONObject> outEntry : spTimeStatisticsFieldMap.get(spTimeStatisticsType).entrySet()) {
- obj = outEntry.getValue();
- curFieldName = fieldInfo2FieldName(obj.getString(CmnConst.ATTR_RELATE_TIME_FIELD));
- if ("0".equals(spTimeStatisticsType)) {
- // 鍘诲勾鍚屾湡
- headContent = CmnConst.ATTR_HEAD_LAST_YEAR;
- } else if ("1".equals(spTimeStatisticsType)) {
- // 涓婃湡
- headContent = CmnConst.ATTR_HEAD_PRE_PERIOD;
- } else {
- headContent = "";
- }
- for (Map.Entry<String, List<String>> entry : queryFilterMap.entrySet()) {
- tempList = Lists.newArrayList();
- tempList.addAll(entry.getValue());
- tempQueryFilterMap.put(entry.getKey(), tempList);
- }
- if (queryFilterMap.containsKey(curFieldName)) {
- if (!tempDateFieldInfoSet.contains(obj.getString(CmnConst.ATTR_RELATE_TIME_FIELD))) {
- tempDateFieldInfoSet.add(obj.getString(CmnConst.ATTR_RELATE_TIME_FIELD));
- if ("0".equals(spTimeStatisticsType)) {
- // 鍘诲勾鍚屾湡
- spDealFilterForLastYear(tempQueryFilterMap, queryFilterMap, curFieldName);
- } else if ("1".equals(spTimeStatisticsType)) {
- // 涓婃湡
- spDealFilterForPrePeriod(tempQueryFilterMap, queryFilterMap, curFieldName);
- }
- }
- }
- curCommonFieldName = fieldInfo2FieldName(obj.getString(CmnConst.ATTR_RELATE_COMMON_FIELD));
- for (String selectField : baseFieldSet) {
- if (selectField.equals(curCommonFieldName)) {
- tempFieldMap.put(curCommonFieldName, curCommonFieldName + " " + headContent + curCommonFieldName);
- }
- }
- }
- for (String selectField : baseFieldSet) {
- selectedFieldSet.add(tempFieldMap.getOrDefault(selectField, selectField));
- }
- sql = replaceSqlContent(sqlText, fse, null, reportConfigFse, curPage, SetUtils.set2String(selectedFieldSet, ","), tempQueryFilterMap);
-
- if ("1".equalsIgnoreCase(reportConfigFse.getString(CmnConst.IS_PAGE))) {
- Integer pageSize = reportConfigFse.getInteger(CmnConst.PAGE_SIZE);
- tempDte = baseDao.listTable(sql, new Object[]{}, pageSize == null ? Integer.MAX_VALUE : pageSize, curPage);
- } else {
- tempDte = baseDao.listTable(sql, new Object[]{});
- }
-
- recordDte.addFieldSetEntity(tempDte);
- }
- } else {
- sql = replaceSqlContent(sqlText, fse, sort, reportConfigFse, curPage);
-
- if ("1".equalsIgnoreCase(reportConfigFse.getString(CmnConst.IS_PAGE))) {
- Integer pageSize = reportConfigFse.getInteger(CmnConst.PAGE_SIZE);
- recordDte = baseDao.listTable(sql, new Object[]{}, pageSize == null ? Integer.MAX_VALUE : pageSize, curPage);
- } else {
- recordDte = baseDao.listTable(sql, new Object[]{});
- }
-
- }
- // 鍔犺浇鏁版嵁婧愮殑鍙傜収
- loadPromptData(recordDte, reportSourceFse);
-
- return recordDte;
- }
-
- /**
- * 瀛愭柟娉�-getRecordDte-鍔犺浇鍙傜収
- *
- * @param recordDte
- * @param reportSourceFse
- */
- private void loadPromptData(DataTableEntity recordDte, FieldSetEntity reportSourceFse) {
- if (BaseUtil.dataTableIsEmpty(recordDte)) {
- return;
- }
- DataTableEntity reportDataSourceSubDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_DATASOURCE_FIELD_CONFIG, new String[]{reportSourceFse.getUUID()});
- FieldSetEntity tempFse;
- String fieldName;
- String promptName;
- for (int i = 0; i < reportDataSourceSubDte.getRows(); i++) {
- tempFse = reportDataSourceSubDte.getFieldSetEntity(i);
- promptName = tempFse.getString(CmnConst.FIELD_PROMPT);
- fieldName = tempFse.getString(CmnConst.FIELD_NAME);
- if (StringUtils.isEmpty(promptName) || StringUtils.isEmpty(fieldName)) {
- continue;
- }
- if (promptName.startsWith("銆�")) {
- // 鏅�氬弬鐓�
- promptName = promptName.substring(1, promptName.length() - 1);
- baseDao.copyDictData(recordDte, fieldName, promptName, 0);
- } else {
- // 楂樼骇鍙傜収
- baseDao.copyPromptData(recordDte, fieldName, promptName);
- }
- }
- }
+ List<List<String>> data = processingMergeData(reportData);
+ exportService.writeExcel(header, data, "娴嬭瘯", response);
+ }
- /**
- * 鏇挎崲sql涓殑鏉′欢锛屽皢鍏惰浆鎹负鑳藉鐩存帴鎵ц鐨剆ql
- *
- * @param sqlText
- * @param fse
- * @param sort
- * @return
- */
- private String replaceSqlContent(String sqlText, FieldSetEntity fse, StringBuilder sort, FieldSetEntity reportConfigFse, int curPage, String selectedFields, Map<String, List<String>> queryFilterMap) {
- queryFilterMap = queryFilterMap == null ? queryFilterService.getQueryFilterMore(fse) : queryFilterMap;
- selectedFields = StringUtils.isEmpty(selectedFields) ? "*" : selectedFields;
- // 鏇挎崲sql涓殑绯荤粺鍙傛暟
- sqlText = SystemParamReplace.replaceParams(sqlText, fse);
+ private static List<List<String>> processingMergeData(List<List<ReportColumn>> data) {
+ if (CollectionUtil.isEmpty(data)) {
+ return null;
+ }
+ List<List<String>> resultData = data.stream().map(item -> new ArrayList<String>()).collect(Collectors.toList());
+ for (int i = 0; i < data.size(); i++) {
+ List<ReportColumn> columns = data.get(i);
+ for (ReportColumn column : columns) {
+ //璺ㄨ
+ int rowspan = column.getRowspanInt() < 1 ? 1 : column.getRowspanInt();
+ //璺ㄥ垪
+ 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);
+ }
+ }
+ }
+ return resultData;
+ }
- List<String> suitList = getSuitContent(sqlText, CmnConst.REGEXP_ALL_AREA);
- String newContent;
- int signCount = 0;
- Map<String, List<String>> residueQueryFilterMap = Maps.newHashMap();
- queryFilterMap.forEach((k, v) -> {
- residueQueryFilterMap.put(k, v);
- });
- Map<String, String> tempReplaceMap = Maps.newHashMap();
- for (String suitContent : suitList) {
- if (tempReplaceMap.containsKey(suitContent)) {
- continue;
- }
- newContent = spReplaceSqlContent(suitContent, CmnConst.REGEXP_ONLY_VALUE, 0, queryFilterMap, residueQueryFilterMap);
- newContent = spReplaceSqlContent(newContent, CmnConst.REGEXP_EXCEPT_FIELD, 1, queryFilterMap, residueQueryFilterMap);
- newContent = spReplaceSqlContent(newContent, CmnConst.REGEXP_FULL_CONTENT, 2, queryFilterMap, residueQueryFilterMap);
+ public static void main(String[] args) {
+ List<List<ReportColumn>> data = new ArrayList<>();
+ List<ReportColumn> columns = new ArrayList<>();
+ ReportColumn column = new ReportColumn();
+ column.setRowspan(2);
+ column.setColspan(4);
+ column.setContent("璺ㄨ鏁帮細2锛岃法鍒楁暟锛�4");
+ columns.add(column);
+ data.add(columns);
+ columns = new ArrayList<>();
+ data.add(columns);
+ for (int i = 0; i < 3; i++) {
+ column = new ReportColumn();
+ column.setContent("璺ㄨ鏁帮細1锛岃法鍒楁暟锛�1,涓嬫爣:" + i);
+ columns.add(column);
+ }
+ processingMergeData(data);
+ }
- if (!suitContent.equals(newContent)) {
- signCount++;
- }
- for (Map.Entry<String, String> entry : tempReplaceMap.entrySet()) {
- suitContent = suitContent.replace(entry.getKey(), entry.getValue());
- }
- tempReplaceMap.put(suitContent, newContent);
- sqlText = sqlText.replace(suitContent, newContent);
- }
- if ("1".equalsIgnoreCase(reportConfigFse.getString(CmnConst.IS_PAGE))) {
- int pageSize = reportConfigFse.getInteger(CmnConst.PAGE_SIZE) == null ? 20 : reportConfigFse.getInteger(CmnConst.PAGE_SIZE);
- sqlText = sqlText.replace(CmnConst.CONTENT_PAGE_AREA, "limit " + ((curPage - 1) * pageSize) + "," + pageSize);
- }
- // 涓夌洰琛ㄨ揪寮�
- sqlText = replaceTernaryOperator(sqlText);
- // 娓呴櫎宸茬粡澶勭悊鐨勪笁鐩鐨勪腑鎷彿
- suitList = getSuitContent(sqlText, CmnConst.REGEXP_FILTER_AREA);
- for (String suitContent : suitList) {
- newContent = suitContent.substring(2, suitContent.length() - 2);
- if (getSuitContent(newContent, CmnConst.REGEXP_SP_SIGN_AREA).isEmpty()) {
- sqlText = sqlText.replace(suitContent, newContent);
- }
- }
- // 鍓旈櫎寮傚父鍖哄煙
- sqlText = sqlText.replaceAll(CmnConst.REGEXP_FILTER_AREA, "").replaceAll(CmnConst.REGEXP_ALL_TYPE, "null").replaceAll(CmnConst.REGEXP_ALWAYS_TRUE, "");
- String queryFilter = "";
- if (signCount > 0) {
- for (Map.Entry<String, List<String>> entry : residueQueryFilterMap.entrySet()) {
- if (CmnConst.SYSTEM_SENIOR_QUERY_STRING.equals(entry.getKey()) || entry.getValue() == null) {
- continue;
- }
- if (!StringUtils.isEmpty(queryFilter)) {
- queryFilter += "and";
- }
- queryFilter += " (" + entry.getValue().get(2) + ") ";
- }
- } else {
- queryFilter = queryFilterMap.isEmpty() ? queryFilterService.getQueryFilter(fse) : queryFilterMap.get(CmnConst.SYSTEM_SENIOR_QUERY_STRING).get(0);
- }
- StringBuilder sql = new StringBuilder(1024);
- sql.append("\nselect ").append(selectedFields).append(" from (\n")
- .append(sqlText)
- .append("\n) t");
- if (!StringUtils.isEmpty(queryFilter)) {
- sql.append("\nwhere ").append(queryFilter);
- }
+
+
+ /**
+ * 鍔犺浇鎵�鏈夌紦瀛�
+ */
+ public void setAllConfig() {
+ DataTableEntity reportTypeDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_TYPE);
+ if (BaseUtil.dataTableIsEmpty(reportTypeDte)) {
+ return;
+ }
+ List<String> dataListUUIDList = Lists.newArrayList();
+ FieldSetEntity fse;
+ for (int i = 0; i < reportTypeDte.getRows(); i++) {
+ fse = reportTypeDte.getFieldSetEntity(i);
+ if ("DataList".equals(fse.getString(CmnConst.TYPE_GROUP))) {
+ dataListUUIDList.add(fse.getUUID());
+ }
+ }
+ DataTableEntity reportConfigDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_CONFIG);
+ if (reportConfigDte == null) {
+ return;
+ }
+ for (int i = 0; i < reportConfigDte.getRows(); i++) {
+ fse = reportConfigDte.getFieldSetEntity(i);
+ try {
+ if (!dataListUUIDList.contains(fse.getString(CmnConst.TYPE_UUID)) || (StringUtils.isEmpty(fse.getString(CmnConst.FUNCTION_UUID)) && !"1".equals(fse.getString(CmnConst.RELATE_FLAG)))) {
+ continue;
+ }
+ setConfig(fse.getUUID());
+ } catch (Exception e) {
+ logger.error(ReportCode.GET_REPORT_CONFIG_FIAL.getText() + ": " + fse.getUUID(), e);
+ }
+ }
+ }
+
+ /**
+ * 璁剧疆鎶ヨ〃鍔犺浇缂撳瓨
+ *
+ * @param reportConfigUUID 鎶ヨ〃閰嶇疆UUID
+ */
+ public void setConfig(String reportConfigUUID) {
+ // 灞炴�ц幏鍙�
+ StringBuilder sql = new StringBuilder(128);
+ sql.append("select report_area report_area,cell_position_y y,cell_position_x x,attribute_name name,report_type_attr_value value")
+ .append("\nfrom (")
+ .append("\n select report_area,cell_position_y,cell_position_x,report_type_attr_value,report_type_attr FROM product_sys_report_config_attribute ca")
+ .append("\n where report_config_uuid=?")
+ .append("\n) ca")
+ .append("\nleft join (")
+ .append("\n select uuid,attribute_name FROM product_sys_report_type_attribute where type_group='DataList'")
+ .append("\n) ta on ca.report_type_attr=ta.uuid")
+ .append("\nwhere ta.attribute_name is not null")
+ .append("\norder by report_area,cell_position_y,cell_position_x");
+ DataTableEntity attrDte = baseDao.listTable(sql.toString(), new Object[]{reportConfigUUID});
+ if (BaseUtil.dataTableIsEmpty(attrDte)) {
+ throw new BaseException(ReportCode.SET_REPORT_CACHE_FAIL.getValue(), ReportCode.SET_REPORT_CACHE_FAIL.getText());
+ }
+
+ // 鐢熸垚obj锛屾斁鍏ap锛岀粺璁″垎缁勮〃澶村尯琛屾暟
+ FieldSetEntity attrFse;
+ Map<Integer, List<JSONObject>> reportConfigMap = Maps.newHashMap();
+ List<JSONObject> areaList;
+ JSONObject fieldConfigObj;
+ int reportArea;
+ int x;
+ int y;
+ int preX = -1;
+ int preY = -1;
+ int groupAreaRowCount = 0;
+ for (int i = 0; i < attrDte.getRows(); i++) {
+ attrFse = attrDte.getFieldSetEntity(i);
+ if (attrFse.getInteger(CmnConst.ATTR_REPORT_AREA) == null) {
+ continue;
+ }
+ reportArea = attrFse.getInteger(CmnConst.ATTR_REPORT_AREA);
+ areaList = reportConfigMap.computeIfAbsent(reportArea, k -> Lists.newArrayList());
+ x = attrFse.getInteger(CmnConst.ATTR_X);
+ y = attrFse.getInteger(CmnConst.ATTR_Y);
+ if (preX != x || preY != y) {
+ fieldConfigObj = new JSONObject();
+ areaList.add(fieldConfigObj);
+ } else {
+ fieldConfigObj = areaList.get(areaList.size() - 1);
+ }
+ fieldConfigObj.put(attrFse.getString(CmnConst.ATTR_NAME), attrFse.getString(CmnConst.ATTR_VALUE));
+ fieldConfigObj.put(CmnConst.ATTR_X, x);
+ fieldConfigObj.put(CmnConst.ATTR_Y, y);
+ fieldConfigObj.put(CmnConst.ATTR_REPORT_AREA, reportArea);
+ if (reportArea == 2) {
+ groupAreaRowCount = Math.max(groupAreaRowCount, y);
+ }
+ preX = x;
+ preY = y;
+ }
+
+ // 娓呯悊绌烘牸
+ List<JSONObject> valueList;
+ JSONObject tempObj;
+ for (Map.Entry<Integer, List<JSONObject>> entry : reportConfigMap.entrySet()) {
+ valueList = entry.getValue();
+ for (int i = valueList.size() - 1; i >= 0; i--) {
+ tempObj = valueList.get(i);
+ if (StringUtils.isEmpty(tempObj.getString(CmnConst.ATTR_FIELD_INFO))) {
+ valueList.remove(i);
+ }
+ }
+ }
+
+ // 鎻愬彇鏁版嵁鍖哄垎缁勫瓧娈靛悕绉發ist锛屽鏁版嵁鍖哄瓧娈祇bj鏀惧叆鏁版嵁鍖哄垎缁勫瓧娈�
+ List<JSONObject> dataAreaReportConfigList = reportConfigMap.get(0);
+ String fieldName;
+ ArrayList<String> dataAreaGroupFieldNameList = Lists.newArrayList();
+ if (dataAreaReportConfigList != null) {
+ for (int i = 0; i < dataAreaReportConfigList.size(); i++) {
+ tempObj = dataAreaReportConfigList.get(i);
+ fieldName = fieldInfo2FieldName(tempObj.getString(CmnConst.ATTR_FIELD_INFO));
+ if (!dataAreaGroupFieldNameList.isEmpty()) {
+ tempObj.put(CmnConst.ATTR_DATA_AREA_GROUP_FIELD, dataAreaGroupFieldNameList.clone());
+ }
+ fieldConfigObj = new JSONObject();
+ fieldConfigObj.put(fieldName, tempObj);
+ dataAreaReportConfigList.set(i, fieldConfigObj);
+ if ("1".equals(tempObj.getString(CmnConst.ATTR_IS_GROUP))) {
+ dataAreaGroupFieldNameList.add(fieldName);
+ }
+ }
+ }
+
+ // 鎻愬彇鍒嗙粍琛ㄥご鍖哄垎缁勫瓧娈靛悕绉發ist锛屽鍒嗙粍琛ㄥご鍖哄瓧娈祇bj鏀惧叆鏁版嵁鍖哄垎缁勫瓧娈点�佸垎缁勮〃澶村尯鍒嗙粍瀛楁
+ List<JSONObject> groupAreaReportConfigList = reportConfigMap.get(2);
+ ArrayList<String> groupAreaGroupFieldNameList = Lists.newArrayList();
+ JSONObject dataAreaFieldConfigOuterObj;
+ JSONObject dataAreaFieldConfigInnerObj;
+ JSONObject groupAreaFieldConfigInnerObj;
+ if (groupAreaReportConfigList != null) {
+ for (int i = 0; i < groupAreaReportConfigList.size(); i++) {
+ tempObj = groupAreaReportConfigList.get(i);
+ fieldName = fieldInfo2FieldName(tempObj.getString(CmnConst.ATTR_FIELD_INFO));
+ if (!dataAreaGroupFieldNameList.isEmpty()) {
+ tempObj.put(CmnConst.ATTR_DATA_AREA_GROUP_FIELD, dataAreaGroupFieldNameList);
+ }
+ if (!groupAreaGroupFieldNameList.isEmpty()) {
+ tempObj.put(CmnConst.ATTR_GROUP_AREA_GROUP_FIELD, groupAreaGroupFieldNameList.clone());
+ }
+ fieldConfigObj = new JSONObject();
+ fieldConfigObj.put(fieldName, tempObj);
+ groupAreaReportConfigList.set(i, fieldConfigObj);
+ if ("1".equals(tempObj.getString(CmnConst.ATTR_IS_GROUP))) {
+ groupAreaGroupFieldNameList.add(fieldName);
+ }
+ // 娣诲姞鏁版嵁鍖虹殑鍒嗙粍琛ㄥご鍖哄垎缁勫瓧娈�
+ if (dataAreaReportConfigList != null) {
+ for (int j = 0; j < dataAreaReportConfigList.size(); j++) {
+ dataAreaFieldConfigOuterObj = dataAreaReportConfigList.get(j);
+ dataAreaFieldConfigInnerObj = (JSONObject) dataAreaFieldConfigOuterObj.entrySet().iterator().next().getValue();
+ groupAreaFieldConfigInnerObj = tempObj;
+ if (groupAreaFieldConfigInnerObj.getIntValue(CmnConst.ATTR_X) + Math.max(1, groupAreaFieldConfigInnerObj.getIntValue(CmnConst.ATTR_COLSPAN)) - 1 >= dataAreaFieldConfigInnerObj.getIntValue(CmnConst.ATTR_X)
+ && groupAreaFieldConfigInnerObj.getIntValue(CmnConst.ATTR_X) <= dataAreaFieldConfigInnerObj.getIntValue(CmnConst.ATTR_X)) {
+ dataAreaFieldConfigInnerObj.put(CmnConst.ATTR_GROUP_AREA_GROUP_FIELD, groupAreaGroupFieldNameList);
+ }
+ }
+ }
+ }
+ }
+
+ // 鏁版嵁婧愭帓搴�
+ StringBuilder sort = new StringBuilder(128);
+ JSONObject innerObj;
+ if (dataAreaReportConfigList != null) {
+ for (JSONObject outerObj : dataAreaReportConfigList) {
+ fieldName = outerObj.keySet().iterator().next();
+ if (dataAreaGroupFieldNameList.contains(fieldName)) {
+ innerObj = outerObj.getJSONObject(fieldName);
+ sort.append(fieldName).append(StringUtils.isEmpty(innerObj.getString(CmnConst.ATTR_ORDER_BY)) ? "" : " " + innerObj.getString(CmnConst.ATTR_ORDER_BY)).append(",");
+ }
+ }
+ }
+ if (groupAreaReportConfigList != null) {
+ for (JSONObject outerObj : groupAreaReportConfigList) {
+ fieldName = outerObj.keySet().iterator().next();
+ if (StringUtils.isEmpty(fieldName)) {
+ continue;
+ }
+ innerObj = outerObj.getJSONObject(fieldName);
+ sort.append(fieldName).append(StringUtils.isEmpty(innerObj.getString(CmnConst.ATTR_ORDER_BY)) ? "" : " " + innerObj.getString(CmnConst.ATTR_ORDER_BY)).append(",");
+ }
+ }
+ if (sort.length() > 0) {
+ sort.deleteCharAt(sort.length() - 1);
+ }
+
+ // 鏀惧叆缂撳瓨
+ RedisUtil.setHash(reportConfigUUID, "sort", sort);
+ for (Map.Entry<Integer, List<JSONObject>> entry : reportConfigMap.entrySet()) {
+ RedisUtil.setHash(reportConfigUUID, String.valueOf(entry.getKey()), entry.getValue());
+ }
+ }
+
+ /**
+ * 鑾峰彇鎶ヨ〃
+ *
+ * @return
+ */
+ public ReportEntity getReport(FieldSetEntity fse) {
+ ReportEntity reportEntity = new ReportEntity();
+ String reportConfigUUID = fse.getUUID();
+ if (!StringUtils.isEmpty(fse.getString("~report_config_uuid~"))) {
+ //瀛愭姤琛ㄤ細浼犲叆姝ey浣滀负鎶ヨ〃鐨剈uid 瑙勯伩鍙傛暟涓湁uuid鐨刱ey
+ reportConfigUUID = fse.getString("~report_config_uuid~");
+ }
+ DataTableEntity reportConfigDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_CONFIG, new String[]{reportConfigUUID});
+ if (BaseUtil.dataTableIsEmpty(reportConfigDte)) {
+ throw new BaseException(ReportCode.GET_CACHE_FIAL.getValue(), ReportCode.GET_CACHE_FIAL.getText() + ":" + CmnConst.CACHE_REPORT_CONFIG);
+ }
+ FieldSetEntity reportConfigFse = reportConfigDte.getFieldSetEntity(0);
+ if (!"1".equals(reportConfigFse.getString(CmnConst.IS_VALID))) {
+ throw new BaseException(ReportCode.INVALID_REPORT.getValue(), ReportCode.INVALID_REPORT.getText());
+ }
+
+ DataTableEntity reportTypeDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_TYPE, new String[]{reportConfigFse.getString(CmnConst.TYPE_UUID)});
+ if (BaseUtil.dataTableIsEmpty(reportTypeDte)) {
+ throw new BaseException(ReportCode.GET_CACHE_FIAL.getValue(), ReportCode.GET_CACHE_FIAL.getText() + ":" + CmnConst.CACHE_REPORT_TYPE);
+ }
+ FieldSetEntity reportTypeFse = reportTypeDte.getFieldSetEntity(0);
+
+ StringBuilder sort = new StringBuilder(128);
+ // 鑾峰彇鎶ヨ〃缂撳瓨淇℃伅
+ Map<Integer, List<JSONObject>> reportConfigMap = getReportConfig(reportConfigUUID, sort);
+ // 鏍规嵁鍏蜂綋鐨刦unction_uuid鍜宐utton_uuid鑾峰彇瀵瑰簲鐨勮矾鐢憋紝鎷煎噾url
+ String url;
+ JSONObject valueObj;
+ for (Map.Entry<Integer, List<JSONObject>> entry : reportConfigMap.entrySet()) {
+ if (entry.getValue() != null) {
+ for (JSONObject tempValueObj : entry.getValue()) {
+ if (entry.getValue() != null) {
+ for (Map.Entry<String, Object> innerEntry : tempValueObj.entrySet()) {
+ if (innerEntry.getValue() instanceof JSONObject) {
+ valueObj = (JSONObject) innerEntry.getValue();
+ if (!StringUtils.isEmpty(valueObj.getString(CmnConst.SUB_REPORT))) {
+ url = valueObj.getString(CmnConst.SUB_REPORT);
+ if (!StringUtils.isEmpty(valueObj.getString(CmnConst.ATTR_URL_PARAM))) {
+ url += "?" + valueObj.getString(CmnConst.ATTR_URL_PARAM);
+ }
+ valueObj.put(CmnConst.ATTR_URL, url);
+ valueObj.put("~isSubReport~", true);
+ } else {
+ if (!StringUtils.isEmpty(valueObj.getString(CmnConst.FUNCTION_UUID)) && !StringUtils.isEmpty(valueObj.getString(CmnConst.BUTTON_UUID))) {
+ url = routerService.functionSkipByButtonUuid(valueObj.getString(CmnConst.FUNCTION_UUID), valueObj.getString(CmnConst.BUTTON_UUID));
+ if (StringUtils.isEmpty(url)) {
+ valueObj.remove(CmnConst.ATTR_URL);
+ } else {
+ if (!StringUtils.isEmpty(valueObj.getString(CmnConst.ATTR_URL_PARAM))) {
+ url += "?" + valueObj.getString(CmnConst.ATTR_URL_PARAM);
+ }
+ valueObj.put(CmnConst.ATTR_URL, url);
+ }
+ } else {
+ valueObj.remove(CmnConst.ATTR_URL);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ // 鑾峰彇鎶ヨ〃绫诲瀷
+ String reportType = reportTypeFse.getString(CmnConst.TYPE_NAME);
+ // 鑾峰彇鏁版嵁婧�
+ DataTableEntity reportSourceDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_DATASOURCE_CONFIG, new String[]{reportConfigFse.getString(CmnConst.DATASOURCE_UUID)});
+ if (BaseUtil.dataTableIsEmpty(reportSourceDte)) {
+ throw new BaseException(ReportCode.GET_REPORT_DATASOURCE_FIAL.getValue(), ReportCode.GET_REPORT_DATASOURCE_FIAL.getText());
+ }
+ FieldSetEntity reportSourceFse = reportSourceDte.getFieldSetEntity(0);
+ int curPage = fse.getInteger(CmnConst.CPAGE) == null ? 1 : fse.getInteger(CmnConst.CPAGE);
+
+// JSONObject resultObj = new JSONObject();
+ // 棣栨鍔犺浇锛岄粯璁ゆ坊鍔犳潯浠�
+ if (fse.getBoolean(CmnConst.FIRST_LOAD)) {
+ DataTableEntity allFilterDte = getDefaultSearchFilter(reportSourceFse.getUUID());
+ Map<String, DataTableEntity> subMap = Maps.newHashMap();
+ if (!DataTableEntity.isEmpty(allFilterDte)) {
+ subMap.put("systemFieldMeta", allFilterDte);
+ }
+ DataTableEntity defaultFilterDte = new DataTableEntity();
+
+ FieldSetEntity tempFse;
+ Map<String, Map<String, String>> outerMap = Maps.newHashMap();
+ Map<String, String> innerMap;
+ for (int i = 0; i < allFilterDte.getRows(); i++) {
+ tempFse = allFilterDte.getFieldSetEntity(i);
+ if (StringUtils.isEmpty(tempFse.getString(CmnConst.LOGICAL_VALUE))) {
+ continue;
+ }
+ defaultFilterDte.addFieldSetEntity(tempFse);
+ innerMap = Maps.newHashMap();
+ innerMap.put(CmnConst.LOGICAL_OPERATOR, tempFse.getString(CmnConst.LOGICAL_OPERATOR));
+ innerMap.put(CmnConst.LOGICAL_VALUE, tempFse.getString(CmnConst.LOGICAL_VALUE));
+ innerMap.put(CmnConst.FIELD_TYPE, tempFse.getString(CmnConst.FIELD_TYPE));
+ outerMap.put(tempFse.getString(CmnConst.FIELD_NAME), innerMap);
+ }
+// resultObj.put("filterInfo", outerMap);
+ reportEntity.setFilterInfo(outerMap);
+ if (!DataTableEntity.isEmpty(defaultFilterDte)) {
+ subMap.put("systemSeniorQueryString", defaultFilterDte);
+ }
+ fse.setSubData(subMap);
+ }
+
+ 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)) : "";
+
+// StringBuilder tableStyle = new StringBuilder(32);
+// String widthType = reportConfigFse.getString(CmnConst.REPORT_WIDTH_TYPE);
+// String width = reportConfigFse.getString(CmnConst.REPORT_WIDTH_VALUE);
+// if (!StringUtils.isEmpty(width)) {
+// if ("1".equals(widthType)) {
+// tableStyle.append(" style=\"width:").append(width).append("%\"");
+// } else if ("0".equals(widthType)) {
+// tableStyle.append(" style=\"width:").append(width).append("px\"");
+// }
+// }
+ List<List<ReportColumn>>[] report = null;
+ if (CmnConst.REPORT_TYPE_COMMON.equals(reportType)) {
+ report = commonReportService.getReport(recordDte, totalName, reportConfigMap, unpivotInfoContainer);
+
+ } else if (CmnConst.REPORT_TYPE_GROUP.equals(reportType)) {
+ // 鐗规畩澶勭悊棰濆鏌ヨ鍐呭
+ recordDte.addFieldSetEntity(getRecordDte(sort, curPage, reportSourceFse, fse, reportConfigFse, reportConfigMap, null));
+ report = groupReportService.getReport(recordDte, totalName, reportConfigMap);
+ }
+ 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) {
+ 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());
+//
+// }
+ reportEntity.setReportType(reportConfigFse.getString("type_uuid"));
+ reportEntity.setSystemFieldMeta(getSearchInfo(reportSourceFse.getUUID()));
+ return reportEntity;
+ }
+
+ /**
+ * 鑾峰彇鎶ヨ〃缂撳瓨淇℃伅
+ *
+ * @param reportConfigUUID
+ * @param sort
+ * @return
+ */
+ private Map<Integer, List<JSONObject>> getReportConfig(String reportConfigUUID, StringBuilder sort) {
+ Object obj;
+ Map<Integer, List<JSONObject>> reportConfigMap = Maps.newHashMap();
+ List<JSONObject> list;
+ for (int i = 0; i < 4; i++) {
+ obj = RedisUtil.getHash(reportConfigUUID, String.valueOf(i));
+ if (obj == null) {
+ continue;
+ }
+ list = (List<JSONObject>) obj;
+ reportConfigMap.put(i, list);
+ }
+
+ if (reportConfigMap.isEmpty()) {
+ throw new BaseException(ReportCode.GET_REPORT_CONFIG_FIAL.getValue(), ReportCode.GET_REPORT_CONFIG_FIAL.getText());
+ }
+ obj = RedisUtil.getHash(reportConfigUUID, "sort");
+ if (obj != null) {
+ sort.append(obj.toString());
+ }
+ return reportConfigMap;
+ }
+
+ /**
+ * 鑾峰彇鏁版嵁婧�
+ *
+ * @param sort
+ * @param curPage
+ * @param reportSourceFse
+ * @param fse
+ * @param reportConfigFse
+ * @return
+ */
+ 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=]鍐欐硶澶勭悊鈥斺�旀浛鎹负瀵瑰簲鐨剋ith璇彞,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> baseFieldSet = Sets.newHashSet();
+ Map<String, Map<String, JSONObject>> spTimeStatisticsFieldMap = Maps.newHashMap();
+ Set<String> spTimeStatisticsTypeSet = Sets.newHashSet();
+ spTimeStatisticsTypeSet.addAll(getFieldAndSpTimeStatisticsTypeSet(baseFieldSet, spTimeStatisticsFieldMap, reportConfigMap.get(0)));
+ spTimeStatisticsTypeSet.addAll(getFieldAndSpTimeStatisticsTypeSet(baseFieldSet, spTimeStatisticsFieldMap, reportConfigMap.get(2)));
+ Set<String> selectedFieldSet;
+ String headContent;
+ DataTableEntity tempDte;
+ String curFieldName;
+ String curCommonFieldName;
+ Map<String, List<String>> tempQueryFilterMap;
+ List<String> tempList;
+ Map<String, String> tempFieldMap;
+ Set<String> tempDateFieldInfoSet;
+ JSONObject obj;
+
+ for (String spTimeStatisticsType : spTimeStatisticsTypeSet) {
+ selectedFieldSet = Sets.newHashSet();
+ tempFieldMap = Maps.newHashMap();
+ tempDateFieldInfoSet = Sets.newHashSet();
+ tempQueryFilterMap = Maps.newHashMap();
+ for (Map.Entry<String, JSONObject> outEntry : spTimeStatisticsFieldMap.get(spTimeStatisticsType).entrySet()) {
+ obj = outEntry.getValue();
+ curFieldName = fieldInfo2FieldName(obj.getString(CmnConst.ATTR_RELATE_TIME_FIELD));
+ if ("0".equals(spTimeStatisticsType)) {
+ // 鍘诲勾鍚屾湡
+ headContent = CmnConst.ATTR_HEAD_LAST_YEAR;
+ } else if ("1".equals(spTimeStatisticsType)) {
+ // 涓婃湡
+ headContent = CmnConst.ATTR_HEAD_PRE_PERIOD;
+ } else {
+ headContent = "";
+ }
+ for (Map.Entry<String, List<String>> entry : queryFilterMap.entrySet()) {
+ tempList = Lists.newArrayList();
+ tempList.addAll(entry.getValue());
+ tempQueryFilterMap.put(entry.getKey(), tempList);
+ }
+ if (queryFilterMap.containsKey(curFieldName)) {
+ if (!tempDateFieldInfoSet.contains(obj.getString(CmnConst.ATTR_RELATE_TIME_FIELD))) {
+ tempDateFieldInfoSet.add(obj.getString(CmnConst.ATTR_RELATE_TIME_FIELD));
+ if ("0".equals(spTimeStatisticsType)) {
+ // 鍘诲勾鍚屾湡
+ spDealFilterForLastYear(tempQueryFilterMap, queryFilterMap, curFieldName);
+ } else if ("1".equals(spTimeStatisticsType)) {
+ // 涓婃湡
+ spDealFilterForPrePeriod(tempQueryFilterMap, queryFilterMap, curFieldName);
+ }
+ }
+ }
+ curCommonFieldName = fieldInfo2FieldName(obj.getString(CmnConst.ATTR_RELATE_COMMON_FIELD));
+ for (String selectField : baseFieldSet) {
+ if (selectField.equals(curCommonFieldName)) {
+ tempFieldMap.put(curCommonFieldName, curCommonFieldName + " " + headContent + curCommonFieldName);
+ }
+ }
+ }
+ for (String selectField : baseFieldSet) {
+ selectedFieldSet.add(tempFieldMap.getOrDefault(selectField, selectField));
+ }
+ sql = replaceSqlContent(sqlText, fse, null, reportConfigFse, curPage, SetUtils.set2String(selectedFieldSet, ","), tempQueryFilterMap);
+
+ if ("1".equalsIgnoreCase(reportConfigFse.getString(CmnConst.IS_PAGE))) {
+ Integer pageSize = reportConfigFse.getInteger(CmnConst.PAGE_SIZE);
+ tempDte = baseDao.listTable(sql, new Object[]{}, pageSize == null ? Integer.MAX_VALUE : pageSize, curPage);
+ } else {
+ tempDte = baseDao.listTable(sql, new Object[]{});
+ }
+
+ recordDte.addFieldSetEntity(tempDte);
+ }
+ } else {
+ sql = replaceSqlContent(sqlText, fse, sort, reportConfigFse, curPage);
+
+ if ("1".equalsIgnoreCase(reportConfigFse.getString(CmnConst.IS_PAGE))) {
+ Integer pageSize = reportConfigFse.getInteger(CmnConst.PAGE_SIZE);
+ recordDte = baseDao.listTable(sql, new Object[]{}, pageSize == null ? Integer.MAX_VALUE : pageSize, curPage);
+ } else {
+ recordDte = baseDao.listTable(sql, new Object[]{});
+ }
+
+ }
+ // 鍔犺浇鏁版嵁婧愮殑鍙傜収
+ loadPromptData(recordDte, reportSourceFse);
+
+ return recordDte;
+ }
+
+ /**
+ * 瀛愭柟娉�-澶勭悊琛屽垪杞崲鐨勮鍙�
+ *
+ * @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 reportSourceFse
+ */
+ private void loadPromptData(DataTableEntity recordDte, FieldSetEntity reportSourceFse) {
+ if (BaseUtil.dataTableIsEmpty(recordDte)) {
+ return;
+ }
+ DataTableEntity reportDataSourceSubDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_DATASOURCE_FIELD_CONFIG, new String[]{reportSourceFse.getUUID()});
+ FieldSetEntity tempFse;
+ String fieldName;
+ String promptName;
+ for (int i = 0; i < reportDataSourceSubDte.getRows(); i++) {
+ tempFse = reportDataSourceSubDte.getFieldSetEntity(i);
+ promptName = tempFse.getString(CmnConst.FIELD_PROMPT);
+ fieldName = tempFse.getString(CmnConst.FIELD_NAME);
+ if (StringUtils.isEmpty(promptName) || StringUtils.isEmpty(fieldName)) {
+ continue;
+ }
+ if (promptName.startsWith("銆�")) {
+ // 鏅�氬弬鐓�
+ promptName = promptName.substring(1, promptName.length() - 1);
+ baseDao.copyDictData(recordDte, fieldName, promptName, 0);
+ } else {
+ // 楂樼骇鍙傜収
+ baseDao.copyPromptData(recordDte, fieldName, promptName);
+ }
+ }
+ }
+
+
+ /**
+ * 鏇挎崲sql涓殑鏉′欢锛屽皢鍏惰浆鎹负鑳藉鐩存帴鎵ц鐨剆ql
+ *
+ * @param sqlText
+ * @param fse
+ * @param sort
+ * @return
+ */
+ 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);
+
+ List<String> suitList = getSuitContent(sqlText, CmnConst.REGEXP_ALL_AREA);
+ String newContent;
+ int signCount = 0;
+ Map<String, List<String>> residueQueryFilterMap = Maps.newHashMap();
+ queryFilterMap.forEach((k, v) -> {
+ residueQueryFilterMap.put(k, v);
+ });
+ Map<String, String> tempReplaceMap = Maps.newHashMap();
+ for (String suitContent : suitList) {
+ if (tempReplaceMap.containsKey(suitContent)) {
+ continue;
+ }
+ newContent = spReplaceSqlContent(suitContent, CmnConst.REGEXP_ONLY_VALUE, 0, queryFilterMap, residueQueryFilterMap);
+ newContent = spReplaceSqlContent(newContent, CmnConst.REGEXP_EXCEPT_FIELD, 1, queryFilterMap, residueQueryFilterMap);
+ newContent = spReplaceSqlContent(newContent, CmnConst.REGEXP_FULL_CONTENT, 2, queryFilterMap, residueQueryFilterMap);
+
+ if (!suitContent.equals(newContent)) {
+ signCount++;
+ }
+ for (Map.Entry<String, String> entry : tempReplaceMap.entrySet()) {
+ suitContent = suitContent.replace(entry.getKey(), entry.getValue());
+ }
+ tempReplaceMap.put(suitContent, newContent);
+ sqlText = sqlText.replace(suitContent, newContent);
+ }
+ if ("1".equalsIgnoreCase(reportConfigFse.getString(CmnConst.IS_PAGE))) {
+ int pageSize = reportConfigFse.getInteger(CmnConst.PAGE_SIZE) == null ? 20 : reportConfigFse.getInteger(CmnConst.PAGE_SIZE);
+ sqlText = sqlText.replace(CmnConst.CONTENT_PAGE_AREA, "limit " + ((curPage - 1) * pageSize) + "," + pageSize);
+ }
+ // 涓夌洰琛ㄨ揪寮�
+ sqlText = replaceTernaryOperator(sqlText);
+ // 娓呴櫎宸茬粡澶勭悊鐨勪笁鐩鐨勪腑鎷彿
+ suitList = getSuitContent(sqlText, CmnConst.REGEXP_FILTER_AREA);
+ for (String suitContent : suitList) {
+ newContent = suitContent.substring(2, suitContent.length() - 2);
+ if (getSuitContent(newContent, CmnConst.REGEXP_SP_SIGN_AREA).isEmpty()) {
+ sqlText = sqlText.replace(suitContent, newContent);
+ }
+ }
+ // 鍓旈櫎寮傚父鍖哄煙
+ 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()) {
+ if (CmnConst.SYSTEM_SENIOR_QUERY_STRING.equals(entry.getKey()) || entry.getValue() == null) {
+ continue;
+ }
+ if (!StringUtils.isEmpty(queryFilter)) {
+ queryFilter += "and";
+ }
+ queryFilter += " (" + entry.getValue().get(2) + ") ";
+ }
+ } else {
+ queryFilter = queryFilterMap.isEmpty() || queryFilterMap.size() == 1 ? queryFilterService.getQueryFilter(fse) : queryFilterMap.get(CmnConst.SYSTEM_SENIOR_QUERY_STRING).get(0);
+ }
+
+ StringBuilder sql = new StringBuilder(1024);
+ sql.append("\nselect ").append(selectedFields).append(" from (\n")
+ .append(sqlText)
+ .append("\n) t");
+ if (!StringUtils.isEmpty(queryFilter)) {
+ sql.append("\nwhere ").append(queryFilter);
+ }
// if (!StringUtils.isEmpty(sort)) {
// sql.append("\norder by ").append(sort);
// }
- return sql.toString();
- }
+ return sql.toString();
+ }
- private String replaceSqlContent(String sqlText, FieldSetEntity fse, StringBuilder sort, FieldSetEntity reportConfigFse, int curPage) {
- return replaceSqlContent(sqlText, fse, sort, reportConfigFse, curPage, null, null);
- }
+ private String replaceSqlContent(String sqlText, FieldSetEntity fse, StringBuilder sort, FieldSetEntity reportConfigFse, int curPage) {
+ return replaceSqlContent(sqlText, fse, sort, reportConfigFse, curPage, null, null);
+ }
- /**
- * 鐗规畩鏇挎崲sql閲岄潰鐨勫唴瀹�
- *
- * @param suitContent
- * @param regexp
- * @param num
- * @param queryFilterMap
- * @return
- */
- 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;
- String spStatisticsWay;
- String spStatisticsWayValue;
- for (String innerSuitContent : innerSuitList) {
- curField = innerSuitContent.substring(2, innerSuitContent.length() - 2);
- if (curField.contains(" ")) {
- spStatisticsWay = curField.substring(curField.indexOf(" ") + 1, curField.indexOf(":"));
- spStatisticsWayValue = curField.substring(curField.indexOf(":") + 1);
- curField = curField.substring(0, curField.indexOf(" "));
- } else {
- spStatisticsWay = "";
- spStatisticsWayValue = "";
- }
- if (queryFilterMap.get(curField) != null && !queryFilterMap.get(curField).isEmpty()) {
- Map<String, List<String>> tempQueryFilterMap = Maps.newHashMap();
- List<String> tempList;
- for (Map.Entry<String, List<String>> entry : queryFilterMap.entrySet()) {
- tempList = Lists.newArrayList();
- if (entry.getValue() == null) {
- continue;
- }
- tempList.addAll(entry.getValue());
- tempQueryFilterMap.put(entry.getKey(), tempList);
- }
- if ("sp_time_statistics_way".equals(spStatisticsWay)) {
- if ("0".equals(spStatisticsWayValue)) {
- // 鍘诲勾鍚屾湡
- spDealFilterForLastYear(tempQueryFilterMap, queryFilterMap, curField);
- } else if ("1".equals(spStatisticsWayValue)) {
- // 涓婃湡
- spDealFilterForPrePeriod(tempQueryFilterMap, queryFilterMap, curField);
- }
- }
- 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);
- }
- }
- }
- return suitContent;
- }
+ /**
+ * 鐗规畩鏇挎崲sql閲岄潰鐨勫唴瀹�
+ *
+ * @param suitContent
+ * @param regexp
+ * @param num
+ * @param queryFilterMap
+ * @return
+ */
+ 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;
+ String spStatisticsWay;
+ String spStatisticsWayValue;
+ for (String innerSuitContent : innerSuitList) {
+ curField = innerSuitContent.substring(2, innerSuitContent.length() - 2);
+ if (curField.contains(" ")) {
+ spStatisticsWay = curField.substring(curField.indexOf(" ") + 1, curField.indexOf(":"));
+ spStatisticsWayValue = curField.substring(curField.indexOf(":") + 1);
+ curField = curField.substring(0, curField.indexOf(" "));
+ } else {
+ spStatisticsWay = "";
+ spStatisticsWayValue = "";
+ }
+ if (queryFilterMap.get(curField) != null && !queryFilterMap.get(curField).isEmpty()) {
+ Map<String, List<String>> tempQueryFilterMap = Maps.newHashMap();
+ List<String> tempList;
+ for (Map.Entry<String, List<String>> entry : queryFilterMap.entrySet()) {
+ tempList = Lists.newArrayList();
+ if (entry.getValue() == null) {
+ continue;
+ }
+ tempList.addAll(entry.getValue());
+ tempQueryFilterMap.put(entry.getKey(), tempList);
+ }
+ if ("sp_time_statistics_way".equals(spStatisticsWay)) {
+ if ("0".equals(spStatisticsWayValue)) {
+ // 鍘诲勾鍚屾湡
+ spDealFilterForLastYear(tempQueryFilterMap, queryFilterMap, curField);
+ } else if ("1".equals(spStatisticsWayValue)) {
+ // 涓婃湡
+ 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);
+ }
+ }
+ }
+ return suitContent;
+ }
- /**
- * 鏇挎崲涓夌洰琛ㄨ揪寮忓唴瀹�
- *
- * @param sqlText
- * @return
- */
- private String replaceTernaryOperator(String sqlText) {
- List<String> suitList = getSuitContent(sqlText, CmnConst.REGEXP_ALL_TERNARY_OPERATOR);
- for (String suitContent : suitList) {
- String singleTernaryOperator = suitContent.substring(2, suitContent.length() - 2);
- String executeContent = singleTernaryOperator.replaceAll(CmnConst.REGEXP_ALL_TYPE, "null");
- Object result;
- String value;
- try {
- result = BaseUtil.executeExpression(executeContent);
- value = result.toString();
- } catch (Exception e) {
- SpringMVCContextHolder.getSystemLogger().error(e);
- value = "";
- }
- sqlText = sqlText.replace(suitContent, value);
- }
- return sqlText;
- }
+ /**
+ * 鏇挎崲涓夌洰琛ㄨ揪寮忓唴瀹�
+ *
+ * @param sqlText
+ * @return
+ */
+ private String replaceTernaryOperator(String sqlText) {
+ List<String> suitList = getSuitContent(sqlText, CmnConst.REGEXP_ALL_TERNARY_OPERATOR);
+ for (String suitContent : suitList) {
+ String singleTernaryOperator = suitContent.substring(2, suitContent.length() - 2);
+ String executeContent = singleTernaryOperator.replaceAll(CmnConst.REGEXP_ALL_TYPE, "null");
+ Object result;
+ String value;
+ try {
+ result = BaseUtil.executeExpression(executeContent);
+ value = result.toString();
+ } catch (Exception e) {
+ SpringMVCContextHolder.getSystemLogger().error(e);
+ value = "";
+ }
+ sqlText = sqlText.replace(suitContent, value);
+ }
+ return sqlText;
+ }
- /**
- * 鍘诲勾鍚屾湡
- *
- * @param tempQueryFilterMap
- * @param queryFilterMap
- * @param 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(")
- .replace("'%Y')", "'%Y'),interval -1 year)")
- .replace("'%Y-%m')", "'%Y-%m'),interval -1 year)")
- .replace("'%Y-%m-%d')", "'%Y-%m-%d'),interval -1 year)")
- .replace("'%Y-%m-%d %H')", "'%Y-%m-%d %H'),interval -1 year)")
- .replace("'%Y-%m-%d %H:%i')", "'%Y-%m-%d %H:%i'),interval -1 year)")
- .replace("'%Y-%m-%d %H:%i:%s')", "'%Y-%m-%d %H:%i:%s'),interval -1 year)"));
- }
- tempQueryFilterMap.put(CmnConst.SYSTEM_SENIOR_QUERY_STRING, Collections.singletonList(queryFilterMap.get(CmnConst.SYSTEM_SENIOR_QUERY_STRING).get(0).replace("str_to_date(", "date_add(str_to_date(").replace("'%Y-%m-%d %H:%i:%s')", "'%Y-%m-%d %H:%i:%s'),interval -1 year)")));
- }
+ /**
+ * 鍘诲勾鍚屾湡
+ *
+ * @param tempQueryFilterMap
+ * @param queryFilterMap
+ * @param 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(")
+ .replace("'%Y')", "'%Y'),interval -1 year)")
+ .replace("'%Y-%m')", "'%Y-%m'),interval -1 year)")
+ .replace("'%Y-%m-%d')", "'%Y-%m-%d'),interval -1 year)")
+ .replace("'%Y-%m-%d %H')", "'%Y-%m-%d %H'),interval -1 year)")
+ .replace("'%Y-%m-%d %H:%i')", "'%Y-%m-%d %H:%i'),interval -1 year)")
+ .replace("'%Y-%m-%d %H:%i:%s')", "'%Y-%m-%d %H:%i:%s'),interval -1 year)"));
+ }
+ tempQueryFilterMap.put(CmnConst.SYSTEM_SENIOR_QUERY_STRING, Collections.singletonList(queryFilterMap.get(CmnConst.SYSTEM_SENIOR_QUERY_STRING).get(0).replace("str_to_date(", "date_add(str_to_date(").replace("'%Y-%m-%d %H:%i:%s')", "'%Y-%m-%d %H:%i:%s'),interval -1 year)")));
+ }
- /**
- * 涓婃湡
- *
- * @param tempQueryFilterMap
- * @param queryFilterMap
- * @param 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 {
- String startTime = timeArr[0].trim().substring(13, 13 + 19);
- String finalTime = timeArr[1].trim().substring(13, 13 + 19);
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- Calendar c1 = Calendar.getInstance();
- c1.setTime(simpleDateFormat.parse(startTime));
- Calendar c2 = Calendar.getInstance();
- c2.setTime(simpleDateFormat.parse(finalTime));
- long millisecond = c2.getTimeInMillis() - c1.getTimeInMillis();
- Calendar c3 = Calendar.getInstance();
- c3.setTimeInMillis(c1.getTimeInMillis() - millisecond);
- String newFinalTime = startTime;
- String newStartTime = simpleDateFormat.format(c3.getTime());
- for (int i = 0; i < paramList.size(); i++) {
- paramList.set(i, paramList.get(i).replace(startTime, newStartTime).replace(finalTime, newFinalTime));
- }
- tempQueryFilterMap.put(CmnConst.SYSTEM_SENIOR_QUERY_STRING, Collections.singletonList(queryFilterMap.get(CmnConst.SYSTEM_SENIOR_QUERY_STRING).get(0).replace(startTime, newStartTime).replace(finalTime, newFinalTime)));
- } catch (ParseException e) {
- e.printStackTrace();
- }
- }
+ /**
+ * 涓婃湡
+ *
+ * @param tempQueryFilterMap
+ * @param queryFilterMap
+ * @param 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 {
+ String startTime = timeArr[0].trim().substring(13, 13 + 19);
+ String finalTime = timeArr[1].trim().substring(13, 13 + 19);
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Calendar c1 = Calendar.getInstance();
+ c1.setTime(simpleDateFormat.parse(startTime));
+ Calendar c2 = Calendar.getInstance();
+ c2.setTime(simpleDateFormat.parse(finalTime));
+ long millisecond = c2.getTimeInMillis() - c1.getTimeInMillis();
+ Calendar c3 = Calendar.getInstance();
+ c3.setTimeInMillis(c1.getTimeInMillis() - millisecond);
+ String newFinalTime = startTime;
+ String newStartTime = simpleDateFormat.format(c3.getTime());
+ for (int i = 0; i < paramList.size(); i++) {
+ paramList.set(i, paramList.get(i).replace(startTime, newStartTime).replace(finalTime, newFinalTime));
+ }
+ tempQueryFilterMap.put(CmnConst.SYSTEM_SENIOR_QUERY_STRING, Collections.singletonList(queryFilterMap.get(CmnConst.SYSTEM_SENIOR_QUERY_STRING).get(0).replace(startTime, newStartTime).replace(finalTime, newFinalTime)));
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ }
- /**
- * 鑾峰彇鐗规畩鏃堕棿璁$畻绫诲瀷锛屾敞鍏ユ煡璇㈠瓧娈�
- *
- * @param baseFieldSet
- * @param spTimeStatisticsFieldMap
- * @param dataList
- * @return
- */
- 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;
- Map<String, JSONObject> spTimeStatisticsFieldInnerMap;
- List<String> suitList;
- for (JSONObject obj : dataList) {
- for (Map.Entry<String, Object> entry : obj.entrySet()) {
- curFieldObj = (JSONObject) entry.getValue();
- fieldName = fieldInfo2FieldName(curFieldObj.getString(CmnConst.ATTR_FIELD_INFO));
- if ("1".equals(curFieldObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD))) {
- if (!StringUtils.isEmpty(curFieldObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY)) && !StringUtils.isEmpty(curFieldObj.getString(CmnConst.ATTR_RELATE_TIME_FIELD))
- && !StringUtils.isEmpty(curFieldObj.getString(CmnConst.ATTR_RELATE_COMMON_FIELD))) {
- if (spTimeStatisticsFieldMap.get(curFieldObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY)) == null) {
- spTimeStatisticsFieldInnerMap = Maps.newHashMap();
- spTimeStatisticsFieldMap.put(curFieldObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY), spTimeStatisticsFieldInnerMap);
- } else {
- spTimeStatisticsFieldInnerMap = spTimeStatisticsFieldMap.get(curFieldObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY));
- }
- spTimeStatisticsFieldInnerMap.put(curFieldObj.getString(CmnConst.ATTR_RELATE_COMMON_FIELD), extendJSONObject(null, curFieldObj, Arrays.asList(CmnConst.ATTR_RELATE_TIME_FIELD, CmnConst.ATTR_RELATE_COMMON_FIELD)));
- spTimeStatisticsTypeSet.add(curFieldObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY));
- } else if (!StringUtils.isEmpty(curFieldObj.getString(CmnConst.ATTR_FORMULA))) {
- // todo
- suitList = getSuitContent(curFieldObj.getString(CmnConst.ATTR_FORMULA), "\\{#((?!\\{).)+#\\}");
- for (String suitContent : suitList) {
- if (suitContent.matches("\\{#custom_field_\\d+#\\}")) {
- continue;
- }
- baseFieldSet.add(fieldInfo2FieldName(suitContent));
- }
- }
- } else {
- baseFieldSet.add(fieldInfo2FieldName(fieldName));
- }
- }
- }
- return spTimeStatisticsTypeSet;
- }
+ /**
+ * 鑾峰彇鐗规畩鏃堕棿璁$畻绫诲瀷锛屾敞鍏ユ煡璇㈠瓧娈�
+ *
+ * @param baseFieldSet
+ * @param spTimeStatisticsFieldMap
+ * @param dataList
+ * @return
+ */
+ 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;
+ Map<String, JSONObject> spTimeStatisticsFieldInnerMap;
+ List<String> suitList;
+ for (JSONObject obj : dataList) {
+ for (Map.Entry<String, Object> entry : obj.entrySet()) {
+ curFieldObj = (JSONObject) entry.getValue();
+ fieldName = fieldInfo2FieldName(curFieldObj.getString(CmnConst.ATTR_FIELD_INFO));
+ if ("1".equals(curFieldObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD))) {
+ if (!StringUtils.isEmpty(curFieldObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY)) && !StringUtils.isEmpty(curFieldObj.getString(CmnConst.ATTR_RELATE_TIME_FIELD))
+ && !StringUtils.isEmpty(curFieldObj.getString(CmnConst.ATTR_RELATE_COMMON_FIELD))) {
+ if (spTimeStatisticsFieldMap.get(curFieldObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY)) == null) {
+ spTimeStatisticsFieldInnerMap = Maps.newHashMap();
+ spTimeStatisticsFieldMap.put(curFieldObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY), spTimeStatisticsFieldInnerMap);
+ } else {
+ spTimeStatisticsFieldInnerMap = spTimeStatisticsFieldMap.get(curFieldObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY));
+ }
+ spTimeStatisticsFieldInnerMap.put(curFieldObj.getString(CmnConst.ATTR_RELATE_COMMON_FIELD), extendJSONObject(null, curFieldObj, Arrays.asList(CmnConst.ATTR_RELATE_TIME_FIELD, CmnConst.ATTR_RELATE_COMMON_FIELD)));
+ spTimeStatisticsTypeSet.add(curFieldObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY));
+ } else if (!StringUtils.isEmpty(curFieldObj.getString(CmnConst.ATTR_FORMULA))) {
+ // todo
+ suitList = getSuitContent(curFieldObj.getString(CmnConst.ATTR_FORMULA), "\\{#((?!\\{).)+#\\}");
+ for (String suitContent : suitList) {
+ if (suitContent.matches("\\{#custom_field_\\d+#\\}")) {
+ continue;
+ }
+ baseFieldSet.add(fieldInfo2FieldName(suitContent));
+ }
+ }
+ } else {
+ baseFieldSet.add(fieldInfo2FieldName(fieldName));
+ }
+ }
+ }
+ return spTimeStatisticsTypeSet;
+ }
- /**
- * 妫�娴嬫暟鎹簮
- *
- * @param recordDte 鏁版嵁婧愰泦鍚�
- * @return
- */
- private JSONObject checkRecordDte(DataTableEntity recordDte) {
- JSONObject resultObj = new JSONObject();
- boolean resultFlag = true;
- if (BaseUtil.dataTableIsEmpty(recordDte)) {
- resultFlag = false;
- resultObj.put(CmnConst.RETURN_ATTR_MESSAGE, "鏁版嵁婧愪负绌猴紒");
- }
- resultObj.put(CmnConst.RETURN_ATTR_RESULT, resultFlag);
- return resultObj;
- }
+ /**
+ * 妫�娴嬫暟鎹簮
+ *
+ * @param recordDte 鏁版嵁婧愰泦鍚�
+ * @return
+ */
+ private JSONObject checkRecordDte(DataTableEntity recordDte) {
+ JSONObject resultObj = new JSONObject();
+ boolean resultFlag = true;
+ if (BaseUtil.dataTableIsEmpty(recordDte)) {
+ resultFlag = false;
+ resultObj.put(CmnConst.RETURN_ATTR_MESSAGE, "鏁版嵁婧愪负绌猴紒");
+ }
+ resultObj.put(CmnConst.RETURN_ATTR_RESULT, resultFlag);
+ return resultObj;
+ }
- /**
- * 鑾峰彇鏌ヨ鏉′欢
- *
- * @param reportDatasourceUUID 鎶ヨ〃鏁版嵁婧恥uid
- * @return
- */
- private JSONArray getSearchInfo(String reportDatasourceUUID) {
- DataTableEntity reportSourceFieldDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_DATASOURCE_FIELD_CONFIG, new String[]{reportDatasourceUUID});
- JSONArray resultArray = new JSONArray();
- if (!BaseUtil.dataTableIsEmpty(reportSourceFieldDte)) {
- FieldSetEntity reportSourceFieldFse;
- JSONObject tempObj;
- reportSourceFieldDte.getData().sort(Comparator.comparing(a -> a.getInteger("id")));
- for (int i = 0; i < reportSourceFieldDte.getRows(); i++) {
- reportSourceFieldFse = reportSourceFieldDte.getFieldSetEntity(i);
- if (!StringUtils.isEmpty(reportSourceFieldFse.getString(CmnConst.SEARCH_TYPE)) && !"-1".equals(reportSourceFieldFse.getString(CmnConst.SEARCH_TYPE))) {
- tempObj = new JSONObject();
- resultArray.add(tempObj);
- tempObj.put("field_name", reportSourceFieldFse.getString(CmnConst.FIELD_NAME));
- tempObj.put("temp_id", reportSourceFieldFse.getString(CmnConst.FIELD_NAME));
- tempObj.put("field_show_name", reportSourceFieldFse.getString(CmnConst.FIELD_TEXT));
- tempObj.put("field_type", "date".equals(reportSourceFieldFse.getString(CmnConst.FIELD_FORMAT)) ? "datetime" : ("num".equals(reportSourceFieldFse.getString(CmnConst.FIELD_FORMAT)) ? "number" : reportSourceFieldFse.getString(CmnConst.FIELD_FORMAT)));
- tempObj.put("field_reference", reportSourceFieldFse.getString(CmnConst.FIELD_PROMPT));
- 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)));
- }
- }
- }
- return resultArray;
- }
+ /**
+ * 鑾峰彇鏌ヨ鏉′欢
+ *
+ * @param reportDatasourceUUID 鎶ヨ〃鏁版嵁婧恥uid
+ * @return
+ */
+ private JSONArray getSearchInfo(String reportDatasourceUUID) {
+ DataTableEntity reportSourceFieldDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_DATASOURCE_FIELD_CONFIG, new String[]{reportDatasourceUUID});
+ JSONArray resultArray = new JSONArray();
+ if (!BaseUtil.dataTableIsEmpty(reportSourceFieldDte)) {
+ FieldSetEntity reportSourceFieldFse;
+ JSONObject tempObj;
+ reportSourceFieldDte.getData().sort(Comparator.comparing(a -> a.getInteger("id")));
+ for (int i = 0; i < reportSourceFieldDte.getRows(); i++) {
+ reportSourceFieldFse = reportSourceFieldDte.getFieldSetEntity(i);
+ if (!StringUtils.isEmpty(reportSourceFieldFse.getString(CmnConst.SEARCH_TYPE)) && !"-1".equals(reportSourceFieldFse.getString(CmnConst.SEARCH_TYPE))) {
+ tempObj = new JSONObject();
+ resultArray.add(tempObj);
+ tempObj.put("field_name", reportSourceFieldFse.getString(CmnConst.FIELD_NAME));
+ tempObj.put("temp_id", reportSourceFieldFse.getString(CmnConst.FIELD_NAME));
+ tempObj.put("field_show_name", reportSourceFieldFse.getString(CmnConst.FIELD_TEXT));
+ tempObj.put("field_type", "date".equals(reportSourceFieldFse.getString(CmnConst.FIELD_FORMAT)) ? "datetime" : ("num".equals(reportSourceFieldFse.getString(CmnConst.FIELD_FORMAT)) ? "number" : reportSourceFieldFse.getString(CmnConst.FIELD_FORMAT)));
+ tempObj.put("field_reference", reportSourceFieldFse.getString(CmnConst.FIELD_PROMPT));
+ 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"));
+ }
+ }
+ }
+ return resultArray;
+ }
- /**
- * 鑾峰彇榛樿鏌ヨ鏉′欢
- *
- * @param reportDatasourceUUID 鎶ヨ〃鏁版嵁婧恥uid
- * @return
- */
- private DataTableEntity getDefaultSearchFilter(String reportDatasourceUUID) {
- DataTableEntity reportSourceFieldDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_DATASOURCE_FIELD_CONFIG, new String[]{reportDatasourceUUID});
- DataTableEntity dte = new DataTableEntity();
- if (!BaseUtil.dataTableIsEmpty(reportSourceFieldDte)) {
- FieldSetEntity reportSourceFieldFse;
- FieldSetEntity fse;
- for (int i = 0; i < reportSourceFieldDte.getRows(); i++) {
- reportSourceFieldFse = reportSourceFieldDte.getFieldSetEntity(i);
- if (!StringUtils.isEmpty(reportSourceFieldFse.getString(CmnConst.SEARCH_TYPE)) && !"-1".equals(reportSourceFieldFse.getString(CmnConst.SEARCH_TYPE))) {
- fse = new FieldSetEntity();
- fse.setTableName("temp_table");
- fse.setValue("field_name", reportSourceFieldFse.getString(CmnConst.FIELD_NAME));
- fse.setValue("field_show_name", reportSourceFieldFse.getString(CmnConst.FIELD_TEXT));
- fse.setValue("field_type", "date".equals(reportSourceFieldFse.getString(CmnConst.FIELD_FORMAT)) ? "datetime" : ("num".equals(reportSourceFieldFse.getString(CmnConst.FIELD_FORMAT)) ? "number" : reportSourceFieldFse.getString(CmnConst.FIELD_FORMAT)));
- fse.setValue("field_reference", reportSourceFieldFse.getString(CmnConst.FIELD_PROMPT));
- fse.setValue("table_name", reportSourceFieldFse.getString(CmnConst.TABLE_NAME));
- fse.setValue(CmnConst.SEARCH_TYPE, reportSourceFieldFse.getObject(CmnConst.SEARCH_TYPE));
- fse.setValue("is_multiple", "2".equals(reportSourceFieldFse.getString(CmnConst.SEARCH_TYPE)));
- fse.setValue(CmnConst.LOGICAL_OPERATOR, reportSourceFieldFse.getString(CmnConst.LOGICAL_OPERATOR));
- fse.setValue(CmnConst.LOGICAL_VALUE, reportSourceFieldFse.getString(CmnConst.LOGICAL_VALUE));
- dte.addFieldSetEntity(fse);
- }
- }
- }
- return dte;
- }
+ /**
+ * 鑾峰彇榛樿鏌ヨ鏉′欢
+ *
+ * @param reportDatasourceUUID 鎶ヨ〃鏁版嵁婧恥uid
+ * @return
+ */
+ private DataTableEntity getDefaultSearchFilter(String reportDatasourceUUID) {
+ DataTableEntity reportSourceFieldDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_REPORT_DATASOURCE_FIELD_CONFIG, new String[]{reportDatasourceUUID});
+ DataTableEntity dte = new DataTableEntity();
+ if (!BaseUtil.dataTableIsEmpty(reportSourceFieldDte)) {
+ FieldSetEntity reportSourceFieldFse;
+ FieldSetEntity fse;
+ for (int i = 0; i < reportSourceFieldDte.getRows(); i++) {
+ reportSourceFieldFse = reportSourceFieldDte.getFieldSetEntity(i);
+ if (!StringUtils.isEmpty(reportSourceFieldFse.getString(CmnConst.SEARCH_TYPE)) && !"-1".equals(reportSourceFieldFse.getString(CmnConst.SEARCH_TYPE))) {
+ fse = new FieldSetEntity();
+ fse.setTableName("temp_table");
+ fse.setValue("field_name", reportSourceFieldFse.getString(CmnConst.FIELD_NAME));
+ fse.setValue("field_show_name", reportSourceFieldFse.getString(CmnConst.FIELD_TEXT));
+ fse.setValue("field_type", "date".equals(reportSourceFieldFse.getString(CmnConst.FIELD_FORMAT)) ? "datetime" : ("num".equals(reportSourceFieldFse.getString(CmnConst.FIELD_FORMAT)) ? "number" : reportSourceFieldFse.getString(CmnConst.FIELD_FORMAT)));
+ fse.setValue("field_reference", reportSourceFieldFse.getString(CmnConst.FIELD_PROMPT));
+ fse.setValue("table_name", reportSourceFieldFse.getString(CmnConst.TABLE_NAME));
+ fse.setValue(CmnConst.SEARCH_TYPE, reportSourceFieldFse.getObject(CmnConst.SEARCH_TYPE));
+ fse.setValue("is_multiple", "2".equals(reportSourceFieldFse.getString(CmnConst.SEARCH_TYPE)));
+ fse.setValue(CmnConst.LOGICAL_OPERATOR, reportSourceFieldFse.getString(CmnConst.LOGICAL_OPERATOR));
+ fse.setValue(CmnConst.LOGICAL_VALUE, reportSourceFieldFse.getString(CmnConst.LOGICAL_VALUE));
+ dte.addFieldSetEntity(fse);
+ }
+ }
+ }
+ return dte;
+ }
- /**
- * 鍒嗙粍鍖哄拰鏁版嵁鍖虹壒娈婅浆鎹�
- *
- * @param list
- * @return
- */
- public Map<String, JSONObject> groupAndDataJSONObject2Map(List<JSONObject> list) {
- Map<String, JSONObject> map = Maps.newLinkedHashMap();
- for (JSONObject jsonObject : list) {
- for (Map.Entry<String, Object> fieldEntry : jsonObject.entrySet()) {
- map.put(fieldEntry.getKey(), (JSONObject) fieldEntry.getValue());
- }
- }
- return map;
- }
+ /**
+ * 鍒嗙粍鍖哄拰鏁版嵁鍖虹壒娈婅浆鎹�
+ *
+ * @param list
+ * @return
+ */
+ public Map<String, JSONObject> groupAndDataJSONObject2Map(List<JSONObject> list) {
+ Map<String, JSONObject> map = Maps.newLinkedHashMap();
+ for (JSONObject jsonObject : list) {
+ for (Map.Entry<String, Object> fieldEntry : jsonObject.entrySet()) {
+ map.put(fieldEntry.getKey(), (JSONObject) fieldEntry.getValue());
+ }
+ }
+ return map;
+ }
- /**
- * 鎶ヨ〃-瑙f瀽-鑾峰彇澶撮儴鎴栬�呭熬閮ㄦ爣棰楬tml
- *
- * @param list 鎶ヨ〃閰嶇疆淇℃伅锛岀紦瀛榣ist
- * @param totalColCount 鎬诲垪鏁�
- * @param headAndTailTitleDataMap 澶撮儴銆佸熬閮ㄦ爣棰樺尯鏁版嵁瀛楁map
- * @param locationType 浣嶇疆绫诲瀷锛宧ead-澶撮儴锛宼ail-灏鹃儴
- * @return
- */
- public StringBuilder getTitleHtml(List<JSONObject> list, int totalColCount, Map<String, Set<String>> headAndTailTitleDataMap, String locationType) {
- StringBuilder html = new StringBuilder(1024);
- int colspan;
- int preRow = 0;
- int preCol = 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 = 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 (preRow == 0) {
- html.append("\n<tr ");
- } else {
- html.append(getAimNumTdPlaceholder(totalColCount - preCol, 1));
- html.append("\n</tr>\n<tr ");
- }
- html.append(style).append(">\n ");
- if (preRow == 0 && preCol == 0 && preCol < curCol - 1) {
- html.append(getAimNumTdPlaceholder(curCol - preCol - 1, 1));
- }
- preCol = curCol;
- }
- if (preCol < curCol - 1) {
- html.append(getAimNumTdPlaceholder(curCol - preCol - 1, 1));
- }
- if ("1".equals(singleObj.getString(CmnConst.ATTR_IS_TITLE))) {
- colspan = totalColCount;
- }
- html.append("<td colspan=\"").append(colspan).append("\">").append(value).append("</td>");
- preRow = curRow;
- preCol = curCol + singleObj.getIntValue(CmnConst.ATTR_COLSPAN) - 1;
- if ("1".equals(singleObj.getString(CmnConst.ATTR_IS_TITLE))) {
- preCol = totalColCount;
- }
- }
- if (html.length() > 5) {
- html.delete(html.length() - 5, html.length());
- }
- html.append(getAimNumTdPlaceholder(totalColCount - preCol, 1));
- html.append("\n</tr>");
- return html;
- }
+ /**
+ * 鎶ヨ〃-瑙f瀽-鑾峰彇澶撮儴鎴栬�呭熬閮ㄦ爣棰楬tml
+ *
+ * @param list 鎶ヨ〃閰嶇疆淇℃伅锛岀紦瀛榣ist
+ * @param totalColCount 鎬诲垪鏁�
+ * @param headAndTailTitleDataMap 澶撮儴銆佸熬閮ㄦ爣棰樺尯鏁版嵁瀛楁map
+ * @param locationType 浣嶇疆绫诲瀷锛宧ead-澶撮儴锛宼ail-灏鹃儴
+ * @return
+ */
+ 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 preCol = 0;
+ int curRow;
+ int curCol;
+ String value;
+ 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 (preRow < curRow) {
+ if (preRow == 0) {
+ html.append("\n<tr ");
+ } else {
+ html.append(getAimNumTdPlaceholder(totalColCount - preCol, 1));
+ html.append("\n</tr>\n<tr ");
+ }
+ html.append(">\n ");
+ if (preRow == 0 && preCol == 0 && preCol < curCol - 1) {
+ html.append(getAimNumTdPlaceholder(curCol - preCol - 1, 1));
+ }
+ preCol = curCol;
+ }
+ if (preCol < curCol - 1) {
+ html.append(getAimNumTdPlaceholder(curCol - preCol - 1, 1));
+ }
+ if ("1".equals(singleObj.getString(CmnConst.ATTR_IS_TITLE))) {
+ colspan = totalColCount;
+ }
+ html.append("<td colspan=\"").append(colspan).append("\">").append(value).append("</td>");
+ preRow = curRow;
+ preCol = curCol + singleObj.getIntValue(CmnConst.ATTR_COLSPAN) - 1;
+ if ("1".equals(singleObj.getString(CmnConst.ATTR_IS_TITLE))) {
+ preCol = totalColCount;
+ }
+ }
+ if (html.length() > 5) {
+ html.delete(html.length() - 5, html.length());
+ }
+ html.append(getAimNumTdPlaceholder(totalColCount - preCol, 1));
+ html.append("\n</tr>");
+ // 瑙f瀽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);
+ }
+ reportColumnList.add(reportColumn);
+ }
+ return reportColumnList;
+ }
- /**
- * 鑾峰彇鎸囧畾鏁版嵁闆嗕腑鍖呭惈鐨勬暟鎹尯瀛楁闆嗗悎
- *
- * @param list 鎸囧畾鏁版嵁闆嗗悎
- * @return
- */
- public Set<String> getDataFields(List<JSONObject> list) {
- Set<String> set = Sets.newLinkedHashSet();
- if (list == null) {
- return set;
- }
- String fieldInfo;
- List<String> suitList;
- for (JSONObject tempObj : list) {
- fieldInfo = tempObj.getString(CmnConst.ATTR_FIELD_INFO);
- suitList = getSuitContent(fieldInfo, CmnConst.REGEXP_FORM_FIELD);
- if (!suitList.isEmpty()) {
- for (String singleFieldInfo : suitList) {
- set.add(fieldInfo2FieldName(singleFieldInfo));
- }
- }
- }
- return set;
- }
+ /**
+ * 鑾峰彇鎸囧畾鏁版嵁闆嗕腑鍖呭惈鐨勬暟鎹尯瀛楁闆嗗悎
+ *
+ * @param list 鎸囧畾鏁版嵁闆嗗悎
+ * @return
+ */
+ public Set<String> getDataFields(List<JSONObject> list) {
+ Set<String> set = Sets.newLinkedHashSet();
+ if (list == null) {
+ return set;
+ }
+ String fieldInfo;
+ List<String> suitList;
+ for (JSONObject tempObj : list) {
+ fieldInfo = tempObj.getString(CmnConst.ATTR_FIELD_INFO);
+ suitList = getSuitContent(fieldInfo, CmnConst.REGEXP_FORM_FIELD);
+ if (!suitList.isEmpty()) {
+ for (String singleFieldInfo : suitList) {
+ set.add(fieldInfo2FieldName(singleFieldInfo));
+ }
+ }
+ }
+ return set;
+ }
- /**
- * 鑾峰彇缁熻map鐨剉alue
- *
- * @param valueJsonObject 鍊紀bj
- * @param dataAreaFieldConfigObj 鏁版嵁鍖哄瓧娈电紦瀛榦bj
- * @param actualValue 瀹為檯鍊�
- * @param type 缁熻绫诲瀷
- * @param lastStageFlag 鏄惁鏈骇锛堟暟鎹尯鍒嗙粍瀛楁鏈骇鍜屽垎缁勮〃澶村尯瀛楁閮芥槸鏈骇鎵嶄负鏈骇锛�
- * @return
- */
- public JSONObject getStatisticsValueObj(JSONObject valueJsonObject, JSONObject dataAreaFieldConfigObj, String actualValue, String type, boolean lastStageFlag) {
- if (valueJsonObject == null) {
- valueJsonObject = new JSONObject();
- }
- if (actualValue.matches(CmnConst.REGEXP_NUMBER)) {
- BigDecimal curValue = new BigDecimal(actualValue);
- if (CmnConst.ATTR_STATISTICS_SUM.equals(type) || CmnConst.ATTR_STATISTICS_AVG.equals(type)) {
- valueJsonObject.put(CmnConst.ATTR_STATISTICS_SUM, valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_SUM) != null ? valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_SUM).add(curValue) : curValue);
- }
- if (CmnConst.ATTR_STATISTICS_MAX.equals(type)) {
- valueJsonObject.put(CmnConst.ATTR_STATISTICS_MAX, valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_MAX) != null && valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_MAX).compareTo(curValue) > 0 ? valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_MAX) : curValue);
- }
- if (CmnConst.ATTR_STATISTICS_MIN.equals(type)) {
- valueJsonObject.put(CmnConst.ATTR_STATISTICS_MIN, valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_MIN) != null && valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_MIN).compareTo(curValue) < 0 ? valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_MIN) : curValue);
- }
- if (CmnConst.ATTR_STATISTICS_DEFAULT.equals(type)) {
- valueJsonObject.put(CmnConst.ATTR_STATISTICS_DEFAULT, valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_SUM) != null ? valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_SUM).add(curValue) : curValue);
- }
- }
- if (CmnConst.ATTR_STATISTICS_CNT.equals(type) || CmnConst.ATTR_STATISTICS_AVG.equals(type)) {
- valueJsonObject.put(CmnConst.ATTR_STATISTICS_CNT, valueJsonObject.getIntValue(CmnConst.ATTR_STATISTICS_CNT) + 1);
- }
- if (CmnConst.ATTR_STATISTICS_ENUM.equals(type) && !StringUtils.isEmpty(actualValue)) {
- String preEnumValue = valueJsonObject.get(CmnConst.ATTR_STATISTICS_ENUM) == null ? "" : valueJsonObject.getString(CmnConst.ATTR_STATISTICS_ENUM);
- if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_ENUM_TYPE))) {
- if (!checkContain(preEnumValue, actualValue)) {
- valueJsonObject.put(CmnConst.ATTR_STATISTICS_ENUM, StringUtils.isEmpty(preEnumValue) ? actualValue : preEnumValue + "," + actualValue);
- }
- } else {
- valueJsonObject.put(CmnConst.ATTR_STATISTICS_ENUM, StringUtils.isEmpty(preEnumValue) ? actualValue : preEnumValue + "," + actualValue);
- }
- }
- getAvgValue(valueJsonObject, dataAreaFieldConfigObj, lastStageFlag);
- return valueJsonObject;
- }
+ /**
+ * 鑾峰彇缁熻map鐨剉alue
+ *
+ * @param valueJsonObject 鍊紀bj
+ * @param dataAreaFieldConfigObj 鏁版嵁鍖哄瓧娈电紦瀛榦bj
+ * @param actualValue 瀹為檯鍊�
+ * @param type 缁熻绫诲瀷
+ * @param lastStageFlag 鏄惁鏈骇锛堟暟鎹尯鍒嗙粍瀛楁鏈骇鍜屽垎缁勮〃澶村尯瀛楁閮芥槸鏈骇鎵嶄负鏈骇锛�
+ * @return
+ */
+ public JSONObject getStatisticsValueObj(JSONObject valueJsonObject, JSONObject dataAreaFieldConfigObj, String actualValue, String type, boolean lastStageFlag) {
+ if (valueJsonObject == null) {
+ valueJsonObject = new JSONObject();
+ }
+ if (actualValue.matches(CmnConst.REGEXP_NUMBER)) {
+ BigDecimal curValue = new BigDecimal(actualValue);
+ if (CmnConst.ATTR_STATISTICS_SUM.equals(type) || CmnConst.ATTR_STATISTICS_AVG.equals(type)) {
+ valueJsonObject.put(CmnConst.ATTR_STATISTICS_SUM, valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_SUM) != null ? valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_SUM).add(curValue) : curValue);
+ }
+ if (CmnConst.ATTR_STATISTICS_MAX.equals(type)) {
+ valueJsonObject.put(CmnConst.ATTR_STATISTICS_MAX, valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_MAX) != null && valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_MAX).compareTo(curValue) > 0 ? valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_MAX) : curValue);
+ }
+ if (CmnConst.ATTR_STATISTICS_MIN.equals(type)) {
+ valueJsonObject.put(CmnConst.ATTR_STATISTICS_MIN, valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_MIN) != null && valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_MIN).compareTo(curValue) < 0 ? valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_MIN) : curValue);
+ }
+ if (CmnConst.ATTR_STATISTICS_DEFAULT.equals(type)) {
+ valueJsonObject.put(CmnConst.ATTR_STATISTICS_DEFAULT, valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_SUM) != null ? valueJsonObject.getBigDecimal(CmnConst.ATTR_STATISTICS_SUM).add(curValue) : curValue);
+ }
+ }
+ if (CmnConst.ATTR_STATISTICS_CNT.equals(type) || CmnConst.ATTR_STATISTICS_AVG.equals(type)) {
+ valueJsonObject.put(CmnConst.ATTR_STATISTICS_CNT, valueJsonObject.getIntValue(CmnConst.ATTR_STATISTICS_CNT) + 1);
+ }
+ if (CmnConst.ATTR_STATISTICS_ENUM.equals(type) && !StringUtils.isEmpty(actualValue)) {
+ String preEnumValue = valueJsonObject.get(CmnConst.ATTR_STATISTICS_ENUM) == null ? "" : valueJsonObject.getString(CmnConst.ATTR_STATISTICS_ENUM);
+ if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_ENUM_TYPE))) {
+ if (!checkContain(preEnumValue, actualValue)) {
+ valueJsonObject.put(CmnConst.ATTR_STATISTICS_ENUM, StringUtils.isEmpty(preEnumValue) ? actualValue : preEnumValue + "," + actualValue);
+ }
+ } else {
+ valueJsonObject.put(CmnConst.ATTR_STATISTICS_ENUM, StringUtils.isEmpty(preEnumValue) ? actualValue : preEnumValue + "," + actualValue);
+ }
+ }
+ getAvgValue(valueJsonObject, dataAreaFieldConfigObj, lastStageFlag);
+ return valueJsonObject;
+ }
- /**
- * 璁$畻骞冲潎鍊�
- *
- * @param valueJsonObject 鍊紀bj
- * @param dataAreaFieldConfigObj 鏁版嵁鍖哄瓧娈电紦瀛榦bj
- * @param lastStageFlag 鏈骇瀛楁鏍囪瘑
- * @return
- */
- public void getAvgValue(JSONObject valueJsonObject, JSONObject dataAreaFieldConfigObj, boolean lastStageFlag) {
- if (CmnConst.ATTR_STATISTICS_AVG.equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS))) {
- Double cnt = valueJsonObject.getDoubleValue(CmnConst.ATTR_STATISTICS_CNT);
- if (!lastStageFlag && "1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_AVG_TYPE))) {
- cnt = valueJsonObject.getDoubleValue(CmnConst.ATTR_STATISTICS_SUB_CNT);
- }
- valueJsonObject.put(CmnConst.ATTR_STATISTICS_AVG, valueJsonObject.getDoubleValue(CmnConst.ATTR_STATISTICS_SUM) / (cnt == 0 ? 1 : cnt));
- }
- }
+ /**
+ * 璁$畻骞冲潎鍊�
+ *
+ * @param valueJsonObject 鍊紀bj
+ * @param dataAreaFieldConfigObj 鏁版嵁鍖哄瓧娈电紦瀛榦bj
+ * @param lastStageFlag 鏈骇瀛楁鏍囪瘑
+ * @return
+ */
+ public void getAvgValue(JSONObject valueJsonObject, JSONObject dataAreaFieldConfigObj, boolean lastStageFlag) {
+ if (CmnConst.ATTR_STATISTICS_AVG.equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_STATISTICS))) {
+ Double cnt = valueJsonObject.getDoubleValue(CmnConst.ATTR_STATISTICS_CNT);
+ if (!lastStageFlag && "1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_AVG_TYPE))) {
+ cnt = valueJsonObject.getDoubleValue(CmnConst.ATTR_STATISTICS_SUB_CNT);
+ }
+ valueJsonObject.put(CmnConst.ATTR_STATISTICS_AVG, valueJsonObject.getDoubleValue(CmnConst.ATTR_STATISTICS_SUM) / (cnt == 0 ? 1 : cnt));
+ }
+ }
- /**
- * 鑾峰彇澶撮儴銆佸熬閮ㄦ爣棰樻暟鎹瓧娈�
- *
- * @param headAndTailTitleDataMap
- * @param set
- * @param 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));
- }
- }
+ /**
+ * 鑾峰彇澶撮儴銆佸熬閮ㄦ爣棰樻暟鎹瓧娈�
+ *
+ * @param headAndTailTitleDataMap
+ * @param set
+ * @param 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));
+ }
+ }
- /**
- * 鑾峰彇鍊�
- *
- * @param dataAreaFieldConfigObj
- * @param recordFse
- * @param dataAreaFieldName
- * @return
- */
- public String getValue(JSONObject dataAreaFieldConfigObj, FieldSetEntity recordFse, String dataAreaFieldName) {
- String value = null;
+ /**
+ * 鑾峰彇鍊�
+ *
+ * @param dataAreaFieldConfigObj
+ * @param recordFse
+ * @param dataAreaFieldName
+ * @return
+ */
+ public String getValue(JSONObject dataAreaFieldConfigObj, FieldSetEntity recordFse, String dataAreaFieldName) {
+ String value = null;
- if (CmnConst.ATTR_DATA_TYPE_DATE.equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_DATA_TYPE))) {
- String dateFormat = dataAreaFieldConfigObj.getString(CmnConst.ATTR_DATE_FORMAT);
- if (!StringUtils.isEmpty(dateFormat)) {
- value = recordFse.getDate(dataAreaFieldName, dateFormat);
- }
- } else {
- if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD))) {
- // 鑷畾涔夊瓧娈�
- if (!StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_FORMULA))) {
- // 鏇挎崲绯荤粺鍙傛暟
- value = SystemParamReplace.systemParamsReplace(dataAreaFieldConfigObj.getString(CmnConst.ATTR_FORMULA));
- // 鏇挎崲琛ㄥ崟鍙傛暟锛屼娇鐢╠ouble杩涜璁$畻
- value = SystemParamReplace.formParamsReplace(value, recordFse, 1);
- // 鍘婚櫎鏈浣跨敤鐨勫弬鏁�
- value = value.replaceAll("\\/\\{#[\\w]+#}", "/1").replaceAll("\\{#[\\w]+#}", "0");
- // 姹傚��
- try {
- value = BaseUtil.executeExpression(value, Maps.newHashMap()).toString();
- } catch (Exception e) {
- SpringMVCContextHolder.getSystemLogger().error(e);
- value = "";
- }
- } else {
- if (!StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY))) {
- value = recordFse.getString(fieldInfo2FieldName(getFieldInfo(dataAreaFieldConfigObj)));
- }
- }
- } else {
- // 鏅�氬瓧娈�+鍒嗙粍瀛楁
- value = recordFse.getString(dataAreaFieldName);
- }
- }
- return StringUtils.isEmpty(value) ? "" : value;
- }
+ if (CmnConst.ATTR_DATA_TYPE_DATE.equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_DATA_TYPE))) {
+ String dateFormat = dataAreaFieldConfigObj.getString(CmnConst.ATTR_DATE_FORMAT);
+ if (!StringUtils.isEmpty(dateFormat)) {
+ value = recordFse.getDate(dataAreaFieldName, dateFormat);
+ }
+ } else {
+ if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD))) {
+ // 鑷畾涔夊瓧娈�
+ if (!StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_FORMULA))) {
+ // 鏇挎崲绯荤粺鍙傛暟
+ value = SystemParamReplace.systemParamsReplace(dataAreaFieldConfigObj.getString(CmnConst.ATTR_FORMULA));
+ // 鏇挎崲琛ㄥ崟鍙傛暟锛屼娇鐢╠ouble杩涜璁$畻
+ value = SystemParamReplace.formParamsReplace(value, recordFse, 1);
+ // 鍘婚櫎鏈浣跨敤鐨勫弬鏁�
+ value = value.replaceAll("\\/\\{#[\\w]+#}", "/1").replaceAll("\\{#[\\w]+#}", "0");
+ // 姹傚��
+ try {
+ value = BaseUtil.executeExpression(value, Maps.newHashMap()).toString();
+ } catch (Exception e) {
+ SpringMVCContextHolder.getSystemLogger().error(e);
+ value = "";
+ }
+ } else {
+ if (!StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY))) {
+ value = recordFse.getString(fieldInfo2FieldName(getFieldInfo(dataAreaFieldConfigObj)));
+ }
+ }
+ } else {
+ // 鏅�氬瓧娈�+鍒嗙粍瀛楁
+ value = recordFse.getString(dataAreaFieldName);
+ }
+ }
+ return StringUtils.isEmpty(value) ? "" : value;
+ }
- /**
- * 鑾峰彇瀛楁淇℃伅
- *
- * @param dataAreaFieldConfigObj
- * @return
- */
- private String getFieldInfo(JSONObject dataAreaFieldConfigObj) {
- if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD))) {
- // 鑷畾涔夊瓧娈�
- if (!StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY))) {
- // 鐗规畩鏃堕棿璁$畻瀛楁
- if ("0".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY))) {
- // 鍘诲勾鍚屾湡
- return fieldName2FieldInfo(CmnConst.ATTR_HEAD_LAST_YEAR + fieldInfo2FieldName(dataAreaFieldConfigObj.getString(CmnConst.ATTR_RELATE_COMMON_FIELD)));
- } else if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY))) {
- // 涓婃湡
- return fieldName2FieldInfo(CmnConst.ATTR_HEAD_PRE_PERIOD + fieldInfo2FieldName(dataAreaFieldConfigObj.getString(CmnConst.ATTR_RELATE_COMMON_FIELD)));
- }
- }
- }
- // 鏅�氬瓧娈�
- return dataAreaFieldConfigObj.getString(CmnConst.ATTR_FIELD_INFO);
- }
+ /**
+ * 鑾峰彇瀛楁淇℃伅
+ *
+ * @param dataAreaFieldConfigObj
+ * @return
+ */
+ private String getFieldInfo(JSONObject dataAreaFieldConfigObj) {
+ if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_IS_CUSTOM_FIELD))) {
+ // 鑷畾涔夊瓧娈�
+ if (!StringUtils.isEmpty(dataAreaFieldConfigObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY))) {
+ // 鐗规畩鏃堕棿璁$畻瀛楁
+ if ("0".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY))) {
+ // 鍘诲勾鍚屾湡
+ return fieldName2FieldInfo(CmnConst.ATTR_HEAD_LAST_YEAR + fieldInfo2FieldName(dataAreaFieldConfigObj.getString(CmnConst.ATTR_RELATE_COMMON_FIELD)));
+ } else if ("1".equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_SP_TIME_STATISTICS_WAY))) {
+ // 涓婃湡
+ return fieldName2FieldInfo(CmnConst.ATTR_HEAD_PRE_PERIOD + fieldInfo2FieldName(dataAreaFieldConfigObj.getString(CmnConst.ATTR_RELATE_COMMON_FIELD)));
+ }
+ }
+ }
+ // 鏅�氬瓧娈�
+ return dataAreaFieldConfigObj.getString(CmnConst.ATTR_FIELD_INFO);
+ }
- /**
- * 鏍煎紡鍖栨暟鎹�
- *
- * @param dataAreaFieldConfigObj 鏁版嵁鍖哄瓧娈电紦瀛榦bj
- * @param value 鏁版嵁鍊�
- * @return
- */
- public String formatValue(JSONObject dataAreaFieldConfigObj, String value) {
- if (StringUtils.isEmpty(value)) {
- return value;
- }
- if (CmnConst.ATTR_DATA_TYPE_NUM.equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_DATA_TYPE))) {
- int decimalDigits = dataAreaFieldConfigObj.getIntValue(CmnConst.ATTR_DECIMAL_DIGITS);
- String numFormat = dataAreaFieldConfigObj.getString(CmnConst.ATTR_NUM_FORMAT);
- StringBuilder numFormatSb = new StringBuilder(32);
- StringBuilder valueSb = new StringBuilder(32);
- String[] tempValueArr = value.split("\\\\");
- for (String singleValue : tempValueArr) {
- if (StringUtils.isEmpty(singleValue)) {
- continue;
- }
- if (valueSb.length() > 0) {
- valueSb.append("\\");
- }
- numFormatSb.setLength(0);
- if ("1".equals(numFormat)) {
- // 鍗冨垎浣�
- numFormatSb.append("%1$,.").append(decimalDigits).append("f");
- singleValue = String.format(numFormatSb.toString(), Double.parseDouble(singleValue));
- } else if ("2".equals(numFormat)) {
- // 鐧惧垎姣�
- numFormatSb.append("0.");
- for (int i = 0; i < decimalDigits; i++) {
- numFormatSb.append("0");
- }
- numFormatSb.append("%");
- singleValue = new DecimalFormat(numFormatSb.toString()).format(Double.parseDouble(singleValue));
- } else {
- numFormatSb.append("%1$.").append(decimalDigits).append("f");
- singleValue = String.format(numFormatSb.toString(), Double.parseDouble(singleValue));
- }
- valueSb.append(singleValue);
- }
- value = valueSb.toString();
- }
- return value;
- }
+ /**
+ * 鏍煎紡鍖栨暟鎹�
+ *
+ * @param dataAreaFieldConfigObj 鏁版嵁鍖哄瓧娈电紦瀛榦bj
+ * @param value 鏁版嵁鍊�
+ * @return
+ */
+ public String formatValue(JSONObject dataAreaFieldConfigObj, String value) {
+ if (StringUtils.isEmpty(value)) {
+ return value;
+ }
+ if (CmnConst.ATTR_DATA_TYPE_NUM.equals(dataAreaFieldConfigObj.getString(CmnConst.ATTR_DATA_TYPE))) {
+ int decimalDigits = dataAreaFieldConfigObj.getIntValue(CmnConst.ATTR_DECIMAL_DIGITS);
+ String numFormat = dataAreaFieldConfigObj.getString(CmnConst.ATTR_NUM_FORMAT);
+ StringBuilder numFormatSb = new StringBuilder(32);
+ StringBuilder valueSb = new StringBuilder(32);
+ String[] tempValueArr = value.split("\\\\");
+ for (String singleValue : tempValueArr) {
+ if (StringUtils.isEmpty(singleValue)) {
+ continue;
+ }
+ if (valueSb.length() > 0) {
+ valueSb.append("\\");
+ }
+ numFormatSb.setLength(0);
+ if ("1".equals(numFormat)) {
+ // 鍗冨垎浣�
+ numFormatSb.append("%1$,.").append(decimalDigits).append("f");
+ singleValue = String.format(numFormatSb.toString(), Double.parseDouble(singleValue));
+ } else if ("2".equals(numFormat)) {
+ // 鐧惧垎姣�
+ numFormatSb.append("0.");
+ for (int i = 0; i < decimalDigits; i++) {
+ numFormatSb.append("0");
+ }
+ numFormatSb.append("%");
+ singleValue = new DecimalFormat(numFormatSb.toString()).format(Double.parseDouble(singleValue));
+ } else {
+ numFormatSb.append("%1$.").append(decimalDigits).append("f");
+ singleValue = String.format(numFormatSb.toString(), Double.parseDouble(singleValue));
+ }
+ valueSb.append(singleValue);
+ }
+ value = valueSb.toString();
+ }
+ return value;
+ }
- /**
- * 澶勭悊鎸囧畾鍗曞厓鏍肩殑鍥哄畾瀹藉害
- *
- * @param dataAreaFieldConfigObj
- * @param value
- * @return
- */
- public String dealTdWidth(JSONObject dataAreaFieldConfigObj, String value) {
- StringBuilder dealedValueSb = new StringBuilder(64);
- dealedValueSb.append("<div");
- String width = dataAreaFieldConfigObj == null ? null : dataAreaFieldConfigObj.getString(CmnConst.ATTR_WIDTH);
- if (!StringUtils.isEmpty(width)) {
- dealedValueSb.append(" style=\"width:").append(width).append("px\"");
- }
- dealedValueSb.append(">").append(value).append("</div>");
- return dealedValueSb.toString();
- }
+ /**
+ * 澶勭悊鎸囧畾鍗曞厓鏍肩殑鍥哄畾瀹藉害
+ *
+ * @param dataAreaFieldConfigObj
+ * @param value
+ * @return
+ */
+ public String dealTdWidth(JSONObject dataAreaFieldConfigObj, String value) {
+ StringBuilder dealedValueSb = new StringBuilder(64);
+ dealedValueSb.append("<div");
+ String width = dataAreaFieldConfigObj == null ? null : dataAreaFieldConfigObj.getString(CmnConst.ATTR_WIDTH);
+ if (!StringUtils.isEmpty(width)) {
+ dealedValueSb.append(" style=\"width:").append(width).append("px\"");
+ }
+ dealedValueSb.append(">").append(value).append("</div>");
+ return dealedValueSb.toString();
+ }
- /**
- * 鑾峰彇td鐨勫睘鎬�
- *
- * @param obj 瀛楁缂撳瓨obj銆佹暟鎹爣棰榦bj銆佸垎缁勬爣棰榦bj
- * @param collection 灞炴�ч泦鍚�
- * @param type 1-鎺ユ敹鐨勫睘鎬э紝鍏朵粬锛堥�氬父涓�-1锛�-鎺掗櫎鐨勫睘鎬�
- * @return
- */
- public StringBuilder getTdAttrByObj(JSONObject obj, Collection<String> collection, int type) {
- StringBuilder attrSb = new StringBuilder(32);
- if (!obj.isEmpty()) {
- String key;
- String value;
- Object objValue;
- if (!StringUtils.isEmpty(obj.getString(CmnConst.ATTR_URL))) {
- for (Map.Entry<String, Object> entry : obj.entrySet()) {
- key = entry.getKey();
- objValue = entry.getValue();
- value = objValue == null ? "" : objValue.toString();
- if (collection != null) {
- for (String singleAttrName : collection) {
- if ((type == 1 && key.equals(singleAttrName)) || (type != 1 && !key.equals(singleAttrName))) {
- getTdAttrByObjPart(key, value, attrSb);
- }
- }
- } else {
- getTdAttrByObjPart(key, value, attrSb);
- }
- }
- }
- }
- return attrSb;
- }
+ /**
+ * 鑾峰彇td鐨勫睘鎬�
+ *
+ * @param obj 瀛楁缂撳瓨obj銆佹暟鎹爣棰榦bj銆佸垎缁勬爣棰榦bj
+ * @param collection 灞炴�ч泦鍚�
+ * @param type 1-鎺ユ敹鐨勫睘鎬э紝鍏朵粬锛堥�氬父涓�-1锛�-鎺掗櫎鐨勫睘鎬�
+ * @return
+ */
+ public StringBuilder getTdAttrByObj(JSONObject obj, Collection<String> collection, int type) {
+ StringBuilder attrSb = new StringBuilder(32);
+ if (!obj.isEmpty()) {
+ String key;
+ String value;
+ Object objValue;
+ if (!StringUtils.isEmpty(obj.getString(CmnConst.ATTR_URL))) {
+ for (Map.Entry<String, Object> entry : obj.entrySet()) {
+ key = entry.getKey();
+ objValue = entry.getValue();
+ value = objValue == null ? "" : objValue.toString();
+ if (collection != null) {
+ for (String singleAttrName : collection) {
+ if ((type == 1 && key.equals(singleAttrName)) || (type != 1 && !key.equals(singleAttrName))) {
+ getTdAttrByObjPart(key, value, attrSb);
+ }
+ }
+ } else {
+ getTdAttrByObjPart(key, value, attrSb);
+ }
+ }
+ }
+ }
+ return attrSb;
+ }
- private void getTdAttrByObjPart(String key, String value, StringBuilder attrSb) {
- if (CmnConst.ATTR_FIELD_INFO.equals(key)) {
- value = fieldInfo2FieldName(value);
- }
- if (CmnConst.ATTR_URL.equals(key)) {
- attrSb.append(" router=\"").append(value).append("\"");
- } else {
- attrSb.append(" ").append(key).append("=\"").append(value).append("\"");
- }
- }
+ private void getTdAttrByObjPart(String key, String value, StringBuilder attrSb) {
+ if (CmnConst.ATTR_FIELD_INFO.equals(key)) {
+ value = fieldInfo2FieldName(value);
+ }
+ if (CmnConst.ATTR_URL.equals(key)) {
+ attrSb.append(" router=\"").append(value).append("\"");
+ } else {
+ attrSb.append(" ").append(key).append("=\"").append(value).append("\"");
+ }
+ }
- public StringBuilder getTdAttrByObj(JSONObject obj, Collection<String> collection) {
- return getTdAttrByObj(obj, collection, 1);
- }
+ public StringBuilder getTdAttrByObj(JSONObject obj, Collection<String> collection) {
+ return getTdAttrByObj(obj, collection, 1);
+ }
- public StringBuilder getTdAttrByObj(JSONObject obj) {
- return getTdAttrByObj(obj, null);
- }
+ public StringBuilder getTdAttrByObj(JSONObject obj) {
+ return getTdAttrByObj(obj, null);
+ }
- /**
- * 澶勭悊td灞炴�bj涓殑鐪熷疄鍊�
- *
- * @param baseObj
- * @param dealObj
- */
- public void getTdAttrObj(JSONObject baseObj, JSONObject dealObj) {
- Object obj = dealObj.get(CmnConst.ATTR_REAL_VALUE);
- if (obj != null) {
- JSONObject realValueObj = (JSONObject) obj;
- realValueObj.forEach((k, v) -> {
- if (baseObj.get(k) != null) {
- baseObj.put(k, v);
- }
- });
- }
- }
+ /**
+ * 澶勭悊td灞炴�bj涓殑鐪熷疄鍊�
+ *
+ * @param baseObj
+ * @param dealObj
+ */
+ public void getTdAttrObj(JSONObject baseObj, JSONObject dealObj) {
+ Object obj = dealObj.get(CmnConst.ATTR_REAL_VALUE);
+ if (obj != null) {
+ JSONObject realValueObj = (JSONObject) obj;
+ realValueObj.forEach((k, v) -> {
+ if (baseObj.get(k) != null) {
+ baseObj.put(k, v);
+ }
+ });
+ }
+ }
- /**
- * 鏇挎崲琛ㄥ崟鍙傛暟鍜岀郴缁熷彉閲�
- *
- * @param str 甯﹀鐞嗙殑瀛楃涓�
- * @param headAndTailTitleDataMap 澶撮儴銆佸熬閮ㄦ爣棰樺瓧娈垫暟鎹甿ap
- * @param singleObj
- * @return
- */
- public String replaceFormDataAndSysData(String str, Map<String, Set<String>> headAndTailTitleDataMap, JSONObject singleObj) {
- if (StringUtils.isEmpty(str)) {
- return "";
- }
- String reuslt = SystemParamReplace.systemParamsReplace(str);
- reuslt = reuslt.replaceAll(CmnConst.REGEXP_SYS_FIELD, "");
- if (!headAndTailTitleDataMap.isEmpty()) {
- List<String> suitList = getSuitContent(reuslt, CmnConst.REGEXP_FORM_FIELD);
- String dataType = singleObj.getString(CmnConst.ATTR_DATA_TYPE);
- int decimalDigits;
- String formatStr = null;
- List<JSONObject> formatList = Lists.newArrayList();
- boolean dateFormatFlag = false;
- boolean numFormatFlag = false;
- int numDealType = -1;
- JSONObject tempObj;
- if (StringUtils.isEmpty(dataType)) {
- dataType = CmnConst.ATTR_DATA_TYPE_STRING;
- } else {
- String[] dataTypeArr = dataType.split(",");
- for (String singleDataType : dataTypeArr) {
- if (StringUtils.isEmpty(singleDataType)) {
- continue;
- }
- tempObj = new JSONObject();
- tempObj.put(CmnConst.ATTR_DATA_TYPE, singleDataType);
- formatList.add(tempObj);
- if (CmnConst.ATTR_DATA_TYPE_DATE.equals(singleDataType)) {
- if (!dateFormatFlag) {
- dateFormatFlag = true;
- formatStr = singleObj.getString(CmnConst.ATTR_DATE_FORMAT);
- }
- tempObj.put("format", formatStr);
- } else if (CmnConst.ATTR_DATA_TYPE_NUM.equals(singleDataType)) {
- if (!numFormatFlag) {
- numFormatFlag = true;
- decimalDigits = singleObj.getIntValue(CmnConst.ATTR_DECIMAL_DIGITS);
- String numFormat = singleObj.getString(CmnConst.ATTR_NUM_FORMAT);
- StringBuilder numFormatSb = new StringBuilder(32);
- if ("1".equals(numFormat)) {
- // 鍗冨垎浣�
- numFormatSb.append("%1$,.").append(decimalDigits).append("f");
- numDealType = 1;
- } else if ("2".equals(numFormat)) {
- // 鐧惧垎姣�
- numFormatSb.append("0.");
- for (int i = 0; i < decimalDigits; i++) {
- numFormatSb.append("0");
- }
- numFormatSb.append("%");
- numDealType = 2;
- } else {
- numFormatSb.append("%1$.").append(decimalDigits).append("f");
- numDealType = 1;
- }
- formatStr = numFormatSb.toString();
- }
- tempObj.put("format", formatStr);
- }
- }
- }
+ /**
+ * 鏇挎崲琛ㄥ崟鍙傛暟鍜岀郴缁熷彉閲�
+ *
+ * @param str 甯﹀鐞嗙殑瀛楃涓�
+ * @param headAndTailTitleDataMap 澶撮儴銆佸熬閮ㄦ爣棰樺瓧娈垫暟鎹甿ap
+ * @param singleObj
+ * @return
+ */
+ public String replaceFormDataAndSysData(String str, Map<String, Set<String>> headAndTailTitleDataMap, JSONObject singleObj) {
+ if (StringUtils.isEmpty(str)) {
+ return "";
+ }
+ String reuslt = SystemParamReplace.systemParamsReplace(str);
+ reuslt = reuslt.replaceAll(CmnConst.REGEXP_SYS_FIELD, "");
+ if (!headAndTailTitleDataMap.isEmpty()) {
+ List<String> suitList = getSuitContent(reuslt, CmnConst.REGEXP_FORM_FIELD);
+ String dataType = singleObj.getString(CmnConst.ATTR_DATA_TYPE);
+ int decimalDigits;
+ String formatStr = null;
+ List<JSONObject> formatList = Lists.newArrayList();
+ boolean dateFormatFlag = false;
+ boolean numFormatFlag = false;
+ int numDealType = -1;
+ JSONObject tempObj;
+ if (StringUtils.isEmpty(dataType)) {
+ dataType = CmnConst.ATTR_DATA_TYPE_STRING;
+ } else {
+ String[] dataTypeArr = dataType.split(",");
+ for (String singleDataType : dataTypeArr) {
+ if (StringUtils.isEmpty(singleDataType)) {
+ continue;
+ }
+ tempObj = new JSONObject();
+ tempObj.put(CmnConst.ATTR_DATA_TYPE, singleDataType);
+ formatList.add(tempObj);
+ if (CmnConst.ATTR_DATA_TYPE_DATE.equals(singleDataType)) {
+ if (!dateFormatFlag) {
+ dateFormatFlag = true;
+ formatStr = singleObj.getString(CmnConst.ATTR_DATE_FORMAT);
+ }
+ tempObj.put("format", formatStr);
+ } else if (CmnConst.ATTR_DATA_TYPE_NUM.equals(singleDataType)) {
+ if (!numFormatFlag) {
+ numFormatFlag = true;
+ decimalDigits = singleObj.getIntValue(CmnConst.ATTR_DECIMAL_DIGITS);
+ String numFormat = singleObj.getString(CmnConst.ATTR_NUM_FORMAT);
+ StringBuilder numFormatSb = new StringBuilder(32);
+ if ("1".equals(numFormat)) {
+ // 鍗冨垎浣�
+ numFormatSb.append("%1$,.").append(decimalDigits).append("f");
+ numDealType = 1;
+ } else if ("2".equals(numFormat)) {
+ // 鐧惧垎姣�
+ numFormatSb.append("0.");
+ for (int i = 0; i < decimalDigits; i++) {
+ numFormatSb.append("0");
+ }
+ numFormatSb.append("%");
+ numDealType = 2;
+ } else {
+ numFormatSb.append("%1$.").append(decimalDigits).append("f");
+ numDealType = 1;
+ }
+ formatStr = numFormatSb.toString();
+ }
+ tempObj.put("format", formatStr);
+ }
+ }
+ }
- StringBuilder value = new StringBuilder(128);
- String singleFieldInfo;
- for (int i = 0; i < suitList.size(); i++) {
- singleFieldInfo = suitList.get(i);
- value.setLength(0);
- if (formatList.size() > i) {
- tempObj = formatList.get(i);
- if (CmnConst.ATTR_DATA_TYPE_STRING.equals(tempObj.getString(CmnConst.ATTR_DATA_TYPE))) {
- reuslt = reuslt.replace(singleFieldInfo, SetUtils.set2String(headAndTailTitleDataMap.get(fieldInfo2FieldName(singleFieldInfo)), ","));
- } else {
- for (String singleValue : headAndTailTitleDataMap.get(fieldInfo2FieldName(singleFieldInfo))) {
- if (value.length() > 0) {
- value.append(",");
- }
- if (CmnConst.ATTR_DATA_TYPE_NUM.equals(tempObj.getString(CmnConst.ATTR_DATA_TYPE))) {
- if (numDealType == 1) {
- value.append(String.format(tempObj.getString("format"), Double.parseDouble(singleValue)));
- } else if (numDealType == 2) {
- value.append(new DecimalFormat(tempObj.getString("format")).format(Double.parseDouble(singleValue)));
- }
- } else if (CmnConst.ATTR_DATA_TYPE_DATE.equals(tempObj.getString(CmnConst.ATTR_DATA_TYPE))) {
- SimpleDateFormat restoreDataFormat = new SimpleDateFormat(CmnConst.FULL_DATE_FORMAT);
- try {
- Date date = restoreDataFormat.parse(singleValue);
- value.append(new SimpleDateFormat(tempObj.getString("format")).format(date));
- } catch (ParseException e) {
- logger.error(ReportCode.DATE_TRANSFER_FIAL.getText() + ": " + singleValue, e);
- }
- }
- }
- reuslt = reuslt.replace(singleFieldInfo, value);
- }
- } else {
- reuslt = reuslt.replace(singleFieldInfo, SetUtils.set2String(headAndTailTitleDataMap.get(fieldInfo2FieldName(singleFieldInfo)), ","));
- }
+ StringBuilder value = new StringBuilder(128);
+ String singleFieldInfo;
+ for (int i = 0; i < suitList.size(); i++) {
+ singleFieldInfo = suitList.get(i);
+ value.setLength(0);
+ if (formatList.size() > i) {
+ tempObj = formatList.get(i);
+ if (CmnConst.ATTR_DATA_TYPE_STRING.equals(tempObj.getString(CmnConst.ATTR_DATA_TYPE))) {
+ reuslt = reuslt.replace(singleFieldInfo, SetUtils.set2String(headAndTailTitleDataMap.get(fieldInfo2FieldName(singleFieldInfo)), ","));
+ } else {
+ for (String singleValue : headAndTailTitleDataMap.get(fieldInfo2FieldName(singleFieldInfo))) {
+ if (value.length() > 0) {
+ value.append(",");
+ }
+ if (CmnConst.ATTR_DATA_TYPE_NUM.equals(tempObj.getString(CmnConst.ATTR_DATA_TYPE))) {
+ if (numDealType == 1) {
+ value.append(String.format(tempObj.getString("format"), Double.parseDouble(singleValue)));
+ } else if (numDealType == 2) {
+ value.append(new DecimalFormat(tempObj.getString("format")).format(Double.parseDouble(singleValue)));
+ }
+ } else if (CmnConst.ATTR_DATA_TYPE_DATE.equals(tempObj.getString(CmnConst.ATTR_DATA_TYPE))) {
+ SimpleDateFormat restoreDataFormat = new SimpleDateFormat(CmnConst.FULL_DATE_FORMAT);
+ try {
+ Date date = restoreDataFormat.parse(singleValue);
+ value.append(new SimpleDateFormat(tempObj.getString("format")).format(date));
+ } catch (ParseException e) {
+ logger.error(ReportCode.DATE_TRANSFER_FIAL.getText() + ": " + singleValue, e);
+ }
+ }
+ }
+ reuslt = reuslt.replace(singleFieldInfo, value);
+ }
+ } else {
+ reuslt = reuslt.replace(singleFieldInfo, SetUtils.set2String(headAndTailTitleDataMap.get(fieldInfo2FieldName(singleFieldInfo)), ","));
+ }
- }
- }
- reuslt = reuslt.replaceAll(CmnConst.REGEXP_FORM_FIELD, "");
- return reuslt;
- }
+ }
+ }
+ reuslt = reuslt.replaceAll(CmnConst.REGEXP_FORM_FIELD, "");
+ return reuslt;
+ }
- /*==========================宸ュ叿鏂规硶-start==========================*/
+ /*==========================宸ュ叿鏂规硶-start==========================*/
- /**
- * 姣旇緝v1锛寁2鐨勫ぇ灏忥紝鑻ユ槸涓烘暟瀛楋紝鍒欐寜鐓ф暟瀛楃殑鏂瑰紡杩涜姣旇緝
- *
- * @param v1
- * @param v2
- * @return
- */
- public int compare(String v1, String v2) {
- BigDecimal b1;
- BigDecimal b2;
- int d1 = StringUtils.isEmpty(v1) ? -1 : 1;
- int d2 = StringUtils.isEmpty(v2) ? -1 : 1;
- int diffValue = Integer.compare(d1, d2);
- if (diffValue == 0 && d1 != -1) {
- if (v1.matches(CmnConst.REGEXP_NUMBER) && v2.matches(CmnConst.REGEXP_NUMBER)) {
- b1 = new BigDecimal(v1);
- b2 = new BigDecimal(v2);
- diffValue = b1.compareTo(b2);
- } else {
- diffValue = v1.compareTo(v2);
- }
- }
- return diffValue;
- }
+ /**
+ * 姣旇緝v1锛寁2鐨勫ぇ灏忥紝鑻ユ槸涓烘暟瀛楋紝鍒欐寜鐓ф暟瀛楃殑鏂瑰紡杩涜姣旇緝
+ *
+ * @param v1
+ * @param v2
+ * @return
+ */
+ public int compare(String v1, String v2) {
+ BigDecimal b1;
+ BigDecimal b2;
+ int d1 = StringUtils.isEmpty(v1) ? -1 : 1;
+ int d2 = StringUtils.isEmpty(v2) ? -1 : 1;
+ int diffValue = Integer.compare(d1, d2);
+ if (diffValue == 0 && d1 != -1) {
+ if (v1.matches(CmnConst.REGEXP_NUMBER) && v2.matches(CmnConst.REGEXP_NUMBER)) {
+ b1 = new BigDecimal(v1);
+ b2 = new BigDecimal(v2);
+ diffValue = b1.compareTo(b2);
+ } else {
+ diffValue = v1.compareTo(v2);
+ }
+ }
+ return diffValue;
+ }
- /**
- * 鏍规嵁姝e垯杩斿洖绗﹀悎鏉′欢鐨勫唴瀹�
- *
- * @param str 瀛楃涓�
- * @param regexp 姝e垯琛ㄨ揪寮�
- * @param exceptKey 鎺掗櫎鍏抽敭瀛楋紙鍚湁璇ュ叧閿瓧鐨勫唴瀹逛笉鍋氬鐞嗭級
- * @return
- */
- public List<String> getSuitContent(String str, String regexp, String exceptKey) {
- List<String> list = Lists.newArrayList();
- if (StringUtils.isEmpty(str)) {
- return list;
- }
- Pattern pattern = Pattern.compile(regexp);
- Matcher matcher = pattern.matcher(str);
- String curContent;
- while (matcher.find()) {
- curContent = matcher.group();
- if (!StringUtils.isEmpty(exceptKey) && curContent.contains(exceptKey)) {
- continue;
- }
- list.add(curContent);
- }
- return list;
- }
+ /**
+ * 鏍规嵁姝e垯杩斿洖绗﹀悎鏉′欢鐨勫唴瀹�
+ *
+ * @param str 瀛楃涓�
+ * @param regexp 姝e垯琛ㄨ揪寮�
+ * @param exceptKey 鎺掗櫎鍏抽敭瀛楋紙鍚湁璇ュ叧閿瓧鐨勫唴瀹逛笉鍋氬鐞嗭級
+ * @return
+ */
+ public List<String> getSuitContent(String str, String regexp, String exceptKey) {
+ List<String> list = Lists.newArrayList();
+ if (StringUtils.isEmpty(str)) {
+ return list;
+ }
+ Pattern pattern = Pattern.compile(regexp);
+ Matcher matcher = pattern.matcher(str);
+ String curContent;
+ while (matcher.find()) {
+ curContent = matcher.group();
+ if (!StringUtils.isEmpty(exceptKey) && curContent.contains(exceptKey)) {
+ continue;
+ }
+ list.add(curContent);
+ }
+ return list;
+ }
- public List<String> getSuitContent(String str, String regexp) {
- return getSuitContent(str, regexp, "");
- }
+ public List<String> getSuitContent(String str, String regexp) {
+ return getSuitContent(str, regexp, "");
+ }
- /**
- * 鑾峰彇鎸囧畾涓暟鐨則d鍗犱綅
- *
- * @param num
- * @return
- */
- public String getAimNumTdPlaceholder(int num, int type) {
- StringBuilder result = new StringBuilder(64);
- if (num <= 0) {
- return result.toString();
- }
- if (type == 0) {
- for (int i = 0; i < num; i++) {
- result.append("<td></td>");
- }
- } else {
- result.append("<td colspan=\"").append(num).append("\"></td>");
- }
- return result.toString();
- }
+ /**
+ * 鑾峰彇鎸囧畾涓暟鐨則d鍗犱綅
+ *
+ * @param num
+ * @return
+ */
+ public String getAimNumTdPlaceholder(int num, int type) {
+ StringBuilder result = new StringBuilder(64);
+ if (num <= 0) {
+ return result.toString();
+ }
+ if (type == 0) {
+ for (int i = 0; i < num; i++) {
+ result.append("<td></td>");
+ }
+ } else {
+ result.append("<td colspan=\"").append(num).append("\"></td>");
+ }
+ return result.toString();
+ }
- /**
- * 瀛楁淇℃伅杞寲涓哄瓧娈靛悕绉�
- *
- * @param fieldInfo 瀛楁淇℃伅
- * @return
- */
- public String fieldInfo2FieldName(String fieldInfo) {
- if (StringUtils.isEmpty(fieldInfo)) {
- return "";
- }
- return fieldInfo.replace("{#", "").replace("#}", "");
- }
+ /**
+ * 瀛楁淇℃伅杞寲涓哄瓧娈靛悕绉�
+ *
+ * @param fieldInfo 瀛楁淇℃伅
+ * @return
+ */
+ public String fieldInfo2FieldName(String fieldInfo) {
+ if (StringUtils.isEmpty(fieldInfo)) {
+ return "";
+ }
+ return fieldInfo.replace("{#", "").replace("#}", "");
+ }
- /**
- * 瀛楁鍚嶇О杞寲涓哄瓧娈典俊鎭�
- *
- * @param fieldName 瀛楁鍚嶇О
- * @return
- */
- public String fieldName2FieldInfo(String fieldName) {
- return "{#" + fieldName + "#}";
- }
+ /**
+ * 瀛楁鍚嶇О杞寲涓哄瓧娈典俊鎭�
+ *
+ * @param fieldName 瀛楁鍚嶇О
+ * @return
+ */
+ public String fieldName2FieldInfo(String fieldName) {
+ return "{#" + fieldName + "#}";
+ }
- /**
- * 绫诲瀷杞寲涓簂ist
- *
- * @param o
- * @return
- */
- public List<String> transfer2List(Object o) {
- return o == null ? Lists.newArrayList() : (List<String>) o;
- }
+ /**
+ * 绫诲瀷杞寲涓簂ist
+ *
+ * @param o
+ * @return
+ */
+ public List<String> transfer2List(Object o) {
+ return o == null ? Lists.newArrayList() : (List<String>) o;
+ }
- /**
- * 娴呭厠闅�-JSONObect-鎸囧畾鍏冪礌
- *
- * @param aimObj 鐩爣
- * @param sourceObj 婧�
- * @param aimAttr 鐩爣灞炴��
- * @param type 绫诲瀷锛�1-鑾峰彇鐩爣灞炴�э紝鍏朵粬-鎺掗櫎鐩爣灞炴��
- * @return
- */
- public JSONObject extendJSONObject(JSONObject aimObj, JSONObject sourceObj, Collection<String> aimAttr, int type) {
- if (aimObj == null) {
- aimObj = new JSONObject();
- }
- if (aimAttr == null) {
- for (Map.Entry<String, Object> entry : sourceObj.entrySet()) {
- aimObj.put(entry.getKey(), entry.getValue());
- }
- } else {
- if (type == 1) {
- for (String singleAttr : aimAttr) {
- aimObj.put(singleAttr, sourceObj.get(singleAttr));
- }
- } else {
- for (Map.Entry<String, Object> entry : sourceObj.entrySet()) {
- if (aimAttr.contains(entry.getKey())) {
- continue;
- }
- aimObj.put(entry.getKey(), entry.getValue());
- }
- }
- }
- return aimObj;
- }
+ /**
+ * 娴呭厠闅�-JSONObect-鎸囧畾鍏冪礌
+ *
+ * @param aimObj 鐩爣
+ * @param sourceObj 婧�
+ * @param aimAttr 鐩爣灞炴��
+ * @param type 绫诲瀷锛�1-鑾峰彇鐩爣灞炴�э紝鍏朵粬-鎺掗櫎鐩爣灞炴��
+ * @return
+ */
+ public JSONObject extendJSONObject(JSONObject aimObj, JSONObject sourceObj, Collection<String> aimAttr, int type) {
+ if (aimObj == null) {
+ aimObj = new JSONObject();
+ }
+ if (aimAttr == null) {
+ for (Map.Entry<String, Object> entry : sourceObj.entrySet()) {
+ aimObj.put(entry.getKey(), entry.getValue());
+ }
+ } else {
+ if (type == 1) {
+ for (String singleAttr : aimAttr) {
+ aimObj.put(singleAttr, sourceObj.get(singleAttr));
+ }
+ } else {
+ for (Map.Entry<String, Object> entry : sourceObj.entrySet()) {
+ if (aimAttr.contains(entry.getKey())) {
+ continue;
+ }
+ aimObj.put(entry.getKey(), entry.getValue());
+ }
+ }
+ }
+ return aimObj;
+ }
- public JSONObject extendJSONObject(JSONObject aimObj, JSONObject sourceObj, Collection<String> aimAttr) {
- return extendJSONObject(aimObj, sourceObj, aimAttr, 1);
- }
+ public JSONObject extendJSONObject(JSONObject aimObj, JSONObject sourceObj, Collection<String> aimAttr) {
+ return extendJSONObject(aimObj, sourceObj, aimAttr, 1);
+ }
- /**
- * 妫�娴嬪瓧绗︿覆鏄惁鍖呭惈妫�娴嬪��
- *
- * @param str 寰呮娴嬬殑瀛楃涓�
- * @param checkValue 妫�娴嬪��
- * @param sign 鍒嗗壊鏍囪瘑
- * @return
- */
- public boolean checkContain(String str, String checkValue, String sign) {
- if (StringUtils.isEmpty(str) || StringUtils.isEmpty(checkValue)) {
- return false;
- }
- return (sign + str + sign).contains(sign + checkValue + sign);
- }
+ /**
+ * 妫�娴嬪瓧绗︿覆鏄惁鍖呭惈妫�娴嬪��
+ *
+ * @param str 寰呮娴嬬殑瀛楃涓�
+ * @param checkValue 妫�娴嬪��
+ * @param sign 鍒嗗壊鏍囪瘑
+ * @return
+ */
+ public boolean checkContain(String str, String checkValue, String sign) {
+ if (StringUtils.isEmpty(str) || StringUtils.isEmpty(checkValue)) {
+ return false;
+ }
+ return (sign + str + sign).contains(sign + checkValue + sign);
+ }
- public boolean checkContain(String str, String checkValue) {
- return checkContain(str, checkValue, ",");
- }
+ public boolean checkContain(String str, String checkValue) {
+ return checkContain(str, checkValue, ",");
+ }
- /**
- * 鎷兼帴
- *
- * @param obj
- * @param attr
- * @return
- */
- public String concat(JSONObject obj, String attr) {
- return new StringBuilder(512).append(obj).append("_").append(attr).toString();
- }
+ /**
+ * 鎷兼帴
+ *
+ * @param obj
+ * @param attr
+ * @return
+ */
+ public String concat(JSONObject obj, String attr) {
+ return new StringBuilder(512).append(obj).append("_").append(attr).toString();
+ }
- /**
- * 鑾峰彇鐪熷疄鍊硷紙鏁版嵁搴撲繚瀛樼殑鍊硷級锛屼富瑕佹槸閽堝浣跨敤浜嗗弬鐓х殑鍊�
- *
- * @param recordFse
- * @param fieldName
- * @return
- */
- public String getRealValue(FieldSetEntity recordFse, String fieldName) {
- String tail = "_save_value";
- return recordFse.getString(fieldName + tail);
- }
- /*==========================宸ュ叿鏂规硶-final==========================*/
+ /**
+ * 鑾峰彇鐪熷疄鍊硷紙鏁版嵁搴撲繚瀛樼殑鍊硷級锛屼富瑕佹槸閽堝浣跨敤浜嗗弬鐓х殑鍊�
+ *
+ * @param recordFse
+ * @param fieldName
+ * @return
+ */
+ public String getRealValue(FieldSetEntity recordFse, String fieldName) {
+ String tail = "_save_value";
+ return recordFse.getString(fieldName + tail);
+ }
+ /*==========================宸ュ叿鏂规硶-final==========================*/
- /*==========================闈欐�佸唴瀹�-start==========================*/
+ /*==========================闈欐�佸唴瀹�-start==========================*/
- /**
- * 鑾峰彇鎶ヨ〃css
- *
- * @return
- */
- public StringBuilder getCssHtml() {
- StringBuilder cssHtml = new StringBuilder(512);
- cssHtml.append("\n<style rel=\"stylesheet\" type=\"text/css\"> ");
- cssHtml.append("\n table { ");
- cssHtml.append("\n margin: 0 auto; ");
- cssHtml.append("\n } ");
- cssHtml.append("\n tr, td { ");
- cssHtml.append("\n text-align: center; ");
- cssHtml.append("\n } ");
- cssHtml.append("\n .data_title td, .data_common td, .data_statistics td { ");
- cssHtml.append("\n border: 1px black solid; ");
- cssHtml.append("\n } ");
- cssHtml.append("\n .report_title {background-color: #fde8e8} ");
- cssHtml.append("\n .head {background-color: #fbeed5} ");
- cssHtml.append("\n .data_title {background-color: #f0fbd5} ");
- cssHtml.append("\n .data_statistics {background-color: #d5f6fb} ");
- cssHtml.append("\n .data_common {background-color: #e8d5fb} ");
- cssHtml.append("\n .tail {background-color: #fad5fb} ");
- cssHtml.append("\n .can_turn {cursor: pointer;color: blue} ");
- cssHtml.append("\n</style> ");
- return cssHtml;
- }
+ /**
+ * 鑾峰彇鎶ヨ〃css
+ *
+ * @return
+ */
+ public StringBuilder getCssHtml() {
+ StringBuilder cssHtml = new StringBuilder(512);
+ cssHtml.append("\n<style rel=\"stylesheet\" type=\"text/css\"> ");
+ cssHtml.append("\n table { ");
+ cssHtml.append("\n margin: 0 auto; ");
+ cssHtml.append("\n } ");
+ cssHtml.append("\n tr, td { ");
+ cssHtml.append("\n text-align: center; ");
+ cssHtml.append("\n } ");
+ cssHtml.append("\n .data_title td, .data_common td, .data_statistics td { ");
+ cssHtml.append("\n border: 1px black solid; ");
+ cssHtml.append("\n } ");
+ cssHtml.append("\n .report_title {background-color: #fde8e8} ");
+ cssHtml.append("\n .head {background-color: #fbeed5} ");
+ cssHtml.append("\n .data_title {background-color: #f0fbd5} ");
+ cssHtml.append("\n .data_statistics {background-color: #d5f6fb} ");
+ cssHtml.append("\n .data_common {background-color: #e8d5fb} ");
+ cssHtml.append("\n .tail {background-color: #fad5fb} ");
+ cssHtml.append("\n .can_turn {cursor: pointer;color: blue} ");
+ cssHtml.append("\n</style> ");
+ return cssHtml;
+ }
- /**
- * 鏍规嵁缁熻绫诲瀷鍜屽�艰繑鍥炵粺璁″瓧娈垫弿杩�
- *
- * @param type 缁熻绫诲瀷
- * @param value 鍊�
- * @return
- */
- public String getStatisticsDesc(String type, String value) {
- if (CmnConst.ATTR_STATISTICS_SUM.equals(type)) {
- value += "(鍚堣)";
- }
- if (CmnConst.ATTR_STATISTICS_MAX.equals(type)) {
- value += "(宄板��)";
- }
- if (CmnConst.ATTR_STATISTICS_MIN.equals(type)) {
- value += "(璋峰��)";
- }
- if (CmnConst.ATTR_STATISTICS_CNT.equals(type)) {
- value += "(璁℃暟)";
- }
- if (CmnConst.ATTR_STATISTICS_AVG.equals(type)) {
- value += "(骞冲潎)";
- }
- if (CmnConst.ATTR_STATISTICS_ENUM.equals(type)) {
- value += "(鏋氫妇)";
- }
- return value;
- }
- /*==========================闈欐�佸唴瀹�-final==========================*/
+ /**
+ * 鏍规嵁缁熻绫诲瀷鍜屽�艰繑鍥炵粺璁″瓧娈垫弿杩�
+ *
+ * @param type 缁熻绫诲瀷
+ * @param value 鍊�
+ * @return
+ */
+ public String getStatisticsDesc(String type, String value) {
+ if (CmnConst.ATTR_STATISTICS_SUM.equals(type)) {
+ value += "(鍚堣)";
+ }
+ if (CmnConst.ATTR_STATISTICS_MAX.equals(type)) {
+ value += "(宄板��)";
+ }
+ if (CmnConst.ATTR_STATISTICS_MIN.equals(type)) {
+ value += "(璋峰��)";
+ }
+ if (CmnConst.ATTR_STATISTICS_CNT.equals(type)) {
+ value += "(璁℃暟)";
+ }
+ if (CmnConst.ATTR_STATISTICS_AVG.equals(type)) {
+ value += "(骞冲潎)";
+ }
+ if (CmnConst.ATTR_STATISTICS_ENUM.equals(type)) {
+ value += "(鏋氫妇)";
+ }
+ return value;
+ }
+ /*==========================闈欐�佸唴瀹�-final==========================*/
}
--
Gitblit v1.9.2