|
@@ -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;
|