浏览代码

handleNullColumn

shiqian 4 年之前
父节点
当前提交
3c6c21932d

+ 14 - 7
boman-web-core/src/main/java/com/boman/web/core/service/TableServiceCmdService.java

@@ -17,7 +17,6 @@ import com.boman.gen.api.RemoteGenTableService;
 import com.boman.domain.GenTable;
 import com.boman.domain.GenTableColumn;
 import com.boman.system.api.RemoteDictDataService;
-import com.boman.domain.SysFile;
 import com.boman.web.core.domain.*;
 import com.boman.web.core.service.delete.IBaseDeleteService;
 import com.boman.web.core.service.save.IBaseSaveService;
@@ -239,6 +238,10 @@ public class TableServiceCmdService {
 
         List<JSONObject> result = selectService.selectByCondition(tableName, condition, packCondition, showData, dto);
         result = filter(result, ObjectUtils::isNotEmpty);
+
+        // 查询时为null的列不显示的处理
+        handleNullColumn(result, showData);
+
         // 处理blob
         handleBlob(result, genTable.getIsContainsBlob());
         // 处理日期、外键、字典值
@@ -271,18 +274,21 @@ public class TableServiceCmdService {
             return getByTableName(tableName, columns, isUi);
         }
 
-        // 默认查所有字段,不支持自定义
+        List<GenTableColumn> updateVisibleColumns = filterData(columns, 2, MaskConstant.UPDATE_VISIBLE::equals);
+        List<String> showData = map(updateVisibleColumns, GenTableColumn::getColumnName);
         String pkName = IdUtils.getPkName(genTable.getColumns());
-        JSONObject json = selectService.selectById(tableName, pkName, id);
-        requireNonNull(json, "id 为[" + id + "]的数据不存在, 表名为[" + tableName + "]");
-        // 处理blob
-        handleBlob(Collections.singletonList(json), genTable.getIsContainsBlob());
 
+        List<JSONObject> jsonList = selectService.selectByIdList(tableName, pkName, Lists.newArrayList(id), showData);
+        requireNonNull(jsonList, "id 为[" + id + "]的数据不存在, 模块为[" + genTable.getFunctionName() + "]");
+        JSONObject json = jsonList.get(0);
+
+        // 处理blob
+        handleBlob(jsonList, genTable.getIsContainsBlob());
         List<GenTableColumn> parentColumns = filterHrAndSort(columns);
         // 处理成hr的形式
         for (GenTableColumn hrColumn : parentColumns) {
             List<GenTableColumn> children = Lists.newArrayListWithCapacity(16);
-            for (GenTableColumn column : columns) {
+            for (GenTableColumn column : updateVisibleColumns) {
                 if (hrColumn.getId().equals(column.getHrParentId())) {
                     String columnName = column.getColumnName();
                     String columnType = column.getColumnType();
@@ -314,6 +320,7 @@ public class TableServiceCmdService {
                     children.add(column);
                 }
             }
+//            handleNullTableColumn(children, showData);
             hrColumn.setHrChildren(children);
         }
 

+ 33 - 0
boman-web-core/src/main/java/com/boman/web/core/utils/ColumnUtils.java

@@ -110,6 +110,39 @@ public class ColumnUtils {
         return returnData;
     }
 
+
+    /**
+     * 功能描述: 把新增可见或者修改可见或者.....的列名过滤出来
+     *
+     * @param allColumns 所有的列
+     * @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<String> filterMaskColumnName(List<GenTableColumn> allColumns, int sort, Predicate<String> predicate) {
+        assert sort < 6;
+        List<String> returnData = Lists.newArrayListWithCapacity(16);
+        for (GenTableColumn allColumn : allColumns) {
+            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.getColumnName());
+                }
+            }
+
+        }
+
+        return returnData;
+    }
+
     /**
      * 功能描述: 按照predicate的规则过滤allColumns中包含data并且符合过滤规则的数据, <p>过滤掉hr !!!</p>
      *

+ 37 - 0
boman-web-core/src/main/java/com/boman/web/core/utils/HandlerFormDataUtils.java

@@ -1,6 +1,7 @@
 package com.boman.web.core.utils;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 import com.boman.common.core.utils.DateUtils;
@@ -20,6 +21,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import static com.boman.common.core.utils.obj.ObjectUtils.*;
 import static com.boman.domain.constant.FormDataConstant.*;
@@ -190,4 +192,39 @@ public class HandlerFormDataUtils {
         return result;
     }
 
+    /**
+     * 功能描述: 查找result中是否有showData中不存在的列,如果不存在则置为null
+     *
+     * @param result   result
+     * @param showData showData
+     */
+    public static void handleNullColumn(List<JSONObject> result, JSONArray showData) {
+        for (JSONObject jsonObject : result) {
+            Set<String> resultKeySet = jsonObject.keySet();
+            for (Object columnNameObj : showData) {
+                String columnName = (String) columnNameObj;
+                if (!resultKeySet.contains(columnName)) {
+                    jsonObject.put(columnName, "");
+                }
+            }
+        }
+    }
+
+    /**
+     * 功能描述: 查找result中是否有showData中不存在的列,如果不存在则置为null
+     *
+     * @param result   result
+     * @param showData showData
+     */
+    public static void handleNullTableColumn(List<GenTableColumn> result, List<String> showData) {
+        List<String> dbColumnNameList = map(result, GenTableColumn::getColumnName);
+        for (GenTableColumn tableColumn : result) {
+            for (String columnName : showData) {
+                if (!dbColumnNameList.contains(columnName)) {
+                    tableColumn.setColumnValue("");
+                }
+            }
+        }
+    }
+
 }