laibulaizheli 1 сар өмнө
parent
commit
33c65e1980

+ 78 - 10
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -142,6 +142,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 	private final CommonFileClient commonFileClient;
 
+	private final IArchiveNameService archiveNameService;
+
 
 	@Override
 	public IPage<ArchivesAutoVO> selectArchivesAutoPage(IPage<ArchivesAutoVO> page, ArchivesAutoVO archivesAuto) {
@@ -1150,6 +1152,68 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		}
 	}
 
+
+	private String builtArchiveName_new(List<ArchiveFile> waitArchiveFiles, ArchiveTreeContract node, boolean isCrossNode
+	,IArchiveNameService.NodeHierarchy nameInfo) {
+
+		String archiveName = "";
+
+		Long projectId = node.getProjectId();
+		ProjectInfo projectInfo = projectClient.getById(String.valueOf(projectId));
+		String projectName = projectInfo.getProjectName();
+		String contractName = "";
+		Long contractId = node.getContractId();
+		if (contractId != null && contractId != -1) {
+			ContractInfo contract = contractClient.getContractById(contractId);
+			contractName = contract.getContractName();
+		}
+		//获取案卷题名
+		archiveName = projectName;
+		if (StringUtils.isNotEmpty(contractName)) {
+			archiveName = archiveName + contractName;
+		}
+
+
+		//--正常节点
+		Set<String> uniqueNodeIds = waitArchiveFiles.stream()
+				.map(ArchiveFile::getNodeId)
+				.filter(nodeId -> nodeId != null && !nodeId.isEmpty())
+				.collect(Collectors.toCollection(LinkedHashSet::new));
+
+		// 2. 将节点ID从String转换为Long(保持原始顺序)
+		List<Long> nodeIds = uniqueNodeIds.stream()
+				.map(this::safeParseLong)
+				.filter(Objects::nonNull)
+				.collect(Collectors.toList());
+
+
+		String fullPath =  archiveNameService.generateFullLevelName(nodeIds, nameInfo);
+
+		archiveName+=fullPath;
+
+		if (archiveName.length() > 150) {
+			archiveName+="等文件";
+		}
+		//TODO wbs节点
+		//不存在跨节点 项目名称+案卷题名规则(在后台归档目录树设置的)+后缀
+		//存在跨节点  获取当前所有节点的父级节点题名规则+所有同层级跨节点并卷的节点名称拼接+后缀
+		String archiveNameSuffix = node.getArchiveNameSuffix();
+		if (archiveNameSuffix == null || archiveNameSuffix.equals("null")) {
+			archiveNameSuffix = "";
+		}
+		return archiveName + archiveNameSuffix;
+	}
+
+	// 安全解析Long的方法(处理格式异常)
+	private Long safeParseLong(String value) {
+		try {
+			return Long.parseLong(value);
+		} catch (NumberFormatException e) {
+			log.warn("无法转换的节点ID格式: {}", value);
+			return null;
+		}
+	}
+
 	private String builtArchiveName(List<ArchiveFile> waitArchiveFiles, ArchiveTreeContract node, boolean isCrossNode) {
 
 		String archiveName = "";
@@ -1275,7 +1339,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	 * @param waitArchiveFiles
 	 * @param archiveAutoGroupId 分类并卷分组ID
 	 */
-	private void createArchive2(List<ArchiveFile> waitArchiveFiles, Long archiveAutoGroupId, Long projectId) {
+	private void createArchive2(List<ArchiveFile> waitArchiveFiles, Long archiveAutoGroupId, Long projectId,IArchiveNameService.NodeHierarchy nameInfo) {
 
 		//获取同一分类archiveAutoGroupId下设置的(设置规则时选中的)节点,排好序
 		List<ArchiveTreeContract> selectList = archiveTreeContractClient.getStorageNodeByGroupId(projectId, archiveAutoGroupId);
@@ -1317,7 +1381,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		}
 		//默认组卷存在跨节点组卷  注意案卷归属节点,案卷命名方式
 		//获取案卷题名
-		String archiveName = builtArchiveName(waitArchiveFiles, node, true);//获取案卷题名
+		String archiveName = builtArchiveName_new(waitArchiveFiles, node, true,nameInfo);//获取案卷题名
 
 		//1.创建新案卷
 		ArchivesAuto archivesAuto = builtArchives(node, pageN, fileN, startDate, endDate, archiveName);
@@ -1750,7 +1814,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			//一个archiveAutoGroupId组成一个案卷  案卷归属同个key的归档树节点select=1的第一个groupId2NodeIdMap
 			//createArchive2(archiveFiles, archiveAutoGroupId, projectId);
 
-			archiveAutoMethodGroup(archiveFiles, archiveAutoGroupId, projectId);
+			archiveAutoMethodGroup(archiveFiles, archiveAutoGroupId, projectId,null);
 		}
 
 	}
@@ -1769,6 +1833,10 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		// 当前顶层节点对应的分组ID
 		Long currArchiveAutoGroupId = null;
 
+		// 4. 构建节点层级关系
+		IArchiveNameService.NodeHierarchy nameInfo =
+				archiveNameService.buildNodeHierarchy(list);
+
 		// 步骤1:遍历节点集合
 		for (ArchiveTreeContract node : list) {
 			// 初始化当前节点的分组ID和顶层节点ID
@@ -1833,11 +1901,11 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			List<ArchiveFile> archiveFiles = entry.getValue();
 
 			// 同一个分组ID下的文件分组组卷
-			archiveAutoMethodGroup(archiveFiles, archiveAutoGroupId, projectId);
+			archiveAutoMethodGroup(archiveFiles, archiveAutoGroupId, projectId,nameInfo);
 		}
 	}
 
-	private void archiveAutoMethodGroup(List<ArchiveFile> archiveFiles, Long archiveAutoGroupId, Long projectId) {
+	private void archiveAutoMethodGroup(List<ArchiveFile> archiveFiles, Long archiveAutoGroupId, Long projectId,IArchiveNameService.NodeHierarchy nameInfo) {
 		if (archiveFiles.size()==0) {
 			return;
 		}
@@ -1885,13 +1953,13 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 					waitArchiveFiles.add(file);
 					archivesSize = tempTotalSize;
 					if (fileIndex == totalFiles) { // 是最后一个文件
-						createArchive2(waitArchiveFiles, archiveAutoGroupId, projectId);
+						createArchive2(waitArchiveFiles, archiveAutoGroupId, projectId,nameInfo);
 					}
 					break;
 
 				case 1: // 达到规格
 					waitArchiveFiles.add(file);
-					createArchive2(waitArchiveFiles, archiveAutoGroupId, projectId);
+					createArchive2(waitArchiveFiles, archiveAutoGroupId, projectId,nameInfo);
 					waitArchiveFiles = new ArrayList<>();
 					archivesSize = 0;
 					break;
@@ -1899,10 +1967,10 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				case -1: // 超出规格
 					if (waitArchiveFiles.isEmpty()) {
 						// 当前文件单独成卷
-						createArchive2(Collections.singletonList(file), archiveAutoGroupId, projectId);
+						createArchive2(Collections.singletonList(file), archiveAutoGroupId, projectId,nameInfo);
 					} else {
 						// 先将现有文件组卷
-						createArchive2(waitArchiveFiles, archiveAutoGroupId, projectId);
+						createArchive2(waitArchiveFiles, archiveAutoGroupId, projectId,nameInfo);
 
 						// 创建新的待组卷集合
 						waitArchiveFiles = new ArrayList<>();
@@ -1910,7 +1978,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 						archivesSize = filePage;
 
 						if (fileIndex == totalFiles) { // 是最后一个文件
-							createArchive2(waitArchiveFiles, archiveAutoGroupId, projectId);
+							createArchive2(waitArchiveFiles, archiveAutoGroupId, projectId,nameInfo);
 						}
 					}
 					break;