Browse Source

Merge branch 'dev' of http://219.151.181.73:3000/zhuwei/bladex into dev

lvy 1 day ago
parent
commit
5b1dec72fa
18 changed files with 189 additions and 46 deletions
  1. 1 1
      blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/SmsEndpoint.java
  2. 12 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/SaveBatchWbsTreeDTO.java
  3. 0 4
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsTreePrivate.java
  4. 37 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ExcelTabVO2.java
  5. 3 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  6. 6 6
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  7. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  8. 7 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  9. 1 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/InformationImportRecordController.java
  10. 8 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java
  11. 10 8
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java
  12. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.java
  13. 12 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml
  14. 3 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java
  15. 3 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java
  16. 42 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  17. 2 15
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousServiceImpl.java
  18. 39 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

+ 1 - 1
blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/SmsEndpoint.java

@@ -94,7 +94,7 @@ public class SmsEndpoint {
     @PostMapping("/send-message")
     public R sendMessage(BladeUser user, @RequestParam String code, @RequestParam String params, @RequestParam String phones) {
         Map<String, String> paramss = JsonUtil.readMap(params, String.class, String.class);
-        //paramss.put("name",user.getNickName());
+        paramss.put("name",user.getNickName());
         SmsData smsData = new SmsData(paramss);
         return send(code, smsData, phones);
     }

+ 12 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/SaveBatchWbsTreeDTO.java

@@ -0,0 +1,12 @@
+package org.springblade.manager.dto;
+
+import lombok.Data;
+import org.springblade.manager.vo.ExcelTabVO2;
+
+import java.util.List;
+@Data
+public class SaveBatchWbsTreeDTO {
+    private List<ExcelTabVO2> list;
+    private Long nodeId;
+    private Long wbsId;
+}

+ 0 - 4
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsTreePrivate.java

@@ -269,8 +269,4 @@ public class WbsTreePrivate extends BaseEntity {
 
     @ApiModelProperty(value = "附件类型(复选)")
     private String tableFileType;
-
-    @ApiModelProperty(value = "是否默认隐藏,0:否,1:是")
-    private Integer defaultConceal;
-
 }

+ 37 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ExcelTabVO2.java

@@ -0,0 +1,37 @@
+package org.springblade.manager.vo;
+
+import lombok.Data;
+
+@Data
+public class ExcelTabVO2 {
+    /**
+     * 清表id
+     */
+    private Long excelTabId;
+    /**
+     * 清表名称
+     */
+    private String excelTabName;
+    /**
+     * 元素表名称
+     */
+    private String elementTableName;
+    /**
+     * 表单类型
+     */
+    private Integer tableType;
+
+    /**
+     * 所属方
+     */
+    private Integer tableOwner;
+
+    /**
+     * 是否创建 0 可以创建  1已存在元素表,2未创建元素表,3未上传清表
+     */
+    private Integer isCreate;
+
+    private String initTableName;
+
+    private Long initTabId;
+}

+ 3 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -5414,6 +5414,9 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 								auto.setFileNumber(fileNum);
 							}else if(result.contains("立卷单位")){
 								String unit=result.replace("立卷单位","").replace(":","").replace(":","").replaceAll("_","").replace("密级","").replace("级密","");
+								if(unit.startsWith(",")||unit.startsWith(".")||unit.startsWith("。")||unit.startsWith("——")||unit.startsWith("-")||unit.startsWith(",")){
+									unit=unit.substring(1);
+								}
 								auto.setUnit(unit);
 							}else if (result.contains("起止日期")) {
 								String time=result.replace("起止日期","").replace(":","").replace(":","").replaceAll("_","");

+ 6 - 6
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -4387,11 +4387,11 @@ public R<Boolean> saveContractTreeNode(@RequestBody AddContractTreeNodeVO vo) {
                 //if (Optional.ofNullable(half.getNodeType()).orElse(7) <= 6) {
                     newData.setIsTypePrivatePid(half.getPKeyId());
                 //}
-                //2025年12月05日10:18更改需求,需要与项目级一致
-                if (half.getType() != null && new Integer("2").equals(half.getType())) {
-                    //2023年8月1日14:41:03更改需求,isBussShow默认=1
-                    newData.setIsBussShow(half.getDefaultConceal() + 1);
-                }
+//                //2025年12月05日10:18更改需求,需要与项目级一致
+//                if (half.getType() != null && new Integer("2").equals(half.getType())) {
+//                    //2023年8月1日14:41:03更改需求,isBussShow默认=1
+//                    newData.setIsBussShow(half.getIsBussShow());
+//                }
 
                 //获取当前所有复制的节点的最大sort
                 newData.setSort(ObjectUtils.isNotEmpty(half.getSort()) ? half.getSort() : 0);
@@ -4812,7 +4812,7 @@ private void foreachQueryChild(List<Long> parentIdsList, List<WbsTreePrivateAddV
         " and project_id = " + wbsTreeContract.getProjectId() +
         " and wbs_id = " + wbsTreeContract.getWbsId() +
         " and wbs_type = " + wbsTreeContract.getWbsType() +
-        " and is_deleted = 0 and status = 1";
+        " and is_deleted = 0 ";
     List<WbsTreePrivateAddVO> childS = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreePrivateAddVO.class));
     if (childS.size() > 0) {
         childList.addAll(childS);

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -207,7 +207,7 @@ public class TaskController extends BladeController {
         String code = String.valueOf((int) (Math.random() * 9000 + 1000));
         Map<String, String> params = new HashMap<>(3);
         params.put("code", code);
-        //params.put("name", user.getNickName());
+        params.put("name", user.getNickName());
         R<SmsResponse> result = this.newSmsClient.sendMessage("test_code", JsonUtil.toJson(params), phone);
         if (result.getData().isSuccess()) {
             //记录当前验证码

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -5344,4 +5344,11 @@ public class ExcelTabController extends BladeController {
         }
         System.out.println("检查完毕");
     }
+
+    @GetMapping("/getWbsTreeExcelTab")
+    @ApiOperation("获取批量挂表时的Excel表")
+    public R <ExcelTabVO2> getWbsTreeExcelTab(@RequestParam Long id,@RequestParam Long nodeId){
+        return R.data(excelTabService.getWbsTreeExcelTab(id,nodeId));
+    }
+
 }

+ 1 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/InformationImportRecordController.java

@@ -413,13 +413,7 @@ public class InformationImportRecordController extends BladeController {
             newData.setCreateTime(new Date());
             newData.setIsTypePrivatePid(half.getPKeyId());
             if (half.getType() != null && new Integer("2").equals(half.getType())) {
-                if (half.getDefaultConceal() != null &&  half.getDefaultConceal() == 1) {
-                    // 后续如果此表格中有数据再修改成 1
-                    newData.setIsBussShow(2);
-                } else {
-                    //2023年8月1日14:41:03更改需求,isBussShow默认=1
-                    newData.setIsBussShow(1);
-                }
+                newData.setIsBussShow(half.getIsBussShow());
             }
             //获取当前所有复制的节点的最大sort
             newData.setSort(ObjectUtils.isNotEmpty(half.getSort()) ? half.getSort() : 0);

+ 8 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java

@@ -23,6 +23,7 @@ import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.manager.dto.FormElementDTO;
+import org.springblade.manager.dto.SaveBatchWbsTreeDTO;
 import org.springblade.manager.dto.WbsTreeDTO;
 import org.springblade.manager.dto.WbsTreeDTO2;
 import org.springblade.manager.entity.*;
@@ -587,6 +588,13 @@ public class WbsTreeController extends BladeController {
         return R.status(wbsTreeService.copyNode(vo.getLeftIds(),vo.getRightIds()));
     }
 
+
+    @PostMapping("/saveBatchWbsTree")
+    @ApiOperation("批量保存系统wbs表单")
+    public R saveBatchWbsTree(@RequestBody SaveBatchWbsTreeDTO dto){
+        return wbsTreeService.saveBatchWbsTree(dto);
+    }
+
 }
 
 

+ 10 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java

@@ -726,7 +726,7 @@ public class WbsTreePrivateController extends BladeController {
     }
 
     /**
-     * 隐藏/启用表单
+     * 隐藏/启用表单 隐藏后的表单客户端是看不到的
      */
     @ApiOperationSupport(order = 11)
     @ApiOperation(value = "隐藏/启用表单", notes = "传入pKeyId")
@@ -1299,7 +1299,7 @@ public class WbsTreePrivateController extends BladeController {
 
 
     /**
-     * 设置/取消 表单默认隐藏
+     * 设置/取消 表单默认隐藏 隐藏后的表单客户端是可以看到,但是为灰色状态
      */
     @GetMapping("/showTable")
     @ApiOperationSupport(order = 41)
@@ -1310,18 +1310,20 @@ public class WbsTreePrivateController extends BladeController {
         if (pKeyId == null) {
             return R.fail("参数错误");
         }
-        WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().select(WbsTreePrivate::getPKeyId, WbsTreePrivate::getDefaultConceal, WbsTreePrivate::getProjectId)
+        WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().select(WbsTreePrivate::getPKeyId, WbsTreePrivate::getIsBussShow, WbsTreePrivate::getProjectId)
                 .eq(WbsTreePrivate::getPKeyId, pKeyId).ne(WbsTreePrivate::getType, 1));
         if (wbsTreePrivate == null) {
             return R.fail("选择的表单不存在");
         }
-        int isDefaultConceal = 0;
-        if (wbsTreePrivate.getDefaultConceal() == null || wbsTreePrivate.getDefaultConceal() == 0) {
-            isDefaultConceal = 1;
+        int isBUssShow;
+        if(wbsTreePrivate.getIsBussShow()==null||wbsTreePrivate.getIsBussShow()==1||wbsTreePrivate.getIsBussShow()==0){
+            isBUssShow=2;
+        }else {
+            isBUssShow=1;
         }
-        boolean update = wbsTreePrivateService.update(Wrappers.<WbsTreePrivate>lambdaUpdate().eq(WbsTreePrivate::getPKeyId, pKeyId).set(WbsTreePrivate::getDefaultConceal, isDefaultConceal).set(WbsTreePrivate::getIsBussShow, isDefaultConceal + 1));
+        boolean update = wbsTreePrivateService.update(Wrappers.<WbsTreePrivate>lambdaUpdate().eq(WbsTreePrivate::getPKeyId, pKeyId).set(WbsTreePrivate::getIsBussShow, isBUssShow));
         if ( update) {
-            jdbcTemplate.execute("update m_wbs_tree_contract set is_buss_show =  " + (isDefaultConceal + 1) + " where is_deleted = 0 and is_type_private_pid = " + pKeyId + " and project_id = " + wbsTreePrivate.getProjectId());
+            jdbcTemplate.execute("update m_wbs_tree_contract set is_buss_show =  " + isBUssShow + " where is_deleted = 0 and is_type_private_pid = " + pKeyId + " and project_id = " + wbsTreePrivate.getProjectId());
         }
         return R.data(update);
     }

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.java

@@ -104,4 +104,6 @@ public interface WbsTreeMapper extends EasyBaseMapper<WbsTree> {
                                        @Param("wbsType")Integer wbsType);
 
     List<WbsTree> selectAllChildNode(@Param("leftIds") List<Long> leftIds);
+
+    Integer getMaxSort(@Param("nodeId") Long nodeId);
 }

+ 12 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml

@@ -588,5 +588,17 @@
             )
         </if>
     </select>
+    <select id="getMaxSort" resultType="java.lang.Integer">
+        SELECT
+            CASE
+                WHEN COUNT(*) = 0 THEN 0
+                WHEN COUNT(CASE WHEN sort IS NOT NULL THEN 1 END) = 0 THEN 0
+                ELSE MAX(sort)
+                END AS maxSort
+        FROM m_wbs_tree
+        WHERE type = 2
+          AND is_deleted = 0
+          AND parent_id = #{nodeId}
+    </select>
 
 </mapper>

+ 3 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java

@@ -31,10 +31,7 @@ import org.springblade.manager.entity.ExcelTab;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.enums.ExecuteType;
-import org.springblade.manager.vo.ExceTabTreVO;
-import org.springblade.manager.vo.ExcelTabVO;
-import org.springblade.manager.vo.ExcelTabWbsTypeVO;
-import org.springblade.manager.vo.WbsTreeVO;
+import org.springblade.manager.vo.*;
 
 import java.io.FileNotFoundException;
 import java.sql.SQLException;
@@ -230,4 +227,6 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
     void setAutomatic(Long pkeyId, String string, Document doc);
 
     StringBuilder buildMTableInsertSql(String tabName, Map<String, String> dataMap2, Object id, Object groupId, Object pKeyId);
+
+    ExcelTabVO2 getWbsTreeExcelTab(Long id,Long nodeId);
 }

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java

@@ -4,6 +4,7 @@ import org.springblade.core.mp.base.BaseService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.tool.api.R;
 import org.springblade.manager.dto.FormElementDTO;
+import org.springblade.manager.dto.SaveBatchWbsTreeDTO;
 import org.springblade.manager.dto.WbsTreeContractDTO;
 import org.springblade.manager.dto.WbsTreeDTO2;
 import org.springblade.manager.entity.WbsTree;
@@ -83,4 +84,6 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
     Object getQueryValueByNodeType(WbsTreePrivateQueryVO vo);
 
     boolean copyNode(List<Long> leftIds, List<Long> rightIds);
+
+    R saveBatchWbsTree(SaveBatchWbsTreeDTO dto);
 }

+ 42 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -134,6 +134,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     private final TableInfoServiceImpl tableInfoService;
     private final INodeBaseInfoService nodeBaseInfoService;
     private final TrialSelfInspectionRecordClient trialSelfInspectionRecordClient;
+    private final IWbsTreeService wbsTreeService;
     // excel 解析结构
     private final IExctabCellService exctabCellService;
     private final WbsTreeContractOldHtmlService wbsTreeContractOldHtmlService;
@@ -1870,6 +1871,47 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         return sql;
     }
 
+    @Override
+    public ExcelTabVO2 getWbsTreeExcelTab(Long id,Long nodeId) {
+        ExcelTabVO2 vo2 = new ExcelTabVO2();
+        ExcelTab excelTab = this.getById(id);
+        if(excelTab==null){
+            throw new ServiceException("未找到该表单");
+        }
+        vo2.setExcelTabId(excelTab.getId());
+        vo2.setExcelTabName(excelTab.getName());
+        if(StringUtils.isNotEmpty(excelTab.getTabId())){
+            org.springblade.manager.entity.TableInfo tableInfo = tableInfoService.getById(excelTab.getTabId());
+            if(tableInfo!=null){
+                vo2.setElementTableName(tableInfo.getTabChName());
+                vo2.setTableType(tableInfo.getTabType());
+                vo2.setInitTableName(tableInfo.getTabEnName());
+                vo2.setInitTabId(tableInfo.getId());
+                //判断同级其他节点 是否存在相同元素表
+                List<WbsNodeTableVO> wbsNodeTableVOS = wbsTreeService.selectByNodeTable(nodeId+"");
+                if(!wbsNodeTableVOS.isEmpty()){
+                    Set<String> initTabIds = wbsNodeTableVOS.stream().map(WbsNodeTableVO::getInitTableId).filter(StringUtils::isNotEmpty).collect(Collectors.toSet());
+                    if(!initTabIds.isEmpty()){
+                        if(initTabIds.contains(tableInfo.getId()+"")){
+                            vo2.setIsCreate(1);
+                        }
+                    }
+                }
+            }else {
+                vo2.setIsCreate(2);
+            }
+        }else {
+            vo2.setIsCreate(2);
+        }
+        if(StringUtils.isEmpty(excelTab.getFileUrl())){
+            vo2.setIsCreate(3);
+        }
+        if(vo2.getIsCreate()==null){
+            vo2.setIsCreate(0);
+        }
+        return vo2;
+    }
+
     // 获取用户
     @Override
     public Map<String, String> getTablbCols(String pkeyid, String colkey) throws FileNotFoundException {

+ 2 - 15
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousServiceImpl.java

@@ -286,7 +286,6 @@ public class WbsSynchronousServiceImpl {
                     templateNodes.forEach(f -> {
                         f.setPKeyId(f.getId());
                         f.setTreePId(f.getId());
-                        f.setDefaultConceal(0);
                     });
 
                 } else {
@@ -342,10 +341,6 @@ public class WbsSynchronousServiceImpl {
                 //新增数据二次筛选  只保留任务选中的表单   但可能新增的数据包含新节点
                 if (CollectionUtil.isNotEmpty(formList)) {
                     addPrivateNodes = addPrivateNodes.stream().filter(f -> f.getType() == 1 || formList.contains(f.getPKeyId())).collect(Collectors.toList());
-                    //新增表单时
-                    addPrivateNodes.forEach(f->{
-                        f.setIsBussShow(f.getDefaultConceal() + 1);
-                    });
                 }
 
                 //筛选出需要更新的节点  同时做数据隔离
@@ -449,10 +444,7 @@ public class WbsSynchronousServiceImpl {
                                 editPrivateNode.setInitTableName(templateNode.getInitTableName());
                                 //绑定隐藏信息
                                 editPrivateNode.setStatus(templateNode.getStatus());
-                                editPrivateNode.setDefaultConceal(templateNode.getDefaultConceal());
-                                //合同段是根据这个字段隐藏的
-                                editPrivateNode.setIsBussShow(templateNode.getDefaultConceal() + 1);
-
+                                editPrivateNode.setIsBussShow(templateNode.getIsBussShow());
                                 if (StringUtil.isBlank(templateNode.getHtmlUrl())) {
                                     throw new ServiceException(templateNode.getNodeName() + "( " + templateNode.getPKeyId() + ")HTML文件不存在");
                                 }
@@ -832,12 +824,7 @@ public class WbsSynchronousServiceImpl {
                     //合同段新增节点
                     List<WbsTreeContract> addContractNode = null;
                     if (addPrivateNodes != null && (CollectionUtil.isEmpty(collect) || collect.contains(1))) {
-                        addContractNode = new ArrayList<>();
-                        for (WbsTreePrivate addPrivateNode : addPrivateNodes) {
-                            WbsTreeContract wbsTreeContract1 = BeanUtil.copyProperties(addPrivateNode, WbsTreeContract.class);
-                            wbsTreeContract1.setIsBussShow(addPrivateNode.getDefaultConceal() + 1);
-                            addContractNode.add(wbsTreeContract1);
-                        }
+                        addContractNode = BeanUtil.copyProperties(addPrivateNodes, WbsTreeContract.class);
                     }
 
                     if (CollectionUtil.isNotEmpty(addContractNode)) {

+ 39 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -656,6 +656,45 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         return true;
     }
 
+    @Override
+    public R saveBatchWbsTree(SaveBatchWbsTreeDTO dto) {
+        List<WbsTree>insertList=new ArrayList<>();
+        WbsTree parentNode = this.getById(dto.getNodeId());
+        String tenantId = AuthUtil.getTenantId();
+        if(parentNode==null){
+            return R.fail(201, "父节点不存在");
+        }
+        Integer maxSort=this.baseMapper.getMaxSort(dto.getNodeId());
+        for (ExcelTabVO2 vo2 : dto.getList()) {
+            WbsTree wbsTree = new WbsTree();
+            wbsTree.setId(SnowFlakeUtil.getId());
+            wbsTree.setWbsId(dto.getWbsId()+"");
+            wbsTree.setTenantId(tenantId);
+            wbsTree.setParentId(dto.getNodeId());
+            wbsTree.setAncestors(parentNode.getAncestors()+","+parentNode.getId());
+            wbsTree.setNodeType(1);
+            wbsTree.setNodeName(vo2.getElementTableName());
+            wbsTree.setFullName(vo2.getElementTableName());
+            wbsTree.setSort(++maxSort);
+            wbsTree.setType(2);
+            wbsTree.setTableType(vo2.getTableType());
+            wbsTree.setStatus(1);
+            wbsTree.setTableOwner(vo2.getTableOwner()+"");
+            wbsTree.setInitTableName(vo2.getInitTableName());
+            wbsTree.setIsLinkTable(2);
+            wbsTree.setInitTableId(vo2.getInitTabId());
+            insertList.add(wbsTree);
+        }
+        if(!insertList.isEmpty()){
+            this.saveBatch(insertList);
+        }
+        if(parentNode.getIsExistForm()==null||parentNode.getIsExistForm()==0){
+            parentNode.setIsExistForm(1);
+            this.updateById(parentNode);
+        }
+        return R.success("保存成功");
+    }
+
     /**
      * 重新构建整个树的id、parentId和ancestors
      */