Browse Source

修改同步bug

huangtf 2 years ago
parent
commit
418b491ee0

+ 45 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeVO2.java

@@ -11,6 +11,7 @@ import org.springblade.manager.entity.ArchiveTree;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.Objects;
 
 
 @Data
 @Data
 public class ArchiveTreeVO2 implements INodeEx<ArchiveTreeVO2> {
 public class ArchiveTreeVO2 implements INodeEx<ArchiveTreeVO2> {
@@ -198,4 +199,48 @@ public class ArchiveTreeVO2 implements INodeEx<ArchiveTreeVO2> {
     //修改标识 1为修改
     //修改标识 1为修改
     private Integer flag = 0;
     private Integer flag = 0;
 
 
+    public boolean isMatch(ArchiveTreeVO2 b){
+        return Objects.equals(this.nodeType, b.getNodeType()) &&
+                Objects.equals(this.postType, b.getPostType()) &&
+                Objects.equals(this.associationType, b.getAssociationType()) &&
+                Objects.equals(this.majorDataType, b.getMajorDataType()) &&
+                Objects.equals(this.displayHierarchy, b.getDisplayHierarchy()) &&
+                this.isStorageNode == b.getIsStorageNode() &&
+                this.isBuiltDrawing == b.getIsBuiltDrawing() &&
+                Objects.equals(this.projectType, b.getProjectType()) &&
+                Objects.equals(this.storageType, b.getStorageType()) &&
+                Objects.equals(this.expDataType, b.getExpDataType()) &&
+                Objects.equals(this.archiveAutoType, b.getArchiveAutoType()) &&
+                Objects.equals(this.archiveAutoNodeId, b.getArchiveAutoNodeId()) &&
+                Objects.equals(this.archiveAutoGroupId, b.getArchiveAutoGroupId()) &&
+                Objects.equals(this.archiveAutoGroupSelect, b.getArchiveAutoGroupSelect()) &&
+                this.isDisplayTree == b.getIsDisplayTree();
+    }
+
+    public void sync(ArchiveTreeVO2 archiveTree) {
+        if (isMatch(archiveTree)) {
+            return;
+        }
+
+        this.nodeType = archiveTree.getNodeType();
+        this.postType = archiveTree.getPostType();
+        this.associationType = archiveTree.getAssociationType();
+        this.majorDataType = archiveTree.getMajorDataType();
+        this.displayHierarchy = archiveTree.getDisplayHierarchy();
+        this.isStorageNode = archiveTree.getIsStorageNode();
+        this.isBuiltDrawing = archiveTree.getIsBuiltDrawing();
+        this.isInterfaceNode = archiveTree.getIsInterfaceNode();
+        this.projectType = archiveTree.getProjectType();
+        this.storageType = archiveTree.getStorageType();
+        this.expDataType = archiveTree.getExpDataType();
+        this.archiveAutoType = archiveTree.getArchiveAutoType();
+        this.archiveAutoNodeId = archiveTree.getArchiveAutoNodeId();
+        this.archiveAutoGroupId = archiveTree.getArchiveAutoGroupId();
+        this.archiveAutoGroupSelect = archiveTree.getArchiveAutoGroupSelect();
+        this.isUploadFileDisplayConfigurationTree = archiveTree.getIsDisplayTree();
+        this.isDisplayTree = archiveTree.getIsDisplayTree();
+        this.flag = 1;
+    }
+
+
 }
 }

+ 5 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArTreeContractInitServiceImpl.java

@@ -585,10 +585,10 @@ public class ArTreeContractInitServiceImpl {
 
 
                 archiveTreeContract.setAncestors(tmp.getAncestors());
                 archiveTreeContract.setAncestors(tmp.getAncestors());
                 archiveTreeContract.setTreeSort(tmp.getTreeSort());
                 archiveTreeContract.setTreeSort(tmp.getTreeSort());
-                archiveTreeContract.setArchiveAutoNodeId(archiveTreeContract.getArchiveAutoNodeId());
-                archiveTreeContract.setArchiveAutoType(archiveTreeContract.getArchiveAutoType());
-                archiveTreeContract.setArchiveAutoGroupId(archiveTreeContract.getArchiveAutoGroupId());
-                archiveTreeContract.setArchiveAutoGroupSelect(archiveTreeContract.getArchiveAutoGroupSelect());
+                archiveTreeContract.setArchiveAutoNodeId(tmp.getArchiveAutoNodeId());
+                archiveTreeContract.setArchiveAutoType(tmp.getArchiveAutoType());
+                archiveTreeContract.setArchiveAutoGroupId(tmp.getArchiveAutoGroupId());
+                archiveTreeContract.setArchiveAutoGroupSelect(tmp.getArchiveAutoGroupSelect());
                 //新增里有,就去update了,避免重复
                 //新增里有,就去update了,避免重复
                 tmp.setFlag(0);
                 tmp.setFlag(0);
 
 
@@ -639,6 +639,7 @@ public class ArTreeContractInitServiceImpl {
             treeContractVO2.setParentId(archiveTreeContract.getParentId());
             treeContractVO2.setParentId(archiveTreeContract.getParentId());
             treeContractVO2.setTitle(archiveTreeContract.getNodeName());
             treeContractVO2.setTitle(archiveTreeContract.getNodeName());
             treeContractVO2.setSort(archiveTreeContract.getSort());
             treeContractVO2.setSort(archiveTreeContract.getSort());
+            treeContractVO2.setFromId(archiveTreeContract.getFromId());
 
 
             treeContractVO2.setArchiveAutoNodeId(archiveTreeContract.getArchiveAutoNodeId());
             treeContractVO2.setArchiveAutoNodeId(archiveTreeContract.getArchiveAutoNodeId());
             treeContractVO2.setArchiveAutoType(archiveTreeContract.getArchiveAutoType());
             treeContractVO2.setArchiveAutoType(archiveTreeContract.getArchiveAutoType());

+ 6 - 91
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

@@ -429,7 +429,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 
 
 		//看看有没有合同段要复制
 		//看看有没有合同段要复制
 		if (bHasContract) {
 		if (bHasContract) {
-			AddNewContract(contractInfos,srcTree,dstTree,dstNode,saveList);
+			addNewContract(contractInfos,srcTree,dstTree,dstNode,saveList);
 		}
 		}
 
 
 		//如果有新的合同段,合并新增代码到
 		//如果有新的合同段,合并新增代码到
@@ -439,7 +439,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 
 
 		//没有合同段直接同步
 		//没有合同段直接同步
 		if (!bHasContract) {
 		if (!bHasContract) {
-			saveList = getNormalSaveList(srcNode.getId(),
+			saveList = archiveTreeContractSync.getNormalSaveListEx(srcNode.getId(),
 					srcTrees.get(0),dstNode.getId(),dstTrees.get(0));
 					srcTrees.get(0),dstNode.getId(),dstTrees.get(0));
 		}else {
 		}else {
 
 
@@ -459,24 +459,6 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		return true;
 		return true;
 	}
 	}
 
 
-	/**
-	 *
-	 * @param srcNodeId
-	 * @param srcTree
-	 * @param dstNodeId
-	 * @param dstTree
-	 * @return
-	 */
-	public List<ArchiveTreeContract> getNormalSaveList(Long srcNodeId,ArchiveTreeVO2 srcTree,Long dstNodeId,ArchiveTreeContractVO2 dstTree){
-
-		List<ArchiveTreeContract> saveList = archiveTreeContractSync.getNormalSaveList(srcNodeId,srcTree,dstNodeId,dstTree);
-
-		//设置修改标识
-		ModifyBySrcTree(srcNodeId,srcTree,dstNodeId,dstTree);
-
-		return saveList;
-	}
-
 	/**
 	/**
 	 * 新增合同段时,要复制一份合同段的分支出来
 	 * 新增合同段时,要复制一份合同段的分支出来
 	 * @param contractInfos
 	 * @param contractInfos
@@ -485,7 +467,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 	 * @param dstNode
 	 * @param dstNode
 	 * @param saveList
 	 * @param saveList
 	 */
 	 */
-	void AddNewContract(List<ContractInfo> contractInfos,ArchiveTreeVO2 srcTree,ArchiveTreeContractVO2 dstTree,
+	void addNewContract(List<ContractInfo> contractInfos,ArchiveTreeVO2 srcTree,ArchiveTreeContractVO2 dstTree,
 						   ArchiveTreeContract dstNode,List<ArchiveTreeContract> saveList){
 						   ArchiveTreeContract dstNode,List<ArchiveTreeContract> saveList){
 		Map<Long,ContractInfo> contractMap = new LinkedHashMap<>();
 		Map<Long,ContractInfo> contractMap = new LinkedHashMap<>();
 
 
@@ -574,10 +556,10 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 						if (tmpSubTree == null) {
 						if (tmpSubTree == null) {
 							continue;
 							continue;
 						}
 						}
-						tmpSaveList = getNormalSaveList(tmpSubTree.getId(),
+						tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(tmpSubTree.getId(),
 								tmpSubTree,ar.getId(),ar);
 								tmpSubTree,ar.getId(),ar);
 					}else {
 					}else {
-						tmpSaveList = getNormalSaveList(srcNode.getId(),
+						tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(srcNode.getId(),
 								srcTree,dstNode.getId(),ar);
 								srcTree,dstNode.getId(),ar);
 					}
 					}
 
 
@@ -602,7 +584,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 
 
 						//getNormalSaveList 接口除了同步新增节点,还会同步已有节点的属性。
 						//getNormalSaveList 接口除了同步新增节点,还会同步已有节点的属性。
 						//因为关联工序的位置是固定的,先不考虑新增一个关联工序节点,且一次同步完成情况
 						//因为关联工序的位置是固定的,先不考虑新增一个关联工序节点,且一次同步完成情况
-						tmpSaveList = getNormalSaveList(srcNode.getId(),
+						tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(srcNode.getId(),
 								tmpSubTree,dstNodeId,contractNode);
 								tmpSubTree,dstNodeId,contractNode);
 						saveList.addAll(tmpSaveList);
 						saveList.addAll(tmpSaveList);
 
 
@@ -716,73 +698,6 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		return true;
 		return true;
 	}
 	}
 
 
-	/**
-	 *
-	 * @param srcTree
-	 * @param dstTree
-	 * @return
-	 */
-	public boolean ModifyBySrcTree(Long srcNodeId,ArchiveTreeVO2 srcTrees,Long dstNodeId,ArchiveTreeContractVO2 dstTrees){
-
-		List<ArchiveTreeVO2> archiveTreeVO2List = new ArrayList<>();
-		List<ArchiveTreeContractVO2> archiveTreeContractVO2s = new ArrayList<>();
-		//取出指定范围
-		ArchiveTreeVO2 srcTree = ForestNodeMergerEx.getSubTree(srcTrees,srcNodeId);
-		ArchiveTreeContractVO2 dstTree = ForestNodeMergerEx.getSubTree(dstTrees,dstNodeId);
-
-		//取出链表
-		ForestNodeMergerEx.getTreeList(srcTree,archiveTreeVO2List);
-		ForestNodeMergerEx.getTreeList(dstTree,archiveTreeContractVO2s);
-
-		Map<Long, ArchiveTreeVO2> map = new LinkedHashMap<>();
-		for (ArchiveTreeVO2 ar : archiveTreeVO2List) {
-			map.put(ar.getId(),ar);
-		}
-
-		for (ArchiveTreeContractVO2 ar : archiveTreeContractVO2s) {
-			ArchiveTreeVO2 archiveTreeVO2 = map.get(ar.getFromId());
-			if (archiveTreeVO2!= null) {
-				ar.sync(archiveTreeVO2);
-			}
-		}
-		return true;
-	}
-
-	/**
-	 *
-	 * @param dstTree
-	 * @return
-	 */
-	public boolean UpdateByArchiveTreeContractVO2(ArchiveTreeContractVO2 dstTree){
-
-		List<Long> ids = new ArrayList<>();
-		List<ArchiveTreeContractVO2> archiveTreeContractVO2s = new ArrayList<>();
-
-		ForestNodeMergerEx.getTreeList(dstTree,archiveTreeContractVO2s);
-		Map<Long, ArchiveTreeContractVO2> map = new LinkedHashMap<>();
-
-
-		for (ArchiveTreeContractVO2 ar : archiveTreeContractVO2s) {
-			if (ar.getFlag() == 1) {
-				ids.add(ar.getId());
-				map.put(ar.getId(),ar);
-			}
-		}
-
-		List<ArchiveTreeContract> archiveTreeContracts =  baseMapper.selectBatchIds(ids);
-
-		List<ArchiveTreeContract> upList = new ArrayList<>();
-		for (ArchiveTreeContract archiveTreeContract : archiveTreeContracts) {
-			ArchiveTreeContractVO2 treeContractVO2 = map.get(archiveTreeContract.getId());
-			if (treeContractVO2!= null) {
-				archiveTreeContract.sync(treeContractVO2);
-				upList.add(archiveTreeContract);
-			}
-
-		}
-		this.saveOrUpdateBatch(upList);
-		return true;
-	}
 
 
 	/**
 	/**
 	 * 递归设置
 	 * 递归设置

+ 52 - 16
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java

@@ -92,22 +92,6 @@ public class ArchiveTreeContractSyncImpl {
         //获取所有节点的id -> ArchiveTreeContractVO2 的map
         //获取所有节点的id -> ArchiveTreeContractVO2 的map
         arTreeContractInitService.getMap(contractVO2List,addList,vo2Map);
         arTreeContractInitService.getMap(contractVO2List,addList,vo2Map);
 
 
-//        for (ArchiveTreeContract archiveTreeContract : addList) {
-//            ArchiveTreeContractVO2 treeContractVO2 = new ArchiveTreeContractVO2();
-//            treeContractVO2.setId(archiveTreeContract.getId());
-//            treeContractVO2.setParentId(archiveTreeContract.getParentId());
-//            treeContractVO2.setTitle(archiveTreeContract.getNodeName());
-//            treeContractVO2.setSort(archiveTreeContract.getSort());
-//            treeContractVO2.setArchiveAutoNodeId(archiveTreeContract.getArchiveAutoNodeId());
-//            treeContractVO2.setArchiveAutoType(archiveTreeContract.getArchiveAutoType());
-//            treeContractVO2.setArchiveAutoGroupId(archiveTreeContract.getArchiveAutoGroupId());
-//            treeContractVO2.setArchiveAutoGroupSelect(archiveTreeContract.getArchiveAutoGroupSelect());
-//            contractVO2List.add(treeContractVO2);
-//            if (vo2Map!= null) {
-//                vo2Map.put(treeContractVO2.getId(),treeContractVO2);
-//            }
-//        }
-
         List<ArchiveTreeContractVO2> trees = ForestNodeMergerEx.merge(contractVO2List);
         List<ArchiveTreeContractVO2> trees = ForestNodeMergerEx.merge(contractVO2List);
         return trees.get(0);
         return trees.get(0);
     }
     }
@@ -155,4 +139,56 @@ public class ArchiveTreeContractSyncImpl {
 
 
         return saveList;
         return saveList;
     }
     }
+
+    /**
+     *
+     * @param srcNodeId
+     * @param srcTrees
+     * @param dstNodeId
+     * @param dstTrees
+     * @return
+     */
+    public boolean modifyBySrcTree(Long srcNodeId,ArchiveTreeVO2 srcTrees,Long dstNodeId,ArchiveTreeContractVO2 dstTrees){
+
+        List<ArchiveTreeVO2> archiveTreeVO2List = new ArrayList<>();
+        List<ArchiveTreeContractVO2> archiveTreeContractVO2s = new ArrayList<>();
+        //取出指定范围
+        ArchiveTreeVO2 srcTree = ForestNodeMergerEx.getSubTree(srcTrees,srcNodeId);
+        ArchiveTreeContractVO2 dstTree = ForestNodeMergerEx.getSubTree(dstTrees,dstNodeId);
+
+        //取出链表
+        ForestNodeMergerEx.getTreeList(srcTree,archiveTreeVO2List);
+        ForestNodeMergerEx.getTreeList(dstTree,archiveTreeContractVO2s);
+
+        Map<Long, ArchiveTreeVO2> map = new LinkedHashMap<>();
+        for (ArchiveTreeVO2 ar : archiveTreeVO2List) {
+            map.put(ar.getId(),ar);
+        }
+
+        for (ArchiveTreeContractVO2 ar : archiveTreeContractVO2s) {
+            ArchiveTreeVO2 archiveTreeVO2 = map.get(ar.getFromId());
+            if (archiveTreeVO2!= null) {
+                ar.sync(archiveTreeVO2);
+            }
+        }
+        return true;
+    }
+
+    /**
+     *
+     * @param srcNodeId
+     * @param srcTree
+     * @param dstNodeId
+     * @param dstTree
+     * @return
+     */
+    public List<ArchiveTreeContract> getNormalSaveListEx(Long srcNodeId,ArchiveTreeVO2 srcTree,Long dstNodeId,ArchiveTreeContractVO2 dstTree){
+
+        List<ArchiveTreeContract> saveList = getNormalSaveList(srcNodeId,srcTree,dstNodeId,dstTree);
+
+        //设置修改标识
+        modifyBySrcTree(srcNodeId,srcTree,dstNodeId,dstTree);
+
+        return saveList;
+    }
 }
 }

+ 165 - 32
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeServiceImpl.java

@@ -43,6 +43,8 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
 
 
     private final ArchiveAutoRuleWbsMapper archiveAutoRuleWbsMapper;
     private final ArchiveAutoRuleWbsMapper archiveAutoRuleWbsMapper;
 
 
+    private final ArchiveAutoRuleSyncImpl archiveAutoRuleSync;
+
     @Override
     @Override
     public boolean initArchiveTree(Long projectId) {
     public boolean initArchiveTree(Long projectId) {
         if (projectId != null && projectId != 0) {
         if (projectId != null && projectId != 0) {
@@ -136,6 +138,7 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
         }
         }
 
 
         //todo 同步立卷规则
         //todo 同步立卷规则
+        InitAncestors(archiveTrees);
 
 
         this.saveBatch(archiveTrees);
         this.saveBatch(archiveTrees);
 
 
@@ -912,7 +915,11 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
         return map;
         return map;
     }
     }
 
 
-
+    /**
+     * 系统同步到项目级
+     * @param dstNode
+     * @return
+     */
     public boolean syncProjectTree(ArchiveTree dstNode) {
     public boolean syncProjectTree(ArchiveTree dstNode) {
         if (dstNode.getFromId() == null || dstNode.getProjectId() == 0) {
         if (dstNode.getFromId() == null || dstNode.getProjectId() == 0) {
             return false;
             return false;
@@ -933,6 +940,7 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
         ForestNodeMergerEx.syncTreeList(srcTree ,dstTree,addDst);
         ForestNodeMergerEx.syncTreeList(srcTree ,dstTree,addDst);
 
 
         List<ArchiveTree> saveList = new ArrayList<>();
         List<ArchiveTree> saveList = new ArrayList<>();
+        List<ArchiveTree> upList = new ArrayList<>();
         for (ArchiveTreeVO2 addD : addDst) {
         for (ArchiveTreeVO2 addD : addDst) {
             ArchiveTree archiveTree = new ArchiveTree(addD);
             ArchiveTree archiveTree = new ArchiveTree(addD);
             archiveTree.setCreateUser(AuthUtil.getUserId());
             archiveTree.setCreateUser(AuthUtil.getUserId());
@@ -941,55 +949,56 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
             saveList.add(archiveTree);
             saveList.add(archiveTree);
         }
         }
 
 
+        modifyBySrcTree(srcTree,dstTree);
+
         //刷新treeCode
         //刷新treeCode
-        InitAncestors(dstTree,saveList);
+        InitAncestors(dstTree,saveList,upList);
 
 
         //相同的属性刷新?
         //相同的属性刷新?
-        updateDstArchiveTrees(srcTree,dstTree);
+        //updateDstArchiveTrees(srcTree,dstTree);
 
 
         this.saveBatch(saveList);
         this.saveBatch(saveList);
-
+        this.updateBatchById(upList);
         return true;
         return true;
     }
     }
 
 
 
 
-    public void InitAncestors(ArchiveTreeVO2  dstTree,List<ArchiveTree> addList)
+    public void InitAncestors(ArchiveTreeVO2  dstTree,List<ArchiveTree> addList,List<ArchiveTree> upList)
     {
     {
-        List<ArchiveTreeVO2> archiveTreeVO2s = new ArrayList<>();
-        ForestNodeMergerEx.getTreeList(dstTree,archiveTreeVO2s);
+        Map<Long,ArchiveTreeVO2> vo2Map = new LinkedHashMap<>();
+
+        //将新增节点合并到树里
+        ArchiveTreeVO2 tree = mergerToTree(dstTree,addList,vo2Map);
+
+
+        ForestNodeMergerEx.InitAncestors(tree,"0");
+
+        //更新自动组卷节点
+        archiveAutoRuleSync.syncArchiveTreeList(vo2Map);
+
+        //根据vo的排序和自动组卷信息,刷新新增节点,根据修改标识生成更新节点
+        this.handleAddAndUpList(vo2Map,addList,upList);
+    }
+
+    public void InitAncestors(List<ArchiveTree> archiveTrees) {
+        List<ArchiveTreeVO2> archiveTreeVO2List = new ArrayList<>();
 
 
         Map<Long,ArchiveTreeVO2> vo2Map = new LinkedHashMap<>();
         Map<Long,ArchiveTreeVO2> vo2Map = new LinkedHashMap<>();
-        for (ArchiveTree archiveTree:addList) {
-            ArchiveTreeVO2 archiveTreeVO2 = new ArchiveTreeVO2();
-            archiveTreeVO2.setId(archiveTree.getId());
-            archiveTreeVO2.setParentId(archiveTree.getParentId());
-            archiveTreeVO2.setTitle(archiveTree.getNodeName());
-            archiveTreeVO2.setSort(archiveTree.getSort());
-
-            archiveTreeVO2.setArchiveAutoNodeId(archiveTree.getArchiveAutoNodeId());
-            archiveTreeVO2.setArchiveAutoType(archiveTree.getArchiveAutoType());
-            archiveTreeVO2.setArchiveAutoGroupId(archiveTree.getArchiveAutoGroupId());
-
-            archiveTreeVO2s.add(archiveTreeVO2);
-            vo2Map.put(archiveTreeVO2.getId(),archiveTreeVO2);
-        }
+        getMap(archiveTreeVO2List,archiveTrees,vo2Map);
 
 
+        List<ArchiveTreeVO2> trees = ForestNodeMergerEx.merge(archiveTreeVO2List);
 
 
-        List<ArchiveTreeVO2> trees = ForestNodeMergerEx.merge(archiveTreeVO2s);
+        //重复
+        //ForestNodeMergerEx.InitAncestors(trees.get(0),"0");
 
 
-        ForestNodeMergerEx.InitAncestors(trees.get(0),"0");
+        archiveAutoRuleSync.syncArchiveTreeList(vo2Map);
 
 
-        for (ArchiveTree archiveTree:addList) {
-            ArchiveTreeVO2 tmp = vo2Map.get(archiveTree.getId());
-            if (tmp != null ) {
-                archiveTree.setAncestors(tmp.getAncestors());
-                archiveTree.setArchiveAutoNodeId(tmp.getArchiveAutoNodeId());
-                archiveTree.setArchiveAutoGroupId(tmp.getArchiveAutoGroupId());
-                archiveTree.setArchiveAutoType(tmp.getArchiveAutoType());
-            }
-        }
+        List<ArchiveTree> upList = new ArrayList<>();
+
+        handleAddAndUpList(vo2Map,archiveTrees,upList);
     }
     }
 
 
+
     public void updateDstArchiveTrees(ArchiveTreeVO2 srcTree,ArchiveTreeVO2  dstTree){
     public void updateDstArchiveTrees(ArchiveTreeVO2 srcTree,ArchiveTreeVO2  dstTree){
 
 
         List<ArchiveTreeVO2> srcList = new ArrayList<>();
         List<ArchiveTreeVO2> srcList = new ArrayList<>();
@@ -1035,4 +1044,128 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
 
 
         this.saveOrUpdateBatch(archiveTreeList);
         this.saveOrUpdateBatch(archiveTreeList);
     }
     }
+
+
+    /**
+     *  根据vo的排序和自动组卷信息,刷新新增节点,根据修改标识生成更新节点
+     * @param vo2Map
+     * @param addList
+     * @param upList
+     */
+    void handleAddAndUpList(Map<Long,ArchiveTreeVO2> vo2Map,List<ArchiveTree> addList,List<ArchiveTree> upList) {
+
+        //刷新新增节点
+        for (ArchiveTree archiveTree:addList) {
+            ArchiveTreeVO2 tmp = vo2Map.get(archiveTree.getId());
+            if (tmp != null ) {
+
+                archiveTree.setAncestors(tmp.getAncestors());
+                archiveTree.setArchiveAutoNodeId(tmp.getArchiveAutoNodeId());
+                archiveTree.setArchiveAutoType(tmp.getArchiveAutoType());
+                archiveTree.setArchiveAutoGroupId(tmp.getArchiveAutoGroupId());
+                archiveTree.setArchiveAutoGroupSelect(tmp.getArchiveAutoGroupSelect());
+                //新增里有,就去update了,避免重复
+                tmp.setFlag(0);
+
+            }
+        }
+
+        //获取本次所有的修改节点
+        List<Long> ids = new ArrayList<>();
+        for (Map.Entry<Long, ArchiveTreeVO2> entry : vo2Map.entrySet()) {
+
+            ArchiveTreeVO2 archiveTreeVO2 = entry.getValue();
+            if (archiveTreeVO2.getFlag() == 1) {
+                ids.add(archiveTreeVO2.getId());
+            }
+        }
+
+        if (ids.size() == 0) {
+            return;
+        }
+        List<ArchiveTree> archiveTrees =  baseMapper.selectBatchIds(ids);
+
+        //刷新属性
+        for (ArchiveTree archiveTree : archiveTrees) {
+            ArchiveTreeVO2 archiveTreeVO2 = vo2Map.get(archiveTree.getId());
+            if (archiveTreeVO2!= null) {
+                archiveTree.sync(archiveTreeVO2);
+                upList.add(archiveTree);
+            }
+
+        }
+    }
+
+    /**
+     *
+     * @param vos
+     * @param addList
+     * @param vo2Map
+     */
+    public void getMap(List<ArchiveTreeVO2> vos,List<ArchiveTree> addList,Map<Long,ArchiveTreeVO2> vo2Map){
+
+        for (ArchiveTreeVO2 ar:vos) {
+            vo2Map.put(ar.getId(),ar);
+        }
+
+        for (ArchiveTree archiveTree:addList) {
+            ArchiveTreeVO2 treeContractVO2 = new ArchiveTreeVO2();
+            treeContractVO2.setId(archiveTree.getId());
+            treeContractVO2.setParentId(archiveTree.getParentId());
+            treeContractVO2.setTitle(archiveTree.getNodeName());
+            treeContractVO2.setSort(archiveTree.getSort());
+            treeContractVO2.setFromId(archiveTree.getFromId());
+
+            treeContractVO2.setArchiveAutoNodeId(archiveTree.getArchiveAutoNodeId());
+            treeContractVO2.setArchiveAutoType(archiveTree.getArchiveAutoType());
+            treeContractVO2.setArchiveAutoGroupId(archiveTree.getArchiveAutoGroupId());
+            treeContractVO2.setArchiveAutoGroupSelect(archiveTree.getArchiveAutoGroupSelect());
+            vos.add(treeContractVO2);
+            vo2Map.put(treeContractVO2.getId(),treeContractVO2);
+        }
+    }
+
+    /**
+     * 往 dstTree 里合并入新增节点
+     * @param dstTree 目标节点
+     * @param addList 新的世数
+     * @param vo2Map
+     * @return
+     */
+    public ArchiveTreeVO2  mergerToTree(ArchiveTreeVO2  dstTree,List<ArchiveTree> addList,Map<Long,ArchiveTreeVO2> vo2Map) {
+        List<ArchiveTreeVO2> contractVO2List = new ArrayList<>();
+
+        ForestNodeMergerEx.getTreeList(dstTree, contractVO2List);
+
+        //获取所有节点的id -> ArchiveTreeContractVO2 的map
+        this.getMap(contractVO2List,addList,vo2Map);
+
+        List<ArchiveTreeVO2> trees = ForestNodeMergerEx.merge(contractVO2List);
+        return trees.get(0);
+    }
+
+    public boolean modifyBySrcTree(ArchiveTreeVO2 srcTree,ArchiveTreeVO2 dstTree){
+
+        List<ArchiveTreeVO2> archiveTreeSrcList = new ArrayList<>();
+        List<ArchiveTreeVO2> archiveTreeVO2s = new ArrayList<>();
+        //取出指定范围
+
+
+        //取出链表
+        ForestNodeMergerEx.getTreeList(srcTree,archiveTreeSrcList);
+        ForestNodeMergerEx.getTreeList(dstTree,archiveTreeVO2s);
+
+        Map<Long, ArchiveTreeVO2> map = new LinkedHashMap<>();
+        for (ArchiveTreeVO2 ar : archiveTreeSrcList) {
+            map.put(ar.getId(),ar);
+        }
+
+        for (ArchiveTreeVO2 ar : archiveTreeVO2s) {
+            ArchiveTreeVO2 archiveTreeVO2 = map.get(ar.getFromId());
+            if (archiveTreeVO2!= null) {
+                ar.sync(archiveTreeVO2);
+            }
+        }
+        return true;
+    }
 }
 }