fix:数据总览支持同一级展示多个节点
This commit is contained in:
@@ -153,12 +153,28 @@ public class DimensionTemplateServiceImpl extends ServiceImpl<DimensionTemplateM
|
||||
hierarchy.setCreatedBy(userId);
|
||||
hierarchy.setTemplateId(templateId);
|
||||
hierarchy.setSortOrder(sortOrder++); // 设置排序序号并递增
|
||||
hierarchy.setDisplayName(normalizeDisplayName(hierarchyReq.getDisplayName()));
|
||||
hierarchies.add(hierarchy);
|
||||
}
|
||||
dimensionTemplateHierarchyService.saveBatch(hierarchies);
|
||||
}
|
||||
}
|
||||
|
||||
private List<String> parseDisplayNames(String displayName) {
|
||||
if (StringUtils.isBlank(displayName)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return Arrays.stream(displayName.split(","))
|
||||
.map(String::trim)
|
||||
.filter(StringUtils::isNotBlank)
|
||||
.distinct()
|
||||
.toList();
|
||||
}
|
||||
|
||||
private String normalizeDisplayName(String displayName) {
|
||||
return String.join(",", parseDisplayNames(displayName));
|
||||
}
|
||||
|
||||
private void deleteDimensionTemplateHierarchyByTemplateid(Long templateId) {
|
||||
LambdaQueryWrapper<DimensionTemplateHierarchy> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(DimensionTemplateHierarchy::getTemplateId, templateId);
|
||||
@@ -204,21 +220,33 @@ public class DimensionTemplateServiceImpl extends ServiceImpl<DimensionTemplateM
|
||||
Long dimensionTemplateId = req.getDimensionTemplateId();
|
||||
LambdaQueryWrapper<DimensionTemplateHierarchy> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(DimensionTemplateHierarchy::getTemplateId, dimensionTemplateId).orderByAsc(DimensionTemplateHierarchy::getSortOrder);
|
||||
List<String> dimensionNodeTyepOrderList = dimensionTemplateHierarchyService.list(queryWrapper).stream().map(DimensionTemplateHierarchy::getDisplayName).toList();
|
||||
List<List<String>> dimensionNodeTypeLevels = dimensionTemplateHierarchyService.list(queryWrapper).stream()
|
||||
.map(DimensionTemplateHierarchy::getDisplayName)
|
||||
.map(this::parseDisplayNames)
|
||||
.filter(CollectionUtils::isNotEmpty)
|
||||
.toList();
|
||||
|
||||
if (CollectionUtils.isEmpty(dimensionNodeTypeLevels)) {
|
||||
return SdmResponse.success(Collections.emptyList());
|
||||
}
|
||||
|
||||
List<String> uuids = new ArrayList<>();
|
||||
List<FileMetadataInfo> resultDir = new ArrayList<>();
|
||||
if (ObjectUtils.isEmpty(req.getFileIds())) {
|
||||
// 选中维度了,没有选节点,按照模版,展示模版的第一层节点数据
|
||||
String rootNodeType = dimensionNodeTyepOrderList.get(0);
|
||||
SdmResponse<List<AllNodeByProjectIdAndTypeResp>> allNodeByNodeTypeResponse = simuluationNodeFeignClient.getAllNodeByNodeType(null, rootNodeType);
|
||||
// 选中维度了,没有选节点,按照模版,展示模版的第一层节点数据(支持同一层多个节点类型)
|
||||
List<String> rootNodeTypes = dimensionNodeTypeLevels.get(0);
|
||||
for (String rootNodeType : rootNodeTypes) {
|
||||
SdmResponse<List<AllNodeByProjectIdAndTypeResp>> allNodeByNodeTypeResponse = simuluationNodeFeignClient.getAllNodeByNodeType(null, rootNodeType);
|
||||
|
||||
if (!allNodeByNodeTypeResponse.isSuccess()) {
|
||||
log.error("获取节点信息失败");
|
||||
return SdmResponse.success(Collections.emptyList());
|
||||
if (!allNodeByNodeTypeResponse.isSuccess()) {
|
||||
log.error("获取节点信息失败,nodeType:{}", rootNodeType);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (CollectionUtils.isNotEmpty(allNodeByNodeTypeResponse.getData())) {
|
||||
uuids.addAll(allNodeByNodeTypeResponse.getData().stream().map(AllNodeByProjectIdAndTypeResp::getUuid).toList());
|
||||
}
|
||||
}
|
||||
|
||||
uuids.addAll(allNodeByNodeTypeResponse.getData().stream().map(AllNodeByProjectIdAndTypeResp::getUuid).toList());
|
||||
} else {
|
||||
// 选中维度了,也选中了节点,按照模版,展示该节点下的普通文件夹、任务、算列、按照展示模版指定的下一层节点文件夹
|
||||
List<Long> fileIds = req.getFileIds();
|
||||
@@ -243,19 +271,28 @@ public class DimensionTemplateServiceImpl extends ServiceImpl<DimensionTemplateM
|
||||
|
||||
// chooseUuid和chooseNodeType不为空,并且是node节点类型,才是节点文件夹,才需要查询子节点文件夹文件
|
||||
if (ObjectUtils.isNotEmpty(chooseUuids) && ObjectUtils.isNotEmpty(chooseNodeType) && tagMapService.isNodeType(chooseNodeType)) {
|
||||
// 从dimensionNodeTyepOrderList中获取chooseNodeType下一个位置的数据,有可能chooseNodeType所在位置就是最后一层节点,SdmResponse返回空数据
|
||||
int index = dimensionNodeTyepOrderList.indexOf(chooseNodeType);
|
||||
if (index == -1) {
|
||||
// 找到当前节点类型所在层级
|
||||
int currentLevelIndex = -1;
|
||||
for (int i = 0; i < dimensionNodeTypeLevels.size(); i++) {
|
||||
if (dimensionNodeTypeLevels.get(i).contains(chooseNodeType)) {
|
||||
currentLevelIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (currentLevelIndex == -1) {
|
||||
return SdmResponse.failed("选中节点类型不在数据展示维度中");
|
||||
}
|
||||
|
||||
// 非最后一层:查模板下一层;最后一层:查同类型连续子节点(例如 分类->分类)
|
||||
String nextNodeType = (index != dimensionNodeTyepOrderList.size() - 1)
|
||||
? dimensionNodeTyepOrderList.get(index + 1)
|
||||
: chooseNodeType;
|
||||
SdmResponse<List<AllNodeByProjectIdAndTypeResp>> allNodeByProjectIdAndType = simuluationNodeFeignClient.getAllNodeByProjectIdAndType(chooseUuids, nextNodeType);
|
||||
if (allNodeByProjectIdAndType.isSuccess() && ObjectUtils.isNotEmpty(allNodeByProjectIdAndType.getData())) {
|
||||
uuids.addAll(allNodeByProjectIdAndType.getData().stream().map(AllNodeByProjectIdAndTypeResp::getUuid).toList());
|
||||
// 非最后一层:查模板下一层多个类型;最后一层:查同类型连续子节点(例如 分类->分类)
|
||||
List<String> nextNodeTypes = (currentLevelIndex != dimensionNodeTypeLevels.size() - 1)
|
||||
? dimensionNodeTypeLevels.get(currentLevelIndex + 1)
|
||||
: Collections.singletonList(chooseNodeType);
|
||||
|
||||
for (String nextNodeType : nextNodeTypes) {
|
||||
SdmResponse<List<AllNodeByProjectIdAndTypeResp>> allNodeByProjectIdAndType = simuluationNodeFeignClient.getAllNodeByProjectIdAndType(chooseUuids, nextNodeType);
|
||||
if (allNodeByProjectIdAndType.isSuccess() && CollectionUtils.isNotEmpty(allNodeByProjectIdAndType.getData())) {
|
||||
uuids.addAll(allNodeByProjectIdAndType.getData().stream().map(AllNodeByProjectIdAndTypeResp::getUuid).toList());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -274,6 +311,7 @@ public class DimensionTemplateServiceImpl extends ServiceImpl<DimensionTemplateM
|
||||
}
|
||||
}
|
||||
|
||||
uuids = uuids.stream().filter(StringUtils::isNotBlank).distinct().toList();
|
||||
if (CollectionUtils.isNotEmpty(uuids)) {
|
||||
List<FileMetadataInfo> nodeDirInfos = fileMetadataInfoService.lambdaQuery()
|
||||
.in(FileMetadataInfo::getRelatedResourceUuid, uuids)
|
||||
|
||||
Reference in New Issue
Block a user