From 4379813aafd04c234bd0da8236311bb74388e187 Mon Sep 17 00:00:00 2001 From: liu Date: Wed, 28 Feb 2024 11:07:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=9B=BE=E8=B0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/GraphNebulaController.java | 8 ++-- .../service/GraphNebulaService.java | 4 +- .../service/impl/GraphNebulaServiceImpl.java | 39 +++++++++++++++++-- .../main/java/com/supervision/vo/EdgeVO.java | 2 + .../java/com/supervision/vo/TreeNodeVO.java | 4 +- 5 files changed, 46 insertions(+), 11 deletions(-) diff --git a/virtual-patient-graph/src/main/java/com/supervision/controller/GraphNebulaController.java b/virtual-patient-graph/src/main/java/com/supervision/controller/GraphNebulaController.java index 6abfb6d2..3a6d40fc 100644 --- a/virtual-patient-graph/src/main/java/com/supervision/controller/GraphNebulaController.java +++ b/virtual-patient-graph/src/main/java/com/supervision/controller/GraphNebulaController.java @@ -27,15 +27,15 @@ public class GraphNebulaController { @ApiOperation("查询图谱") @GetMapping("queryGraph") - public GraphVO queryGraph(String processId) { - return graphNebulaService.queryGraph(processId); + public GraphVO queryGraph(String processId, Integer level) { + return graphNebulaService.queryGraph(processId, level); } @ApiOperation("查询树形结构图") @GetMapping("queryTreeGraph") - public List queryTreeGraph(String processId) { - return graphNebulaService.queryTreeGraph(processId); + public List queryTreeGraph(String processId, Integer level) { + return graphNebulaService.queryTreeGraph(processId, level); } diff --git a/virtual-patient-graph/src/main/java/com/supervision/service/GraphNebulaService.java b/virtual-patient-graph/src/main/java/com/supervision/service/GraphNebulaService.java index 0891d658..009af60c 100644 --- a/virtual-patient-graph/src/main/java/com/supervision/service/GraphNebulaService.java +++ b/virtual-patient-graph/src/main/java/com/supervision/service/GraphNebulaService.java @@ -9,8 +9,8 @@ public interface GraphNebulaService { void creatGraphByNebula(String processId); - GraphVO queryGraph(String processId); + GraphVO queryGraph(String processId, Integer level); - List queryTreeGraph(String processId); + List queryTreeGraph(String processId, Integer level); } diff --git a/virtual-patient-graph/src/main/java/com/supervision/service/impl/GraphNebulaServiceImpl.java b/virtual-patient-graph/src/main/java/com/supervision/service/impl/GraphNebulaServiceImpl.java index da8d7a03..7c423b03 100644 --- a/virtual-patient-graph/src/main/java/com/supervision/service/impl/GraphNebulaServiceImpl.java +++ b/virtual-patient-graph/src/main/java/com/supervision/service/impl/GraphNebulaServiceImpl.java @@ -7,6 +7,7 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.nacos.common.utils.UuidUtils; import com.supervision.dao.*; import com.supervision.domain.*; import com.supervision.enums.TagEnum; @@ -245,7 +246,7 @@ public class GraphNebulaServiceImpl implements GraphNebulaService { @Override - public GraphVO queryGraph(String processId) { + public GraphVO queryGraph(String processId, Integer level) { Process process = Optional.ofNullable(processService.getById(processId)).orElseThrow(() -> new BusinessException("未找到对应的问诊流程")); // 如果图谱ID为空,则创建图谱 if (StrUtil.isEmpty(process.getGraphId())) { @@ -287,7 +288,14 @@ public class GraphNebulaServiceImpl implements GraphNebulaService { }); } } - nodeList.add(nodeVO); + // 校验级别(根据参数的级别来进行判断) + if (ObjectUtil.isNotEmpty(level)) { + if (level >= nodeVO.getNodeLevel()) { + nodeList.add(nodeVO); + } + } else { + nodeList.add(nodeVO); + } } // 构建边 List> edges = subgraph.getEdges(); @@ -295,21 +303,28 @@ public class GraphNebulaServiceImpl implements GraphNebulaService { EdgeVO edgeVO = new EdgeVO(); edgeVO.setSource(edge.getSrcID()); edgeVO.setTarget(edge.getDstID()); + Map properties = edge.getProperties(); Object nameObject = properties.get("edgeValue"); if (ObjectUtil.isNotEmpty(nameObject)) { edgeVO.setName(String.valueOf(nameObject)); + edgeVO.setLabel(edgeVO.getName()); } edgeVO.setParams(properties); edgeList.add(edgeVO); } } + // 这里,需要遍历,把重点不存在的节点连线给删掉 + Set nodeIdSet = nodeList.stream().map(NodeVO::getId).collect(Collectors.toSet()); + // 如果指向的节点不存在,那么这个边也不存在 + edgeList.removeIf(edgeVO -> !nodeIdSet.contains(edgeVO.getTarget())); + return new GraphVO(nodeList, edgeList); } @Override - public List queryTreeGraph(String processId) { - GraphVO graphVO = queryGraph(processId); + public List queryTreeGraph(String processId, Integer level) { + GraphVO graphVO = queryGraph(processId, level); List treeNodeList = graphVO.getNodes().stream().map(node -> BeanUtil.toBean(node, TreeNodeVO.class)).collect(Collectors.toList()); // 首先找到第一级节点 List firstNodeList = treeNodeList.stream().filter(node -> node.getNodeLevel() == 1).collect(Collectors.toList()); @@ -321,9 +336,25 @@ public class GraphNebulaServiceImpl implements GraphNebulaService { for (TreeNodeVO nodeVO : firstNodeList) { recursionBuildTree(nodeVO, treeNodeMap, graphVO.getEdges()); } + // 为所有节点分配新的唯一ID(前端需要ID字段为唯一ID) + recursionGenerateSingleId(firstNodeList); return firstNodeList; } + /** + * 为属性结构构建新的唯一ID,把原先的ID迁移到GraphId + */ + private void recursionGenerateSingleId(List firstNodeList) { + for (TreeNodeVO treeNodeVO : firstNodeList) { + String uuid = UuidUtils.generateUuid(); + treeNodeVO.setGraphId(treeNodeVO.getId()); + treeNodeVO.setId(uuid); + if (CollUtil.isNotEmpty(treeNodeVO.getChildren())) { + recursionGenerateSingleId(treeNodeVO.getChildren()); + } + } + } + private void recursionBuildTree(TreeNodeVO preNode, Map treeNodeMap, List edgeList) { // 通过preNode的ID找到所有的子节点 List childNode = new ArrayList<>(); diff --git a/virtual-patient-graph/src/main/java/com/supervision/vo/EdgeVO.java b/virtual-patient-graph/src/main/java/com/supervision/vo/EdgeVO.java index 453522b1..b384ddac 100644 --- a/virtual-patient-graph/src/main/java/com/supervision/vo/EdgeVO.java +++ b/virtual-patient-graph/src/main/java/com/supervision/vo/EdgeVO.java @@ -16,6 +16,8 @@ public class EdgeVO { @ApiModelProperty("连线展示的名称,可能为空") private String name; + @ApiModelProperty("连线展示的名称,=name,前端需要") + private String label; @ApiModelProperty("连线所拥有的属性") private Map params; diff --git a/virtual-patient-graph/src/main/java/com/supervision/vo/TreeNodeVO.java b/virtual-patient-graph/src/main/java/com/supervision/vo/TreeNodeVO.java index 6a0c45f0..522db22d 100644 --- a/virtual-patient-graph/src/main/java/com/supervision/vo/TreeNodeVO.java +++ b/virtual-patient-graph/src/main/java/com/supervision/vo/TreeNodeVO.java @@ -12,8 +12,10 @@ import java.util.Map; @ApiModel public class TreeNodeVO { - @ApiModelProperty("ID") + @ApiModelProperty("重新分配的唯一ID") private String id; + @ApiModelProperty("图谱ID") + private String graphId; @ApiModelProperty("节点值") private String nodeValue; @ApiModelProperty("节点颜色")