Browse Source

外键,未完成,queryList过滤可展示字段完成

shiqian 4 years ago
parent
commit
b2ec087ffb

+ 33 - 0
boman-api/boman-api-gen/src/main/java/com/boman/gen/api/RemoteGenTableColumnService.java

@@ -0,0 +1,33 @@
+package com.boman.gen.api;
+
+import com.boman.common.core.constant.ServiceNameConstants;
+import com.boman.common.core.web.domain.AjaxResult;
+import com.boman.gen.domain.GenTableColumn;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+/**
+ * 生成代码模块,远程调用入口,如需其他接口,在此添加
+ *
+ * @author shiqian
+ * @date 2021年04月06日 14:22
+ **/
+@FeignClient(contextId = "remoteGenTableColumnService", value = ServiceNameConstants.GEN_SERVICE)
+public interface RemoteGenTableColumnService {
+
+
+    /**
+     * 功能描述: 通过表名查找表对应的所有的列
+     *
+     * @param tableId tableId
+     * @return GenTable
+     */
+    @GetMapping(value = "/genTableColumn/{tableId}")
+    AjaxResult listColumnsByTableId(@PathVariable("tableId") Long tableId);
+
+    @GetMapping(value = "/pk/{columnId}")
+    GenTableColumn getById(@PathVariable("columnId") Long columnId);
+
+
+}

+ 9 - 3
boman-api/boman-api-gen/src/main/java/com/boman/gen/api/RemoteGenTableService.java

@@ -1,13 +1,10 @@
 package com.boman.gen.api;
 
 import com.boman.common.core.constant.ServiceNameConstants;
-import com.boman.common.core.web.domain.AjaxResult;
-import com.boman.gen.domain.TableSql;
 import com.boman.gen.domain.GenTable;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
 
 /**
  * 生成代码模块,远程调用入口,如需其他接口,在此添加
@@ -18,6 +15,15 @@ import org.springframework.web.bind.annotation.PostMapping;
 @FeignClient(contextId = "remoteGenTableService", value = ServiceNameConstants.GEN_SERVICE)
 public interface RemoteGenTableService {
 
+    /**
+     * 功能描述: 通过表名查找表对应的所有的列
+     *
+     * @param tableId tableId
+     * @return GenTable
+     */
+    @GetMapping(value = "/gen/tableId/{tableId}")
+    GenTable getByTableId(@PathVariable("tableId") Long tableId);
+
 
     /**
      * 功能描述: 通过表名查找表信息

+ 4 - 0
boman-common/boman-common-core/src/main/java/com/boman/common/core/utils/obj/ObjectUtils.java

@@ -121,6 +121,10 @@ public class ObjectUtils {
         return input != null && !input.isEmpty();
     }
 
+    public static boolean isEmpty(JSONArray input){
+        return !isNotEmpty(input);
+    }
+
     /**
      * 功能描述: 暂且只做 string collection long 三种类型的校验
      *

+ 11 - 0
boman-modules/boman-gen/src/main/java/com/boman/gen/controller/GenController.java

@@ -106,6 +106,17 @@ public class GenController extends BaseController {
         return genTableService.selectGenTableByName(tableName);
     }
 
+    /**
+     * 功能描述: 根据表id查询表信息
+     *
+     * @param tableId tableId
+     * @return GenTable
+     */
+    @GetMapping(value = "/tableId/{tableId}")
+    public GenTable getByTableName(@PathVariable Long tableId) {
+        return genTableService.getByTableId(tableId);
+    }
+
     /**
      * 导入表结构(保存)
      */

+ 8 - 0
boman-modules/boman-gen/src/main/java/com/boman/gen/controller/GenTableColumnController.java

@@ -79,4 +79,12 @@ public class GenTableColumnController extends BaseController {
         return AjaxResult.success(genTableColumnService.selectGenTableColumnListByTableId(tableId));
     }
 
+    /**
+     * 根据主键查找
+     */
+    @GetMapping(value = "/pk/{columnId}")
+    public GenTableColumn getById(@PathVariable Long columnId) {
+        return genTableColumnService.selectGenTableColumnListByColumnId(columnId);
+    }
+
 }

+ 1 - 0
boman-modules/boman-gen/src/main/java/com/boman/gen/controller/MyController.java

@@ -119,6 +119,7 @@ public class MyController extends BaseController {
             List<GenTableColumn> columnList = new ArrayList<>(16);
             for (GenTableColumn tableColumn : genTableColumns) {
                 if (table.getTableId().equals(tableColumn.getTableId())) {
+                    tableColumn.setTableName(table.getTableName());
                     columnList.add(tableColumn);
                 }
             }

+ 11 - 0
boman-modules/boman-gen/src/main/java/com/boman/gen/domain/GenTableColumn.java

@@ -29,6 +29,9 @@ public class GenTableColumn extends BaseEntity
     /** 归属表编号 */
     private Long tableId;
 
+    /** 归属表名 数据库没有此字段*/
+    private String tableName;
+
     /** 列名称 */
     private String columnName;
 
@@ -529,4 +532,12 @@ public class GenTableColumn extends BaseEntity
     public void setHrChildren(List<GenTableColumn> hrChildren) {
         this.hrChildren = hrChildren;
     }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
 }

+ 5 - 0
boman-modules/boman-gen/src/main/java/com/boman/gen/service/GenTableServiceImpl.java

@@ -77,6 +77,11 @@ public class GenTableServiceImpl implements IGenTableService {
         return genTable;
     }
 
+    @Override
+    public GenTable getByTableId(Long id) {
+        return genTableMapper.selectGenTableById(id);
+    }
+
     /**
      * 查询业务列表
      *

+ 8 - 0
boman-modules/boman-gen/src/main/java/com/boman/gen/service/IGenTableService.java

@@ -59,6 +59,14 @@ public interface IGenTableService {
      */
     public GenTable selectGenTableById(Long id);
 
+    /**
+     * 查询业务信息
+     *
+     * @param id 业务ID
+     * @return 业务信息
+     */
+    public GenTable getByTableId(Long id);
+
     /**
      * 修改业务
      *

+ 16 - 0
boman-web-core/src/main/java/com/boman/web/core/controller/TableController.java

@@ -1,6 +1,7 @@
 package com.boman.web.core.controller;
 
 import com.boman.common.core.web.domain.AjaxResult;
+import com.boman.gen.domain.GenTable;
 import com.boman.web.core.domain.BaseTableSaveDTO;
 import com.boman.web.core.service.TableServiceCmdService;
 import io.swagger.annotations.ApiOperation;
@@ -39,5 +40,20 @@ public class TableController {
         return tableServiceCmdService.getByTableName(condition);
     }
 
+    /**
+     * 功能描述: 根据表名获取表信息、表字段和表字段对应的字典值
+     *                          {
+     *                              "tableId": 1
+     *                          }
+     *
+     * @param table table
+     * @return com.boman.common.core.web.domain.AjaxResult
+     */
+    @ApiOperation(value = "根据表名获取表单所有信息, 没有过滤")
+    @PostMapping("/listAllColumnsByTableId")
+    public AjaxResult listAllColumnsByTableId(@RequestBody GenTable table) {
+        return tableServiceCmdService.listAllColumnsByTableId(table);
+    }
+
 
 }

+ 6 - 9
boman-web-core/src/main/java/com/boman/web/core/mapper/StandardlyMapper.java

@@ -508,16 +508,13 @@ public interface StandardlyMapper {
             wholeSql.append("select ");
             // showData
             StringBuilder showDataSql = new StringBuilder();
-            if (ObjectUtils.isNotEmpty(showData)) {
-                for (Object columnObj : showData) {
-                    String columnName = (String) columnObj;
-                    showDataSql.append(columnName).append(", ");
-                }
-                wholeSql.append(StringUtils.substringBeforeLast(showDataSql.toString(), ","));
-            } else {
-                showDataSql.append(" * ");
+            // 调用之前进行了判空,showData肯定不为空
+            for (Object columnObj : showData) {
+                String columnName = (String) columnObj;
+                showDataSql.append(columnName).append(", ");
             }
-
+            wholeSql.append(StringUtils.substringBeforeLast(showDataSql.toString(), ","));
+//
             wholeSql.append(showDataSql).append(" from ").append(tableName);
             // 条件
             packCondition(packCondition, wholeSql);

+ 53 - 6
boman-web-core/src/main/java/com/boman/web/core/service/TableServiceCmdService.java

@@ -11,6 +11,7 @@ import com.boman.common.core.web.domain.AjaxResult;
 import com.boman.common.redis.RedisKey;
 import com.boman.common.redis.service.RedisService;
 import com.boman.domain.SysDictData;
+import com.boman.gen.api.RemoteGenTableColumnService;
 import com.boman.gen.api.RemoteGenTableService;
 import com.boman.gen.controller.MyController;
 import com.boman.gen.domain.GenTable;
@@ -18,6 +19,7 @@ import com.boman.gen.domain.GenTableColumn;
 import com.boman.gen.domain.GenTableRelation;
 import com.boman.system.api.RemoteDictDataService;
 import com.boman.web.core.constant.FormDataConstant;
+import com.boman.web.core.constant.MaskConstant;
 import com.boman.web.core.constant.SubmitConstant;
 import com.boman.web.core.domain.*;
 import com.boman.web.core.service.delete.IBaseDeleteService;
@@ -25,6 +27,7 @@ import com.boman.web.core.service.save.IBaseSaveService;
 import com.boman.web.core.service.select.IBaseSelectService;
 import com.boman.web.core.service.submit.IBaseSubmitService;
 import com.boman.web.core.service.update.IBaseUpdateService;
+import com.boman.web.core.utils.ColumnUtils;
 import com.boman.web.core.utils.IdUtils;
 import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
@@ -44,6 +47,7 @@ import java.util.stream.Collectors;
 
 import static com.boman.common.core.utils.obj.ObjectUtils.*;
 import static com.boman.web.core.constant.FormDataConstant.*;
+import static com.boman.web.core.utils.ColumnUtils.*;
 
 /**
  * @author shiqian
@@ -71,6 +75,8 @@ public class TableServiceCmdService {
     private RemoteDictDataService remoteDictDataService;
     @Resource
     private RemoteGenTableService remoteGenTableService;
+    @Resource
+    private RemoteGenTableColumnService remoteGenTableColumnService;
 
     private static final Logger LOGGER = LoggerFactory.getLogger(TableServiceCmdService.class);
 
@@ -225,8 +231,9 @@ public class TableServiceCmdService {
         List<GenTableColumn> columns = genTable.getColumns();
         // 封装好以后的查询条件
         JSONObject packCondition = ifNullSetEmpty(packColCondition(columns, condition));
-        // 需要返回到前台的列
-        JSONArray showData = ifNullSetEmpty(fixedData.getJSONArray(SHOW_DATA));
+        // 需要返回到前台的列, 需要判断是否是列表展示, 4为判断列表是否可见
+        JSONArray showData = filterData(columns, 4, fixedData.getJSONArray(SHOW_DATA), MaskConstant.LIST_VISIBLE::equals);
+
         JSONObject rows = new JSONObject();
         int total = selectService.countByCondition(genTable.getTableName(), condition, packCondition);
         rows.put(FormDataConstant.PAGE_TOTAL, total);
@@ -237,13 +244,52 @@ public class TableServiceCmdService {
 
         List<JSONObject> result = selectService.selectByCondition(genTable.getTableName(), condition, packCondition
                 , showData, dto.getOrderBy(), dto.getLimit(), dto.getOffset());
+        // 处理时间
         handlerDate(result, columns);
+        // 处理字典值
         handlerSysDictData(result, columns);
+        // 处理外键
+        handlerForeignKey(result, columns);
+        // 定制接口
         result = isCustomized(dto.getTable(),result,"trigger_retrieve");
+
         rows.put(FormDataConstant.PAGE_ROWS, result);
         return AjaxResult.success(rows);
     }
 
+    private void handlerForeignKey(List<JSONObject> result, List<GenTableColumn> columns) {
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(result)) {
+            return;
+        }
+
+        // 拿到所有有fk的列
+        columns = filter(columns, col -> ObjectUtils.isNotEmpty(col.getForeignKey()));
+        for (GenTableColumn column : columns) {
+            JSONObject jsonObject = new JSONObject();
+//            Long selfTableId = column.getTableId();
+            String selfColumnName = column.getColumnName();
+            for (JSONObject json : result) {
+                if (json.containsKey(selfColumnName)) {
+                    Object value = json.get(selfColumnName);
+
+                    Long fkColumnId = Long.parseLong(column.getForeignKey());
+                    GenTableColumn fkTableColumn = remoteGenTableColumnService.getById(fkColumnId);
+                    Long fkTableId = fkTableColumn.getTableId();
+                    GenTable fkGenTable = remoteGenTableService.getByTableId(fkTableId);
+                    String fkTableName= fkGenTable.getTableName();
+
+                    // select * from fkTableName where fkTableColumn.columnName = value;
+
+//                    jsonObject.put(columnName, "");
+//                    jsonObject.put("columnName", "");
+
+                }
+            }
+
+
+        }
+    }
+
     /**
      * 功能描述: 把timeStamp转为string
      *
@@ -360,7 +406,7 @@ public class TableServiceCmdService {
 
     /**
      * 功能描述: 封装成查询条件 key: 列名,  value:查询条件_查询类别
-     * eg: [{"config_name":"系统配置_like"}, {"config_name":"_like"}]
+     * eg: [{"config_name": ["系统配置", "EQ", "varchar(100)"]}]
      *
      * @param columns columns
      * @return com.alibaba.fastjson.JSONObject
@@ -497,9 +543,7 @@ public class TableServiceCmdService {
     public List<GenTableColumn> getTableHeadList(GenTable genTable){
         List<GenTableColumn> columns = genTable.getColumns();
         // 表头
-        return columns.stream()
-                .filter(genTableColumn -> GenTableColumn.IS_LIST.equals(genTableColumn.getIsList()))
-                .collect(Collectors.toList());
+        return filterData(columns, 4, MaskConstant.LIST_VISIBLE::equals);
     }
 
     /**
@@ -742,5 +786,8 @@ public class TableServiceCmdService {
     }
 
 
+    public AjaxResult listAllColumnsByTableId(GenTable table) {
+        return remoteGenTableColumnService.listColumnsByTableId(table.getTableId());
+    }
 }
 

+ 1 - 1
boman-web-core/src/main/java/com/boman/web/core/service/select/BaseSelectServiceImpl.java

@@ -41,7 +41,7 @@ public class BaseSelectServiceImpl implements IBaseSelectService {
     public List<JSONObject> selectByCondition(String tableName, JSONObject condition
             , JSONObject packCondition, JSONArray showData, String orderBy, Integer limit, Integer offset) {
         requireNonNull(tableName, "表名为空");
-//        requireNonNull(showData);
+        requireNonNull(showData, "数据库中此表: [" + tableName + "] , 没有列表展示的字段");
         requireNonNull(orderBy);
         return mapper.selectByCondition(tableName, condition, packCondition, showData, orderBy, limit, offset);
     }

+ 64 - 15
boman-web-core/src/main/java/com/boman/web/core/utils/ColumnUtils.java

@@ -1,5 +1,6 @@
 package com.boman.web.core.utils;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.boman.gen.domain.GenTableColumn;
 import com.boman.web.core.constant.FormDataConstant;
@@ -9,7 +10,9 @@ import java.sql.Timestamp;
 import java.util.List;
 import java.util.function.Predicate;
 
+import static com.boman.common.core.utils.obj.ObjectUtils.isEmpty;
 import static com.boman.common.core.utils.obj.ObjectUtils.requireNonNull;
+import static com.boman.web.core.constant.FormDataConstant.HR;
 
 /**
  * @author shiqian
@@ -46,33 +49,79 @@ public class ColumnUtils {
      * 功能描述: 把新增可见或者修改可见或者.....的列过滤出来
      *
      * @param allColumns 所有的列
-     * @param sort 那六个1的顺序
-     *             sort=0  =>  新增可见
-     *             sort=1  =>  新增可修改
-     *             sort=2  =>  修改可见
-     *             sort=3  =>  修改可修改
-     *             sort=4  =>  列表可见
-     *             sort=5  =>  列表可修改
+     * @param sort       那六个1的顺序 [1,1,1,1,1,1]
+     *                   sort=0  =>  新增可见
+     *                   sort=1  =>  新增可修改
+     *                   sort=2  =>  修改可见
+     *                   sort=3  =>  修改可修改
+     *                   sort=4  =>  列表可见
+     *                   sort=5  =>  列表可修改
      * @return List<GenTableColumn>
      */
     public static List<GenTableColumn> filterData(List<GenTableColumn> allColumns, int sort, Predicate<String> predicate) {
         assert sort < 6;
         List<GenTableColumn> returnData = Lists.newArrayListWithCapacity(16);
         for (GenTableColumn allColumn : allColumns) {
-            String[] maskArray = requireNonNull(allColumn.getMask(), "mask is empty").split("");
-            assert maskArray.length == 6;
-            // 新增可见
-            String insertVisible = maskArray[sort];
-            if (predicate.test(insertVisible)) {
-                returnData.add(allColumn);
+            if (!HR.equalsIgnoreCase(allColumn.getHtmlType())) {
+                String[] maskArray = requireNonNull(allColumn.getMask(), "mask is empty").split("");
+                assert maskArray.length == 6;
+                // sort
+                String insertVisible = maskArray[sort];
+                if (predicate.test(insertVisible)) {
+                    returnData.add(allColumn);
+                }
+            }
+
+        }
+
+        return returnData;
+    }
+
+    /**
+     * 功能描述: 按照predicate的规则过滤allColumns中包含data并且符合过滤规则的数据
+     *
+     * @param allColumns 所有的列
+     * @param sort       同{@link ColumnUtils#filterData(java.util.List, int, java.util.function.Predicate)}
+     * @param data       从其中过滤符合规则的数据,data中字符串全部是大写的
+     * @param predicate  predicate
+     * @return JSONArray
+     */
+    public static JSONArray filterData(List<GenTableColumn> allColumns, int sort, JSONArray data, Predicate<String> predicate) {
+        assert sort < 6;
+        JSONArray returnData = new JSONArray(data.size());
+        boolean dataIsEmpty = isEmpty(data);
+        if (dataIsEmpty) {
+            // data为空,拿出所有列中列表可见的
+            for (GenTableColumn allColumn : allColumns) {
+                String columnName = allColumn.getColumnName().toUpperCase();
+                String[] maskArray = requireNonNull(allColumn.getMask(), "mask is empty").split("");
+                assert maskArray.length == 6;
+                String maskValue = maskArray[sort];
+                if (predicate.test(maskValue)) {
+                    returnData.add(columnName);
+                }
+            }
+        } else {
+            // data不为空,拿出前端传过来的列中可见的
+            for (GenTableColumn allColumn : allColumns) {
+                String columnName = allColumn.getColumnName().toUpperCase();
+                if (data.contains(columnName)) {
+                    String[] maskArray = requireNonNull(allColumn.getMask(), "mask is empty").split("");
+                    assert maskArray.length == 6;
+                    String maskValue = maskArray[sort];
+                    if (predicate.test(maskValue)) {
+                        returnData.add(columnName);
+                    }
+                }
             }
         }
 
+
         return returnData;
     }
 
-    public static String parseVariables(String variables){
-         return variables.replaceAll("\\$", "");
+    public static String parseVariables(String variables) {
+        return variables.replaceAll("\\$", "");
     }
 
 }