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