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/DataListReportService.java |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 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 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);
 		}

--
Gitblit v1.9.2