ソースを参照

修改sql数据集

junfeitang 3 年 前
コミット
1195c25e20

+ 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>-->

+ 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() + ")";
+    }
+}

+ 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 {
+}

+ 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', {