From 80a310f54039fabd20aecc2677fe6bbc191f4a5c Mon Sep 17 00:00:00 2001 From: 6c <420680616@qq.com> Date: 星期一, 11 八月 2025 14:40:37 +0800 Subject: [PATCH] 报表数据源解析,报表解析-添加{@@}内可以写bean方法 --- src/main/java/com/product/server/report/service/ReportDatasourceService.java | 49 ++++++++++++++++-------- src/main/java/com/product/server/report/controller/ReportDatasourceController.java | 22 +++++----- src/main/java/com/product/server/report/config/ReportCode.java | 1 src/main/java/com/product/server/report/service/DataListReportService.java | 20 ++++++++- 4 files changed, 61 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/product/server/report/config/ReportCode.java b/src/main/java/com/product/server/report/config/ReportCode.java index 68adb27..cd61c00 100644 --- a/src/main/java/com/product/server/report/config/ReportCode.java +++ b/src/main/java/com/product/server/report/config/ReportCode.java @@ -38,6 +38,7 @@ REPORT_DATASOURCE_SAVE_FAIL("鎶ヨ〃鏁版嵁婧愪繚瀛樺け璐�",ModuleEnum.REPORT.getValue()+"021"), REPORT_QUOTE_FAIL("寮曠敤鎶ヨ〃澶辫触",ModuleEnum.REPORT.getValue()+"022"), REPORT_ATTR_ALREADY_USED("鎶ヨ〃灞炴�у凡缁忚浣跨敤锛屾棤娉曡鍒犻櫎",ModuleEnum.REPORT.getValue()+"023"), + APPLY_SQL_FAIL("鎶ヨ〃鏁版嵁婧恠ql瑙f瀽澶辫触",ModuleEnum.REPORT.getValue()+"024"), GET_DATA_FIAL("鑾峰彇鏁版嵁澶辫触", ModuleEnum.REPORT.getValue() + "100"), GET_CACHE_FIAL("鑾峰彇缂撳瓨澶辫触", ModuleEnum.REPORT.getValue() + "101"), diff --git a/src/main/java/com/product/server/report/controller/ReportDatasourceController.java b/src/main/java/com/product/server/report/controller/ReportDatasourceController.java index e321469..f0d0fac 100644 --- a/src/main/java/com/product/server/report/controller/ReportDatasourceController.java +++ b/src/main/java/com/product/server/report/controller/ReportDatasourceController.java @@ -30,11 +30,11 @@ @RestController @RequestMapping("/api/report-datasource") public class ReportDatasourceController extends AbstractBaseController{ - + @Autowired ReportDatasourceService reportDatasourceService; - - + + /** * 鎶ヨ〃鏁版嵁婧愬垪琛� * @param response @@ -70,7 +70,7 @@ return this.error(ReportCode.REPORT_DATASOURCE_ERROR.getValue(), ReportCode.REPORT_DATASOURCE_ERROR.getText()+e.getMessage()); } } - + /** * 鎶ヨ〃鏁版嵁婧愯鎯� * @param response @@ -110,7 +110,7 @@ return this.error(ReportCode.REPORT_DATASOURCE_ERROR.getValue(), ReportCode.REPORT_DATASOURCE_ERROR.getText()+e.getMessage()); } } - + /** * 鏁版嵁婧�-淇濆瓨 * @param response @@ -182,7 +182,7 @@ return this.error(ReportCode.REPORT_DATASOURCE_COPY_FAIL.getValue(), ReportCode.REPORT_DATASOURCE_COPY_FAIL.getText() + e.getMessage()); } } - + /** * 鎶ヨ〃鏁版嵁婧愬垹闄� * @param response @@ -227,7 +227,7 @@ return this.error(ReportCode.REPORT_DATASOURCE_ERROR.getValue(), ReportCode.REPORT_DATASOURCE_ERROR.getText()+e.getMessage()); } } - + /** * 鎶ヨ〃sql瑙f瀽涓庨獙璇� * @param response @@ -260,10 +260,10 @@ return this.error(e); } catch (Exception e) { e.printStackTrace(); - return this.error("", ReportCode.REPORT_DATASOURCE_ERROR.getText()+e.getMessage()); + return this.error(ReportCode.REPORT_DATASOURCE_ERROR.getValue(), ReportCode.REPORT_DATASOURCE_ERROR.getText()+e.getMessage()); } } - + /** * 鑾峰彇绯荤粺鍙傛暟 * @param response @@ -323,7 +323,7 @@ return this.error("", e.getMessage()); } } - + /** * 鎶ヨ〃鏁版嵁婧愯鎯� * @param response @@ -363,7 +363,7 @@ return this.error(ReportCode.REPORT_DATASOURCE_ERROR.getValue(), ReportCode.REPORT_DATASOURCE_ERROR.getText()+e.getMessage()); } } - + /** * 鎶ヨ〃鏁版嵁婧愯鎯� * @param response 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 adc1c2b..2ddefa8 100644 --- a/src/main/java/com/product/server/report/service/DataListReportService.java +++ b/src/main/java/com/product/server/report/service/DataListReportService.java @@ -19,6 +19,7 @@ import com.product.core.service.support.AbstractBaseService; import com.product.core.service.support.QueryFilterService; import com.product.core.spring.context.SpringMVCContextHolder; +import com.product.core.util.ReflectUtil; import com.product.module.data.service.SystemDataExportService; import com.product.server.report.config.CmnConst; import com.product.server.report.config.ReportCode; @@ -992,11 +993,24 @@ Object result; String value; try { - result = BaseUtil.executeExpression(executeContent); + String reg = "\\w+\\.\\w+\\((\\w+)?((,\\w+)*)?\\)"; + if (executeContent.matches(reg)) { + int split1 = executeContent.indexOf("."); + int split2 = executeContent.indexOf("("); + String beanName = executeContent.substring(0, split1); + String methodName = executeContent.substring(split1 + 1, split2); + String paramStr = executeContent.substring(split2 + 1, executeContent.length() - 1); + if (StringUtils.isEmpty(paramStr)) { + result = ReflectUtil.invoke(beanName, methodName, new Object[]{}); + } else { + result = ReflectUtil.invoke(beanName, methodName, Arrays.asList(paramStr.split(",")).toArray()); + } + } else { + result = BaseUtil.executeExpression(executeContent); + } value = result.toString(); } catch (Exception e) { - SpringMVCContextHolder.getSystemLogger().error(e); - value = ""; + throw new BaseException(ReportCode.APPLY_SQL_FAIL.getValue(), ReportCode.APPLY_SQL_FAIL.getText() + e.getMessage()); } sqlText = sqlText.replace(suitContent, value); } diff --git a/src/main/java/com/product/server/report/service/ReportDatasourceService.java b/src/main/java/com/product/server/report/service/ReportDatasourceService.java index 3c0490e..492251d 100644 --- a/src/main/java/com/product/server/report/service/ReportDatasourceService.java +++ b/src/main/java/com/product/server/report/service/ReportDatasourceService.java @@ -1,21 +1,8 @@ package com.product.server.report.service; -import java.sql.*; -import java.util.*; -import java.util.Date; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import com.product.core.service.support.QueryFilterService; -import com.product.server.report.util.QuerySqlParseUtil; -import com.product.util.BaseUtil; -import com.product.util.CallBack; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - import com.product.common.lang.StringUtils; import com.product.core.cache.DataPoolCacheImpl; import com.product.core.connection.ConnectionManager; @@ -25,11 +12,25 @@ import com.product.core.entity.FieldSetEntity; import com.product.core.exception.BaseException; import com.product.core.service.support.AbstractBaseService; +import com.product.core.service.support.QueryFilterService; import com.product.core.spring.context.SpringMVCContextHolder; import com.product.core.transfer.Transactional; +import com.product.core.util.ReflectUtil; import com.product.server.report.config.CmnConst; +import com.product.server.report.config.ReportCode; import com.product.server.report.service.idel.IReportDatasourceService; +import com.product.server.report.util.QuerySqlParseUtil; +import com.product.util.BaseUtil; +import com.product.util.CallBack; import com.product.util.SystemParamReplace; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.sql.*; +import java.util.Date; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; @Component public class ReportDatasourceService extends AbstractBaseService implements IReportDatasourceService { @@ -255,13 +256,27 @@ String executeContent; String resultValue; for (String ternaryOperator : ternaryOperatorSuitList) { - executeContent = ternaryOperator.substring(2, ternaryOperator.length() - 2); + executeContent = ternaryOperator.substring(2, ternaryOperator.length() - 2).trim(); try { - resultValue = BaseUtil.executeExpression(executeContent).toString(); + String reg = "\\w+\\.\\w+\\((\\w+)?((,\\w+)*)?\\)"; + if (executeContent.matches(reg)) { + // bean璋冪敤鏂规硶澶勭悊 + int split1 = executeContent.indexOf("."); + int split2 = executeContent.indexOf("("); + String beanName = executeContent.substring(0, split1); + String methodName = executeContent.substring(split1 + 1, split2); + String paramStr = executeContent.substring(split2 + 1, executeContent.length() - 1); + if (StringUtils.isEmpty(paramStr)) { + resultValue = ReflectUtil.invoke(beanName, methodName, new Object[]{}).toString(); + } else { + resultValue = ReflectUtil.invoke(beanName, methodName, Arrays.asList(paramStr.split(",")).toArray()).toString(); + } + } else { + resultValue = BaseUtil.executeExpression(executeContent).toString(); + } sql = sql.replace(ternaryOperator, resultValue); } catch (Exception e) { - SpringMVCContextHolder.getSystemLogger().error(e); - sql = sql.replace(ternaryOperator, ""); + throw new BaseException(ReportCode.APPLY_SQL_FAIL.getValue(), ReportCode.APPLY_SQL_FAIL.getText() + e.getMessage()); } } sql = sql.replaceAll("\\[\\[((?!\\[).)+\\]\\]", "") -- Gitblit v1.9.2