From ccfec6a6584c3d623828ea55b7ccaf031c1efec4 Mon Sep 17 00:00:00 2001 From: icanci Date: Sat, 23 Sep 2023 17:16:36 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=88=B7=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- biz/pom.xml | 4 ++ .../bic/biz/adapter/GraphAdapterService.java | 52 ++++++++++++------- .../bic/biz/service/NodeService.java | 2 + .../bic/biz/service/NodeStyleService.java | 2 + .../bic/biz/service/impl/NodeServiceImpl.java | 5 ++ .../service/impl/NodeStyleServiceImpl.java | 4 ++ .../biz/service/impl/SnapshotServiceImpl.java | 1 + .../style/default-edge-style-template.json | 8 +++ .../style/demo-edge-style-template.json | 8 +++ .../bic/dal/mongo/daointerface/NodeDAO.java | 2 + .../dal/mongo/daointerface/NodeStyleDAO.java | 2 + .../bic/dal/mongo/mongo/MongoNodeDAO.java | 8 +++ .../dal/mongo/mongo/MongoNodeStyleDAO.java | 8 +++ .../icanci/loopstack/bic/graph/node/Node.java | 6 +++ pom.xml | 6 +++ 15 files changed, 100 insertions(+), 18 deletions(-) diff --git a/biz/pom.xml b/biz/pom.xml index 4c0f604..cde60a0 100644 --- a/biz/pom.xml +++ b/biz/pom.xml @@ -31,6 +31,10 @@ org.mapstruct mapstruct + + org.apache.commons + commons-text + diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/adapter/GraphAdapterService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/adapter/GraphAdapterService.java index 3c151b9..0ce59d9 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/adapter/GraphAdapterService.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/adapter/GraphAdapterService.java @@ -1,20 +1,27 @@ package cn.icanci.loopstack.bic.biz.adapter; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; import javax.annotation.Resource; +import org.apache.commons.text.StringSubstitutor; import org.springframework.stereotype.Service; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import cn.hutool.json.JSONUtil; import cn.icanci.loopstack.bic.biz.exception.GraphAdapterException; import cn.icanci.loopstack.bic.biz.service.EdgeStyleService; import cn.icanci.loopstack.bic.biz.service.NodeService; import cn.icanci.loopstack.bic.biz.service.NodeStyleService; import cn.icanci.loopstack.bic.biz.service.UnitViewService; import cn.icanci.loopstack.bic.common.model.base.EdgeStyleVO; +import cn.icanci.loopstack.bic.common.model.base.NodeStyleVO; +import cn.icanci.loopstack.bic.common.model.base.NodeVO; import cn.icanci.loopstack.bic.common.model.graph.UnitEdgeVO; import cn.icanci.loopstack.bic.common.model.graph.UnitNodeVO; import cn.icanci.loopstack.bic.common.model.graph.UnitViewVO; @@ -58,15 +65,26 @@ public class GraphAdapterService implements GraphAdapter { } private Node buildNode(UnitNodeVO node) { - Node retNode = new Node(); -// retNode.setId(); -// retNode.setShape(); -// retNode.setWidth(); -// retNode.setHeight(); -// retNode.setAttrs(); + String nodeUuid = node.getNodeUuid(); + String styleUuid = node.getStyleUuid(); + NodeVO nodeVO = nodeService.queryByUuid(nodeUuid); + String nodeStyle = Optional.ofNullable(nodeStyleService.queryByUuid(styleUuid)).map(NodeStyleVO::getNodeStyle).orElse(nodeStyleService.loadDefaultStyle()); + StringSubstitutor sub = new StringSubstitutor(buildNodeMap(nodeVO)); + nodeStyle = sub.replace(nodeStyle); + Node retNode = JSONUtil.toBean(nodeStyle, Node.class); + retNode.setNodeDataMode(node.getNodeDataMode().getCode()); + retNode.setNodeDataKey(node.getNodeDataKey()); + retNode.setNodeType(node.getNodeType().getCode()); return retNode; } + private Map buildNodeMap(NodeVO node) { + HashMap nodeMap = Maps.newHashMap(); + nodeMap.put("id", node.getUuid()); + nodeMap.put("nodeName", node.getNodeName()); + return nodeMap; + } + private List adapterEdges(List edges) { List retEdges = Lists.newArrayList(); for (UnitEdgeVO edge : edges) { @@ -77,19 +95,17 @@ public class GraphAdapterService implements GraphAdapter { private Edge buildEdge(UnitEdgeVO edge) { String styleUuid = edge.getStyleUuid(); - // TODO 查询样式 String edgeStyle = Optional.ofNullable(edgeStyleService.queryByUuid(styleUuid)).map(EdgeStyleVO::getEdgeStyle).orElse(edgeStyleService.loadDefaultStyle()); + StringSubstitutor sub = new StringSubstitutor(buildEdgeMap(edge)); + edgeStyle = sub.replace(edgeStyle); + return JSONUtil.toBean(edgeStyle, Edge.class); + } - Edge retEdge = new Edge(); -// retEdge.setSource(); -// retEdge.setTarget(); -// retEdge.setAttrs(); -// retEdge.setRouter(); -// retEdge.setConnector(); -// retEdge.setLabels(); -// retEdge.setConsumerInfo(); -// retEdge.setHistoryInfo(); - return retEdge; - + private Map buildEdgeMap(UnitEdgeVO edge) { + HashMap edgeMap = Maps.newHashMap(); + edgeMap.put("sourceId", edge.getSourceUuid()); + edgeMap.put("targetId", edge.getTargetUuid()); + edgeMap.put("hoverName", edge.getHoverName()); + return edgeMap; } } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/NodeService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/NodeService.java index d86e0e8..bb2d977 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/NodeService.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/NodeService.java @@ -30,4 +30,6 @@ public interface NodeService extends BaseService { List loadSelector(String systemUuid); List loadAllSelector(); + + NodeVO queryByUuid(String nodeUuid); } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/NodeStyleService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/NodeStyleService.java index c791647..ed5c875 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/NodeStyleService.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/NodeStyleService.java @@ -30,4 +30,6 @@ public interface NodeStyleService extends BaseService { List loadSelector(String systemUuid); String loadDefaultStyle(); + + NodeStyleVO queryByUuid(String styleUuid); } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/NodeServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/NodeServiceImpl.java index 74a22a0..3bed976 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/NodeServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/NodeServiceImpl.java @@ -109,4 +109,9 @@ public class NodeServiceImpl implements NodeService { } return textValues; } + + @Override + public NodeVO queryByUuid(String nodeUuid) { + return nodeMapper.do2vo(nodeDAO.queryByUuid(nodeUuid)); + } } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/NodeStyleServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/NodeStyleServiceImpl.java index f81b8ec..e226c6e 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/NodeStyleServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/NodeStyleServiceImpl.java @@ -100,4 +100,8 @@ public class NodeStyleServiceImpl implements NodeStyleService { public String loadDefaultStyle() { return TemplateFileUtils.queryDefaultNodeStyleTemplate(); } + + @Override public NodeStyleVO queryByUuid(String styleUuid) { + return nodeStyleMapper.do2vo(nodeStyleDAO.queryByUuid(styleUuid)); + } } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/SnapshotServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/SnapshotServiceImpl.java index 5acb2f4..d55bfc2 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/SnapshotServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/SnapshotServiceImpl.java @@ -42,6 +42,7 @@ public class SnapshotServiceImpl implements SnapshotService { } unitViewSnapshot.setVersion(version); unitViewSnapshot.setSnapshot(snapshot); + unitViewSnapshotService.save(unitViewSnapshot); } diff --git a/biz/src/main/resources/style/default-edge-style-template.json b/biz/src/main/resources/style/default-edge-style-template.json index 0faeb86..c027f03 100644 --- a/biz/src/main/resources/style/default-edge-style-template.json +++ b/biz/src/main/resources/style/default-edge-style-template.json @@ -1,4 +1,12 @@ { + "source": { + "cell": "${sourceId}", + "port": "port-right" + }, + "target": { + "cell": "${targetId}", + "port": "port-left" + }, "attrs": { "line": { "stroke": "#7c68fc", diff --git a/biz/src/main/resources/style/demo-edge-style-template.json b/biz/src/main/resources/style/demo-edge-style-template.json index 426101f..cb93093 100644 --- a/biz/src/main/resources/style/demo-edge-style-template.json +++ b/biz/src/main/resources/style/demo-edge-style-template.json @@ -1,4 +1,12 @@ { + "source": { + "cell": "BICXXXXX1", + "port": "port-right" + }, + "target": { + "cell": "BICXXXXX2", + "port": "port-left" + }, "attrs": { "line": { "stroke": "#7c68fc", diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/NodeDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/NodeDAO.java index bbc1c54..28085dd 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/NodeDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/NodeDAO.java @@ -16,6 +16,8 @@ public interface NodeDAO extends BaseDAO { NodeDO queryBySystemUuidAndKey(String systemUuid, String key); + NodeDO queryByUuid(String nodeUuid); + /** 列 */ interface NodeColumn extends BaseColumn { String NODE_NAME = "nodeName"; diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/NodeStyleDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/NodeStyleDAO.java index 42bd97d..ddc7a04 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/NodeStyleDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/NodeStyleDAO.java @@ -16,6 +16,8 @@ public interface NodeStyleDAO extends BaseDAO { NodeStyleDO queryBySystemUuidAndKey(String systemUuid, String key); + NodeStyleDO queryByUuid(String styleUuid); + /** 列 */ interface NodeStyleColumn extends BaseColumn { String SYSTEM_UUID = "systemUuid"; diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoNodeDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoNodeDAO.java index ac284b4..74f024b 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoNodeDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoNodeDAO.java @@ -86,4 +86,12 @@ public class MongoNodeDAO extends AbstractBaseDAO implements NodeDAO { Query query = new Query(criteria); return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); } + + @Override + public NodeDO queryByUuid(String nodeUuid) { + Criteria criteria = Criteria.where(NodeColumn.UUID).is(nodeUuid); + criteria.and(NodeColumn.ENV).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } } diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoNodeStyleDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoNodeStyleDAO.java index 8940655..accd845 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoNodeStyleDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoNodeStyleDAO.java @@ -90,4 +90,12 @@ public class MongoNodeStyleDAO extends AbstractBaseDAO implements N return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); } + + @Override + public NodeStyleDO queryByUuid(String styleUuid) { + Criteria criteria = Criteria.where(NodeStyleColumn.UUID).is(styleUuid); + criteria.and(NodeStyleColumn.ENV).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } } diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/Node.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/Node.java index e9ad1ec..8b60e53 100644 --- a/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/Node.java +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/Node.java @@ -13,4 +13,10 @@ public class Node { private double width; private double height; private NodeAttrs attrs; + /** 节点Data模式:前缀匹配、全部匹配 */ + private String nodeDataMode; + /** 节点DataKey: UseCase-Module-Category-SubCategory */ + private String nodeDataKey; + /** 节点类型 */ + private String nodeType; } diff --git a/pom.xml b/pom.xml index 3335290..52da86c 100644 --- a/pom.xml +++ b/pom.xml @@ -62,6 +62,7 @@ 1.18.2 4.0.0 + 1.10.0 @@ -187,6 +188,11 @@ lucene-core ${lucene-core.version} + + org.apache.commons + commons-text + ${commons-text.version} + -- Gitee From 55af9a00842be1b369acc4689c08fd43bea1d708 Mon Sep 17 00:00:00 2001 From: icanci Date: Sat, 23 Sep 2023 22:55:39 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E7=BC=93=E5=AD=98=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../loopstack/bic/biz/cache/GraphKey.java | 2 + .../bic/biz/cache/GraphRepository.java | 42 ++++++++++++++++-- .../biz/dts/impl/EdgeStyleDtsServiceImpl.java | 42 ++++++++++++++---- .../biz/dts/impl/NodeStyleDtsServiceImpl.java | 41 ++++++++++++++--- .../biz/dts/impl/NodeVueDtsServiceImpl.java | 42 +++++++++++++++--- .../impl/UnitViewTreeGraphDtsServiceImpl.java | 29 ++++++++---- .../bic/biz/service/SnapshotService.java | 8 ++++ .../bic/biz/service/UnitViewService.java | 2 + .../biz/service/UnitViewSnapshotService.java | 2 - .../service/impl/NodeStyleServiceImpl.java | 5 +-- .../biz/service/impl/SnapshotServiceImpl.java | 44 +++++++++++++++---- .../biz/service/impl/UnitViewServiceImpl.java | 5 +++ .../bic/common/model/graph/UnitNodeVO.java | 2 + .../dal/mongo/daointerface/UnitViewDAO.java | 16 +++++-- .../bic/dal/mongo/mongo/MongoUnitViewDAO.java | 8 ++++ 15 files changed, 240 insertions(+), 50 deletions(-) diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/cache/GraphKey.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/cache/GraphKey.java index 7294e4f..540662f 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/cache/GraphKey.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/cache/GraphKey.java @@ -1,5 +1,6 @@ package cn.icanci.loopstack.bic.biz.cache; +import lombok.AllArgsConstructor; import lombok.Data; import java.util.Objects; @@ -11,6 +12,7 @@ import java.util.Objects; * @since 1.0 Created in 2023/09/21 10:48 */ @Data +@AllArgsConstructor public class GraphKey { /** 系统uuid */ private String systemUuid; diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/cache/GraphRepository.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/cache/GraphRepository.java index c6597c7..63ee3d2 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/cache/GraphRepository.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/cache/GraphRepository.java @@ -1,28 +1,62 @@ package cn.icanci.loopstack.bic.biz.cache; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Service; +import com.google.common.collect.Maps; + +import cn.hutool.json.JSONUtil; +import cn.icanci.loopstack.bic.biz.service.SnapshotService; +import cn.icanci.loopstack.bic.common.model.snapshot.UnitViewSnapshotVO; +import cn.icanci.loopstack.bic.graph.Graph; + /** * @author icanci * @since 1.0 Created in 2023/09/20 23:59 */ @Service public final class GraphRepository implements ApplicationContextAware { - private ApplicationContext context; + + @Resource + private SnapshotService snapshotService; + + private static final Map REPOSITORY = Maps.newConcurrentMap(); @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - this.context = applicationContext; + doGraphRepositoryReload(); } private void doGraphRepositoryReload() { - // TODO 加载所有缓存 + List unitViewSnapshotVOS = snapshotService.loadUseCaseSnapshot(); + for (UnitViewSnapshotVO unitViewSnapshotVO : unitViewSnapshotVOS) { + refresh(unitViewSnapshotVO); + } } public void refresh(String systemUuid, String useCaseUuid) { - // TODO 刷新缓存 + UnitViewSnapshotVO unitViewSnapshot = snapshotService.queryBySystemUuidAndUseCaseUuid(systemUuid, useCaseUuid); + refresh(unitViewSnapshot); } + + public Graph get(String systemUuid, String useCaseUuid) { + return REPOSITORY.get(new GraphKey(systemUuid, useCaseUuid)); + } + + private void refresh(UnitViewSnapshotVO unitViewSnapshot) { + if (unitViewSnapshot == null) { + return; + } + String systemUuid = unitViewSnapshot.getSystemUuid(); + String useCaseUuid = unitViewSnapshot.getUseCaseUuid(); + REPOSITORY.put(new GraphKey(systemUuid, useCaseUuid), JSONUtil.toBean(unitViewSnapshot.getSnapshot(), Graph.class)); + } + } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/EdgeStyleDtsServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/EdgeStyleDtsServiceImpl.java index 5f0eece..45e6416 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/EdgeStyleDtsServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/EdgeStyleDtsServiceImpl.java @@ -1,13 +1,23 @@ package cn.icanci.loopstack.bic.biz.dts.impl; +import java.util.List; +import java.util.Set; + import javax.annotation.Resource; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import com.google.common.collect.Sets; + import cn.icanci.loopstack.bic.biz.dts.DTS; import cn.icanci.loopstack.bic.biz.dts.GraphDtsService; import cn.icanci.loopstack.bic.biz.service.SnapshotService; +import cn.icanci.loopstack.bic.biz.service.UnitViewService; import cn.icanci.loopstack.bic.common.model.base.EdgeStyleVO; +import cn.icanci.loopstack.bic.common.model.graph.UnitEdgeVO; +import cn.icanci.loopstack.bic.common.model.graph.UnitViewVO; /** * @author icanci @@ -19,16 +29,32 @@ import cn.icanci.loopstack.bic.common.model.base.EdgeStyleVO; public class EdgeStyleDtsServiceImpl implements GraphDtsService { @Resource private SnapshotService snapshotService; + @Resource + private UnitViewService unitViewService; @Override public void dtsUnitViewTree(EdgeStyleVO edgeStyle) { - // Tips: 创建线程池进行并行更新 - // 1 获取边被使用的系统和用例 - // 1.1 如果没有,结束 - // 1.2 如果有,获取所有使用此边的纠察图 - // 2 遍历进行更新 - // TODO 自动刷新快照和版本, - // 自动刷新纠察图结构缓存 - // snapshotService.refresh(edgeStyle.getSystemUuid(),); + List unitViews = unitViewService.queryBySystemUuid(edgeStyle.getSystemUuid()); + if (CollectionUtils.isEmpty(unitViews)) { + return; + } + + Set useCaseUuids = Sets.newHashSet(); + for (UnitViewVO unitView : unitViews) { + List edges = unitView.getEdges(); + if (CollectionUtils.isEmpty(edges)) { + continue; + } + + for (UnitEdgeVO edge : edges) { + if (StringUtils.equals(edgeStyle.getUuid(), edge.getStyleUuid())) { + useCaseUuids.add(unitView.getUseCaseUuid()); + } + } + } + // TODO 如果执行的慢可以使用线程池进行更新,此处咱不处理 + useCaseUuids.forEach(useCaseUuid -> { + snapshotService.refresh(edgeStyle.getSystemUuid(), useCaseUuid); + }); } } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/NodeStyleDtsServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/NodeStyleDtsServiceImpl.java index 1a8508a..8fce318 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/NodeStyleDtsServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/NodeStyleDtsServiceImpl.java @@ -1,13 +1,23 @@ package cn.icanci.loopstack.bic.biz.dts.impl; +import java.util.List; +import java.util.Set; + import javax.annotation.Resource; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import com.google.common.collect.Sets; + import cn.icanci.loopstack.bic.biz.dts.DTS; import cn.icanci.loopstack.bic.biz.dts.GraphDtsService; import cn.icanci.loopstack.bic.biz.service.SnapshotService; +import cn.icanci.loopstack.bic.biz.service.UnitViewService; import cn.icanci.loopstack.bic.common.model.base.NodeStyleVO; +import cn.icanci.loopstack.bic.common.model.graph.UnitNodeVO; +import cn.icanci.loopstack.bic.common.model.graph.UnitViewVO; /** * @author icanci @@ -19,14 +29,31 @@ import cn.icanci.loopstack.bic.common.model.base.NodeStyleVO; public class NodeStyleDtsServiceImpl implements GraphDtsService { @Resource private SnapshotService snapshotService; + @Resource + private UnitViewService unitViewService; @Override - public void dtsUnitViewTree(NodeStyleVO type) { - // 1 获取节点被使用的系统和用例 - // 1.1 如果没有,结束 - // 1.2 如果有,获取所有使用此节点的纠察图 - // 2 遍历进行更新 - // TODO 自动刷新快照和版本, - // 节点样式变更之后:自动刷新纠察图结构缓存 + public void dtsUnitViewTree(NodeStyleVO nodeStyle) { + List unitViews = unitViewService.queryBySystemUuid(nodeStyle.getSystemUuid()); + if (CollectionUtils.isEmpty(unitViews)) { + return; + } + Set useCaseUuids = Sets.newHashSet(); + for (UnitViewVO unitView : unitViews) { + List nodes = unitView.getNodes(); + if (CollectionUtils.isEmpty(nodes)) { + continue; + } + + for (UnitNodeVO node : nodes) { + if (StringUtils.equals(nodeStyle.getUuid(), node.getStyleUuid())) { + useCaseUuids.add(unitView.getUseCaseUuid()); + } + } + } + // TODO 如果执行的慢可以使用线程池进行更新,此处咱不处理 + useCaseUuids.forEach(useCaseUuid -> { + snapshotService.refresh(nodeStyle.getSystemUuid(), useCaseUuid); + }); } } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/NodeVueDtsServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/NodeVueDtsServiceImpl.java index b658c5c..ddd618d 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/NodeVueDtsServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/NodeVueDtsServiceImpl.java @@ -1,13 +1,23 @@ package cn.icanci.loopstack.bic.biz.dts.impl; +import java.util.List; +import java.util.Set; + import javax.annotation.Resource; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import com.google.common.collect.Sets; + import cn.icanci.loopstack.bic.biz.dts.DTS; import cn.icanci.loopstack.bic.biz.dts.GraphDtsService; import cn.icanci.loopstack.bic.biz.service.SnapshotService; +import cn.icanci.loopstack.bic.biz.service.UnitViewService; import cn.icanci.loopstack.bic.common.model.base.NodeVueVO; +import cn.icanci.loopstack.bic.common.model.graph.UnitNodeVO; +import cn.icanci.loopstack.bic.common.model.graph.UnitViewVO; /** * @author icanci @@ -19,14 +29,32 @@ import cn.icanci.loopstack.bic.common.model.base.NodeVueVO; public class NodeVueDtsServiceImpl implements GraphDtsService { @Resource private SnapshotService snapshotService; + @Resource + private UnitViewService unitViewService; @Override - public void dtsUnitViewTree(NodeVueVO type) { - // 1 获取节点被使用的系统和用例 - // 1.1 如果没有,结束 - // 1.2 如果有,获取所有使用此节点的纠察图 - // 2 遍历进行更新 - // TODO 自动刷新快照和版本 - // 节点组件变更之后:自动刷新纠察图结构缓存 + public void dtsUnitViewTree(NodeVueVO nodeVue) { + List unitViews = unitViewService.queryBySystemUuid(nodeVue.getSystemUuid()); + if (CollectionUtils.isEmpty(unitViews)) { + return; + } + + Set useCaseUuids = Sets.newHashSet(); + for (UnitViewVO unitView : unitViews) { + List nodes = unitView.getNodes(); + if (CollectionUtils.isEmpty(nodes)) { + continue; + } + + for (UnitNodeVO node : nodes) { + if (StringUtils.equals(nodeVue.getUuid(), node.getNodeVue())) { + useCaseUuids.add(unitView.getUseCaseUuid()); + } + } + } + // TODO 如果执行的慢可以使用线程池进行更新,此处咱不处理 + useCaseUuids.forEach(useCaseUuid -> { + snapshotService.refresh(nodeVue.getSystemUuid(), useCaseUuid); + }); } } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/UnitViewTreeGraphDtsServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/UnitViewTreeGraphDtsServiceImpl.java index d2ffe65..ca9221c 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/UnitViewTreeGraphDtsServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/UnitViewTreeGraphDtsServiceImpl.java @@ -1,7 +1,9 @@ package cn.icanci.loopstack.bic.biz.dts.impl; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import javax.annotation.Resource; @@ -14,9 +16,11 @@ import com.google.common.collect.Sets; import cn.hutool.core.lang.Pair; import cn.icanci.loopstack.bic.biz.dts.DTS; import cn.icanci.loopstack.bic.biz.dts.GraphDtsService; +import cn.icanci.loopstack.bic.biz.service.NodeVueService; import cn.icanci.loopstack.bic.biz.service.SnapshotService; import cn.icanci.loopstack.bic.biz.service.UnitViewService; import cn.icanci.loopstack.bic.common.enums.NodeTypeEnum; +import cn.icanci.loopstack.bic.common.model.base.NodeVueVO; import cn.icanci.loopstack.bic.common.model.graph.*; /** @@ -30,6 +34,8 @@ public class UnitViewTreeGraphDtsServiceImpl implements GraphDtsService, List> adapter2Pair(List relationModel) { + List nodeVueList = nodeVueService.queryAll(); + Map nodeVueMap = nodeVueList.stream().collect(Collectors.toMap(NodeVueVO::getUuid, nodeVueVO -> nodeVueVO)); List edges = Lists.newArrayList(); Set nodes = Sets.newHashSet(); - loopAdapter(edges, nodes, relationModel); + + loopAdapter(edges, nodes, relationModel, nodeVueMap); return new Pair<>(edges, Lists.newArrayList(nodes)); } - private void loopAdapter(List edges, Set nodes, List relationModel) { + private void loopAdapter(List edges, Set nodes, List relationModel, Map nodeVueMap) { for (UnitViewTreeRelationVO rm : relationModel) { - nodes.add(buildSourceNode(rm)); - nodes.add(buildTargetNode(rm)); + nodes.add(buildSourceNode(rm, nodeVueMap.get(rm.getSourceNodeUuid()))); + nodes.add(buildTargetNode(rm, nodeVueMap.get(rm.getTargetNodeUuid()))); edges.add(buildEdge(rm)); if (CollectionUtils.isNotEmpty(rm.getChildren())) { - loopAdapter(edges, nodes, rm.getChildren()); + loopAdapter(edges, nodes, rm.getChildren(), nodeVueMap); } } } @@ -92,16 +101,18 @@ public class UnitViewTreeGraphDtsServiceImpl implements GraphDtsService loadUseCaseSnapshot(); + + UnitViewSnapshotVO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid); } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UnitViewService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UnitViewService.java index 4430e44..20799d8 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UnitViewService.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UnitViewService.java @@ -23,4 +23,6 @@ public interface UnitViewService extends BaseService { PageList queryPage(UnitViewVO unitViewVO, int pageNum, int pageSize); UnitViewVO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid); + + List queryBySystemUuid(String systemUuid); } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UnitViewSnapshotService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UnitViewSnapshotService.java index 476f14b..2ad421e 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UnitViewSnapshotService.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/UnitViewSnapshotService.java @@ -22,8 +22,6 @@ public interface UnitViewSnapshotService extends BaseService @Override PageList queryPage(UnitViewSnapshotVO unitViewSnapshotVO, int pageNum, int pageSize); - UnitViewSnapshotVO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid); - UnitViewSnapshotVO queryBySystemUuidAndUseCaseUuidAndVersion(String systemUuid, String useCaseUuid, long version); } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/NodeStyleServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/NodeStyleServiceImpl.java index e226c6e..1307d25 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/NodeStyleServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/NodeStyleServiceImpl.java @@ -48,8 +48,6 @@ public class NodeStyleServiceImpl implements NodeStyleService { nodeStyleDAO.update(nodeStyleMapper.vo2do(nodeStyleVO)); graphDtsServiceProxy.dtsUnitViewTree(nodeStyleVO); } - // 更新视图样式 - // TODO 最后补充更新视图的逻辑,因为这个地方会构建缓存 } @Override @@ -101,7 +99,8 @@ public class NodeStyleServiceImpl implements NodeStyleService { return TemplateFileUtils.queryDefaultNodeStyleTemplate(); } - @Override public NodeStyleVO queryByUuid(String styleUuid) { + @Override + public NodeStyleVO queryByUuid(String styleUuid) { return nodeStyleMapper.do2vo(nodeStyleDAO.queryByUuid(styleUuid)); } } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/SnapshotServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/SnapshotServiceImpl.java index d55bfc2..2de5c7b 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/SnapshotServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/SnapshotServiceImpl.java @@ -1,9 +1,15 @@ package cn.icanci.loopstack.bic.biz.service.impl; +import java.text.SimpleDateFormat; +import java.util.List; + import javax.annotation.Resource; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; +import com.google.common.collect.Lists; + import cn.hutool.json.JSONUtil; import cn.icanci.loopstack.bic.biz.adapter.GraphAdapter; import cn.icanci.loopstack.bic.biz.service.SnapshotService; @@ -28,24 +34,46 @@ public class SnapshotServiceImpl implements SnapshotService { @Resource private GraphAdapter graphAdapter; - // TODO 数据一致性问题 @Override public void refresh(String systemUuid, String useCaseUuid) { long version = refreshSnapshotIndex(systemUuid, useCaseUuid); Graph graph = graphAdapter.graph(systemUuid, useCaseUuid); String snapshot = JSONUtil.toJsonStr(graph); - UnitViewSnapshotVO unitViewSnapshot = unitViewSnapshotService.queryBySystemUuidAndUseCaseUuid(systemUuid, useCaseUuid); - if (unitViewSnapshot == null) { - unitViewSnapshot = new UnitViewSnapshotVO(); - unitViewSnapshot.setSystemUuid(systemUuid); - unitViewSnapshot.setUseCaseUuid(useCaseUuid); - } + UnitViewSnapshotVO unitViewSnapshot = new UnitViewSnapshotVO(); + unitViewSnapshot.setSystemUuid(systemUuid); + unitViewSnapshot.setUseCaseUuid(useCaseUuid); unitViewSnapshot.setVersion(version); unitViewSnapshot.setSnapshot(snapshot); - + unitViewSnapshot.setName(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(version)); unitViewSnapshotService.save(unitViewSnapshot); } + @Override + public List loadUseCaseSnapshot() { + List indexes = unitViewSnapshotIndexService.queryAll(); + List ret = Lists.newArrayList(); + if (CollectionUtils.isEmpty(indexes)) { + return ret; + } + + for (UnitViewSnapshotIndexVO index : indexes) { + UnitViewSnapshotVO snapshot = unitViewSnapshotService.queryBySystemUuidAndUseCaseUuidAndVersion(index.getSystemUuid(), index.getUseCaseUuid(), index.getVersion()); + if (snapshot != null) { + ret.add(snapshot); + } + } + return ret; + } + + @Override + public UnitViewSnapshotVO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid) { + UnitViewSnapshotIndexVO index = unitViewSnapshotIndexService.queryBySystemUuidAndUseCaseUuid(systemUuid, useCaseUuid); + if (index != null) { + return unitViewSnapshotService.queryBySystemUuidAndUseCaseUuidAndVersion(systemUuid, useCaseUuid, index.getVersion()); + } + return null; + } + /** * 刷新快照索引并返回版本 * diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewServiceImpl.java index dfdb948..bd03bb8 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewServiceImpl.java @@ -56,4 +56,9 @@ public class UnitViewServiceImpl implements UnitViewService { public UnitViewVO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid) { return unitViewMapper.do2vo(unitViewDAO.queryBySystemUuidAndUseCaseUuid(systemUuid, useCaseUuid)); } + + @Override + public List queryBySystemUuid(String systemUuid) { + return unitViewMapper.dos2vos(unitViewDAO.queryBySystemUuid(systemUuid)); + } } diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitNodeVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitNodeVO.java index 266a27e..6f0004b 100644 --- a/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitNodeVO.java +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitNodeVO.java @@ -24,6 +24,8 @@ public class UnitNodeVO { private String nodeDataKey; /** 节点类型 */ private NodeTypeEnum nodeType; + /** 节点组件 */ + private String nodeVue; @Override public boolean equals(Object object) { diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UnitViewDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UnitViewDAO.java index 8dd5400..2b25a7c 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UnitViewDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UnitViewDAO.java @@ -2,19 +2,29 @@ package cn.icanci.loopstack.bic.dal.mongo.daointerface; import cn.icanci.loopstack.bic.dal.mongo.dateobject.UnitViewDO; +import java.util.List; + /** * @author icanci * @since 1.0 Created in 2023/09/16 11:00 */ public interface UnitViewDAO extends BaseDAO { - /** 文档对应的名字 */ + /** + * 文档对应的名字 + */ String COLLECTION_NAME = BASE_COLLECTION_NAME + "unit-view"; - /** 文档对应的Class */ + /** + * 文档对应的Class + */ Class COLLECTION_CLASS = UnitViewDO.class; UnitViewDO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid); - /** 列 */ + List queryBySystemUuid(String systemUuid); + + /** + * 列 + */ interface UnitViewColumn extends BaseColumn { String SYSTEM_UUID = "systemUuid"; String USE_CASE_UUID = "useCaseUuid"; diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUnitViewDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUnitViewDAO.java index f058d92..7e3ceaf 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUnitViewDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUnitViewDAO.java @@ -72,4 +72,12 @@ public class MongoUnitViewDAO extends AbstractBaseDAO implements Uni Query query = new Query(criteria); return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); } + + @Override + public List queryBySystemUuid(String systemUuid) { + Criteria criteria = Criteria.where(UnitViewColumn.ENV).is(DEFAULT_ENV); + criteria.and(UnitViewColumn.SYSTEM_UUID).is(systemUuid); + Query query = new Query(criteria); + return mongoTemplate.find(query, COLLECTION_CLASS, COLLECTION_NAME); + } } -- Gitee From fc11cf13c445999a190c5a8f0cdbb3f525d081cf Mon Sep 17 00:00:00 2001 From: icanci Date: Sat, 23 Sep 2023 22:58:17 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=9A=84=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../icanci/loopstack/bic/biz/cache/.gitkeep | 0 .../web/controller/SnapshotController.java | 16 +++++++ .../web/controller/UnitViewController.java | 45 ------------------- 3 files changed, 16 insertions(+), 45 deletions(-) delete mode 100644 biz/src/main/java/cn/icanci/loopstack/bic/biz/cache/.gitkeep create mode 100644 web/src/main/java/cn/icanci/loopstack/bic/web/controller/SnapshotController.java delete mode 100644 web/src/main/java/cn/icanci/loopstack/bic/web/controller/UnitViewController.java diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/cache/.gitkeep b/biz/src/main/java/cn/icanci/loopstack/bic/biz/cache/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/web/src/main/java/cn/icanci/loopstack/bic/web/controller/SnapshotController.java b/web/src/main/java/cn/icanci/loopstack/bic/web/controller/SnapshotController.java new file mode 100644 index 0000000..25ec6d9 --- /dev/null +++ b/web/src/main/java/cn/icanci/loopstack/bic/web/controller/SnapshotController.java @@ -0,0 +1,16 @@ +package cn.icanci.loopstack.bic.web.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * TODO 版本的页面查询 + * + * @author icanci + * @since 1.0 Created in 2023/09/23 22:57 + */ +@RestController +@RequestMapping("/bicAdmin/snapshot") +public class SnapshotController { + +} diff --git a/web/src/main/java/cn/icanci/loopstack/bic/web/controller/UnitViewController.java b/web/src/main/java/cn/icanci/loopstack/bic/web/controller/UnitViewController.java deleted file mode 100644 index c56f5b5..0000000 --- a/web/src/main/java/cn/icanci/loopstack/bic/web/controller/UnitViewController.java +++ /dev/null @@ -1,45 +0,0 @@ -//package cn.icanci.loopstack.bic.web.controller; -// -//import javax.annotation.Resource; -// -//import org.springframework.web.bind.annotation.*; -// -//import cn.icanci.loopstack.bic.biz.service.UnitViewService; -//import cn.icanci.loopstack.bic.common.model.graph.UnitViewVO; -//import cn.icanci.loopstack.bic.common.result.R; -//import cn.icanci.loopstack.bic.web.form.UnitViewQueryForm; -//import cn.icanci.loopstack.bic.web.mapper.UnitViewWebMapper; -//import cn.icanci.loopstack.bic.web.model.UnitView; -// -///** -// * @author icanci -// * @since 1.0 Created in 2023/09/16 10:55 -// */ -//@RestController -//@RequestMapping("/bicAdmin/unitView") -//public class UnitViewController { -// @Resource -// private UnitViewWebMapper unitViewWebMapper; -// @Resource -// private UnitViewService unitViewService; -// -// // ================================ CRUD ================================ -// @PostMapping("query") -// public R query(@RequestBody UnitViewQueryForm form) { -// return R.builderOk() -// .data("queryPage", unitViewService.queryPage(unitViewWebMapper.web2vo(form.getUnitView()), form.getPaginator().getCurrentPage(), form.getPaginator().getPageSize())) -// .build(); -// } -// -// @PostMapping("save") -// public R save(@RequestBody UnitView unitView) { -// unitViewService.save(unitViewWebMapper.web2vo(unitView)); -// return R.builderOk().build(); -// } -// -// @GetMapping("validateUnique/{systemUuid}/{useCaseUuid}") -// public R validateUnique(@PathVariable("systemUuid") String systemUuid, @PathVariable("useCaseUuid") String useCaseUuid) { -// UnitViewVO unitView = unitViewService.queryBySystemUuidAndUseCaseUuid(systemUuid, useCaseUuid); -// return R.builderOk().data("result", unitView == null).build(); -// } -//} -- Gitee From 1f8ac34c043e240d05ec98a82eac0613a9497260 Mon Sep 17 00:00:00 2001 From: icanci Date: Sun, 24 Sep 2023 16:49:02 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=9B=BE=E6=95=B0=E6=8D=AE=E6=9E=84?= =?UTF-8?q?=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bic/biz/adapter/GraphAdapterService.java | 4 +- .../impl/UnitViewTreeGraphDtsServiceImpl.java | 12 +- .../bic/biz/mapper/GraphBuryingMapper.java | 15 +++ .../loopstack/bic/biz/mapper/GraphMapper.java | 15 +++ .../bic/biz/service/BuryingService.java | 2 + .../bic/biz/service/GraphService.java | 20 ++++ .../biz/service/impl/BuryingServiceImpl.java | 5 + .../biz/service/impl/GraphServiceImpl.java | 103 ++++++++++++++++++ .../impl/UnitViewSnapshotServiceImpl.java | 5 - .../bic/common/enums/NodeDataModeEnum.java | 9 ++ .../bic/common/model/graph/UnitEdgeVO.java | 2 + .../dal/mongo/daointerface/BuryingDAO.java | 4 +- .../bic/dal/mongo/dateobject/UnitEdgeDO.java | 2 + .../bic/dal/mongo/mongo/MongoBuryingDAO.java | 15 +++ .../loopstack/bic/graph/GraphBurying.java | 53 +++++++++ .../icanci/loopstack/bic/graph/edge/Edge.java | 2 + .../bic/graph/node/UnitViewNode.java | 17 ++- .../bic/web/controller/GraphController.java | 30 +++++ .../icanci/loopstack/bic/web/model/Graph.java | 15 +++ .../loopstack/bic/web/model/UnitEdge.java | 2 + 20 files changed, 319 insertions(+), 13 deletions(-) create mode 100644 biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/GraphBuryingMapper.java create mode 100644 biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/GraphMapper.java create mode 100644 biz/src/main/java/cn/icanci/loopstack/bic/biz/service/GraphService.java create mode 100644 biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/GraphServiceImpl.java create mode 100644 graph/src/main/java/cn/icanci/loopstack/bic/graph/GraphBurying.java create mode 100644 web/src/main/java/cn/icanci/loopstack/bic/web/controller/GraphController.java create mode 100644 web/src/main/java/cn/icanci/loopstack/bic/web/model/Graph.java diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/adapter/GraphAdapterService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/adapter/GraphAdapterService.java index 0ce59d9..8998617 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/adapter/GraphAdapterService.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/adapter/GraphAdapterService.java @@ -98,7 +98,9 @@ public class GraphAdapterService implements GraphAdapter { String edgeStyle = Optional.ofNullable(edgeStyleService.queryByUuid(styleUuid)).map(EdgeStyleVO::getEdgeStyle).orElse(edgeStyleService.loadDefaultStyle()); StringSubstitutor sub = new StringSubstitutor(buildEdgeMap(edge)); edgeStyle = sub.replace(edgeStyle); - return JSONUtil.toBean(edgeStyle, Edge.class); + Edge retEdge = JSONUtil.toBean(edgeStyle, Edge.class); + retEdge.setDeep(edge.getDeep()); + return retEdge; } private Map buildEdgeMap(UnitEdgeVO edge) { diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/UnitViewTreeGraphDtsServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/UnitViewTreeGraphDtsServiceImpl.java index ca9221c..0fea346 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/UnitViewTreeGraphDtsServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/UnitViewTreeGraphDtsServiceImpl.java @@ -83,17 +83,18 @@ public class UnitViewTreeGraphDtsServiceImpl implements GraphDtsService edges = Lists.newArrayList(); Set nodes = Sets.newHashSet(); - loopAdapter(edges, nodes, relationModel, nodeVueMap); + int deep = 0; + loopAdapter(deep, edges, nodes, relationModel, nodeVueMap); return new Pair<>(edges, Lists.newArrayList(nodes)); } - private void loopAdapter(List edges, Set nodes, List relationModel, Map nodeVueMap) { + private void loopAdapter(int edgeDeep, List edges, Set nodes, List relationModel, Map nodeVueMap) { for (UnitViewTreeRelationVO rm : relationModel) { nodes.add(buildSourceNode(rm, nodeVueMap.get(rm.getSourceNodeUuid()))); nodes.add(buildTargetNode(rm, nodeVueMap.get(rm.getTargetNodeUuid()))); - edges.add(buildEdge(rm)); + edges.add(buildEdge(rm, edgeDeep)); if (CollectionUtils.isNotEmpty(rm.getChildren())) { - loopAdapter(edges, nodes, rm.getChildren(), nodeVueMap); + loopAdapter(++edgeDeep, edges, nodes, rm.getChildren(), nodeVueMap); } } } @@ -140,12 +141,13 @@ public class UnitViewTreeGraphDtsServiceImpl implements GraphDtsService { +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/GraphMapper.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/GraphMapper.java new file mode 100644 index 0000000..b1fa74f --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/mapper/GraphMapper.java @@ -0,0 +1,15 @@ +package cn.icanci.loopstack.bic.biz.mapper; + +import org.mapstruct.Mapper; +import org.mapstruct.NullValueMappingStrategy; + +import cn.icanci.loopstack.bic.graph.Graph; +import cn.icanci.loopstack.bic.graph.UnitViewGraph; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/23 23:06 + */ +@Mapper(componentModel = "spring", nullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULL) +public interface GraphMapper extends BaseMapper { +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/BuryingService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/BuryingService.java index 5464579..10ab684 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/BuryingService.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/BuryingService.java @@ -18,4 +18,6 @@ public interface BuryingService { PageList queryPage(BuryingVO burying, int pageNum, int pageSize); void save(BuryingVO burying); + + List queryBySystemAndUseCase(String systemUuid, String useCaseUuid, String traceId, String orderSerialNo); } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/GraphService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/GraphService.java new file mode 100644 index 0000000..e9a1844 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/GraphService.java @@ -0,0 +1,20 @@ +package cn.icanci.loopstack.bic.biz.service; + +import cn.icanci.loopstack.bic.graph.UnitViewGraph; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/23 23:00 + */ +public interface GraphService { + /** + * 构建单元纠察图 + * + * @param systemUuid 系统uuid + * @param useCaseUuid 用例uuid + * @param traceId traceId + * @param orderSerialNo 订单流水号 + * @return 单元纠察图 + */ + UnitViewGraph buildOneGraph(String systemUuid, String useCaseUuid, String traceId, String orderSerialNo); +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/BuryingServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/BuryingServiceImpl.java index fd2155f..64f4e12 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/BuryingServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/BuryingServiceImpl.java @@ -54,6 +54,11 @@ public class BuryingServiceImpl implements BuryingService { } } + @Override + public List queryBySystemAndUseCase(String systemUuid, String useCaseUuid, String traceId, String orderSerialNo) { + return buryingMapper.dos2vos(buryingDAO.queryBySystemAndUseCase(systemUuid, useCaseUuid, traceId, orderSerialNo)); + } + private boolean doInsert(BuryingVO burying) { return StringUtils.isBlank(burying.getId()); } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/GraphServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/GraphServiceImpl.java new file mode 100644 index 0000000..d8e26f1 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/GraphServiceImpl.java @@ -0,0 +1,103 @@ +package cn.icanci.loopstack.bic.biz.service.impl; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import com.google.common.collect.Lists; + +import cn.icanci.loopstack.bic.biz.cache.GraphRepository; +import cn.icanci.loopstack.bic.biz.mapper.GraphBuryingMapper; +import cn.icanci.loopstack.bic.biz.mapper.GraphMapper; +import cn.icanci.loopstack.bic.biz.service.BuryingService; +import cn.icanci.loopstack.bic.biz.service.GraphService; +import cn.icanci.loopstack.bic.common.enums.NodeDataModeEnum; +import cn.icanci.loopstack.bic.graph.Graph; +import cn.icanci.loopstack.bic.graph.GraphBurying; +import cn.icanci.loopstack.bic.graph.UnitViewGraph; +import cn.icanci.loopstack.bic.graph.edge.Edge; +import cn.icanci.loopstack.bic.graph.node.UnitViewNode; +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/23 23:00 + */ +@Service +public class GraphServiceImpl implements GraphService { + @Resource + private GraphRepository graphRepository; + @Resource + private BuryingService buryingService; + @Resource + private GraphMapper graphMapper; + @Resource + private GraphBuryingMapper graphBuryingMapper; + + @Override + public UnitViewGraph buildOneGraph(String systemUuid, String useCaseUuid, String traceId, String orderSerialNo) { + Graph graph = graphRepository.get(systemUuid, useCaseUuid); + UnitViewGraph unitViewGraph = graphMapper.do2vo(graph); + if (unitViewGraph == null) { + return null; + } + List graphBuryingList = graphBuryingMapper.vos2dos(buryingService.queryBySystemAndUseCase(systemUuid, useCaseUuid, traceId, orderSerialNo)); + // 数据集合 + Map> uniqueKeyMap = graphBuryingList.stream().collect(Collectors.groupingBy(GraphBurying::getUniqueKey)); + // 根据前缀匹配和全部匹配进行值匹配 + for (UnitViewNode node : unitViewGraph.getNodes()) { + NodeDataModeEnum nodeDataMode = NodeDataModeEnum.getEnumByCode(node.getNodeDataMode()); + String nodeDataKey = node.getNodeDataKey(); + node.setBuryings(buildBuryings(nodeDataMode, nodeDataKey, uniqueKeyMap)); + } + // 图渲染,构建额外参数 + unitViewGraphRender(unitViewGraph); + return unitViewGraph; + } + + private void unitViewGraphRender(UnitViewGraph unitViewGraph) { + Map nodeMap = unitViewGraph.getNodes().stream().collect(Collectors.toMap(UnitViewNode::getId, node -> node)); + // 组装边节点的临时变量 + List edgeRelations = Lists.newArrayList(); + for (Edge edge : unitViewGraph.getEdges()) { + UnitViewNode source = nodeMap.get(edge.getSource().getCell()); + UnitViewNode target = nodeMap.get(edge.getTarget().getCell()); + EdgeRelation edgeRelation = new EdgeRelation(); + edgeRelation.setSource(source); + edgeRelation.setTarget(target); + edgeRelation.setEdge(edge); + edgeRelations.add(edgeRelation); + } + // 对EdgeRelation进行排序,排序从大到小,会有个深度的计算 + edgeRelations = edgeRelations.stream().sorted((o1, o2) -> o2.getEdge().getDeep() - o1.getEdge().getDeep()).collect(Collectors.toList()); + // 组装边节点的临时变量 + for (EdgeRelation edgeRelation : edgeRelations) { + UnitViewNode target = edgeRelation.getTarget(); + if (target.hasPathPass()) { + edgeRelation.getSource().setPathPass(true); + } + } + } + + private List buildBuryings(NodeDataModeEnum nodeDataMode, String nodeDataKey, Map> uniqueKeyMap) { + // 构建当前匹配key的数据值 + if (nodeDataMode == NodeDataModeEnum.PREFIX) { + return uniqueKeyMap.entrySet().stream().filter(entry -> entry.getKey().startsWith(nodeDataKey)).map(Map.Entry::getValue).flatMap(List::stream) + .collect(Collectors.toList()); + } else if (nodeDataMode == NodeDataModeEnum.ALL) { + return uniqueKeyMap.entrySet().stream().filter(entry -> entry.getKey().equals(nodeDataKey)).map(Map.Entry::getValue).flatMap(List::stream).collect(Collectors.toList()); + } + return Lists.newArrayList(); + } + + @Data + private static class EdgeRelation { + private UnitViewNode source; + private UnitViewNode target; + private Edge edge; + } +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewSnapshotServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewSnapshotServiceImpl.java index 478a3df..2ceaba3 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewSnapshotServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewSnapshotServiceImpl.java @@ -57,11 +57,6 @@ public class UnitViewSnapshotServiceImpl implements UnitViewSnapshotService { } - @Override - public UnitViewSnapshotVO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid) { - return unitViewSnapshotMapper.do2vo(unitViewSnapshotDAO.queryBySystemUuidAndUseCaseUuid(systemUuid, useCaseUuid)); - } - @Override public UnitViewSnapshotVO queryBySystemUuidAndUseCaseUuidAndVersion(String systemUuid, String useCaseUuid, long version) { return unitViewSnapshotMapper.do2vo(unitViewSnapshotDAO.queryBySystemUuidAndUseCaseUuidAndVersion(systemUuid, useCaseUuid, version)); diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/enums/NodeDataModeEnum.java b/common/src/main/java/cn/icanci/loopstack/bic/common/enums/NodeDataModeEnum.java index 8786058..ce1b6f4 100644 --- a/common/src/main/java/cn/icanci/loopstack/bic/common/enums/NodeDataModeEnum.java +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/enums/NodeDataModeEnum.java @@ -26,4 +26,13 @@ public enum NodeDataModeEnum { private final String code; private final String desc; + + public static NodeDataModeEnum getEnumByCode(String nodeDataMode) { + for (NodeDataModeEnum nodeDataModeEnum : NodeDataModeEnum.values()) { + if (nodeDataModeEnum.getCode().equals(nodeDataMode)) { + return nodeDataModeEnum; + } + } + return ALL; + } } diff --git a/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitEdgeVO.java b/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitEdgeVO.java index f19d708..400d7bd 100644 --- a/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitEdgeVO.java +++ b/common/src/main/java/cn/icanci/loopstack/bic/common/model/graph/UnitEdgeVO.java @@ -18,4 +18,6 @@ public class UnitEdgeVO { private String targetUuid; /** 样式ID */ private String styleUuid; + /** 边的深度 */ + private int deep; } diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/BuryingDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/BuryingDAO.java index e4e12e8..b797f42 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/BuryingDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/BuryingDAO.java @@ -21,6 +21,8 @@ public interface BuryingDAO extends BaseDAO { */ void batchInsert(List buryingList); + List queryBySystemAndUseCase(String systemUuid, String useCaseUuid, String traceId, String orderSerialNo); + /** 列 */ interface BuryingColumn extends BaseColumn { /** TraceId */ @@ -44,7 +46,7 @@ public interface BuryingDAO extends BaseDAO { /** LOGGER_LEVEL */ String LOGGER_LEVEL = "loggerLevel"; /** UNIQUE_KEY */ - String UNIQUE_KEY = "uniqueKey"; + String UNIQUE_KEY = "uniqueKey"; } } diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitEdgeDO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitEdgeDO.java index 1c02162..80c6d7c 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitEdgeDO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/dateobject/UnitEdgeDO.java @@ -18,4 +18,6 @@ public class UnitEdgeDO { private String targetUuid; /** 样式ID */ private String styleUuid; + /** 深度 */ + private int deep; } diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoBuryingDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoBuryingDAO.java index d02994d..125d399 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoBuryingDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoBuryingDAO.java @@ -100,6 +100,21 @@ public class MongoBuryingDAO extends AbstractBaseDAO implements Buryi mongoTemplate.insert(buryingList, COLLECTION_NAME); } + @Override + public List queryBySystemAndUseCase(String systemUuid, String useCaseUuid, String traceId, String orderSerialNo) { + Criteria criteria = Criteria.where(BuryingColumn.ENV).is(DEFAULT_ENV); + criteria.and(BuryingColumn.SYSTEM_KEY).is(systemUuid); + criteria.and(BuryingColumn.USE_CASE).is(useCaseUuid); + if (StringUtils.isNotBlank(traceId)) { + criteria.and(BuryingColumn.TRACE_ID).is(traceId); + } + if (StringUtils.isNotBlank(orderSerialNo)) { + criteria.and(BuryingColumn.BUSINESS_NO).is(orderSerialNo); + } + Query query = new Query(criteria); + return mongoTemplate.find(query, COLLECTION_CLASS, COLLECTION_NAME); + } + @Override protected void doInsert(BuryingDO buryingDO) { super.doInsert(buryingDO); diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/GraphBurying.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/GraphBurying.java new file mode 100644 index 0000000..4cb89a9 --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/GraphBurying.java @@ -0,0 +1,53 @@ +package cn.icanci.loopstack.bic.graph; + +import lombok.Data; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/23 23:08 + */ +@Data +public class GraphBurying { + /** mongodb id */ + private String id; + /** 雪花算法随机UUID */ + private String uuid; + /** 创建时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + /** 更新时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + /** 状态 false 有效,true 无效 */ + private boolean deleted; + /** 环境 */ + private String env; + /** TraceId */ + private String traceId; + /** 业务标识 */ + private String businessNo; + /** 系统应用唯一标识 */ + private String systemKey; + /** 应用系统用例 */ + private String useCase; + /** 模块 */ + private String module; + /** 分类,用于区分同模块下不同的展示类型 */ + private String category; + /** 子模块,用于区分同模块下不同的展示类型 */ + private String subCategory; + /** 扩展属性 */ + private String ext; + /** 时间 */ + private long time; + /** 执行数据 */ + private String message; + /** 日志等级 */ + private String loggerLevel; + /** 数据的唯一标识 */ + private String uniqueKey; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/Edge.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/Edge.java index 4393874..e8fbc8d 100644 --- a/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/Edge.java +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/edge/Edge.java @@ -20,4 +20,6 @@ public class Edge { private List labels; private EdgeConsumerInfo consumerInfo; private EdgeHistoryInfo historyInfo; + /** 深度,只用来计算节点的样式 */ + private transient int deep; } diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/UnitViewNode.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/UnitViewNode.java index a542ba6..c94f2f0 100644 --- a/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/UnitViewNode.java +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/node/UnitViewNode.java @@ -1,5 +1,9 @@ package cn.icanci.loopstack.bic.graph.node; +import java.util.List; + +import cn.hutool.core.collection.CollectionUtil; +import cn.icanci.loopstack.bic.graph.GraphBurying; import lombok.Data; /** @@ -8,5 +12,16 @@ import lombok.Data; */ @Data public class UnitViewNode extends Node { - // 节点的一些额外参数 + /** 节点的数据 */ + List buryings; + /** 路径是否经过 */ + private boolean pathPass; + + public boolean hasBurying() { + return CollectionUtil.isNotEmpty(buryings); + } + + public boolean hasPathPass() { + return pathPass || hasBurying(); + } } diff --git a/web/src/main/java/cn/icanci/loopstack/bic/web/controller/GraphController.java b/web/src/main/java/cn/icanci/loopstack/bic/web/controller/GraphController.java new file mode 100644 index 0000000..b8abdf3 --- /dev/null +++ b/web/src/main/java/cn/icanci/loopstack/bic/web/controller/GraphController.java @@ -0,0 +1,30 @@ +package cn.icanci.loopstack.bic.web.controller; + +import javax.annotation.Resource; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import cn.icanci.loopstack.bic.biz.service.GraphService; +import cn.icanci.loopstack.bic.common.result.R; +import cn.icanci.loopstack.bic.web.model.Graph; + +/** + * 返回单元纠察图数据 + * + * @author icanci + * @since 1.0 Created in 2023/09/23 22:58 + */ +@RestController +@RequestMapping("/bicAdmin/graph") +public class GraphController { + @Resource + private GraphService graphService; + + @PostMapping("load") + public R load(@RequestBody Graph graph) { + return R.builderOk().data("graph", graphService.buildOneGraph(graph.getSystemUuid(), graph.getUseCaseUuid(), graph.getTraceId(), graph.getOrderSerialNo())).build(); + } +} diff --git a/web/src/main/java/cn/icanci/loopstack/bic/web/model/Graph.java b/web/src/main/java/cn/icanci/loopstack/bic/web/model/Graph.java new file mode 100644 index 0000000..96b1099 --- /dev/null +++ b/web/src/main/java/cn/icanci/loopstack/bic/web/model/Graph.java @@ -0,0 +1,15 @@ +package cn.icanci.loopstack.bic.web.model; + +import lombok.Data; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/24 10:58 + */ +@Data +public class Graph { + private String traceId; + private String orderSerialNo; + private String systemUuid; + private String useCaseUuid; +} diff --git a/web/src/main/java/cn/icanci/loopstack/bic/web/model/UnitEdge.java b/web/src/main/java/cn/icanci/loopstack/bic/web/model/UnitEdge.java index 423d8bc..6df27ee 100644 --- a/web/src/main/java/cn/icanci/loopstack/bic/web/model/UnitEdge.java +++ b/web/src/main/java/cn/icanci/loopstack/bic/web/model/UnitEdge.java @@ -18,4 +18,6 @@ public class UnitEdge { private String targetUuid; /** 样式ID */ private String styleUuid; + /** 深度 */ + private int deep; } -- Gitee