浏览代码

objSave接口修改

shiqian 4 年之前
父节点
当前提交
968d81b7c6

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

@@ -0,0 +1,18 @@
+package com.boman.web.core.constant;
+
+
+/**
+ * @author shiqian
+ * @date 2021年04月13日 13:29
+ **/
+public class MaskConstant {
+
+    /**  新增可修改  **/
+    public static final String INSERT_CAN_EDIT = "1";
+
+    /**  修改可修改  **/
+    public static final String UPDATE_CAN_EDIT = "1";
+
+    /**  列表可修改  **/
+    public static final String LIST_CAN_EDIT = "1";
+}

+ 15 - 0
boman-web-core/src/main/java/com/boman/web/core/domain/ActionType.java

@@ -0,0 +1,15 @@
+package com.boman.web.core.domain;
+
+
+/**
+ * @author shiqian
+ * @date 2021年04月13日 14:38
+ **/
+public enum ActionType {
+
+    /**  新增 */
+    INSERT,
+
+    /**  修改 */
+    UPDATE
+}

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

@@ -0,0 +1,157 @@
+package com.boman.web.core.domain;
+
+import com.alibaba.fastjson.JSONObject;
+import com.boman.common.core.utils.SpringUtils;
+import com.boman.common.redis.RedisKey;
+import com.boman.common.redis.service.RedisService;
+import com.boman.gen.domain.GenTable;
+import com.boman.gen.domain.GenTableColumn;
+import com.boman.web.core.utils.IdUtils;
+
+import java.sql.Timestamp;
+import java.util.List;
+import java.util.Map;
+
+import static com.boman.common.core.utils.obj.ObjectUtils.ltZero;
+import static com.boman.common.core.utils.obj.ObjectUtils.requireNonNull;
+import static com.boman.web.core.constant.MaskConstant.INSERT_CAN_EDIT;
+import static com.boman.web.core.constant.MaskConstant.UPDATE_CAN_EDIT;
+
+/**
+ * @author shiqian
+ * @date 2021年04月13日 11:07
+ **/
+public class TableContext {
+
+    private Long id;
+    private String pkName;
+    private GenTable table;
+    private ActionType actionType;
+    private String tableName;
+    private JSONObject fixedData;
+    private JSONObject commitData;
+    private List<GenTableColumn> columns;
+
+    public static TableContext createContext(BaseTableSaveDTO dto) {
+        TableContext context = new TableContext();
+        context.setId(dto.getObjId());
+        String tableName = requireNonNull(dto.getTable(), "tableName is empty");
+        context.setTableName(tableName);
+
+        RedisService redisService = SpringUtils.getBean(RedisService.class);
+        GenTable table = redisService.getCacheObject(RedisKey.TABLE_INFO + tableName);
+        requireNonNull(table, "redis中没有此表,表名: " + tableName);
+        context.setTable(table);
+        List<GenTableColumn> columns = table.getColumns();
+        context.setColumns(table.getColumns());
+        String pkName = IdUtils.getPkName(columns);
+        context.setPkName(pkName);
+
+        JSONObject fixedData = requireNonNull(dto.getFixedData(), "fixedData is empty");
+        context.setFixedData(fixedData);
+        JSONObject commitData = new JSONObject();
+        packCommitData(dto, context, columns, fixedData, commitData);
+        context.setCommitData(commitData);
+        return context;
+
+    }
+
+    private static void packCommitData(BaseTableSaveDTO dto, TableContext context, List<GenTableColumn> columns
+            , JSONObject fixedData, JSONObject commitData) {
+        boolean isInsert = ltZero(dto.getObjId());
+        context.setActionType(isInsert ? ActionType.INSERT : ActionType.UPDATE);
+        for (GenTableColumn column : columns) {
+            String[] maskArray = requireNonNull(column.getMask(), "mask is empty").split("");
+            assert maskArray.length == 6;
+            // 新增可修改 修改可修改
+            String insertVisible = maskArray[1], updateVisible = maskArray[3];
+            for (Map.Entry<String, Object> entry : fixedData.entrySet()) {
+                if (column.getColumnName().equalsIgnoreCase(entry.getKey())) {
+                    // 新增
+                    if (isInsert) {
+                        // 新增可修改, 把新增的字段单独拿出来
+                        if (INSERT_CAN_EDIT.equals(insertVisible)) {
+                            commitData.put(entry.getKey(), entry.getValue());
+                        } else {
+                            // ignore
+                        }
+                    } else {
+                        // 编辑可修改
+                        if (UPDATE_CAN_EDIT.equals(updateVisible)) {
+                            commitData.put(entry.getKey(), entry.getValue());
+                        } else {
+                            // ignore
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+    /**                 get and set                               **/
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getPkName() {
+        return pkName;
+    }
+
+    public void setPkName(String pkName) {
+        this.pkName = pkName;
+    }
+
+    public GenTable getTable() {
+        return table;
+    }
+
+    public void setTable(GenTable table) {
+        this.table = table;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public JSONObject getFixedData() {
+        return fixedData;
+    }
+
+    public void setFixedData(JSONObject fixedData) {
+        this.fixedData = fixedData;
+    }
+
+    public JSONObject getCommitData() {
+        return commitData;
+    }
+
+    public void setCommitData(JSONObject commitData) {
+        this.commitData = commitData;
+    }
+
+    public List<GenTableColumn> getColumns() {
+        return columns;
+    }
+
+    public void setColumns(List<GenTableColumn> columns) {
+        this.columns = columns;
+    }
+
+    public ActionType getActionType() {
+        return actionType;
+    }
+
+    public void setActionType(ActionType actionType) {
+        this.actionType = actionType;
+    }
+}

+ 61 - 27
boman-web-core/src/main/java/com/boman/web/core/service/TableServiceCmdService.java

@@ -74,43 +74,77 @@ public class TableServiceCmdService {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(TableServiceCmdService.class);
 
-    private BaseTableDTO packTableDTO(BaseTableSaveDTO baseTableSaveDTO) {
-        BaseTableDTO baseTableDTO = new BaseTableDTO();
-        baseTableDTO.setFixedData(baseTableSaveDTO.getFixedData());
-        baseTableDTO.setObjId(baseTableSaveDTO.getObjId());
-        baseTableDTO.setTable(baseTableSaveDTO.getTable());
-        return baseTableDTO;
-    }
-
-    public final AjaxResult objectSave(BaseTableSaveDTO baseTableSaveDTO) {
+//    private BaseTableDTO packTableDTO(BaseTableSaveDTO baseTableSaveDTO) {
+//        BaseTableDTO baseTableDTO = new BaseTableDTO();
+//        baseTableDTO.setFixedData(baseTableSaveDTO.getFixedData());
+//        baseTableDTO.setObjId(baseTableSaveDTO.getObjId());
+//        baseTableDTO.setTable(baseTableSaveDTO.getTable());
+//        return baseTableDTO;
+//    }
+
+//    public final AjaxResult objectSave(BaseTableSaveDTO baseTableSaveDTO) {
+//        AjaxResult result = AjaxResult.success();
+//        BaseTableDTO baseTableDTO = packTableDTO(baseTableSaveDTO);
+//        TableServiceContext context = TableServiceContext.createFrom(baseTableDTO);
+//        // 拿到pkName和maxId
+//        List<GenTableColumn> columns = context.getTable().getColumns();
+//        String pkName = IdUtils.getPkName(columns);
+//        requireNonNull(pkName, "主键名称为空");
+//
+//        // 新增
+//        if (ObjectUtils.ltZero(baseTableDTO.getObjId())) {
+//            Long maxId = IdUtils.getMaxId(baseTableDTO.getTable(), pkName);
+//            RowResult rowResult = saveService.insertRow(context.getRealTableName(), pkName, maxId, context.getRows().get(0), columns);
+//            if (RowResult.checkSuccess(rowResult)) {
+//                LOGGER.info("保存成功,封装到数据库的数据为: {}", JSON.toJSONString(rowResult.getData()));
+//            } else {
+//                LOGGER.error("保存失败,保持的原始数据为: {}", JSON.toJSONString(baseTableSaveDTO));
+//                result = AjaxResult.error();
+//            }
+//        }else {
+//            JSONObject commitData = context.getRows().get(0).getCommitData();
+//
+//            // 编辑
+//            int effective = updateService.updateByIdList(context, pkName
+//                    , Collections.singletonList(baseTableDTO.getObjId()), commitData);
+//            if (effective > 0) {
+//                LOGGER.info("修改成功,封装到数据库的数据为: {}", JSON.toJSONString(context.getRows().get(0).getCommitData()));
+//            } else {
+//                LOGGER.error("修改失败,前台传来的原始数据为: {}", JSON.toJSONString(context.getRows().get(0).getCommitData()));
+//                result = AjaxResult.error();
+//            }
+//        }
+//
+//        return result;
+//
+//    }
+
+    public final AjaxResult objectSave(BaseTableSaveDTO dto) {
         AjaxResult result = AjaxResult.success();
-        BaseTableDTO baseTableDTO = packTableDTO(baseTableSaveDTO);
-        TableServiceContext context = TableServiceContext.createFrom(baseTableDTO);
+
+        TableContext context = TableContext.createContext(dto);
         // 拿到pkName和maxId
-        List<GenTableColumn> columns = context.getTable().getColumns();
-        String pkName = IdUtils.getPkName(columns);
-        requireNonNull(pkName, "主键名称为空");
-
-        // 新增
-        if (ObjectUtils.ltZero(baseTableDTO.getObjId())) {
-            Long maxId = IdUtils.getMaxId(baseTableDTO.getTable(), pkName);
-            RowResult rowResult = saveService.insertRow(context.getRealTableName(), pkName, maxId, context.getRows().get(0), columns);
+        List<GenTableColumn> columns = context.getColumns();
+        String pkName = context.getPkName();
+        JSONObject commitData = context.getCommitData();
+
+        // 新增 todo 判断是否有修改时间和修改人,需要抽取公告方法
+        if (ActionType.INSERT.equals(context.getActionType())) {
+            Long maxId = IdUtils.getMaxId(dto.getTable(), pkName);
+            RowResult rowResult = saveService.insertRow(context.getTableName(), pkName, maxId, commitData, columns);
             if (RowResult.checkSuccess(rowResult)) {
                 LOGGER.info("保存成功,封装到数据库的数据为: {}", JSON.toJSONString(rowResult.getData()));
             } else {
-                LOGGER.error("保存失败,保持的原始数据为: {}", JSON.toJSONString(baseTableSaveDTO));
+                LOGGER.error("保存失败,保持的原始数据为: {}", JSON.toJSONString(dto));
                 result = AjaxResult.error();
             }
-        }else {
-            JSONObject commitData = context.getRows().get(0).getCommitData();
-
+        } else {
             // 编辑
-            int effective = updateService.updateByIdList(context, pkName
-                    , Collections.singletonList(baseTableDTO.getObjId()), commitData);
+            int effective = updateService.updateByIdList(context, pkName, Collections.singletonList(context.getId()), commitData, columns);
             if (effective > 0) {
-                LOGGER.info("修改成功,封装到数据库的数据为: {}", JSON.toJSONString(context.getRows().get(0).getCommitData()));
+                LOGGER.info("修改成功,封装到数据库的数据为: {}", JSON.toJSONString(commitData));
             } else {
-                LOGGER.error("修改失败,前台传来的原始数据为: {}", JSON.toJSONString(context.getRows().get(0).getCommitData()));
+                LOGGER.error("修改失败,前台传来的原始数据为: {}", JSON.toJSONString(commitData));
                 result = AjaxResult.error();
             }
         }

+ 13 - 16
boman-web-core/src/main/java/com/boman/web/core/service/save/BaseSaveServiceImpl.java

@@ -1,10 +1,8 @@
 package com.boman.web.core.service.save;
 
 import com.alibaba.fastjson.JSONObject;
-import com.boman.common.core.utils.SecurityUtils;
 import com.boman.gen.domain.GenTableColumn;
 import com.boman.web.core.constant.FormDataConstant;
-import com.boman.web.core.domain.MainTableRecord;
 import com.boman.web.core.domain.RowResult;
 import com.boman.web.core.mapper.StandardlyMapper;
 import org.slf4j.Logger;
@@ -31,23 +29,22 @@ public class BaseSaveServiceImpl implements IBaseSaveService {
     /**
      * 功能描述: 保存一行
      *
-     * @param tableName tableName
-     * @param pkName    主键名称
-     * @param maxId     最大的SEQ
-     * @param row       要保存的数据
-     * @param columns   这是此表的所有字段属性名称,用来判断是否所有UPDATE_BY和UPDATE_TIME,和时间类型
+     * @param tableName  tableName
+     * @param pkName     主键名称
+     * @param maxId      最大的SEQ
+     * @param commitData commitData
+     * @param columns    这是此表的所有字段属性名称,用来判断是否所有UPDATE_BY和UPDATE_TIME,和时间类型
      * @return com.boman.system.common.RowResult
      */
     @Override
-    public RowResult insertRow(String tableName, String pkName, Long maxId, MainTableRecord row, List<GenTableColumn> columns) {
-        JSONObject commitData = row.getMainData().getCommitData();
+    public RowResult insertRow(String tableName, String pkName, Long maxId, JSONObject commitData, List<GenTableColumn> columns) {
         Timestamp currentTime = new Timestamp(System.currentTimeMillis());
         for (GenTableColumn column : columns) {
             // 判断是否有修改人、修改时间
-            if (column.getColumnName().equalsIgnoreCase(FormDataConstant.UPDATE_BY)) {
-                commitData.put(FormDataConstant.UPDATE_BY, SecurityUtils.getUserId());
+            if (FormDataConstant.UPDATE_BY.equalsIgnoreCase(column.getColumnName())) {
+                commitData.put(FormDataConstant.UPDATE_BY, "张三");
             }
-            if (column.getColumnName().equalsIgnoreCase(FormDataConstant.UPDATE_TIME)) {
+            if (FormDataConstant.UPDATE_TIME.equalsIgnoreCase(column.getColumnName())) {
                 commitData.put(FormDataConstant.UPDATE_TIME, currentTime);
             }
 
@@ -59,10 +56,10 @@ public class BaseSaveServiceImpl implements IBaseSaveService {
         }
 
         // 新增
-        if (row.getId() > 0) {
-            commitData.put(FormDataConstant.UPDATE_TIME, currentTime);
-            commitData.put(FormDataConstant.UPDATE_BY, SecurityUtils.getUserId());
-        }
+//        if (row.getId() > 0) {
+            commitData.put(FormDataConstant.CREATE_TIME.toUpperCase(), currentTime);
+            commitData.put(FormDataConstant.CREATE_BY.toUpperCase(), "张三");
+//        }
 
         commitData.put(pkName.toUpperCase(), maxId);
         int ret = mapper.insert(tableName, commitData);

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

@@ -1,8 +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.MainTableRecord;
 import com.boman.web.core.domain.RowResult;
 
 import java.util.List;
@@ -18,13 +18,13 @@ public interface IBaseSaveService {
     /**
      * 功能描述: 保存一行
      *
-     * @param tableName tableName
-     * @param pkName    主键名称
-     * @param maxId     最大的SEQ
-     * @param row       要保存的数据
-     * @param columns   这是此表的所有字段属性名称,用来判断是否所有UPDATE_BY和UPDATE_TIME,和时间类型
+     * @param tableName  tableName
+     * @param pkName     主键名称
+     * @param maxId      最大的SEQ
+     * @param commitData commitData
+     * @param columns    这是此表的所有字段属性名称,用来判断是否所有UPDATE_BY和UPDATE_TIME,和时间类型
      * @return com.boman.system.common.RowResult
      */
-    RowResult insertRow(String tableName, String pkName, Long maxId, MainTableRecord row, List<GenTableColumn> columns);
+    RowResult insertRow(String tableName, String pkName, Long maxId, JSONObject commitData, List<GenTableColumn> columns);
 
 }

+ 25 - 5
boman-web-core/src/main/java/com/boman/web/core/service/update/BaseUpdateServiceImpl.java

@@ -3,13 +3,15 @@ package com.boman.web.core.service.update;
 import com.alibaba.fastjson.JSONObject;
 import com.boman.common.core.utils.obj.ObjectUtils;
 import com.boman.gen.domain.GenTableColumn;
-import com.boman.web.core.domain.TableServiceContext;
+import com.boman.web.core.constant.FormDataConstant;
+import com.boman.web.core.domain.TableContext;
 import com.boman.web.core.mapper.StandardlyMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.sql.Timestamp;
 import java.util.List;
 import java.util.Map;
 
@@ -36,17 +38,35 @@ public class BaseUpdateServiceImpl implements IBaseUpdateService {
      * @param pkName     主键名
      * @param idList     idList
      * @param commitData 需要更改的model, 已经转义好了,不需要到mapper层再去转义
+     * @param columns    这是此表的所有字段属性名称,用来判断是否所有UPDATE_BY和UPDATE_TIME,和时间类型
      * @return int
      */
     @Override
-    public int updateByIdList(TableServiceContext context, String pkName, List<Long> idList, JSONObject commitData) {
-        requireNonNull(context.getRealTableName(), "表名为空");
+    public int updateByIdList(TableContext context, String pkName, List<Long> idList, JSONObject commitData, List<GenTableColumn> columns) {
+        requireNonNull(context.getTableName(), "表名为空");
         requireNonNull(pkName, "主键名称为空");;
         requireNonNull(idList, "需要修改的idList为空");
         requireNonNull(commitData, "需要更改的参数为空");
 
-        commitData = ObjectUtils.ifNullSetEmpty(escapeByQueryType(context.getTable().getColumns(), commitData));
-        return mapper.updateByIdList(context.getRealTableName(), pkName, idList, commitData);
+        Timestamp currentTime = new Timestamp(System.currentTimeMillis());
+        commitData = ObjectUtils.ifNullSetEmpty(escapeByQueryType(columns, commitData));
+        for (GenTableColumn column : columns) {
+            // 判断是否有修改人、修改时间
+            if (FormDataConstant.UPDATE_BY.equalsIgnoreCase(column.getColumnName())) {
+                commitData.put(FormDataConstant.UPDATE_BY, "张三");
+            }
+            if (FormDataConstant.UPDATE_TIME.equalsIgnoreCase(column.getColumnName())) {
+                commitData.put(FormDataConstant.UPDATE_TIME, currentTime);
+            }
+
+            // 如果某一列是datetime类型,需要把类型转成datetime,否则数据库会报错
+            if (FormDataConstant.DATETIME.equalsIgnoreCase(column.getColumnType())) {
+                String columnName = column.getColumnName().toUpperCase();
+                commitData.put(columnName, commitData.getTimestamp(columnName));
+            }
+        }
+
+        return mapper.updateByIdList(context.getTableName(), pkName, idList, commitData);
     }
 
     private JSONObject escapeByQueryType(List<GenTableColumn> columns, JSONObject commitData) {

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

@@ -1,7 +1,8 @@
 package com.boman.web.core.service.update;
 
 import com.alibaba.fastjson.JSONObject;
-import com.boman.web.core.domain.TableServiceContext;
+import com.boman.gen.domain.GenTableColumn;
+import com.boman.web.core.domain.TableContext;
 
 import java.util.List;
 
@@ -20,5 +21,5 @@ public interface IBaseUpdateService {
      * @param commitData 需要更改的model, 已经转义好了,不需要到mapper层再去转义
      * @return int
      */
-    int updateByIdList(TableServiceContext context, String pkName, List<Long> idList, JSONObject commitData);
+    int updateByIdList(TableContext context, String pkName, List<Long> idList, JSONObject commitData, List<GenTableColumn> columns);
 }