|
@@ -43,6 +43,8 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
|
|
|
|
|
|
private final ArchiveAutoRuleWbsMapper archiveAutoRuleWbsMapper;
|
|
|
|
|
|
+ private final ArchiveAutoRuleSyncImpl archiveAutoRuleSync;
|
|
|
+
|
|
|
@Override
|
|
|
public boolean initArchiveTree(Long projectId) {
|
|
|
if (projectId != null && projectId != 0) {
|
|
@@ -136,6 +138,7 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
|
|
|
}
|
|
|
|
|
|
//todo 同步立卷规则
|
|
|
+ InitAncestors(archiveTrees);
|
|
|
|
|
|
this.saveBatch(archiveTrees);
|
|
|
|
|
@@ -785,6 +788,16 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
|
|
|
|
|
|
if(archiveAutoType!=null){
|
|
|
|
|
|
+ if (StringUtils.isEmpty(wbsId) && projectId!= null && projectId != 0) {
|
|
|
+ ProjectInfo projectInfo = projectInfoService.getOne(projectId);
|
|
|
+ if (projectInfo!= null) {
|
|
|
+ Long lWbsId = projectInfo.getReferenceWbsTemplateId();
|
|
|
+ if (lWbsId != null) {
|
|
|
+ wbsId = projectInfo.getReferenceWbsTemplateId().toString();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//获取wbs关联树
|
|
|
ArchiveTreeVO2 archiveTreeVO2 = getWbsArchiveTree(AuthUtil.getTenantId(),projectId,wbsNode2ArchiveTreeNodeId,wbsId,"1",Long.parseLong(archiveTree.getDisplayHierarchy()));
|
|
|
List<ArchiveTreeVO2> archiveTreeVO2List = new ArrayList<>();
|
|
@@ -912,7 +925,11 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ /**
|
|
|
+ * 系统同步到项目级
|
|
|
+ * @param dstNode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
public boolean syncProjectTree(ArchiveTree dstNode) {
|
|
|
if (dstNode.getFromId() == null || dstNode.getProjectId() == 0) {
|
|
|
return false;
|
|
@@ -933,6 +950,7 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
|
|
|
ForestNodeMergerEx.syncTreeList(srcTree ,dstTree,addDst);
|
|
|
|
|
|
List<ArchiveTree> saveList = new ArrayList<>();
|
|
|
+ List<ArchiveTree> upList = new ArrayList<>();
|
|
|
for (ArchiveTreeVO2 addD : addDst) {
|
|
|
ArchiveTree archiveTree = new ArchiveTree(addD);
|
|
|
archiveTree.setCreateUser(AuthUtil.getUserId());
|
|
@@ -941,55 +959,56 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
|
|
|
saveList.add(archiveTree);
|
|
|
}
|
|
|
|
|
|
+ modifyBySrcTree(srcTree,dstTree);
|
|
|
+
|
|
|
//刷新treeCode
|
|
|
- InitAncestors(dstTree,saveList);
|
|
|
+ InitAncestors(dstTree,saveList,upList);
|
|
|
|
|
|
//相同的属性刷新?
|
|
|
- updateDstArchiveTrees(srcTree,dstTree);
|
|
|
+ //updateDstArchiveTrees(srcTree,dstTree);
|
|
|
|
|
|
this.saveBatch(saveList);
|
|
|
-
|
|
|
+ this.updateBatchById(upList);
|
|
|
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<>();
|
|
|
- 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){
|
|
|
|
|
|
List<ArchiveTreeVO2> srcList = new ArrayList<>();
|
|
@@ -1035,4 +1054,128 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
|
|
|
|
|
|
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;
|
|
|
+ }
|
|
|
}
|