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("报表数据源sql解析失败",ModuleEnum.REPORT.getValue()+"024"), GET_DATA_FIAL("获取数据失败", ModuleEnum.REPORT.getValue() + "100"), GET_CACHE_FIAL("获取缓存失败", ModuleEnum.REPORT.getValue() + "101"), 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解析与验证 * @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 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); } 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("\\[\\[((?!\\[).)+\\]\\]", "")