From 0d63f52d84e393204af3ba5bce86bdfddf936be8 Mon Sep 17 00:00:00 2001 From: 1821349743@qq.com <1821349743@qq.com> Date: 星期六, 08 四月 2023 16:39:25 +0800 Subject: [PATCH] 修改报表加载返回html更改为数据 --- src/main/java/com/product/server/report/service/DataListReportService.java | 268 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 268 insertions(+), 0 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 f1ce643..ef59fc0 100644 --- a/src/main/java/com/product/server/report/service/DataListReportService.java +++ b/src/main/java/com/product/server/report/service/DataListReportService.java @@ -20,6 +20,8 @@ import com.product.core.spring.context.SpringMVCContextHolder; 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.util.BaseUtil; import com.product.util.SystemParamReplace; import org.springframework.beans.factory.annotation.Autowired; @@ -249,6 +251,180 @@ for (Map.Entry<Integer, List<JSONObject>> entry : reportConfigMap.entrySet()) { RedisUtil.setHash(reportConfigUUID, String.valueOf(entry.getKey()), entry.getValue()); } + } + + /** + * 鑾峰彇鎶ヨ〃 + * + * @return + */ + public ReportEntity getReportEntity(FieldSetEntity fse) { + ReportEntity report = null; + String reportConfigUUID = fse.getUUID(); + if (!StringUtils.isEmpty(fse.getString("~report_config_uuid~"))) { + 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(); + // 棣栨鍔犺浇锛岄粯璁ゆ坊鍔犳潯浠� + Map<String, Map<String, String>> outerMap = Maps.newHashMap(); + if (fse.getBoolean(CmnConst.FIRST_LOAD)) { + DataTableEntity allFilterDte = getDefaultSearchFilter(reportSourceFse.getUUID()); + Map<String, DataTableEntity> subMap = Maps.newHashMap(); + if (!DataTableEntity.isEmpty(allFilterDte)) { + subMap.put("systemFieldMeta", allFilterDte); + } + DataTableEntity defaultFilterDte = new DataTableEntity(); + + FieldSetEntity tempFse; + + 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)) { + report = commonReportService.getReportEntity(recordDte, totalName, reportConfigMap); + //TODO + report.setFilterInfo(outerMap); + } else if (CmnConst.REPORT_TYPE_GROUP.equals(reportType)) { + // 鐗规畩澶勭悊棰濆鏌ヨ鍐呭 + recordDte.addFieldSetEntity(getRecordDte(sort, curPage, reportSourceFse, fse, reportConfigFse, reportConfigMap)); +// resultObj.putAll(groupReportService.getReport(recordDte, totalName, reportConfigMap, tableStyle)); + } + //TODO + +// report.setFilterInfo(outerMap); + if (CmnConst.FALSE.equals(resultObj.getString(CmnConst.RETURN_ATTR_RESULT))) { + resultObj.put(CmnConst.RETURN_ATTR_RESULT, true); + resultObj.put(CmnConst.RETURN_ATTR_MESSAGE, "鑾峰彇鎶ヨ〃澶辫触锛�"); + } else { + // 鍒嗛〉鍙傛暟 + SQLEntity sqlEntity = recordDte.getSqle(); + if ("1".equals(reportConfigFse.getString(CmnConst.IS_PAGE)) && sqlEntity != null) { + report.setPage(true); + report.setTotalPage(sqlEntity.getTotalpage()); + report.setPageSize(StringUtils.isEmpty(reportConfigFse.getString(CmnConst.PAGE_SIZE)) ? 0 : reportConfigFse.getInteger(CmnConst.PAGE_SIZE)); + report.setPageIndex(curPage); +// resultObj.put(CmnConst.IS_PAGE, 1); +// resultObj.put(CmnConst.CPAGE, curPage); +// resultObj.put("totalCount", sqlEntity.getTotalCount()); +// resultObj.put("totalpage", sqlEntity.getTotalpage()); +// resultObj.put("pagesize", StringUtils.isEmpty(reportConfigFse.getString(CmnConst.PAGE_SIZE)) ? 0 : reportConfigFse.getInteger(CmnConst.PAGE_SIZE)); + } + } +// if (!DataTableEntity.isEmpty(recordDte)) { +// resultObj.put("current_page_count", recordDte.getRows()); +// } + report.setSystemFieldMeta(getSearchInfo(reportSourceFse.getUUID())); + report.setReportType(reportConfigFse.getString("type_uuid")); +// resultObj.put("systemFieldMeta", ); + resultObj.put("report_type", reportConfigFse.getString("type_uuid")); +// System.out.println(resultObj.getString("html")); + + return report; } /** @@ -1017,6 +1193,74 @@ } /** + * 鎶ヨ〃-瑙f瀽-鑾峰彇澶撮儴鎴栬�呭熬閮ㄦ爣棰楬tml + * + * @param list 鎶ヨ〃閰嶇疆淇℃伅锛岀紦瀛榣ist + * @param totalColCount 鎬诲垪鏁� + * @param headAndTailTitleDataMap 澶撮儴銆佸熬閮ㄦ爣棰樺尯鏁版嵁瀛楁map + * @param locationType 浣嶇疆绫诲瀷锛宧ead-澶撮儴锛宼ail-灏鹃儴 + * @return + */ + public List<List<ReportColumn>> getTitle(List<JSONObject> list, int totalColCount, Map<String, Set<String>> headAndTailTitleDataMap, String locationType) { + List<List<ReportColumn>> row = new ArrayList<>(); + StringBuilder html = new StringBuilder(1024); + int colspan; + int preRow = 0; + int preCol = 0; + int curRow; + int curCol; + String value; + String style; + + List<ReportColumn> reportColumns = new ArrayList<>(); + for (JSONObject singleObj : list) { + curRow = singleObj.getIntValue(CmnConst.ATTR_Y); + curCol = singleObj.getIntValue(CmnConst.ATTR_X); + colspan = singleObj.getIntValue(CmnConst.ATTR_COLSPAN); + colspan = colspan < 0 ? totalColCount : Math.max(1, colspan); + value = replaceFormDataAndSysData(singleObj.getString(CmnConst.ATTR_SHOW_NAME), headAndTailTitleDataMap, singleObj); + value = value == null ? "" : value; + if ("1".equals(singleObj.getString(CmnConst.ATTR_IS_TITLE))) { + style = " class=\"" + CmnConst.CLASS_TR_REPORT_TITLE + "\""; + } else { + if ("head".equals(locationType)) { + style = " class=\"" + CmnConst.CLASS_TR_HEAD + "\""; + } else { + style = " class=\"" + CmnConst.CLASS_TR_TAIL + "\""; + } + } + if (preRow < curRow) { + if (preRow != 0) { + row.add(getAimNumTdPlaceholderColumn(totalColCount - preCol, 1)); + } + if (preRow == 0 && preCol == 0 && preCol < curCol - 1) { + row.add(getAimNumTdPlaceholderColumn(curCol - preCol - 1, 1)); + } + preCol = curCol; + } + if (preCol < curCol - 1) { + row.add(getAimNumTdPlaceholderColumn(curCol - preCol - 1, 1)); + } + if ("1".equals(singleObj.getString(CmnConst.ATTR_IS_TITLE))) { + colspan = totalColCount; + } + ReportColumn column = new ReportColumn(); + column.setColspan(colspan); + column.setContent(value); + reportColumns.add(column); + preRow = curRow; + preCol = curCol + singleObj.getIntValue(CmnConst.ATTR_COLSPAN) - 1; + if ("1".equals(singleObj.getString(CmnConst.ATTR_IS_TITLE))) { + preCol = totalColCount; + } + } + row.add(reportColumns); + reportColumns.addAll(getAimNumTdPlaceholderColumn(totalColCount - preCol, 1)); +// row.add(); + return row; + } + + /** * 鑾峰彇鎸囧畾鏁版嵁闆嗕腑鍖呭惈鐨勬暟鎹尯瀛楁闆嗗悎 * * @param list 鎸囧畾鏁版嵁闆嗗悎 @@ -1500,6 +1744,30 @@ * @param num * @return */ + public List<ReportColumn> getAimNumTdPlaceholderColumn(int num, int type) { + List<ReportColumn> columns = new ArrayList<>(); + if (num <= 0) { + return columns; + } + if (type == 0) { + for (int i = 0; i < num; i++) { + columns.add(new ReportColumn()); + } + } else { + + ReportColumn column = new ReportColumn(); + column.setColspan(num); + columns.add(column); + } + return columns; + } + + /** + * 鑾峰彇鎸囧畾涓暟鐨則d鍗犱綅 + * + * @param num + * @return + */ public String getAimNumTdPlaceholder(int num, int type) { StringBuilder result = new StringBuilder(64); if (num <= 0) { -- Gitblit v1.9.2