fix:数据总览:层级节点需要合并文件夹,非层级节点不合并文件夹
This commit is contained in:
@@ -404,6 +404,7 @@ public class DimensionTemplateServiceImpl extends ServiceImpl<DimensionTemplateM
|
||||
|
||||
/**
|
||||
* 根据originalName合并FileMetadataInfo列表,并处理bucketName生成totalName
|
||||
*
|
||||
* @param nodeDirInfos 需要合并的FileMetadataInfo列表
|
||||
* @return 合并后的结果
|
||||
*/
|
||||
@@ -418,8 +419,7 @@ public class DimensionTemplateServiceImpl extends ServiceImpl<DimensionTemplateM
|
||||
|
||||
long start2 = System.currentTimeMillis();
|
||||
// 先把所有FileMetadataInfo转换成FileMetadataChildrenDTO,后续统一做批量设置
|
||||
List<FileMetadataInfoResp> allChildren = new ArrayList<>();
|
||||
Map<String, List<FileMetadataChildrenDTO>> groupedChildren = new HashMap<>();
|
||||
List<FileMetadataChildrenDTO> allChildren = new ArrayList<>();
|
||||
for (FileMetadataInfo fileInfo : nodeDirInfos) {
|
||||
FileMetadataChildrenDTO childDto = FileMetadataConvert.INSTANCE.convertToFileMetadataChildrenDTO(fileInfo);
|
||||
// 设置totalName(从bucketName中提取)
|
||||
@@ -429,54 +429,77 @@ public class DimensionTemplateServiceImpl extends ServiceImpl<DimensionTemplateM
|
||||
String totalName = objectKey.substring(baseDirPath.length());
|
||||
childDto.setTotalName(totalName);
|
||||
}
|
||||
|
||||
allChildren.add(childDto);
|
||||
groupedChildren.computeIfAbsent(fileInfo.getOriginalName(), key -> new ArrayList<>()).add(childDto);
|
||||
}
|
||||
|
||||
long start3 = System.currentTimeMillis();
|
||||
// 批量设置文件权限
|
||||
List<Long> permissionFileIds = allChildren.stream()
|
||||
.map(FileMetadataInfoResp::getId)
|
||||
.map(FileMetadataChildrenDTO::getId)
|
||||
.filter(Objects::nonNull)
|
||||
.toList();
|
||||
Map<Long, Integer> permissionMap = fileUserPermissionService.getMergedPermissionBatch(
|
||||
permissionFileIds,
|
||||
ThreadLocalContext.getUserId()
|
||||
);
|
||||
for (FileMetadataInfoResp childDto : allChildren) {
|
||||
for (FileMetadataChildrenDTO childDto : allChildren) {
|
||||
Integer permissionValue = permissionMap.get(childDto.getId());
|
||||
childDto.setPermissionValue(permissionValue == null ? 0 : permissionValue);
|
||||
}
|
||||
long start4= System.currentTimeMillis();
|
||||
long start4 = System.currentTimeMillis();
|
||||
|
||||
// 批量设置文件的节点信息tag1-tag10,学科信息
|
||||
hierarchyHelper.setTagReqFromFileMetadataBatch(allChildren, FileMetadataInfoResp::getId);
|
||||
hierarchyHelper.setTagReqFromFileMetadataBatch(allChildren, FileMetadataChildrenDTO::getId);
|
||||
long start5 = System.currentTimeMillis();
|
||||
// 批量填充文件类型标签信息
|
||||
fileDictTagQueryService.fillFileTagsForRespList(allChildren, FileMetadataInfoResp::getId);
|
||||
fileDictTagQueryService.fillFileTagsForRespList(allChildren, FileMetadataChildrenDTO::getId);
|
||||
long start6 = System.currentTimeMillis();
|
||||
|
||||
// 设置聚合结果
|
||||
List<FileMetadataChildrenDTO> result = new ArrayList<>();
|
||||
for (List<FileMetadataChildrenDTO> children : groupedChildren.values()) {
|
||||
FileMetadataChildrenDTO baseDto = new FileMetadataChildrenDTO();
|
||||
BeanUtils.copyProperties(children.get(0),baseDto);
|
||||
baseDto.setMergeSameNameChildren(children);
|
||||
baseDto.setFileIds(children.stream().map(FileMetadataInfoResp::getId).toList());
|
||||
result.add(baseDto);
|
||||
List<FileMetadataChildrenDTO> itemsToMerge = new ArrayList<>();
|
||||
|
||||
// 1. 分类:根据节点类型将项目分为“需合并”和“不需合并”
|
||||
for (FileMetadataChildrenDTO childDto : allChildren) {
|
||||
String nodeType = childDto.getRelatedResourceUuidOwnType();
|
||||
// 仅层级节点需要合并
|
||||
if (nodeType != null && tagMapService.isNodeType(nodeType)) {
|
||||
itemsToMerge.add(childDto);
|
||||
} else {
|
||||
// 普通文件夹或非层级节点,不合并,直接添加到结果列表
|
||||
// 为了与合并后的项结构一致,进行自我包裹
|
||||
FileMetadataChildrenDTO baseDto = new FileMetadataChildrenDTO();
|
||||
BeanUtils.copyProperties(childDto, baseDto);
|
||||
childDto.setMergeSameNameChildren(Collections.singletonList(baseDto));
|
||||
childDto.setFileIds(Collections.singletonList(baseDto.getId()));
|
||||
result.add(childDto);
|
||||
}
|
||||
}
|
||||
|
||||
if(CollectionUtils.isNotEmpty(result)) {
|
||||
// 2. 聚合:对“需合并”的项进行分组和聚合
|
||||
if (CollectionUtils.isNotEmpty(itemsToMerge)) {
|
||||
Map<String, List<FileMetadataChildrenDTO>> groupedToMerge = itemsToMerge.stream()
|
||||
.collect(Collectors.groupingBy(FileMetadataChildrenDTO::getOriginalName));
|
||||
|
||||
for (List<FileMetadataChildrenDTO> children : groupedToMerge.values()) {
|
||||
FileMetadataChildrenDTO baseDto = new FileMetadataChildrenDTO();
|
||||
BeanUtils.copyProperties(children.get(0), baseDto);
|
||||
baseDto.setMergeSameNameChildren(children);
|
||||
baseDto.setFileIds(children.stream().map(FileMetadataChildrenDTO::getId).toList());
|
||||
result.add(baseDto);
|
||||
}
|
||||
}
|
||||
|
||||
if (CollectionUtils.isNotEmpty(result)) {
|
||||
result = sortMergedNodeDirResult(result);
|
||||
}
|
||||
|
||||
log.info("getSimulationNodeTree 方法耗时 " +
|
||||
"设置节点的 nodeCode" + (start2-start1) + "毫秒," +
|
||||
"批量转换成FileMetadataChildrenDTO:" + (start3-start2) + "毫秒," +
|
||||
"批量设置文件权限:" + (start4-start3) + "毫秒," +
|
||||
"批量设置文件的节点信息tag1-tag10:" + (start5-start4) + "毫秒," +
|
||||
"批量填充文件类型标签信息:" + (start6-start5) + "毫秒," +
|
||||
"设置节点的 nodeCode" + (start2 - start1) + "毫秒," +
|
||||
"批量转换成FileMetadataChildrenDTO:" + (start3 - start2) + "毫秒," +
|
||||
"批量设置文件权限:" + (start4 - start3) + "毫秒," +
|
||||
"批量设置文件的节点信息tag1-tag10:" + (start5 - start4) + "毫秒," +
|
||||
"批量填充文件类型标签信息:" + (start6 - start5) + "毫秒," +
|
||||
"结果排序:" + (System.currentTimeMillis() - start6) + "毫秒");
|
||||
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user