huangtf 2 лет назад
Родитель
Сommit
11240f0cc8

+ 89 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

@@ -218,6 +218,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 			archiveTreeContractDTO.setTenantId(parent.getTenantId());
 			String ancestors = parent.getAncestors() + StringPool.COMMA + archiveTreeContractDTO.getParentId();
 			archiveTreeContractDTO.setAncestors(ancestors);
+			archiveTreeContractDTO.setTreeSort(parent.getTreeSort());
 		}
 
 		archiveTreeContractDTO.setIsDeleted(BladeConstant.DB_NOT_DELETED);
@@ -242,6 +243,11 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 				sort = max.get().getSort();
 			}
 			archiveTreeContractDTO.setSort(sort + 1);
+			String treeSort = archiveTreeContractDTO.getTreeSort();
+			if (StringUtils.isNotEmpty(treeSort)) {
+				treeSort = treeSort + 100 + archiveTreeContractDTO.getSort();
+				archiveTreeContractDTO.setTreeSort(treeSort);
+			}
 		}
 
 		return save(archiveTreeContractDTO);
@@ -259,11 +265,44 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 	@Override
 	public boolean submitArchiveTreeSort(List<ArchiveTreeContractDTO> listSort) {
 		int sortNumber = 1;
+		List<ArchiveTreeContract> changeList = new ArrayList<>();
+
+
+		ArchiveTreeContract parent = null;
 		for (ArchiveTreeContractDTO archiveTreeSortDTO : listSort) {
-			archiveTreeSortDTO.setSort(sortNumber);
+			if (archiveTreeSortDTO.getSort() != sortNumber) {
+				ArchiveTreeContract archiveTreeContract = getById(archiveTreeSortDTO.getId());
+				if (archiveTreeContract!= null ) {
+					archiveTreeContract.setSort(sortNumber);
+					if (parent == null ) {
+						parent = getById(archiveTreeSortDTO.getParentId());
+					}
+					if (parent != null  && StringUtils.isNotEmpty(parent.getTreeSort())){
+						Integer sort = archiveTreeContract.getSort() + 100;
+						archiveTreeContract.setTreeSort(parent.getTreeSort() + sort);
+					}
+					changeList.add(archiveTreeContract);
+				}
+			}
 			sortNumber++;
-			baseMapper.updateById(archiveTreeSortDTO);
 		}
+
+		this.saveOrUpdateBatch(changeList);
+
+		//有子节点,并且父节点排序号不为空,则排序子节点
+		List<Long> changeIds = changeList.stream().map(s->s.getId()).collect(Collectors.toList());
+
+		List<ArchiveTreeContract> childrens =  baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
+					.in(ArchiveTreeContract::getParentId, changeIds)
+					.eq(ArchiveTreeContract::getIsDeleted, 0)
+			);
+		if (StringUtils.isNotEmpty(parent.getTreeSort()) &&
+				(childrens == null || childrens.size() == 0)) {
+			return true;
+		}
+
+		this.sortChildren(changeList);
+
 		return true;
 	}
 
@@ -603,6 +642,54 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		return true;
 	}
 
+	/**
+	 * 递归设置
+	 * @param archiveTreeContracts
+	 */
+	void sortChildren(List<ArchiveTreeContract> archiveTreeContracts){
+
+		if (archiveTreeContracts == null || archiveTreeContracts.size() == 0) {
+			return;
+		}
+
+
+
+		List<ArchiveTreeContractVO2> trees = this.tree2Root(AuthUtil.getTenantId(),null,null,archiveTreeContracts.get(0).getProjectId(),null);
+		if (trees.size() == 0) {
+			return;
+		}
+		ArchiveTreeContractVO2  tree = trees.get(0);
+
+		ForestNodeMergerEx.InitTreeSort(tree,"");
+
+		List<ArchiveTreeContractVO2> changeList = new ArrayList<>();
+
+		for (ArchiveTreeContract ar:  archiveTreeContracts) {
+			ArchiveTreeContractVO2 subTree = ForestNodeMergerEx.getSubTree(tree,ar.getId());
+			List<ArchiveTreeContractVO2> tmpList = new ArrayList<>();
+			ForestNodeMergerEx.getTreeList(subTree,tmpList);
+			changeList.addAll(tmpList);
+		}
+
+		Map<Long,ArchiveTreeContractVO2>  map = new HashMap<>();
+		List<Long> ids = new ArrayList<>();
+		for (ArchiveTreeContractVO2 ar : changeList) {
+			ids.add(ar.getId());
+			map.put(ar.getId(),ar);
+		}
+
+		List<ArchiveTreeContract> changeArchiveList = baseMapper.selectBatchIds(ids);
+		for (ArchiveTreeContract changeNode: changeArchiveList) {
+			ArchiveTreeContractVO2 ar = map.get(changeNode.getId());
+			if (ar!= null ){
+				changeNode.setTreeSort(ar.getTreeSort());
+			}
+		}
+		this.saveOrUpdateBatch(changeArchiveList);
+	}
+
+
+