feat(diagram): DiagramVo 增 positions 布局单源字段

This commit is contained in:
chenxing
2026-10-03 13:51:45 +08:00
parent cacdd4ee14
commit 09c3c0c38c
3 changed files with 19 additions and 1 deletions
@@ -123,6 +123,11 @@ public final class FlowModels {
private List<EdgeVo> edges; private List<EdgeVo> edges;
/** 画布坐标(nodeId→{x,y},设计器保存时透传;空=查看器自行自动布局) */ /** 画布坐标(nodeId→{x,y},设计器保存时透传;空=查看器自行自动布局) */
private Map<String, Map<String, Integer>> layout; private Map<String, Map<String, Integer>> layout;
/**
* 布局单源(2026-10-03 三视图统一):nodeId → {x,y,w,h}(内容区坐标,min 归零)。
* 查看端(前端 SVG / PNG)一律以此为准;layout(设计器画布坐标)已废弃,兼容期仍下发。
*/
private Map<String, Map<String, Integer>> positions;
} }
/** 示意图节点(label/subLabel 已按视图解析好,前端只画不解析;state 仅 instance 口径有值) */ /** 示意图节点(label/subLabel 已按视图解析好,前端只画不解析;state 仅 instance 口径有值) */
@@ -26,6 +26,7 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@@ -59,6 +60,7 @@ public class FlowDiagramService {
private final FlwRouteLogRepository routeLogRepository; private final FlwRouteLogRepository routeLogRepository;
private final FlowEngine flowEngine; private final FlowEngine flowEngine;
private final OpenApiUserClient userClient; private final OpenApiUserClient userClient;
private final DiagramLayoutService diagramLayoutService;
/** flowGuid 分支:最高已发布版(查询范式同 OapiFlowService.getFlow) */ /** flowGuid 分支:最高已发布版(查询范式同 OapiFlowService.getFlow) */
public FlowModels.DiagramVo byGuid(Long schId, String flowGuid, String mode) { public FlowModels.DiagramVo byGuid(Long schId, String flowGuid, String mode) {
@@ -140,6 +142,17 @@ public class FlowDiagramService {
edges.add(ev); edges.add(ev);
} }
vo.setEdges(edges); vo.setEdges(edges);
// 布局单源(2026-10-03 三视图统一):与 PNG 同源,查看端以此为准
Map<String, Map<String, Integer>> positions = new LinkedHashMap<>();
diagramLayoutService.layout(nodes, edges).forEach((id, b) -> {
Map<String, Integer> 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 布局) // 画布坐标透传(设计器保存;缺失时前端自行 Kahn 布局)
if (model.layout != null && !model.layout.isEmpty()) { if (model.layout != null && !model.layout.isEmpty()) {
Map<String, Map<String, Integer>> layout = new HashMap<>(); Map<String, Map<String, Integer>> layout = new HashMap<>();
@@ -111,7 +111,7 @@ class FlowDiagramServiceTest {
mock(com.yunhai.flowcenter.repository.FlwInstanceRepository.class), mock(com.yunhai.flowcenter.repository.FlwInstanceRepository.class),
taskRepository, ccRepository, taskRepository, ccRepository,
mock(com.yunhai.flowcenter.repository.FlwRouteLogRepository.class), mock(com.yunhai.flowcenter.repository.FlwRouteLogRepository.class),
engine, userClient); engine, userClient, new DiagramLayoutService());
} }
private FlwDef def(String json) { private FlwDef def(String json) {