瀏覽代碼

Merge remote-tracking branch 'origin/master'

Administrator 3 年之前
父節點
當前提交
533872f103

+ 5 - 0
boman-api/boman-api-gen/pom.xml

@@ -28,6 +28,11 @@
             <artifactId>boman-domain</artifactId>
             <version>2.5.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>com.boman</groupId>
+            <artifactId>boman-common-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         <!--        <dependency>-->
         <!--            <groupId>com.boman</groupId>-->
         <!--            <artifactId>boman-modules-gen</artifactId>-->

+ 3 - 1
boman-common/boman-common-core/src/main/java/com/boman/common/core/utils/file/MimeTypeUtils.java

@@ -36,7 +36,9 @@ public class MimeTypeUtils
             // 视频格式
             "mp4", "avi", "rmvb",
             // pdf
-            "pdf" };
+            "pdf",
+            // ofd
+            "ofd"};
 
     public static String getExtension(String prefix)
     {

+ 23 - 0
boman-report/src/main/java/com/boman/report/controller/TableController.java

@@ -0,0 +1,23 @@
+package com.boman.report.controller;
+
+import com.boman.common.core.web.controller.BaseController;
+import com.boman.domain.GenTable;
+import com.boman.report.service.ITableService;
+import org.jeecg.modules.jmreport.common.vo.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/jmreport/table")
+public class TableController extends BaseController {
+
+    @Autowired
+    private ITableService tableService;
+
+    @PostMapping("/list")
+    public Result<List<GenTable>> genList(@RequestBody GenTable genTable) {
+        return Result.OK(tableService.selectList(genTable));
+    }
+}

+ 65 - 0
boman-report/src/main/java/com/boman/report/mapper/TableMapper.java

@@ -0,0 +1,65 @@
+package com.boman.report.mapper;
+
+import com.boman.domain.GenTable;
+import io.swagger.models.auth.In;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.SelectProvider;
+
+import java.util.List;
+import java.util.Map;
+
+public interface TableMapper {
+
+    /**
+     * 查询表数据
+     * @return 业务集合
+     */
+    @SelectProvider(type = SqlProvider.class, method = "selectList")
+    public List<GenTable> selectList(@Param("tableName") String tableName,
+                                     @Param("tableComment") String tableComment);
+
+    @SelectProvider(type = SqlProvider.class, method = "selectCount")
+    public Integer selectCount(@Param("tableName") String tableName,
+                               @Param("tableComment") String tableComment);
+
+    class SqlProvider {
+
+        public String selectCount(Map<String, Object> params) {
+            String tableName = (String) params.get("tableName");
+            String tableComment = (String) params.get("tableComment");
+
+            StringBuilder sql = new StringBuilder();
+            sql.append("select count(1) from gen_table ").append(" where 1 = 1 ");
+            if(StringUtils.isNotEmpty(tableName)) {
+                sql.append("AND lower(table_name) like lower(concat('%',").append(tableName).append(", '%'))");
+            }
+            if(StringUtils.isNotEmpty(tableComment)) {
+                sql.append("AND lower(table_comment) like lower(concat('%',").append(tableComment).append(", '%'))");
+            }
+            return sql.toString();
+        }
+
+        public String selectList(Map<String, Object> params) {
+            String tableName = (String) params.get("tableName");
+            String tableComment = (String) params.get("tableComment");
+
+            StringBuilder sql = new StringBuilder();
+            sql.append("select id, table_name as tableName, table_comment as tableComment, sub_table_name as subTableName, sub_table_fk_name  as subTableFkName, ")
+                    .append("class_name as className, tpl_category as tplCategory, package_name as packageName, module_name as moduleName, business_name as businessName,  ")
+                    .append("function_name, function_author, gen_type, gen_path, options, ")
+                    .append(" create_by, create_time, update_by, update_time, remark, is_menu,  ")
+                    .append("menu_role, ak_column, dk_column, trigger_create, trigger_retrieve, ")
+                    .append("trigger_update, trigger_delete, trigger_submit, real_table_name,  ")
+                    .append("filter_conditions, extended_attributes, table_primary_key, table_column as tableColumn")
+                    .append(" from gen_table ").append(" where 1 = 1 ");
+            if(StringUtils.isNotEmpty(tableName)) {
+               sql.append("AND lower(table_name) like lower(concat('%',").append(tableName).append(", '%'))");
+            }
+            if(StringUtils.isNotEmpty(tableComment)) {
+                sql.append("AND lower(table_comment) like lower(concat('%',").append(tableComment).append(", '%'))");
+            }
+            return sql.toString();
+        }
+    }
+}

+ 20 - 0
boman-report/src/main/java/com/boman/report/service/ITableService.java

@@ -0,0 +1,20 @@
+package com.boman.report.service;
+
+import com.boman.common.core.web.page.TableDataInfo;
+import com.boman.domain.GenTable;
+
+import java.util.List;
+
+public interface ITableService {
+
+    public Integer selectCount(GenTable genTable);
+
+
+    /**
+     * 查询业务列表
+     *
+     * @param genTable 业务信息
+     * @return 业务集合
+     */
+    public List<GenTable> selectList(GenTable genTable);
+}

+ 42 - 0
boman-report/src/main/java/com/boman/report/service/impl/TableServiceImpl.java

@@ -0,0 +1,42 @@
+package com.boman.report.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.boman.common.core.web.page.TableDataInfo;
+import com.boman.domain.GenTable;
+import com.boman.domain.dto.AjaxResult;
+import com.boman.gen.api.RemoteGenTableService;
+import com.boman.report.mapper.TableMapper;
+import com.boman.report.service.ITableService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class TableServiceImpl implements ITableService {
+
+    @Autowired
+    private TableMapper mapper;
+
+    /**
+     * 查询业务列表
+     *
+     * @param genTable 业务信息
+     * @return 业务集合
+     */
+    @Override
+    public Integer selectCount(GenTable genTable) {
+        return mapper.selectCount(genTable.getTableName(), genTable.getTableComment());
+    }
+
+    /**
+     * 查询业务列表
+     *
+     * @param genTable 业务信息
+     * @return 业务集合
+     */
+    @Override
+    public List<GenTable> selectList(GenTable genTable) {
+        return mapper.selectList(genTable.getTableName(), genTable.getTableComment());
+    }
+}

+ 258 - 0
boman-report/src/main/java/org/jeecg/modules/jmreport/common/vo/Result.java

@@ -0,0 +1,258 @@
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+package org.jeecg.modules.jmreport.common.vo;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.io.Serializable;
+import org.jeecg.modules.jmreport.common.constant.CommonConstant;
+
+public class Result<T> implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private boolean success = true;
+    private String message = "";
+    private Integer code = 0;
+    private T result;
+    private long timestamp = System.currentTimeMillis();
+    @JsonIgnore
+    private String onlTable;
+
+    public Result() {
+    }
+
+    public Result<T> success(String message) {
+        this.message = message;
+        this.code = CommonConstant.SC_OK_200;
+        this.success = true;
+        return this;
+    }
+
+    /** @deprecated */
+    @Deprecated
+    public static Result<Object> ok() {
+        Result var0 = new Result();
+        var0.setSuccess(true);
+        var0.setCode(CommonConstant.SC_OK_200);
+        var0.setMessage("成功");
+        return var0;
+    }
+
+    /** @deprecated */
+    @Deprecated
+    public static Result<Object> ok(String msg) {
+        Result var1 = new Result();
+        var1.setSuccess(true);
+        var1.setCode(CommonConstant.SC_OK_200);
+        var1.setMessage(msg);
+        return var1;
+    }
+
+    /** @deprecated */
+    @Deprecated
+    public static Result<Object> ok(Object data) {
+        Result var1 = new Result();
+        var1.setSuccess(true);
+        var1.setCode(CommonConstant.SC_OK_200);
+        var1.setResult(data);
+        return var1;
+    }
+
+    public static <T> Result<T> OK() {
+        Result var0 = new Result();
+        var0.setSuccess(true);
+        var0.setCode(CommonConstant.SC_OK_200);
+        return var0;
+    }
+
+    public static <T> Result<T> OK(T data) {
+        Result var1 = new Result();
+        var1.setSuccess(true);
+        var1.setCode(CommonConstant.SC_OK_200);
+        var1.setResult(data);
+        return var1;
+    }
+
+    public static <T> Result<T> OK(String msg, T data) {
+        Result var2 = new Result();
+        var2.setSuccess(true);
+        var2.setCode(CommonConstant.SC_OK_200);
+        var2.setMessage(msg);
+        var2.setResult(data);
+        return var2;
+    }
+
+    public static <T> Result<T> FAIL(String msg, T data) {
+        Result var2 = new Result();
+        var2.setSuccess(false);
+        var2.setCode(CommonConstant.SC_OK_200);
+        var2.setMessage(msg);
+        var2.setResult(data);
+        return var2;
+    }
+
+    public static Result<Object> error(String msg) {
+        return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg);
+    }
+
+    public static Result<Object> error(int code, String msg) {
+        Result var2 = new Result();
+        var2.setCode(code);
+        var2.setMessage(msg);
+        var2.setSuccess(false);
+        return var2;
+    }
+
+    public Result<T> error500(String message) {
+        this.message = message;
+        this.code = CommonConstant.SC_INTERNAL_SERVER_ERROR_500;
+        this.success = false;
+        return this;
+    }
+
+    public static Result<Object> noauth(String msg) {
+        return error(CommonConstant.SC_JEECG_NO_AUTHZ, msg);
+    }
+
+    public boolean isSuccess() {
+        return this.success;
+    }
+
+    public String getMessage() {
+        return this.message;
+    }
+
+    public Integer getCode() {
+        return this.code;
+    }
+
+    public T getResult() {
+        return this.result;
+    }
+
+    public long getTimestamp() {
+        return this.timestamp;
+    }
+
+    public String getOnlTable() {
+        return this.onlTable;
+    }
+
+    public void setSuccess(boolean success) {
+        this.success = success;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public void setResult(T result) {
+        this.result = result;
+    }
+
+    public void setTimestamp(long timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    @JsonIgnore
+    public void setOnlTable(String onlTable) {
+        this.onlTable = onlTable;
+    }
+
+    public boolean equals(Object o) {
+        if (o == this) {
+            return true;
+        } else if (!(o instanceof Result)) {
+            return false;
+        } else {
+            Result var2 = (Result)o;
+            if (!var2.canEqual(this)) {
+                return false;
+            } else if (this.isSuccess() != var2.isSuccess()) {
+                return false;
+            } else if (this.getTimestamp() != var2.getTimestamp()) {
+                return false;
+            } else {
+                label64: {
+                    Integer var3 = this.getCode();
+                    Integer var4 = var2.getCode();
+                    if (var3 == null) {
+                        if (var4 == null) {
+                            break label64;
+                        }
+                    } else if (var3.equals(var4)) {
+                        break label64;
+                    }
+
+                    return false;
+                }
+
+                label57: {
+                    String var5 = this.getMessage();
+                    String var6 = var2.getMessage();
+                    if (var5 == null) {
+                        if (var6 == null) {
+                            break label57;
+                        }
+                    } else if (var5.equals(var6)) {
+                        break label57;
+                    }
+
+                    return false;
+                }
+
+                Object var7 = this.getResult();
+                Object var8 = var2.getResult();
+                if (var7 == null) {
+                    if (var8 != null) {
+                        return false;
+                    }
+                } else if (!var7.equals(var8)) {
+                    return false;
+                }
+
+                String var9 = this.getOnlTable();
+                String var10 = var2.getOnlTable();
+                if (var9 == null) {
+                    if (var10 != null) {
+                        return false;
+                    }
+                } else if (!var9.equals(var10)) {
+                    return false;
+                }
+
+                return true;
+            }
+        }
+    }
+
+    protected boolean canEqual(Object other) {
+        return other instanceof Result;
+    }
+
+    public int hashCode() {
+        boolean var1 = true;
+        byte var2 = 1;
+        int var9 = var2 * 59 + (this.isSuccess() ? 79 : 97);
+        long var3 = this.getTimestamp();
+        var9 = var9 * 59 + (int)(var3 >>> 32 ^ var3);
+        Integer var5 = this.getCode();
+        var9 = var9 * 59 + (var5 == null ? 43 : var5.hashCode());
+        String var6 = this.getMessage();
+        var9 = var9 * 59 + (var6 == null ? 43 : var6.hashCode());
+        Object var7 = this.getResult();
+        var9 = var9 * 59 + (var7 == null ? 43 : var7.hashCode());
+        String var8 = this.getOnlTable();
+        var9 = var9 * 59 + (var8 == null ? 43 : var8.hashCode());
+        return var9;
+    }
+
+    public String toString() {
+        return "Result(success=" + this.isSuccess() + ", message=" + this.getMessage() + ", code=" + this.getCode() + ", result=" + this.getResult() + ", timestamp=" + this.getTimestamp() + ", onlTable=" + this.getOnlTable() + ")";
+    }
+}

+ 2 - 4
boman-report/src/main/java/org/jeecg/modules/jmreport/desreport/a/b.java

@@ -174,10 +174,7 @@ public class b {
     }
 
     @PostMapping({"/back"})
-    @CacheEvict(
-            value = {"jmreport:cache:dict", "jmreport:cache:dictTxt"},
-            allEntries = true
-    )
+    @CacheEvict(value = {"jmreport:cache:dict", "jmreport:cache:dictTxt"},allEntries = true)
     public Result<?> b(@RequestBody JimuReportDict var1) {
         try {
             this.dictService.updateDictDelFlag(CommonConstant.DEL_FLAG_0, var1.getId());
@@ -187,4 +184,5 @@ public class b {
             return Result.error("操作失败!");
         }
     }
+
 }

+ 8 - 0
boman-report/src/main/java/org/jeecg/modules/jmreport/desreport/a/service/ReportDbServiceImpl.java

@@ -0,0 +1,8 @@
+package org.jeecg.modules.jmreport.desreport.a.service;
+
+import org.jeecg.modules.jmreport.desreport.service.a.i;
+import org.springframework.stereotype.Service;
+
+@Service("reportDbService")
+public class ReportDbServiceImpl extends i {
+}

+ 8 - 0
boman-report/src/main/java/org/jeecg/modules/jmreport/desreport/a/service/a/ReportDbServiceImpl.java

@@ -0,0 +1,8 @@
+package org.jeecg.modules.jmreport.desreport.a.service.a;
+
+import org.jeecg.modules.jmreport.desreport.service.a.i;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ReportDbServiceImpl extends i {
+}

+ 787 - 0
boman-report/src/main/java/org/jeecg/modules/jmreport/desreport/a/service/a/i.java

@@ -0,0 +1,787 @@
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+package org.jeecg.modules.jmreport.desreport.a.service.a;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.parser.Feature;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+
+import java.sql.SQLSyntaxErrorException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.modules.jmreport.common.expetion.JimuReportException;
+import org.jeecg.modules.jmreport.common.util.ApiAssert;
+import org.jeecg.modules.jmreport.common.util.CommonUtils;
+import org.jeecg.modules.jmreport.common.util.DesUtils;
+import org.jeecg.modules.jmreport.common.util.JimuSpringContextUtils;
+import org.jeecg.modules.jmreport.common.util.oConvertUtils;
+import org.jeecg.modules.jmreport.common.vo.Result;
+import org.jeecg.modules.jmreport.config.client.JmReportTokenClient;
+import org.jeecg.modules.jmreport.desreport.dao.JimuReportDbDao;
+import org.jeecg.modules.jmreport.desreport.dao.JimuReportDbParamDao;
+import org.jeecg.modules.jmreport.desreport.entity.JmReportDataSource;
+import org.jeecg.modules.jmreport.desreport.entity.JmReportDb;
+import org.jeecg.modules.jmreport.desreport.entity.JmReportDbField;
+import org.jeecg.modules.jmreport.desreport.entity.JmReportDbParam;
+import org.jeecg.modules.jmreport.desreport.render.handler.convert.ApiDataConvertAdapter;
+import org.jeecg.modules.jmreport.desreport.render.utils.RegexMatches;
+import org.jeecg.modules.jmreport.desreport.service.IJimuReportService;
+import org.jeecg.modules.jmreport.desreport.service.IJmReportDbFieldService;
+import org.jeecg.modules.jmreport.desreport.service.IJmReportDbParamService;
+import org.jeecg.modules.jmreport.desreport.service.IJmReportDbService;
+import org.jeecg.modules.jmreport.desreport.service.IJmReportDbSourceService;
+import org.jeecg.modules.jmreport.desreport.util.d;
+import org.jeecg.modules.jmreport.desreport.util.j;
+import org.jeecg.modules.jmreport.dyndb.JmreportDataSourceCachePool;
+import org.jeecg.modules.jmreport.dyndb.JmreportDynamicDbUtil;
+import org.jeecg.modules.jmreport.dyndb.util.JmreportSqlUtils;
+import org.jeecg.modules.jmreport.dyndb.vo.JmreportDynamicDataSourceVo;
+import org.jeecgframework.minidao.pojo.MiniDaoPage;
+import org.jeecgframework.minidao.util.MiniDaoUtil;
+import org.jeecgframework.minidao.util.SnowflakeIdWorker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.jdbc.UncategorizedSQLException;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.ResourceAccessException;
+
+@Service("jmReportDbServiceImpl")
+public class i implements IJmReportDbService {
+    private static final Logger a = LoggerFactory.getLogger(i.class);
+    @Autowired
+    private IJmReportDbParamService jmReportParamService;
+    @Autowired
+    private IJmReportDbFieldService reportDbFieldService;
+    @Autowired
+    private IJmReportDbSourceService jmReportDbSourceService;
+    @Autowired
+    private JmreportDynamicDbUtil jmreportDynamicDbUtil;
+    @Autowired
+    private JmReportTokenClient jimuTokenClient;
+    @Autowired
+    private JimuReportDbDao reportDbDao;
+    @Autowired
+    private JimuReportDbParamDao dbParamDao;
+    @Autowired
+    private IJimuReportService jimuReportService;
+    @Autowired(required = false)
+    private ApiDataConvertAdapter apiDataConverAdapter;
+    @Value("${jeecg.jmreport.apiBasePath:}")
+    private String apiBasePath;
+
+    public i() {
+    }
+
+    @Override
+    @Transactional
+    public JmReportDb saveDb(JmReportDb reportDb) {
+        if ("1".equals(reportDb.getIsPage())) {
+            List<JmReportDb> var2 = this.reportDbDao.selectList(reportDb.getJimuReportId());
+            var2.forEach((var1) -> {
+                var1.setIsPage("0");
+                if (oConvertUtils.isEmpty(var1.getDbSource())) {
+                    var1.setDbSource("");
+                }
+
+                this.a(var1);
+            });
+        }
+
+        String var7;
+        if ("0".equals(reportDb.getDbType())) {
+            var7 = reportDb.getDbSource();
+            if (oConvertUtils.isNotEmpty(var7)) {
+                JmReportDataSource var3 = this.jmReportDbSourceService.getById(var7);
+                if (var3 != null) {
+                    reportDb.setDbSourceType(MiniDaoUtil.getDbType(var3.getDbUrl()));
+                }
+            } else {
+                String var8 = CommonUtils.getDatabaseType();
+                reportDb.setDbSourceType(var8);
+                reportDb.setDbSource("");
+            }
+        }
+
+        this.a(reportDb);
+        var7 = reportDb.getId();
+        this.reportDbFieldService.deleteByReportId(var7);
+        List var9 = reportDb.getFieldList();
+        if (d.a(var9)) {
+            Iterator var4 = var9.iterator();
+
+            while (var4.hasNext()) {
+                JmReportDbField var5 = (JmReportDbField) var4.next();
+                var5.setJimuReportDbId(var7);
+            }
+
+            this.reportDbFieldService.saveOrUpdateBatch(var9);
+        }
+
+        this.jmReportParamService.deleteByReportId(var7);
+        List var10 = reportDb.getParamList();
+        if (d.a(var10)) {
+            Iterator var11 = var10.iterator();
+
+            while (var11.hasNext()) {
+                JmReportDbParam var6 = (JmReportDbParam) var11.next();
+                var6.setJimuReportHeadId(var7);
+                if (var6.getSearchFlag() == null) {
+                    var6.setSearchFlag(0);
+                }
+            }
+
+            this.jmReportParamService.saveOrUpdateBatch(var10);
+        }
+
+        return reportDb;
+    }
+
+    @Override
+    public List<List<Map>> fieldTree(String reportId) {
+        ArrayList var2 = new ArrayList();
+        new JmReportDb();
+        List var4 = this.reportDbDao.selectList(reportId);
+        if (d.a(var4)) {
+            Iterator var5 = var4.iterator();
+
+            while (var5.hasNext()) {
+                JmReportDb var6 = (JmReportDb) var5.next();
+                ArrayList var7 = new ArrayList();
+                HashMap var8 = new HashMap();
+                var8.put("dbId", var6.getId());
+                var8.put("expand", true);
+                var8.put("title", var6.getDbChName());
+                var8.put("code", var6.getDbCode());
+                var8.put("type", var6.getDbType());
+                var8.put("isList", var6.getIsList());
+                List var9 = this.reportDbFieldService.getByDbId(var6.getId());
+                ArrayList var10 = new ArrayList();
+                HashMap var13;
+                if (d.a(var9)) {
+                    for (Iterator var11 = var9.iterator(); var11.hasNext(); var10.add(var13)) {
+                        JmReportDbField var12 = (JmReportDbField) var11.next();
+                        var13 = new HashMap();
+                        var13.put("expand", true);
+                        if (var12.getFieldName().equals(var12.getFieldText())) {
+                            var13.put("title", var12.getFieldName());
+                            var13.put("fieldText", var12.getFieldName());
+                        } else {
+                            var13.put("title", var12.getFieldName());
+                            var13.put("fieldText", var12.getFieldText());
+                        }
+                    }
+                }
+
+                var8.put("children", var10);
+                var7.add(var8);
+                var2.add(var7);
+            }
+        }
+
+        return var2;
+    }
+
+    public boolean queryIsPage(String reportId) {
+        int var2 = this.reportDbDao.getCountByReportId(reportId);
+        boolean var3 = false;
+        if (var2 > 0) {
+            var3 = true;
+        }
+
+        return var3;
+    }
+
+    public Map<String, Object> executeSelectSql(String sql, String dbKey, Map<String, Object> params) {
+        List var4 = this.jmReportParamService.list(params.get("jimuReportHeadId").toString());
+        JmReportDbParam var6;
+        String var8;
+        if (var4 != null && var4.size() > 0) {
+            for (Iterator var5 = var4.iterator(); var5.hasNext(); sql = sql.replace("${" + var6.getParamName() + "}", var8)) {
+                var6 = (JmReportDbParam) var5.next();
+                Object var7 = params.get("self_" + var6.getParamName());
+                var8 = "";
+                if (var7 != null) {
+                    var8 = var7.toString();
+                } else if (var7 == null && oConvertUtils.isNotEmpty(var6.getParamValue())) {
+                    var8 = var6.getParamValue();
+                }
+            }
+        }
+
+        HashMap var15 = new HashMap();
+        Integer var16 = oConvertUtils.getInt(params.get("pageSize"), 10);
+        Integer var17 = oConvertUtils.getInt(params.get("pageNo"), 1);
+        var8 = "select * from (" + sql + ") jeecg_rp_temp  where 1=1";
+        Object var9 = params.get("column");
+        if (var9 != null) {
+            var8 = var8 + " order by jeecg_rp_temp." + var9.toString() + " " + params.get("order").toString();
+        }
+
+        a.info("报表查询sql=>\r\n" + var8);
+        if (oConvertUtils.isNotEmpty(dbKey)) {
+            String var10 = JmreportSqlUtils.getCountSql(sql);
+            Map var11 = (Map) this.jmreportDynamicDbUtil.findOne(dbKey, var10, new Object[0]);
+            var15.put("total", var11.get("total"));
+            JmreportDynamicDataSourceVo var12 = JmreportDataSourceCachePool.getCacheDynamicDataSourceModel(dbKey);
+            String var13 = MiniDaoUtil.createPageSql(var12.getDbUrl(), var8, var17, var16);
+            List var14 = this.jmreportDynamicDbUtil.findList(dbKey, var13, new Object[0]);
+            var15.put("records", d.b(var14));
+        } else {
+            MiniDaoPage var18 = this.reportDbDao.selectPageBySql(var8, var17, var16);
+            var15.put("total", var18.getResults());
+            var15.put("records", d.b(var18.getResults()));
+        }
+
+        return var15;
+    }
+
+    public Map<String, Object> executeSelectApi(String api, String method, String token, String apiConvert, String paramArray) {
+        HashMap var6 = new HashMap();
+        if (oConvertUtils.isNotEmpty(paramArray)) {
+            api = this.b(paramArray, api);
+        }
+
+        String var12;
+        if (api.contains("token")) {
+            String var7 = api.substring(api.indexOf("token"), api.length());
+            String[] var8 = var7.split("&");
+            String[] var9 = var8;
+            int var10 = var8.length;
+
+            for (int var11 = 0; var11 < var10; ++var11) {
+                var12 = var9[var11];
+                String[] var13 = var12.split("=");
+                if (var13.length > 1 && var13[0].equals("token")) {
+                    var13[1] = var13[1].replace("'", "").replace("'", "");
+                    var13[1] = var13[1].replaceAll("\"", "");
+                    if (oConvertUtils.isNotEmpty(var13[1])) {
+                        token = var13[1];
+                    }
+                }
+            }
+        }
+
+        JSONObject var16 = this.a(api, method, token);
+        ArrayList var17 = new ArrayList();
+        if (var16 != null && !"".equals(var16)) {
+            Object var18 = null;
+            String var19 = new String();
+            String var14;
+            Object var20;
+            JSONObject var22;
+            if (!var16.containsKey("data")) {
+                if (oConvertUtils.isNotEmpty(apiConvert)) {
+                    var20 = JimuSpringContextUtils.getBean(apiConvert);
+                    if (var20 != null && var20 instanceof ApiDataConvertAdapter) {
+                        var22 = RegexMatches.e(var16.toJSONString());
+                        ApiDataConvertAdapter var24 = (ApiDataConvertAdapter) var20;
+                        var14 = var24.getData(var22);
+                        var19 = String.valueOf(var14);
+                        var18 = JSONObject.parse(var19, new Feature[]{Feature.OrderedField});
+                    }
+                } else if (oConvertUtils.isNotEmpty(this.apiDataConverAdapter)) {
+                    JSONObject var21 = RegexMatches.e(var16.toJSONString());
+                    var12 = this.apiDataConverAdapter.getData(var21);
+                    var19 = String.valueOf(var12);
+                    var18 = JSONObject.parse(var19, new Feature[]{Feature.OrderedField});
+                } else {
+                    var18 = var16;
+                    var19 = String.valueOf(var16);
+                }
+            } else {
+                var20 = var16.get("data");
+                if (null != var20) {
+                    var19 = JSON.toJSONString(var20, new SerializerFeature[]{SerializerFeature.WriteMapNullValue});
+                }
+
+                var18 = JSONObject.parse(var19, new Feature[]{Feature.OrderedField});
+            }
+
+            LinkedHashMap var23 = new LinkedHashMap();
+            if (var18 instanceof JSONObject) {
+                var22 = JSON.parseObject(var19, new Feature[]{Feature.OrderedField});
+                Iterator var26 = var22.keySet().iterator();
+
+                while (var26.hasNext()) {
+                    var14 = (String) var26.next();
+                    var23.put(var14, var22.get(var14));
+                    var17.add(var23);
+                }
+            } else if (var18 instanceof JSONArray) {
+                JSONArray var25 = (JSONArray) JSONArray.parse(var19, new Feature[]{Feature.OrderedField});
+                if (var25.size() > 0) {
+                    JSONObject var27 = var25.getJSONObject(0);
+                    Iterator var28 = var27.keySet().iterator();
+
+                    while (var28.hasNext()) {
+                        String var15 = (String) var28.next();
+                        var23.put(var15, var27.get(var15));
+                        var17.add(var23);
+                    }
+                }
+            }
+        }
+
+        var6.put("records", d.b(var17));
+        return var6;
+    }
+
+    private List<String> a(String var1, String var2) {
+        if (oConvertUtils.isEmpty(var1)) {
+            return null;
+        } else {
+            MiniDaoPage var3 = this.reportDbDao.selectPageBySql(var1, 1, 1);
+            List var4 = var3.getResults();
+            if (var4.size() < 1) {
+                throw new JimuReportException("该报表sql没有数据");
+            } else {
+                Set var5 = ((Map) var4.get(0)).keySet();
+                ArrayList var6 = new ArrayList();
+                Iterator var7 = var5.iterator();
+
+                while (var7.hasNext()) {
+                    String var8 = (String) var7.next();
+                    var6.add(var8.toLowerCase());
+                }
+
+                return var6;
+            }
+        }
+    }
+
+    public Map loadDbData(String dbId) {
+        HashMap var2 = new HashMap();
+        JmReportDb var3 = this.reportDbDao.get(dbId);
+        if (var3 == null) {
+            return var2;
+        } else {
+            List var4 = this.reportDbFieldService.getByDbId(dbId);
+            List var5 = this.jmReportParamService.list(dbId);
+            var2.put("dbId", dbId);
+            var2.put("reportDb", var3);
+            var2.put("fieldList", var4);
+            var2.put("paramList", var5);
+            return var2;
+        }
+    }
+
+    public List<JmReportDataSource> initDataSource(String createBy) {
+        List var2 = this.jmReportDbSourceService.querySourceList(createBy);
+        if (oConvertUtils.isNotEmpty(var2)) {
+            Iterator var3 = var2.iterator();
+
+            while (var3.hasNext()) {
+                JmReportDataSource var4 = (JmReportDataSource) var3.next();
+                String var5 = var4.getDbPassword();
+                if (var5.startsWith("@JimuReport")) {
+                    var4.setDbPassword(DesUtils.encode(var5.replace("@JimuReport", "")));
+                }
+            }
+        }
+
+        return var2;
+    }
+
+    public void saveDbSource(JmReportDataSource sysDataSource) {
+        this.jmReportDbSourceService.saveOrUpdate(sysDataSource);
+    }
+
+    public boolean querySourceCode(JmReportDataSource sysDataSource) {
+        boolean var2 = false;
+        Integer var3 = 0;
+        if (oConvertUtils.isNotEmpty(sysDataSource.getId())) {
+            JmReportDataSource var4 = this.jmReportDbSourceService.selectById(sysDataSource.getId());
+            if (var4.getCode() != null) {
+                if (!var4.getCode().equals(sysDataSource.getCode())) {
+                    var3 = this.jmReportDbSourceService.excelQueryCode(sysDataSource.getCode());
+                    if (var3 == 0) {
+                        var2 = true;
+                    }
+                } else {
+                    var2 = true;
+                }
+            } else {
+                var3 = this.jmReportDbSourceService.excelQueryCode(sysDataSource.getCode());
+                if (var3 == 0) {
+                    var2 = true;
+                }
+            }
+        } else {
+            var3 = this.jmReportDbSourceService.excelQueryCode(sysDataSource.getCode());
+            if (var3 == 0) {
+                var2 = true;
+            }
+        }
+
+        return var2;
+    }
+
+    public void delDataSource(JmReportDataSource sysDataSource) {
+        this.jmReportDbSourceService.removeById(sysDataSource.getId());
+    }
+
+    public List<Map<String, Object>> qurestechSql(JmReportDb jmReportDb) {
+        if (jmReportDb == null) {
+            return null;
+        } else {
+            String var2 = jmReportDb.getDbDynSql();
+            List var3 = this.dbParamDao.list(jmReportDb.getId());
+            JSONObject var4 = new JSONObject();
+            Iterator var5 = var3.iterator();
+
+            while (var5.hasNext()) {
+                JmReportDbParam var6 = (JmReportDbParam) var5.next();
+                if (oConvertUtils.isNotEmpty(var6.getParamValue())) {
+                    var4.put(var6.getParamName(), var6.getParamValue());
+                }
+            }
+
+            String var7 = this.jimuReportService.getBaseSql(jmReportDb, var4);
+            if (oConvertUtils.isEmpty(jmReportDb.getDbSource())) {
+                return this.reportDbDao.selectListBySql(var7);
+            } else {
+                return this.jmreportDynamicDbUtil.findList(jmReportDb.getDbSource(), var7, new Object[0]);
+            }
+        }
+    }
+
+    public List<Map> parseData(Map<String, Object> map) {
+        ArrayList var2 = new ArrayList();
+        ArrayList var3 = (ArrayList) map.get("records");
+        if (var3 != null && var3.size() >= 1) {
+            LinkedHashMap var4 = (LinkedHashMap) var3.get(0);
+            Integer var5 = 1;
+            Iterator var6 = var4.entrySet().iterator();
+
+            while (var6.hasNext()) {
+                Entry var7 = (Entry) var6.next();
+                String var8 = (String) var7.getKey();
+                LinkedHashMap var9 = new LinkedHashMap();
+                var9.put("fieldName", var8);
+                var9.put("fieldText", var8);
+                var9.put("widgetType", "String");
+                var9.put("isShow", true);
+                Integer var10 = var5;
+                var5 = var5 + 1;
+                var9.put("orderNum", var10);
+                var2.add(var9);
+            }
+        }
+
+        return var2;
+    }
+
+    public List<Map<String, Object>> loadDataSourceTable(String dbKey) {
+        List var2 = null;
+        JmreportDynamicDataSourceVo var3 = JmreportDataSourceCachePool.getCacheDynamicDataSourceModel(dbKey);
+        String var4 = MiniDaoUtil.getDbType(var3.getDbUrl());
+        String var5 = JmreportSqlUtils.getAllTableSql(var3.getDbUrl());
+        if (oConvertUtils.isNotEmpty(var5)) {
+            var2 = this.jmreportDynamicDbUtil.findList(dbKey, var5, new Object[0]);
+            Iterator var6;
+            Map var7;
+            if (JmreportSqlUtils.dbTypeIsOracle(var4)) {
+                var6 = var2.iterator();
+
+                while (var6.hasNext()) {
+                    var7 = (Map) var6.next();
+                    var7.put("Comment", var7.get("COMMENTS"));
+                    var7.put("Name", var7.get("NAME"));
+                }
+            } else if (JmreportSqlUtils.dbTypeIsPostgre(var4)) {
+                var6 = var2.iterator();
+
+                while (var6.hasNext()) {
+                    var7 = (Map) var6.next();
+                    var7.put("Comment", var7.get("comment"));
+                    var7.put("Name", var7.get("name"));
+                }
+            }
+        }
+
+        return var2;
+    }
+
+    public Map<String, Object> loadTableData(String dbKey, String tableName, Integer pageNo, Integer pageSize, String sql, String paramArray) {
+        HashMap var7 = new HashMap();
+        if (oConvertUtils.isNotEmpty(paramArray)) {
+            sql = this.a((Object) paramArray, sql);
+        }
+
+        String var8 = this.jimuTokenClient.getToken();
+        if (oConvertUtils.isNotEmpty(var8)) {
+            Map var9 = this.jimuTokenClient.getUserInfo(var8);
+            sql = d.a(sql, var9);
+        }
+
+        a.info("报表查询querySql=>\r\n" + sql);
+        String var15 = d.f(sql);
+        if (StringUtils.isNotBlank(var15)) {
+            List var10 = this.jmreportDynamicDbUtil.executeProcedure(dbKey, var15);
+            var7.put("records", d.b(var10));
+        } else if (oConvertUtils.isNotEmpty(dbKey)) {
+            JmreportDynamicDataSourceVo var13 = JmreportDataSourceCachePool.getCacheDynamicDataSourceModel(dbKey);
+            String var11 = MiniDaoUtil.createPageSql(var13.getDbUrl(), sql, pageNo, pageSize);
+            a.info("报表查询pageSQL=>\r\n" + var11);
+            List var12 = this.jmreportDynamicDbUtil.findList(dbKey, var11, new Object[0]);
+            var7.put("records", d.b(var12));
+        } else {
+            MiniDaoPage var14 = this.reportDbDao.selectPageBySql(sql, pageNo, pageSize);
+            var7.put("total", var14.getResults());
+            var7.put("records", d.b(var14.getResults()));
+        }
+
+        return var7;
+    }
+
+    @Transactional
+    public void delDbData(String dbId) {
+        this.reportDbDao.deleteById(dbId);
+        this.reportDbFieldService.deleteByReportId(dbId);
+        this.jmReportParamService.deleteByReportId(dbId);
+    }
+
+    private JSONObject a(String var1, String var2, String var3) {
+        a.info("报表API 查询sendHttpRequest 原始API=> " + var1);
+        Map var4 = this.jimuTokenClient.getUserInfo(var3);
+        var1 = d.a(var1, var4, this.apiBasePath);
+        a.info("报表API 查询sendHttpRequest 替换后API=> " + var1);
+        a.info("报表API 查询sendHttpRequest Method=> " + var2);
+        if (var1.contains("'")) {
+            var1 = var1.replace("'", "");
+        }
+
+        new String();
+
+        try {
+            String var5;
+            if ("0".equals(var2)) {
+                var5 = d.b(var1, var3);
+            } else {
+                var5 = d.a(var1, var3, (JSONObject) null);
+            }
+
+            a.info("报表API 查询sendHttpRequest result=> " + var5);
+            JSONObject var6 = JSONObject.parseObject(var5, new Feature[]{Feature.OrderedField});
+            return var6;
+        } catch (ResourceAccessException var7) {
+            a.warn("连接超时:" + var7.getMessage());
+            throw new JimuReportException("api连接超时,请重试!");
+        } catch (Exception var8) {
+            var8.printStackTrace();
+            return null;
+        }
+    }
+
+    public Map<String, Object> parseReportSql(String sql, String dbKey, Object paramArray, String type) throws JimuReportException {
+        HashMap var5 = new HashMap();
+        Object var6 = new ArrayList();
+        if (oConvertUtils.isNotEmpty(paramArray)) {
+            sql = this.a(paramArray, sql);
+        }
+
+        List var7 = d.b(sql);
+        sql = d.a(sql, (Map) null);
+        String var8 = d.f(sql);
+        if (StringUtils.isNotBlank(var8)) {
+            var6 = this.jmreportDynamicDbUtil.executeProcedure(dbKey, var8);
+        } else if (oConvertUtils.isEmpty(dbKey)) {
+            try {
+                if (sql.contains("*")) {
+                    MiniDaoPage var9 = this.reportDbDao.selectPageBySql(sql, 1, 1);
+                    var6 = var9.getResults();
+                }
+
+                if (oConvertUtils.isEmpty(var6)) {
+                    var6 = j.a(sql);
+                }
+            } catch (Exception var17) {
+                Throwable var10 = var17.getCause();
+                if ("0".equals(type)) {
+                    a.warn(var17.getMessage());
+                    var5.put("message", "解析失败");
+                    return var5;
+                }
+
+                if (var10 instanceof SQLSyntaxErrorException) {
+                    throw new JimuReportException(var17.getMessage());
+                }
+
+                if (var17 instanceof UncategorizedSQLException) {
+                    throw new JimuReportException("SQL语法错误!");
+                }
+
+                throw new JimuReportException(var17);
+            }
+        } else {
+            JmreportDynamicDataSourceVo var18 = JmreportDataSourceCachePool.getCacheDynamicDataSourceModel(dbKey);
+            String var20 = MiniDaoUtil.createPageSql(var18.getDbUrl(), sql, 1, 1);
+
+            try {
+                if (sql.contains("*")) {
+                    var6 = this.jmreportDynamicDbUtil.findList(dbKey, var20, new Object[0]);
+                }
+
+                if (oConvertUtils.isEmpty(var6)) {
+                    var6 = j.a(sql);
+                }
+            } catch (Exception var16) {
+                if ("0".equals(type)) {
+                    a.warn(var16.getMessage());
+                    var5.put("message", "解析失败");
+                    return var5;
+                }
+
+                if (var16.getMessage().contains("bad SQL grammar")) {
+                    throw new JimuReportException("SQL语法错误!");
+                }
+
+                throw new JimuReportException(var16);
+            }
+        }
+
+        if (var6 != null && ((List) var6).size() > 0) {
+            ArrayList var19 = new ArrayList();
+            Map var21 = (Map) ((List) var6).get(0);
+            int var11 = 1;
+            Iterator var12 = var21.entrySet().iterator();
+
+            while (var12.hasNext()) {
+                Entry var13 = (Entry) var12.next();
+                String var14 = ((String) var13.getKey()).toLowerCase();
+                LinkedHashMap var15 = new LinkedHashMap();
+                var15.put("fieldName", var14);
+                var15.put("fieldText", var14);
+                var15.put("widgetType", "String");
+                var15.put("orderNum", var11++);
+                var19.add(var15);
+            }
+
+            var5.put("fieldList", var19);
+            var5.put("paramList", var7);
+        }
+
+        return var5;
+    }
+
+    private String a(Object var1, String var2) {
+        JSONArray var3 = JSONArray.parseArray(String.valueOf(var1));
+        new HashMap();
+
+        for (int var5 = 0; var5 < var3.size(); ++var5) {
+            JSONObject var6 = var3.getJSONObject(var5);
+            Object var7 = var6.get("paramName");
+            Object var8 = var6.get("paramValue");
+            if (oConvertUtils.isNotEmpty(var7) && oConvertUtils.isNotEmpty(var8)) {
+                var2 = var2.replace("${" + var7 + "}", String.valueOf(var8));
+                var2 = var2.replace("'${" + var7 + "}'", String.valueOf(var8));
+            }
+        }
+
+        return var2;
+    }
+
+    private String b(Object var1, String var2) {
+        JSONArray var3 = JSONArray.parseArray(String.valueOf(var1));
+        new HashMap();
+
+        for (int var5 = 0; var5 < var3.size(); ++var5) {
+            JSONObject var6 = var3.getJSONObject(var5);
+            Object var7 = var6.get("paramName");
+            Object var8 = var6.get("paramValue");
+            if (oConvertUtils.isNotEmpty(var7) && oConvertUtils.isNotEmpty(var8)) {
+                var2 = var2.replace("${" + var7 + "}", String.valueOf(var8));
+                var2 = var2.replace("'${" + var7 + "}'", String.valueOf(var8));
+            }
+        }
+
+        return var2;
+    }
+
+    public Result addDataSource(JmReportDataSource dataSource, HttpServletRequest request) {
+        String var3 = this.jimuTokenClient.getUsername(request);
+        ApiAssert.isNotEmpty("未实现JmReportTokenServiceI", var3);
+        String var4 = DesUtils.decode(dataSource.getDbPassword());
+        dataSource.setDbPassword("@JimuReport" + var4);
+        dataSource.setCreateBy(var3);
+        dataSource.setCreateTime(new Date());
+        dataSource.setConnectTimes(0);
+        this.saveDbSource(dataSource);
+        JmreportDataSourceCachePool.deleteCacheDataSource(dataSource.getId());
+        return Result.OK("操作成功!", true);
+    }
+
+    public List<Map<String, Object>> queryTableName(String key, String tableName) {
+        ArrayList var3 = new ArrayList();
+        List var4 = this.loadDataSourceTable(key);
+        if (oConvertUtils.isEmpty(tableName)) {
+            return var4;
+        } else {
+            Pattern var5 = Pattern.compile(tableName.toLowerCase());
+            Iterator var6 = var4.iterator();
+
+            while (var6.hasNext()) {
+                Map var7 = (Map) var6.next();
+                Object var8 = new HashMap();
+                String var9 = String.valueOf(var7.get("Name"));
+                Matcher var10 = var5.matcher(var9.toLowerCase());
+                if (var10.find()) {
+                    var8 = var7;
+                    var7.put("Name", var7.get("Name"));
+                }
+
+                if (((Map) var8).size() > 0 && null != var8) {
+                    var3.add(var8);
+                }
+            }
+
+            return var3;
+        }
+    }
+
+    public void updateById(JmReportDb reportDb) {
+        this.reportDbDao.update(reportDb);
+    }
+
+    public JmReportDb getById(String apiSelectId) {
+        return this.reportDbDao.get(apiSelectId);
+    }
+
+    public int getCount(String reportId, String code) {
+        return this.reportDbDao.getCount(reportId, code);
+    }
+
+    public List<JmReportDb> getListReportDb(String reportId) {
+        return this.reportDbDao.selectList(reportId);
+    }
+
+    public void a(JmReportDb var1) {
+        if (oConvertUtils.isNotEmpty(var1.getId())) {
+            this.reportDbDao.update(var1);
+        } else {
+            var1.setId(String.valueOf(SnowflakeIdWorker.generateId()));
+            this.reportDbDao.insert(var1);
+        }
+
+    }
+}

+ 1 - 0
boman-report/src/main/resources/static/jmreport/desreport_/js/core/api.js

@@ -82,6 +82,7 @@ const api = {
     /********************************************数据源数据集接口********************************************/
     //初始化数据源
     initDataSource:getHasTokenUrl('/initDataSource'),
+    initTables:getUrl('/table/list'),
     //添加数据源
     addDataSource: getUrl('/addDataSource'),
     //删除数据源

+ 107 - 5
boman-report/src/main/resources/templates/jmreport/desreport/template/components/data_source_setting.ftl

@@ -128,9 +128,13 @@
                             </Row>
                             <Row style="margin-top: 2%;">
                                 <i-col span="24">
-                                    <form-item prop="dbDynSql" label="报表SQL:" v-if="sqlForm.dbType == 0">
-                                        <i-input v-model="sqlForm.dbDynSql"  @on-blur="dbDynSqlBlur"  type="textarea" :rows="4"  placeholder="请输入查询SQL" style="min-height: 120px;max-height: 620px;width:950px">
-                                        </i-input>
+                                    <i-button @click="handleSQLAnalyze" v-if="sqlForm.dbType == 0" type="primary">SQL解析</i-button>
+                                    <form-item prop="dbDynSql" label="报表选择" v-if="sqlForm.dbType == 0">
+                                       <#-- <i-input v-model="sqlForm.dbDynSql"  @on-blur="dbDynSqlBlur"  type="textarea" :rows="4"  placeholder="请输入查询SQL" style="min-height: 120px;max-height: 620px;width:950px">
+                                        </i-input>-->
+                                        <i-table style="padding-bottom: 10%;" ref="dynamicTable" @on-select="selectTableField" @on-select-all="selectTableAll" @on-select-all-cancel="cancelTableAll"
+                                                 @on-select-cancel="cancelTableField" stripe :columns="genTable.columns" :data="genTable.data"></i-table>
+                                        <Page :total="dataCount" :current="pageCurrent" :page-size="pageSize" @on-change="changepage" @on-page-size-change="_nowPageSize"  show-total show-sizer show-elevator/>
                                     </form-item>
                                     <form-item prop="apiUrl" label="Api地址:" v-else-if="sqlForm.dbType == 1">
                                         <i-input v-model="sqlForm.apiUrl" @on-blur="dbApiBlur" type="textarea" :rows="4"  placeholder="请输入Api地址" style="min-height: 120px;max-height: 620px;width:950px">
@@ -140,7 +144,7 @@
                                       <i-input v-model="sqlForm.jsonData" type="textarea" :rows="4"  placeholder="请输入JSON数据" style="min-height: 120px;max-height: 620px;width:950px">
                                       </i-input>
                                      </form-item>
-                                    <i-button @click="handleSQLAnalyze" v-if="sqlForm.dbType == 0" type="primary">SQL解析</i-button>
+                                <#--    <i-button @click="handleSQLAnalyze" v-if="sqlForm.dbType == 0" type="primary">SQL解析</i-button>-->
                                     <Tooltip v-if="sqlForm.dbType == 0"  :transfer="true" content="SQL解析文档" placement="top">
                                         <a class="jimu-table-tip help-color" href="http://report.jeecg.com/2020087" target="_blank" style="font-size: 14px"><Icon size="14" type="ios-help-circle-outline" style="margin-top: 2px"/></a>
                                     </Tooltip>
@@ -309,6 +313,7 @@
                 currentIndex:-1,
                 moduleTitle: "",
                 tableHeight: 0,
+                genTableHeight: 0,
                 paramTableHeight: 0,
                 tabValue:"1",
                 deleteParamModel:false,
@@ -337,6 +342,33 @@
                     name:"",
                     type:"printinfo"
                 },
+                dataCount: 0,
+                pageCurrent: 1,
+                pageSize: 10,
+                nowData:[],
+                genTable: {
+                    selectParamTables:[],
+                    data: [],
+                    columns: [
+                        {
+                            type: 'selection',
+                            width: 35,
+                            align: 'center'
+                        },{
+                            type: 'index',
+                            width: 60,
+                            align: 'center'
+                        },{
+                            title: '表名',
+                            key: 'tableName',
+                            align: 'center'
+                        },{
+                            title: '表备注',
+                            key: 'tableComment',
+                            align: 'center'
+                        }
+                    ]
+                },
                 tab1: {
                     selectParamTables:[],
                     data: [],
@@ -806,6 +838,8 @@
         mounted(){
             //多数据源
             this.initDataSource();
+            // 获取表数据
+            this.initTables();
         },
         computed: {
             secondSpan: function () {
@@ -1259,11 +1293,24 @@
             },
             //type 0不需要提示 1需要提示
             handleSQLAnalyze(type) {
-                let dbDynSql = this.sqlForm.dbDynSql;
+                let dbSource = this.sqlForm.dbSource;
+              /*  let dbDynSql = this.sqlForm.dbDynSql;
                 let dbSource = this.sqlForm.dbSource;
                 if(!dbDynSql){
                     return;
+                }*/
+                let tabId = this.genTable.selectParamTables;
+
+                if(tabId.length == 0) {
+                    alert("请选择一条数据!");
+                    return;
+                }
+                if(tabId.length > 1) {
+                    alert("仅选择一条数据!");
+                    return;
                 }
+                debugger
+                let dbDynSql = "select * from " +  tabId[0].tableName;
                 let reqData = {'sql': dbDynSql, 'dbSource': dbSource,'type':type=='1'?'1':'0'}
                 if(type=='1'){
                     reqData['paramArray'] = JSON.stringify(this.tab2.data);
@@ -1484,6 +1531,40 @@
                     return {"tableIndex":item.tableIndex,"id":item.id}
                 });
             },
+
+            selectTableAll(){
+                this.genTable.selectParamTables = this.genTable.data.map(item=> {
+                    return {"tableIndex":item.tableIndex,"id":item.id,"tableName":item.tableName}
+                });
+            },
+            selectTableField(selection,row){
+                debugger
+                this.genTable.selectParamTables=[...this.genTable.selectParamTables, {"tableIndex":row.tableIndex,"id":row.id,"tableName":row.tableName}];
+            },
+            cancelTableAll() {
+                this.genTable.selectParamTables = [];
+            },
+            cancelTableField(selection,row){
+                this.genTable.selectParamTables = this.genTable.selectParamTables.filter(item=>item.tableIndex != row.tableIndex);
+            },
+            changepage(index) {
+                //需要显示开始数据的index,(因为数据是从0开始的,页码是从1开始的,需要-1)
+                let _start = (index - 1) * this.pageSize;
+                //需要显示结束数据的index
+                let _end = index * this.pageSize;
+                //截取需要显示的数据
+                this.genTable.data = this.nowData.slice(_start, _end);
+                this.genTable.data.forEach((item,index)=>{
+                    item.tableIndex = index;
+                })
+                //储存当前页
+                this.pageCurrent = index;
+            },
+            _nowPageSize(index) {
+                //实时获取当前需要显示的条数
+                this.pageSize = index;
+            },
+
             cancelFieldAll(){
                 this.tab1.selectParamTables = [];
             },
@@ -1877,6 +1958,27 @@
                         })
                     }});
             },
+            initTables(){
+                let config={
+                    url:api.initTables,
+                    data: JSON.stringify({"pageCurrent": this.genTable.pageCurrent, "pageSize": this.genTable.pageSize}),
+                    method:'post',
+                    headers: {"Content-Type":"application/json;charset=UTF-8"}
+                }
+                axios.request(config).then((res) => {
+                    if (res.data.success){
+                        if(!res){
+                            return;
+                        }
+                        this.nowData = res.data.result;
+                        this.dataCount = res.data.result.length;
+                        this.changepage(1);
+                    }
+
+                }).catch(function (error){
+                    console.log(error);
+                });
+            },
             renderButton(h, params) {
                 return h('div',[
                     h('i-button', {