From 09c3c0c38c0308c797a7063fbce657380e8946e3 Mon Sep 17 00:00:00 2001 From: chenxing Date: Sat, 3 Oct 2026 13:51:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(diagram):=20DiagramVo=20=E5=A2=9E=20positi?= =?UTF-8?q?ons=20=E5=B8=83=E5=B1=80=E5=8D=95=E6=BA=90=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yunhai/flowcenter/model/FlowModels.java | 5 +++++ .../flowcenter/service/FlowDiagramService.java | 13 +++++++++++++ .../flowcenter/service/FlowDiagramServiceTest.java | 2 +- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/yunhai/flowcenter/model/FlowModels.java b/src/main/java/com/yunhai/flowcenter/model/FlowModels.java index ef44632..bdfc996 100644 --- a/src/main/java/com/yunhai/flowcenter/model/FlowModels.java +++ b/src/main/java/com/yunhai/flowcenter/model/FlowModels.java @@ -123,6 +123,11 @@ public final class FlowModels { private List edges; /** 画布坐标(nodeId→{x,y},设计器保存时透传;空=查看器自行自动布局) */ private Map> layout; + /** + * 布局单源(2026-10-03 三视图统一):nodeId → {x,y,w,h}(内容区坐标,min 归零)。 + * 查看端(前端 SVG / PNG)一律以此为准;layout(设计器画布坐标)已废弃,兼容期仍下发。 + */ + private Map> positions; } /** 示意图节点(label/subLabel 已按视图解析好,前端只画不解析;state 仅 instance 口径有值) */ diff --git a/src/main/java/com/yunhai/flowcenter/service/FlowDiagramService.java b/src/main/java/com/yunhai/flowcenter/service/FlowDiagramService.java index 14fbb00..63a9c8e 100644 --- a/src/main/java/com/yunhai/flowcenter/service/FlowDiagramService.java +++ b/src/main/java/com/yunhai/flowcenter/service/FlowDiagramService.java @@ -26,6 +26,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -59,6 +60,7 @@ public class FlowDiagramService { private final FlwRouteLogRepository routeLogRepository; private final FlowEngine flowEngine; private final OpenApiUserClient userClient; + private final DiagramLayoutService diagramLayoutService; /** flowGuid 分支:最高已发布版(查询范式同 OapiFlowService.getFlow) */ public FlowModels.DiagramVo byGuid(Long schId, String flowGuid, String mode) { @@ -140,6 +142,17 @@ public class FlowDiagramService { edges.add(ev); } vo.setEdges(edges); + // 布局单源(2026-10-03 三视图统一):与 PNG 同源,查看端以此为准 + Map> positions = new LinkedHashMap<>(); + diagramLayoutService.layout(nodes, edges).forEach((id, b) -> { + Map p = new LinkedHashMap<>(); + p.put("x", b[0]); + p.put("y", b[1]); + p.put("w", b[2]); + p.put("h", b[3]); + positions.put(id, p); + }); + vo.setPositions(positions); // 画布坐标透传(设计器保存;缺失时前端自行 Kahn 布局) if (model.layout != null && !model.layout.isEmpty()) { Map> layout = new HashMap<>(); diff --git a/src/test/java/com/yunhai/flowcenter/service/FlowDiagramServiceTest.java b/src/test/java/com/yunhai/flowcenter/service/FlowDiagramServiceTest.java index 5fe87bb..e7d547c 100644 --- a/src/test/java/com/yunhai/flowcenter/service/FlowDiagramServiceTest.java +++ b/src/test/java/com/yunhai/flowcenter/service/FlowDiagramServiceTest.java @@ -111,7 +111,7 @@ class FlowDiagramServiceTest { mock(com.yunhai.flowcenter.repository.FlwInstanceRepository.class), taskRepository, ccRepository, mock(com.yunhai.flowcenter.repository.FlwRouteLogRepository.class), - engine, userClient); + engine, userClient, new DiagramLayoutService()); } private FlwDef def(String json) {