Explorar o código

复杂对象保存

shiqian %!s(int64=4) %!d(string=hai) anos
pai
achega
103077a8be

+ 26 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/dto/FormDataDto.java

@@ -41,6 +41,16 @@ public class FormDataDto implements Serializable {
     @JSONField(name = "idList")
     private List<Long> idList;
 
+    /**
+     * 保存复杂对象时的子对象
+     */
+    private List<FormDataDto> children;
+
+    /**
+     * showData
+     */
+    private List<String> showData;
+
     /**
      * 批量提交时,提交到后台的数据
      */
@@ -248,6 +258,22 @@ public class FormDataDto implements Serializable {
     public void setSubmitSource(String submitSource) {
         this.submitSource = submitSource;
     }
+
+    public List<FormDataDto> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<FormDataDto> children) {
+        this.children = children;
+    }
+
+    public List<String> getShowData() {
+        return showData;
+    }
+
+    public void setShowData(List<String> showData) {
+        this.showData = showData;
+    }
 }
 
 

+ 13 - 0
boman-web-core/src/main/java/com/boman/web/core/controller/ObjController.java

@@ -49,6 +49,19 @@ public class ObjController {
         return tableServiceCmdService.objectSave(formDataDto);
     }
 
+
+    /**
+     * 功能描述: 复杂对象保存, 对象中包含对象
+     *
+     * @param dto dto
+     * @return com.boman.domain.dto.AjaxResult
+     */
+    @ApiOperation(value = "复杂对象保存")
+    @PostMapping("/complex/save")
+    public AjaxResult complexSave(@RequestBody FormDataDto dto) {
+        return tableServiceCmdService.complexSave(dto);
+    }
+
     /**
      * 功能描述: 通用删除接口 (真的删除)
      * eg:  {

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

@@ -3,7 +3,6 @@ package com.boman.web.core.service;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.boman.common.core.utils.JSONArrayUtils;
 import com.boman.domain.constant.CacheConstants;
 import com.boman.common.core.utils.SecurityUtils;
 import com.boman.common.core.utils.StringUtils;
@@ -45,6 +44,8 @@ import org.apache.commons.lang3.BooleanUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
@@ -154,6 +155,27 @@ public class TableServiceCmdService {
 
     }
 
+    /**
+     * 功能描述: 复杂对象保存(本地事务)
+     *
+     * @param dto dto
+     * @return com.boman.domain.dto.AjaxResult
+     */
+    @Transactional(isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
+    public AjaxResult complexSave(FormDataDto dto) {
+        // 取出所有的孩子
+        List<FormDataDto> result = Lists.newArrayList(dto);
+        recursionAllChildrenFromDto(dto, result);
+
+        List<AjaxResult> resultList = new ArrayList<>(result.size());
+        for (FormDataDto formDataDto : result) {
+            AjaxResult ajaxResult = objectSave(formDataDto);
+            resultList.add(ajaxResult);
+        }
+
+        return AjaxResult.success(resultList);
+    }
+
     /**
      * 功能描述: 通用删除接口 (真的删除)
      *
@@ -261,7 +283,7 @@ public class TableServiceCmdService {
         checkColumn(condition, columns);
         // 封装好以后的查询条件
         JSONObject packCondition = ifNullSetEmpty(selectService.packColCondition(columns, condition));
-        JSONArray showData = fixedData.getJSONArray(SHOW_DATA);
+        List<String> showData = dto.getShowData();
         // 检查列
         checkColumn(showData, genTable.getColumns());
         // 需要返回到前台的列, 需要判断是否是列表展示, 4为判断列表是否可见
@@ -278,7 +300,7 @@ public class TableServiceCmdService {
             return AjaxResult.success(rows);
         }
 
-        List<JSONObject> result = selectService.selectByCondition(tableName, condition, packCondition, JSONArrayUtils.toList(showData), dto);
+        List<JSONObject> result = selectService.selectByCondition(tableName, condition, packCondition, showData, dto);
         result = filter(result, ObjectUtils::isNotEmpty);
 
         // 查询时为null的列不显示的处理
@@ -998,7 +1020,26 @@ public class TableServiceCmdService {
         }else{
             jo.put("valuedata", jsonObject.get(columnName));
         }
+    }
 
+    private void recursionAllChildrenFromDto(FormDataDto dto, List<FormDataDto> result) {
+        List<FormDataDto> children = dto.getChildren();
+        if (isEmpty(children)) {
+            result.add(dto);
+            return;
+        }
+
+        for (FormDataDto child : children) {
+            result.add(child);
+            if (hasChild(child)) {
+                recursionAllChildrenFromDto(child, result);
+            }
+        }
+    }
+
+    private boolean hasChild(FormDataDto dto) {
+        return isNotEmpty(dto.getChildren());
     }
+
 }
 

+ 6 - 8
boman-web-core/src/main/java/com/boman/web/core/utils/ColumnUtils.java

@@ -1,6 +1,5 @@
 package com.boman.web.core.utils;
 
-import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.util.TypeUtils;
 import com.boman.common.core.utils.SecurityUtils;
@@ -145,9 +144,9 @@ public class ColumnUtils {
      *                   sort=5  =>  列表可修改
      * @return JSONArray
      */
-    public static JSONArray filterMaskColumnName(List<GenTableColumn> allColumns, int maskIndex, Predicate<String> predicate) {
+    public static List<String> filterMaskColumnName(List<GenTableColumn> allColumns, int maskIndex, Predicate<String> predicate) {
         assert maskIndex < 6;
-        JSONArray returnData = new JSONArray(16);
+        List<String> returnData = new ArrayList<>(16);
         for (GenTableColumn allColumn : allColumns) {
             if (HR.equals(allColumn.getHtmlType())) {
                 continue;
@@ -170,9 +169,9 @@ public class ColumnUtils {
      * @param predicate  predicate
      * @return JSONArray
      */
-    public static JSONArray filterData(List<GenTableColumn> allColumns, int maskIndex, JSONArray data, Predicate<String> predicate) {
+    public static List<String> filterData(List<GenTableColumn> allColumns, int maskIndex, List<String> data, Predicate<String> predicate) {
         assert maskIndex < 6;
-        JSONArray returnData = new JSONArray();
+        List<String> returnData = new ArrayList<>(16);
         boolean dataIsEmpty = isEmpty(data);
         if (dataIsEmpty) {
             // data为空,拿出所有列中列表可见的
@@ -235,15 +234,14 @@ public class ColumnUtils {
      * @param target 前台传过来的列
      * @param origin 此表对应的所有的列
      */
-    public static void checkColumn(List<Object> target, List<GenTableColumn> origin) {
+    public static void checkColumn(List<String> target, List<GenTableColumn> origin) {
         if (ObjectUtils.isEmpty(target) || ObjectUtils.isEmpty(origin)) {
             return;
         }
 
         String tableName = origin.get(0).getTableName();
         List<String> all = map(origin, GenTableColumn::getColumnName);
-        for (Object obj : target) {
-            String columnName = (String) obj;
+        for (String columnName : target) {
             if (!CollectionUtils.containsIgnoreCase(all, columnName)) {
                 throw new UnknownColumnException("此表 [" + tableName + "]中没有 [" + columnName + "] 字段");
             }

+ 6 - 5
boman-web-core/src/main/java/com/boman/web/core/utils/IdUtils.java

@@ -9,6 +9,7 @@ import com.boman.domain.GenTableColumn;
 import com.boman.web.core.mapper.StandardlyMapper;
 import org.apache.commons.collections.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import static com.boman.common.core.utils.obj.ObjectUtils.isEmpty;
@@ -63,13 +64,13 @@ public class IdUtils {
         return getPkName(ColumnUtils.getColumnList(tableName));
     }
 
-    public static void putIfNotContains(JSONArray jsonArray, String input) {
-        if (isEmpty(jsonArray)) {
-            jsonArray = new JSONArray();
+    public static void putIfNotContains(List<String> list, String input) {
+        if (isEmpty(list)) {
+            list = new ArrayList<>(0);
         }
 
-        if (!jsonArray.contains(input)) {
-            jsonArray.add(input);
+        if (!list.contains(input)) {
+            list.add(input);
         }
     }