From f479a025696cde6a74368d73c7e9ee1b45bfac6b Mon Sep 17 00:00:00 2001 From: gulongcheng <474084054@qq.com> Date: Wed, 18 Mar 2026 16:00:49 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E5=B7=A5=E4=BD=8D=E6=8E=92?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DimensionTemplateServiceImpl.java | 60 ++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/data/src/main/java/com/sdm/data/service/impl/DimensionTemplateServiceImpl.java b/data/src/main/java/com/sdm/data/service/impl/DimensionTemplateServiceImpl.java index 83f0525f..1f641713 100644 --- a/data/src/main/java/com/sdm/data/service/impl/DimensionTemplateServiceImpl.java +++ b/data/src/main/java/com/sdm/data/service/impl/DimensionTemplateServiceImpl.java @@ -441,6 +441,14 @@ public class DimensionTemplateServiceImpl extends ServiceImpl NodeTypeEnum.WORKSPACE.getValue().equals(child.getRelatedResourceUuidOwnType())); + boolean isWorkspace2 = dto2.getMergeSameNameChildren().stream() + .anyMatch(child -> NodeTypeEnum.WORKSPACE.getValue().equals(child.getRelatedResourceUuidOwnType())); + if (isWorkspace1 && isWorkspace2) { + return compareWorkspaceNodeCode(dto1.getNodeCode(), dto2.getNodeCode()); + } // 如果存在PHASE类型节点,dataType相同时按主键ID正序排序 if (hasPhaseNode) { @@ -475,10 +483,60 @@ public class DimensionTemplateServiceImpl extends ServiceImpl result) { + if (CollectionUtils.isEmpty(result)) { + return; + } + + FileMetadataChildrenDTO specialWorkspace = result.stream() + .filter(this::isWorkspaceNode) + .filter(dto -> StringUtils.contains(dto.getNodeCode(), "-M")) + .findFirst() + .orElse(null); + if (specialWorkspace != null) { + result.remove(specialWorkspace); + result.add(0, specialWorkspace); + } + } + + private boolean isWorkspaceNode(FileMetadataChildrenDTO dto) { + return dto != null && CollectionUtils.isNotEmpty(dto.getMergeSameNameChildren()) + && dto.getMergeSameNameChildren().stream() + .anyMatch(child -> NodeTypeEnum.WORKSPACE.getValue().equals(child.getRelatedResourceUuidOwnType())); + } + + private int compareWorkspaceNodeCode(String nodeCode1, String nodeCode2) { + if (nodeCode1 == null || nodeCode2 == null) { + return String.valueOf(nodeCode1).compareTo(String.valueOf(nodeCode2)); + } + if (nodeCode1.contains("-M") || nodeCode2.contains("-M")) { + return 0; + } + String[] workspaceNode1 = nodeCode1.split("-"); + String[] workspaceNode2 = nodeCode2.split("-"); + if (workspaceNode1.length != 2 || workspaceNode2.length != 2) { + return nodeCode1.compareTo(nodeCode2); + } + try { + int prefix1 = Integer.parseInt(workspaceNode1[0]); + int prefix2 = Integer.parseInt(workspaceNode2[0]); + if (prefix1 != prefix2) { + return Integer.compare(prefix1, prefix2); + } + int suffix1 = Integer.parseInt(workspaceNode1[1]); + int suffix2 = Integer.parseInt(workspaceNode2[1]); + return Integer.compare(suffix1, suffix2); + } catch (NumberFormatException ex) { + return nodeCode1.compareTo(nodeCode2); + } + } + /** * 获取节点文件列表