laibulaizheli преди 1 месец
родител
ревизия
92d583b7e9

+ 26 - 0
blade-common/src/main/java/org/springblade/common/utils/ForestNodeMergerEx.java

@@ -331,4 +331,30 @@ public class ForestNodeMergerEx {
     }
 
 
+    //芯的更新
+    public static <T extends INodeEx<T>> void InitTreeSortEx(T node, String parentTreeSort, int siblingIndex) {
+        // 计算当前节点排序值:100 + 兄弟索引
+        int currentSort = 100 + siblingIndex;
+
+        // 格式化为3位数字(100-999)
+        String sortStr = String.format("%03d", currentSort);
+
+        // 拼接树路径(无分隔符)
+        String currentTreeSort = parentTreeSort + sortStr;
+
+        // 检查是否需要更新
+        if (node.getTreeSort() == null || !node.getTreeSort().equals(currentTreeSort)) {
+            node.setFlag(1);
+            node.setTreeSort(currentTreeSort);
+        }
+
+        // 递归处理子节点
+        List<T> children = node.getChildren();
+        if (children != null && !children.isEmpty()) {
+            for (int i = 0; i < children.size(); i++) {
+                InitTreeSortEx(children.get(i), currentTreeSort, i);
+            }
+        }
+    }
+
 }

+ 1 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java

@@ -89,7 +89,7 @@ public interface IArchivesAutoService extends BaseService<ArchivesAuto> {
 	//刷新某个项目的档号
 	void refreshFileNumberNoSlipt(Long projectId,Long contractId,Long nodeId,boolean bforce, Long traceId);
 
-	void test();
+	void test666();
 
     List<DictBiz> getCarrierTypeByDict();
 

+ 9 - 7
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -1500,11 +1500,11 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	private void createArchive2(List<ArchiveFile> waitArchiveFiles, Long archiveAutoGroupId, Long projectId,IArchiveNameService.NodeHierarchy nameInfo) {
 
 		//获取同一分类archiveAutoGroupId下设置的(设置规则时选中的)节点,排好序
-		List<ArchiveTreeContract> selectList = archiveTreeContractClient.getStorageNodeByGroupId(projectId, archiveAutoGroupId);
-		//分类并卷节点默认采用同类型下第一个存储节点为归属节点
-		if (selectList== null || selectList.size() == 0) {
-			return;
-		}
+//		List<ArchiveTreeContract> selectList = archiveTreeContractClient.getStorageNodeByGroupId(projectId, archiveAutoGroupId);
+//		//分类并卷节点默认采用同类型下第一个存储节点为归属节点
+//		if (selectList== null || selectList.size() == 0) {
+//			return;
+//		}
 
 		if (waitArchiveFiles==null || waitArchiveFiles.size()== 0) {
 			return;
@@ -1512,7 +1512,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 		String strfirstNodeId = waitArchiveFiles.get(0).getNodeId();
 
-		ArchiveTreeContract node = selectList.get(0);
+		ArchiveTreeContract node = null;
 		if (StringUtils.isNotEmpty(strfirstNodeId)) {
 			Long firstNodeId = Long.parseLong(strfirstNodeId);
 			ArchiveTreeContract firstNode = archiveTreeContractClient.getArchiveTreeContractById(firstNodeId);
@@ -2060,6 +2060,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 					} else {
 						// 分类并卷流程
 						// 步骤7:将文件按照<groupId,List<文件>>放入集合
+						//改用top分组了
+						archiveAutoGroupId = curTopId;
 						if (archiveMap.containsKey(archiveAutoGroupId)) {
 							List<ArchiveFile> groupList = archiveMap.get(archiveAutoGroupId);
 							groupList.add(file);
@@ -3107,7 +3109,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	}
 
 
-	public void test() {
+	public void test666() {
 		Long projectId = 0L;
 		List<ArchiveTreeContract> archiveTreeContracts = archiveTreeContractClient.getListByProjectId(projectId);
 

+ 3 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml

@@ -380,8 +380,7 @@
               AND uaf.node_id IS NOT NULL
               AND (
                 -- 条件1:标记为未归档的文件
-                        uaf.is_archive = 0 OR uaf.is_archive IS NULL
-                    OR
+
                     -- 条件2:未关联有效案卷的文件
                         NOT EXISTS (
                                 SELECT 1
@@ -393,7 +392,7 @@
                             )
                 )
         )
-        ORDER BY ancestors ASC, tree_sort ASC
+        ORDER BY tree_sort,sort
     </select>
 
 
@@ -432,7 +431,7 @@
               AND node_id IS NOT NULL
               AND (box_number IS NOT NULL and box_number != -1 )
         )
-        order by ancestors asc,tree_sort asc
+        order by tree_sort,sort
     </select>
 
 

+ 73 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

@@ -504,6 +504,9 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		this.saveBatch(saveList);
 		this.updateBatchById(upList);
 
+		//再刷新一次treesort
+		sortChildren(dstNode);
+
 		return true;
 	}
 
@@ -1717,4 +1720,74 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 	}
 
 
+	/**
+	 * 刷新某个节点下的treesort
+	 * @param archiveTreeContract
+	 */
+	void sortChildren(ArchiveTreeContract archiveTreeContract) {
+		if (archiveTreeContract == null) {
+			return;
+		}
+
+		// 获取整个项目的树
+		List<ArchiveTreeContractVO2> trees = this.tree2Root(
+				AuthUtil.getTenantId(),
+				null,
+				null,
+				archiveTreeContract.getProjectId(),
+				null
+		);
+
+		if (trees.isEmpty()) {
+			return;
+		}
+		ArchiveTreeContractVO2 tree = trees.get(0);
+
+		// 初始化整棵树的排序 (只设置内存中的 treeSort 和 flag)
+		ForestNodeMergerEx.InitTreeSortEx(tree, "", 0);
+
+		// 获取当前节点对应的子树
+		ArchiveTreeContractVO2 subTree = ForestNodeMergerEx.getSubTree(tree, archiveTreeContract.getId());
+		if (subTree == null) {
+			return; // 没找到子树
+		}
+
+		// 收集子树中所有节点 (用于后续筛选)
+		List<ArchiveTreeContractVO2> allNodes = new ArrayList<>();
+		ForestNodeMergerEx.getTreeList(subTree, allNodes);
+
+		// 筛选需要更新的节点 (flag == 1)
+		List<ArchiveTreeContractVO2> changeList = new ArrayList<>();
+		for (ArchiveTreeContractVO2 node : allNodes) {
+			if (node.getFlag() == 1) {
+				changeList.add(node);
+			}
+		}
+
+		if (changeList.isEmpty()) {
+			return; // 没有需要更新的节点
+		}
+
+		// 构建 ID 映射
+		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);
+	}
+
+
 }