6c
5 天以前 80a310f54039fabd20aecc2677fe6bbc191f4a5c
报表数据源解析,报表解析-添加{@@}内可以写bean方法
已修改4个文件
92 ■■■■■ 文件已修改
src/main/java/com/product/server/report/config/ReportCode.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/server/report/controller/ReportDatasourceController.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/server/report/service/DataListReportService.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/server/report/service/ReportDatasourceService.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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("\\[\\[((?!\\[).)+\\]\\]", "")