liuyc 3 роки тому
батько
коміт
c29ced54bb
14 змінених файлів з 155 додано та 29 видалено
  1. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractTreeVO3.java
  2. 4 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractTreeVOS.java
  3. 4 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  4. 3 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java
  5. 2 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java
  6. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java
  7. 0 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml
  8. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.java
  9. 26 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml
  10. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.java
  11. 21 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml
  12. 7 6
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  13. 42 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  14. 34 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

+ 6 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractTreeVO3.java

@@ -67,4 +67,10 @@ public class WbsTreeContractTreeVO3 implements INode<WbsTreeContractTreeVO3> {
 
     private String title;
 
+    private Long originallyId;
+
+    private Long originallyPkeyId;
+
+    private boolean notExsitChild;
+
 }

+ 4 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractTreeVOS.java

@@ -82,6 +82,10 @@ public class WbsTreeContractTreeVOS extends WbsTreeContract implements INode<Wbs
 
     private Integer majorDataType;
 
+    private Long originallyId;
+
+    private Long originallyPkeyId;
+
     @Override
     public List<WbsTreeContractTreeVOS> getChildren() {
         if (this.children == null) {

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

@@ -1585,7 +1585,10 @@ public class InformationWriteQueryController extends BladeController {
 			@ApiImplicitParam(name = "parentId", value = "父节点,为空则查询第一级节点"),
 			@ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
 	})
-	public R<List<WbsTreeContractTreeVOS>> queryContractWbsTreeByContractIdAndType(@RequestParam String parentId, @RequestParam String contractId, @RequestParam String contractIdRelation){
+	public R<List<WbsTreeContractTreeVOS>> queryContractWbsTreeByContractIdAndType(@RequestParam String primaryKeyId,@RequestParam String parentId, @RequestParam String contractId, @RequestParam String contractIdRelation){
+		if (StringUtils.isNotEmpty(primaryKeyId)){
+			parentId = primaryKeyId;
+		}
 		List<WbsTreeContractTreeVOS> rootTreeNode = this.queryContractTree(parentId, contractId, contractIdRelation);
 		rootTreeNode = rootTreeNode.stream().filter(vo -> vo.getDeptCategory() != 111).collect(Collectors.toList());
 

+ 3 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java

@@ -7,6 +7,7 @@ import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
 import org.springblade.core.cache.utils.CacheUtil;
 import org.springblade.core.excel.util.ExcelUtil;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.tool.api.R;
@@ -137,14 +138,14 @@ public class WbsTreeController extends BladeController {
     public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String id) {
         /*List<WbsTree> wbsTreeList = wbsTreeService.selectByWbsId(id);
         if (wbsTreeList.size() > 0) {
-            return R.fail("当前节点下存在子节点或表单,删除失败");
+            throw new ServiceException("当前节点下存在子节点或表单,删除失败");
         }*/
         List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
                 .eq(WbsTreePrivate::getStatus, 1)
                 .eq(WbsTreePrivate::getId, id)
         );
         if (wbsTreePrivates.size() > 0) {
-            return R.fail(200,"当前节点已被项目引用,删除失败");
+            throw new ServiceException("当前节点已被项目引用,删除失败");
         }
         return R.status(wbsTreeService.deleteLogicById(id));
     }

+ 2 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java

@@ -132,18 +132,16 @@ public class WbsTreePrivateController extends BladeController {
                 .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
                 .eq(WbsTreePrivate::getStatus, 1));
         if (wbsTreePrivate1.size() > 0) {
-            return R.fail("当前节点下存在子节点或表单,删除失败");
+            throw new ServiceException("当前节点下存在子节点或表单,删除失败");
         }*/
-
         List<WbsTreeContract> wbsTreeContracts = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
                 .eq(WbsTreeContract::getStatus, 1)
                 .eq(WbsTreeContract::getId, wbsTreePrivate.getId())
                 .eq(WbsTreeContract::getProjectId, wbsTreePrivate.getProjectId())
                 .eq(WbsTreeContract::getWbsId, wbsTreePrivate.getWbsId())
         );
-
         if (wbsTreeContracts.size() > 0) {
-            return R.fail("当前节点已被项目合同段引用,删除失败");
+            throw new ServiceException("当前节点已被合同段引用中,删除失败");
         }
         if (wbsTreePrivateService.deleteLogicBypKeyId(pKeyId) > 0) {
             return R.success("删除成功");

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java

@@ -110,6 +110,8 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
 
         vos.forEach(voData -> {
             voData.setLeaf(new Integer("6").equals(voData.getDeptCategory()));
+            voData.setId(voData.getOriginallyId());
+            voData.setPrimaryKeyId(String.valueOf(voData.getOriginallyPkeyId()));
             //检查是否有下级
             long count = this.wbsTreeContractService.count(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getParentId, voData.getPrimaryKeyId()).eq(WbsTreeContract::getContractId, voData.getContractIdRelation()).eq(WbsTreeContract::getType, 1));
             voData.setNotExsitChild(count == 0);

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

@@ -274,8 +274,6 @@
         WHERE
         d.is_deleted = 0
         AND d.status = 1
-        /*如果加上此条件,日志将不显示,暂注释*/
-        /*AND (major_data_type != 5 or major_data_type is null)*/
         AND d.type = 1
         <if test="wbsId!=null and wbsId!=''">
             and wbs_id = #{wbsId}

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

@@ -79,4 +79,6 @@ public interface WbsTreeContractMapper extends BaseMapper<WbsTreeContract> {
 
     void updateContractTablesInfo(@Param("contractInfoId") Long contractInfoId,@Param("wbsTreePrivate") WbsTreePrivate wbsTreePrivate);
 
+    void updateBatchWbsContract(@Param("listContract") List<WbsTreeContract> listContract);
+
 }

+ 26 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml

@@ -269,9 +269,9 @@
         ORDER BY dept.sort
     </select>
 
-
     <select id="lazyTreeThree" resultType="org.springblade.manager.vo.WbsTreeContractTreeVO3">
-        SELECT c.id AS "primaryKeyId",
+        SELECT
+        c.id AS "primaryKeyId",
         c.p_key_id AS "id",
         c.type AS "type",
         c.wbs_type AS "wbsType",
@@ -280,7 +280,8 @@
         c.dept_category AS "deptCategory",
         c.parent_id,
         c.tenant_id AS "tenantId",
-        -- IFNULL(c.full_name, c.dept_name) AS "title",
+        c.id AS "originallyId",
+        c.p_key_id AS "originallyPkeyId",
         case
         when c.full_name is null then c.dept_name
         when c.full_name = '' then c.dept_name
@@ -494,6 +495,27 @@
         AND is_deleted = 0
     </update>
 
+    <update id="updateBatchWbsContract" parameterType="java.util.List">
+        <foreach  collection="listContract" item="item" index="index" separator=";">
+            UPDATE m_wbs_tree_contract
+            <set>
+                dept_name = #{item.deptName},
+                full_name = #{item.deptName},
+                dept_category = #{item.deptCategory},
+                major_data_type = #{item.majorDataType},
+                unique_code = #{item.uniqueCode},
+                partition_code = #{item.partitionCode},
+                table_type = #{item.tableType},
+                table_owner = #{item.tableOwner}
+            </set>
+            WHERE id = #{item.id}
+            AND project_id = #{item.projectId}
+            AND contract_id = #{item.contractId}
+            AND status = 1
+            AND is_deleted = 0
+        </foreach>
+    </update>
+
     <select id="selectQueryValueLikeNodeName" resultMap="ResultMap">
         select * from m_wbs_tree_contract where is_deleted = 0 and contract_id = #{contractId} and (dept_name like concat('%',#{queryValue},'%') or full_name like concat('%',#{queryValue},'%')) and `type` = '1'
     </select>
@@ -518,4 +540,5 @@
         AND wbs_id = #{wbsId}
     </select>
 
+
 </mapper>

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

@@ -72,4 +72,6 @@ public interface WbsTreePrivateMapper extends BaseMapper<WbsTreePrivate> {
 
     void updateBatchByIds2(@Param("wbsTreePrivate") WbsTreePrivate wbsTreePrivate, @Param("projectId") String projectId, @Param("wbsId") String wbsId);
 
+    void updateBatchWbsPrivate(@Param("listPrivate")List<WbsTreePrivate> listPrivate);
+
 }

+ 21 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -238,6 +238,27 @@
           AND is_deleted = 0
     </update>
 
+    <update id="updateBatchWbsPrivate" parameterType="java.util.List">
+        <foreach  collection="listPrivate" item="item" index="index" separator=";">
+            UPDATE m_wbs_tree_private
+            <set>
+                dept_name = #{item.deptName},
+                full_name = #{item.deptName},
+                dept_category = #{item.deptCategory},
+                major_data_type = #{item.majorDataType},
+                unique_code = #{item.uniqueCode},
+                partition_code = #{item.partitionCode},
+                table_type = #{item.tableType},
+                table_owner = #{item.tableOwner}
+            </set>
+            WHERE id = #{item.id}
+            AND project_id = #{item.projectId}
+            AND wbs_id = #{item.wbsId}
+            AND status = 1
+            AND is_deleted = 0
+        </foreach>
+    </update>
+
     <select id="lazyTree" resultMap="treeNodeResultMap">
         SELECT
         dept.p_key_id as "primaryKeyId",

+ 7 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -9,7 +9,9 @@ import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.node.ForestNodeManager;
 import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.node.INode;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.manager.dto.WbsTreeContractDTO;
@@ -19,6 +21,7 @@ import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.IWbsTreeContractService;
 import org.springblade.manager.vo.WbsTreeContractTreeVO;
 import org.springblade.manager.vo.WbsTreeContractTreeVO3;
+import org.springblade.manager.vo.WbsTreeContractVO;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -317,7 +320,6 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         return ForestNodeMerger.merge(baseMapper.lazyTreeTwo(contractIdRelation, parentId, contractType, contractId));
     }
 
-
     public List<WbsTreeContractTreeVO3> lazyTreeThree(String contractIdRelation, Long parentId, String contractId) {
         //获取关联信息
         List<ContractRelationJlyz> listContractRelationInfo = baseMapper.selectContractRelationInfo(Long.valueOf(contractId));
@@ -326,22 +328,21 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         List<Long> idsSG = listContractRelationInfo.stream().map(ContractRelationJlyz::getContractIdSg).collect(Collectors.toList());
 
         if (StringUtils.isNotEmpty(contractIdRelation)) {
-            //施工合同段分节点下的子节点
+            //施工合同段wbs树
             return ForestNodeMerger.merge(baseMapper.lazyTreeThree(Collections.singletonList(Long.parseLong(contractIdRelation)), parentId));
 
         } else {
-            //监理合同下所引用的所有施工合同段根节点
+            //监理合同段wbs树
             List<WbsTreeContractTreeVO3> wbsTreeContractTreeVOS = baseMapper.lazyTreeThree(idsSG, 0L);
 
             for (WbsTreeContractTreeVO3 wbsTreeContractTreeVO : wbsTreeContractTreeVOS) {
                 if (wbsTreeContractTreeVO.getParentId().equals(0L)) {
-                    //获取施工合同段
+                    //设置根节点
                     ContractInfo contractInfo = baseMapper.selectContractInfo(String.valueOf(wbsTreeContractTreeVO.getContractId()));
                     wbsTreeContractTreeVO.setTitle(contractInfo.getContractName());
                 }
             }
             return ForestNodeMerger.merge(wbsTreeContractTreeVOS);
-
         }
     }
 
@@ -355,7 +356,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
         //当前项目合同段只会存在一个角色roleId
         SaveUserInfoByProject userInfo = baseMapper.selectRoleInfo(AuthUtil.getUserId(), contractId, projectId);
-        if (userInfo == null){
+        if (userInfo == null) {
             throw new ServiceException("请先分配当前用户对该合同段的角色信息");
         }
         String roleId = userInfo.getRoleId();

+ 42 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -10,6 +10,7 @@ import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.dto.WbsTreePrivateDTO2;
 import org.springblade.manager.dto.WbsTreePrivateDTO3;
@@ -294,6 +295,8 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
 
     @Override
     public boolean updateBatchByIds(List<WbsTree> wbsTreeListAll, List<WbsTreePrivate> wbsTreePrivatesAll, String projectId) {
+        List<WbsTreePrivate> listPrivate = new ArrayList<>();
+        List<WbsTreeContract> listContract = new ArrayList<>();
         //获取当前项目下所有合同段信息
         List<ContractInfo> contractInfos = contractInfoMapper.selectList(Wrappers.<ContractInfo>query().lambda().eq(ContractInfo::getPId, projectId));
 
@@ -308,21 +311,38 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                                 || (wbsTree.getMajorDataType() != null && !wbsTree.getMajorDataType().equals(wbsTreePrivate.getMajorDataType()))
                                 || (wbsTree.getTableType() != null && !wbsTree.getTableType().equals(wbsTreePrivate.getTableType()))
                                 || (wbsTree.getTableOwner() != null && !wbsTree.getTableOwner().equals(wbsTreePrivate.getTableOwner())))) {
-                    //同步修改私有项目节点、元素表基础信息
-                    baseMapper.updateBatchByIds(wbsTree, projectId);
+                    //修改项目wbs信息
+                    //baseMapper.updateBatchByIds(wbsTree, projectId);
+                    WbsTreePrivate wbsPrivate = new WbsTreePrivate();
+                    BeanUtil.copyProperties(wbsTree,wbsPrivate);
+                    wbsPrivate.setProjectId(projectId);
+                    listPrivate.add(wbsPrivate);
 
-                    //同步修改合同段节点信息、元素表基础信息
                     for (ContractInfo contractInfo : contractInfos) {
-                        wbsTreeContractMapper.updateBatchByIds(wbsTree, contractInfo.getId());
+                        //修改合同段wbs信息
+                        //wbsTreeContractMapper.updateBatchByIds(wbsTree, contractInfo.getId());
+                        WbsTreeContract wbsContract = new WbsTreeContract();
+                        BeanUtil.copyProperties(wbsTree,wbsContract);
+                        wbsContract.setContractId(String.valueOf(contractInfo.getId()));
+                        wbsContract.setProjectId(projectId);
+                        listContract.add(wbsContract);
                     }
                 }
             }
         }
+        try {
+            baseMapper.updateBatchWbsPrivate(listPrivate);
+            wbsTreeContractMapper.updateBatchWbsContract(listContract);
+        }catch (Exception e){
+            throw new ServiceException("节点基础信息同步修改失败");
+        }
         return true;
     }
 
     @Override
     public boolean updateBatchByIds2(List<WbsTreePrivate> wbsTreePrivates, List<WbsTreePrivate> wbsTreePrivatesAllNow, String projectId, String wbsId) {
+        List<WbsTreePrivate> listPrivate = new ArrayList<>();
+        List<WbsTreeContract> listContract = new ArrayList<>();
         //获取当前项目下所有合同段信息
         List<ContractInfo> contractInfos = contractInfoMapper.selectList(Wrappers.<ContractInfo>query().lambda().eq(ContractInfo::getPId, projectId));
 
@@ -339,16 +359,31 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                                 || (wbsTreePrivate.getTableOwner() != null && !wbsTreePrivate.getTableOwner().equals(treePrivateNow.getTableOwner())))) {
 
                     //修改项目wbs信息
-                    baseMapper.updateBatchByIds2(wbsTreePrivate, projectId, wbsId);
+                    //baseMapper.updateBatchByIds2(wbsTreePrivate, projectId, wbsId);
+                    WbsTreePrivate wbsPrivate = new WbsTreePrivate();
+                    BeanUtil.copyProperties(wbsTreePrivate,wbsPrivate);
+                    wbsPrivate.setWbsId(wbsId);
+                    wbsPrivate.setProjectId(projectId);
+                    listPrivate.add(wbsPrivate);
 
                     for (ContractInfo contractInfo : contractInfos) {
                         //修改合同段wbs信息
-                        wbsTreeContractMapper.updateBatchByIds2(wbsTreePrivate, contractInfo.getId());
+                        //wbsTreeContractMapper.updateBatchByIds2(wbsTreePrivate, contractInfo.getId());
+                        WbsTreeContract wbsContract = new WbsTreeContract();
+                        BeanUtil.copyProperties(wbsTreePrivate,wbsContract);
+                        wbsContract.setContractId(String.valueOf(contractInfo.getId()));
+                        wbsContract.setProjectId(projectId);
+                        listContract.add(wbsContract);
                     }
-
                 }
             }
         }
+        try {
+            baseMapper.updateBatchWbsPrivate(listPrivate);
+            wbsTreeContractMapper.updateBatchWbsContract(listContract);
+        }catch (Exception e){
+            throw new ServiceException("节点基础信息同步修改失败");
+        }
         return true;
     }
 

+ 34 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -480,11 +480,25 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     wbsTreeZi.setId(SnowFlakeUtil.getId());
                     wbsTreeZi.setTenantId(AuthUtil.getTenantId());
                     wbsTreeZi.setDeptName(maps.getValue());
+                    wbsTreeZi.setFullName(maps.getValue());
                     wbsTreeZi.setDeptCategory(Integer.valueOf(maps.getKey()));
                     wbsTreeZi.setWbsId(wbsTreeFu.getWbsId());
                     wbsTreeZi.setParentId(wbsTreeFu.getParentId());
                     wbsTreeZi.setAncestors(wbsTreeFu.getAncestors());
                     wbsTreeZi.setProjectNodeId(wbsTree1.getProjectNodeId());
+                    wbsTreeZi.setMajorDataType(0);
+                    //内页资料
+                    if (wbsTreeZi.getDeptCategory() == 6 && !(("中间交工证书").equals(wbsTreeZi.getDeptName()) || ("分项工程质量检验评定表").equals(wbsTreeZi.getDeptName()) || ("分项工程开工报告").equals(wbsTreeZi.getDeptName()))) {
+                        wbsTreeZi.setMajorDataType(4);
+                    }else if (wbsTreeZi.getDeptCategory() == 5 || wbsTreeZi.getDeptCategory() == 4 || wbsTreeZi.getDeptCategory() == 3 || wbsTreeZi.getDeptCategory() == 2) {
+                        if (getContains(wbsTreeZi.getDeptName(),"开工报告")) {
+                            wbsTreeZi.setMajorDataType(1);
+                        } else if (getContains(wbsTreeZi.getDeptName(),"质量评定")) {
+                            wbsTreeZi.setMajorDataType(2);
+                        } else if (getContains(wbsTreeZi.getDeptName(),"中间交工")) {
+                            wbsTreeZi.setMajorDataType(3);
+                        }
+                    }
 
                     //构建参数
                     WbsTree wbsTree = buildTreeNode(wbsTreeZi, allNodeData);
@@ -530,7 +544,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     && tree.getDeptCategory().equals(wbsTreeZi.getDeptCategory())
                     && tree.getProjectNodeId().equals(wbsTreeZi.getProjectNodeId())) {
                 //判断上级节点不同,当前节点名相同的tree选择问题
-                //例如:第X跨的上级有上部构造现场浇筑、上部构造预制和安装,导致下方新增重复节点判断时找到的是前一个
+                //例如:第X跨的上级有上部构造现场浇筑、上部构造预制和安装,导致下方新增重复节点判断时找到的是前一个 TODO
                 if (!tree.getAncestors().equals(wbsTreeZi.getAncestors())) {
                     wbsTrees.add(tree);
                     break;
@@ -543,7 +557,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         if (wbsTrees.size() <= 0) {
             wbsTreeZi.setStatus(1);
             wbsTreeZi.setType(1);
-            wbsTreeZi.setMajorDataType(0);
             if (wbsTreeZi.getDeptCategory() == 6) {
                 wbsTreeZi.setIsConcrete(0);
                 wbsTreeZi.setIsExpernode(0);
@@ -556,7 +569,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     if (!wbsTreeZi.getParentId().equals(tree.getParentId()) && wbsTreeZi.getDeptName().equals(tree.getDeptName())) {
                         wbsTreeZi.setStatus(1);
                         wbsTreeZi.setType(1);
-                        wbsTreeZi.setMajorDataType(0);
                         if (wbsTreeZi.getDeptCategory() == 6) {
                             wbsTreeZi.setIsConcrete(0);
                             wbsTreeZi.setIsExpernode(0);
@@ -570,6 +582,24 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         return wbsTree;
     }
 
+    private boolean getContains(String A,String B){
+        boolean result = false;
+        char[] arrayA = A.toCharArray();
+        char[] arrayB = B.toCharArray();
+        int intLen = 0;
+        for(int i = 0;i < arrayB.length;i++){
+            for(int j = 0;j < arrayA.length;j++){
+                if(arrayB[i] == arrayA[j]){
+                    intLen++;
+                    break;
+                }
+            }
+        }
+        if(intLen == arrayB.length)
+            result = true;
+        return result;
+    }
+
     @Override
     public int deleteBatchByProjectNodeId(Long projectNodeId) {
         return baseMapper.deleteBatchProjectNodeId(projectNodeId);
@@ -985,7 +1015,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
             //2.新增
             if (saveIds.size() > 0) {
-                if (saveIds.size() >=  1000){ //新增1000个以上节点时,防止响应过慢重复提交
+                if (saveIds.size() >= 1000) { //新增1000个以上节点时,防止响应过慢重复提交
                     //获取Redis的Value
                     String redisValue = bladeRedis.get("submit-wbs-project:" + pawDTO.getProjectId());
                     if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {