Преглед на файлове

新增和修改的方法优化

shiqian преди 4 години
родител
ревизия
8235ba16f5

+ 6 - 0
boman-web-core/src/main/java/com/boman/web/core/constant/MaskConstant.java

@@ -10,9 +10,15 @@ public class MaskConstant {
     /**  新增可修改  **/
     public static final String INSERT_CAN_EDIT = "1";
 
+    /**  新增可见  **/
+    public static final String INSERT_VISIBLE = "1";
+
     /**  修改可修改  **/
     public static final String UPDATE_CAN_EDIT = "1";
 
+    /**  修改可见  **/
+    public static final String UPDATE_VISIBLE = "1";
+
     /**  列表可修改  **/
     public static final String LIST_CAN_EDIT = "1";
 }

+ 1 - 1
boman-web-core/src/main/java/com/boman/web/core/domain/TableContext.java

@@ -43,7 +43,7 @@ public class TableContext {
         requireNonNull(table, "redis中没有此表,表名: " + tableName);
         context.setTable(table);
         List<GenTableColumn> columns = table.getColumns();
-        context.setColumns(table.getColumns());
+        context.setColumns(columns);
         String pkName = IdUtils.getPkName(columns);
         context.setPkName(pkName);
 

+ 4 - 3
boman-web-core/src/main/java/com/boman/web/core/service/TableServiceCmdService.java

@@ -124,14 +124,13 @@ public class TableServiceCmdService {
 
         TableContext context = TableContext.createContext(dto);
         // 拿到pkName和maxId
-        List<GenTableColumn> columns = context.getColumns();
         String pkName = context.getPkName();
         JSONObject commitData = context.getCommitData();
 
         // 新增
         if (ActionType.INSERT.equals(context.getActionType())) {
             Long maxId = IdUtils.getMaxId(dto.getTable(), pkName);
-            RowResult rowResult = saveService.insertRow(context.getTableName(), pkName, maxId, commitData, columns);
+            RowResult rowResult = saveService.insertRow(context, maxId);
             if (RowResult.checkSuccess(rowResult)) {
                 LOGGER.info("保存成功,封装到数据库的数据为: {}", JSON.toJSONString(rowResult.getData()));
             } else {
@@ -140,7 +139,7 @@ public class TableServiceCmdService {
             }
         } else {
             // 编辑
-            int effective = updateService.updateByIdList(context, pkName, Collections.singletonList(context.getId()), commitData, columns);
+            int effective = updateService.updateByIdList(context, Collections.singletonList(context.getId()));
             if (effective > 0) {
                 LOGGER.info("修改成功,封装到数据库的数据为: {}", JSON.toJSONString(commitData));
             } else {
@@ -697,6 +696,8 @@ public class TableServiceCmdService {
         requireNonNull(condition.getIsUi(), "根据表名获取表字段,未传 isUi 这个字段");
         GenTable genTable = getTableFromRedisByTableName(RedisKey.TABLE_INFO, condition.getTable());
         List<GenTableColumn> allColumns = genTable.getColumns();
+        // 把新增可见的列过滤出来
+//        List<GenTableColumn> returnData = ColumnUtils.filterNeedShowData(allColumns, 0, INSERT_VISIBLE::equals);
         // 普通的展示,不带折叠的
         if (BooleanUtils.isFalse(condition.getIsUi())) {
             packDictDataToColumns(allColumns, ObjectUtils::isNotEmpty);

+ 8 - 6
boman-web-core/src/main/java/com/boman/web/core/service/save/BaseSaveServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.boman.gen.domain.GenTableColumn;
 import com.boman.web.core.constant.FormDataConstant;
 import com.boman.web.core.domain.RowResult;
+import com.boman.web.core.domain.TableContext;
 import com.boman.web.core.mapper.StandardlyMapper;
 import com.boman.web.core.utils.ColumnUtils;
 import org.slf4j.Logger;
@@ -30,15 +31,16 @@ public class BaseSaveServiceImpl implements IBaseSaveService {
     /**
      * 功能描述: 保存一行
      *
-     * @param tableName  tableName
-     * @param pkName     主键名称
-     * @param maxId      最大的SEQ
-     * @param commitData commitData
-     * @param columns    这是此表的所有字段属性名称,用来判断是否所有UPDATE_BY和UPDATE_TIME,和时间类型
+     * @param context context
+     * @param maxId   最大的SEQ
      * @return com.boman.system.common.RowResult
      */
     @Override
-    public RowResult insertRow(String tableName, String pkName, Long maxId, JSONObject commitData, List<GenTableColumn> columns) {
+    public RowResult insertRow(TableContext context, Long maxId) {
+        List<GenTableColumn> columns = context.getColumns();
+        JSONObject commitData = context.getCommitData();
+        String pkName = context.getPkName();
+        String tableName = context.getTableName();
         Timestamp currentTime = new Timestamp(System.currentTimeMillis());
         ColumnUtils.packUpdateByAndTime(columns, commitData, currentTime);
         commitData.put(FormDataConstant.CREATE_TIME.toUpperCase(), currentTime);

+ 4 - 10
boman-web-core/src/main/java/com/boman/web/core/service/save/IBaseSaveService.java

@@ -1,11 +1,8 @@
 package com.boman.web.core.service.save;
 
 
-import com.alibaba.fastjson.JSONObject;
-import com.boman.gen.domain.GenTableColumn;
 import com.boman.web.core.domain.RowResult;
-
-import java.util.List;
+import com.boman.web.core.domain.TableContext;
 
 /**
  * @author shiqian
@@ -18,13 +15,10 @@ public interface IBaseSaveService {
     /**
      * 功能描述: 保存一行
      *
-     * @param tableName  tableName
-     * @param pkName     主键名称
-     * @param maxId      最大的SEQ
-     * @param commitData commitData
-     * @param columns    这是此表的所有字段属性名称,用来判断是否所有UPDATE_BY和UPDATE_TIME,和时间类型
+     * @param context context
+     * @param maxId   最大的SEQ
      * @return com.boman.system.common.RowResult
      */
-    RowResult insertRow(String tableName, String pkName, Long maxId, JSONObject commitData, List<GenTableColumn> columns);
+    RowResult insertRow(TableContext context, Long maxId);
 
 }

+ 9 - 11
boman-web-core/src/main/java/com/boman/web/core/service/update/BaseUpdateServiceImpl.java

@@ -34,25 +34,23 @@ public class BaseUpdateServiceImpl implements IBaseUpdateService {
     /**
      * 功能描述: 批量修改, 默认需要更改的model,更改的字段类型和字段值都是一致的
      *
-     * @param context    用到其中的表名和所有的列(用来判断是否需要转义字符)
-     * @param pkName     主键名
-     * @param idList     idList
-     * @param commitData 需要更改的model, 已经转义好了,不需要到mapper层再去转义
-     * @param columns    这是此表的所有字段属性名称,用来判断是否所有UPDATE_BY和UPDATE_TIME,和时间类型
+     * @param context 用到其中的表名和所有的列(用来判断是否需要转义字符)
+     * @param idList  idList
      * @return int
      */
     @Override
-    public int updateByIdList(TableContext context, String pkName, List<Long> idList, JSONObject commitData, List<GenTableColumn> columns) {
-        requireNonNull(context.getTableName(), "表名为空");
-        requireNonNull(pkName, "主键名称为空");;
+    public int updateByIdList(TableContext context, List<Long> idList) {
+        String tableName = requireNonNull(context.getTableName(), "表名为空");
+        String pkName = requireNonNull(context.getPkName(), "主键名称为空");;
         requireNonNull(idList, "需要修改的idList为空");
-        requireNonNull(commitData, "需要更改的参数为空");
-
+        JSONObject commitData = requireNonNull(context.getCommitData(), "需要更改的参数为空");
+        List<GenTableColumn> columns = context.getColumns();
         Timestamp currentTime = new Timestamp(System.currentTimeMillis());
+
         commitData = ObjectUtils.ifNullSetEmpty(escapeByQueryType(columns, commitData));
         ColumnUtils.packUpdateByAndTime(columns, commitData, currentTime);
 
-        return mapper.updateByIdList(context.getTableName(), pkName, idList, commitData);
+        return mapper.updateByIdList(tableName, pkName, idList, commitData);
     }
 
     private JSONObject escapeByQueryType(List<GenTableColumn> columns, JSONObject commitData) {

+ 3 - 7
boman-web-core/src/main/java/com/boman/web/core/service/update/IBaseUpdateService.java

@@ -1,7 +1,5 @@
 package com.boman.web.core.service.update;
 
-import com.alibaba.fastjson.JSONObject;
-import com.boman.gen.domain.GenTableColumn;
 import com.boman.web.core.domain.TableContext;
 
 import java.util.List;
@@ -15,11 +13,9 @@ public interface IBaseUpdateService {
     /**
      * 功能描述: 批量修改, 默认需要更改的model,更改的字段类型和字段值都是一致的
      *
-     * @param context    用到其中的表名和所有的列(用来判断是否需要转义字符)
-     * @param pkName     主键名
-     * @param idList     idList
-     * @param commitData 需要更改的model, 已经转义好了,不需要到mapper层再去转义
+     * @param context 用到其中的表名和所有的列(用来判断是否需要转义字符)
+     * @param idList  idList
      * @return int
      */
-    int updateByIdList(TableContext context, String pkName, List<Long> idList, JSONObject commitData, List<GenTableColumn> columns);
+    int updateByIdList(TableContext context, List<Long> idList);
 }

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

@@ -3,9 +3,13 @@ package com.boman.web.core.utils;
 import com.alibaba.fastjson.JSONObject;
 import com.boman.gen.domain.GenTableColumn;
 import com.boman.web.core.constant.FormDataConstant;
+import com.google.common.collect.Lists;
 
 import java.sql.Timestamp;
 import java.util.List;
+import java.util.function.Predicate;
+
+import static com.boman.common.core.utils.obj.ObjectUtils.requireNonNull;
 
 /**
  * @author shiqian
@@ -37,4 +41,33 @@ public class ColumnUtils {
             }
         }
     }
+
+    /**
+     * 功能描述: 把新增可见或者修改可见或者.....的列过滤出来
+     *
+     * @param allColumns 所有的列
+     * @param sort 那六个1的顺序
+     *             sort=0  =>  新增可见
+     *             sort=1  =>  新增可修改
+     *             sort=2  =>  修改可见
+     *             sort=3  =>  修改可修改
+     *             sort=4  =>  列表可见
+     *             sort=5  =>  列表可修改
+     * @return List<GenTableColumn>
+     */
+    public static List<GenTableColumn> filterNeedShowData(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);
+            }
+        }
+
+        return returnData;
+    }
 }