diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/adapter/GraphAdapter.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/adapter/GraphAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..ff41c72abb2b58ba134f43fcfca893c6c2013867 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/adapter/GraphAdapter.java @@ -0,0 +1,21 @@ +package cn.icanci.loopstack.bic.biz.adapter; + +import cn.icanci.loopstack.bic.graph.Graph; + +/** + * 本地缓存唯一Key + * + * @author icanci + * @since 1.0 Created in 2023/09/21 10:48 + */ +public interface GraphAdapter { + + /** + * 获取图 + * + * @param systemUuid 系统唯一标识 + * @param useCaseUuid 用例唯一标识 + * @return 图 + */ + Graph graph(String systemUuid, String useCaseUuid); +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..3c151b9aeb235cfbd9ba0f3947e9ff188c0e0b8f --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/adapter/GraphAdapterService.java @@ -0,0 +1,95 @@ +package cn.icanci.loopstack.bic.biz.adapter; + +import java.util.List; +import java.util.Optional; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import com.google.common.collect.Lists; + +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.graph.UnitEdgeVO; +import cn.icanci.loopstack.bic.common.model.graph.UnitNodeVO; +import cn.icanci.loopstack.bic.common.model.graph.UnitViewVO; +import cn.icanci.loopstack.bic.graph.Graph; +import cn.icanci.loopstack.bic.graph.edge.Edge; +import cn.icanci.loopstack.bic.graph.node.Node; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/22 20:46 + */ +@Service +public class GraphAdapterService implements GraphAdapter { + @Resource + private UnitViewService unitViewService; + @Resource + private NodeService nodeService; + @Resource + private NodeStyleService nodeStyleService; + @Resource + private EdgeStyleService edgeStyleService; + + @Override + public Graph graph(String systemUuid, String useCaseUuid) { + // 查询结构图 + UnitViewVO unitView = unitViewService.queryBySystemUuidAndUseCaseUuid(systemUuid, useCaseUuid); + if (unitView == null) { + throw new GraphAdapterException("纠察图不存在"); + } + List edges = unitView.getEdges(); + List nodes = unitView.getNodes(); + return new Graph(adapterEdges(edges), adapterNodes(nodes)); + } + + private List adapterNodes(List nodes) { + List retNodes = Lists.newArrayList(); + for (UnitNodeVO node : nodes) { + retNodes.add(buildNode(node)); + } + return retNodes; + } + + private Node buildNode(UnitNodeVO node) { + Node retNode = new Node(); +// retNode.setId(); +// retNode.setShape(); +// retNode.setWidth(); +// retNode.setHeight(); +// retNode.setAttrs(); + return retNode; + } + + private List adapterEdges(List edges) { + List retEdges = Lists.newArrayList(); + for (UnitEdgeVO edge : edges) { + retEdges.add(buildEdge(edge)); + } + return retEdges; + } + + private Edge buildEdge(UnitEdgeVO edge) { + String styleUuid = edge.getStyleUuid(); + // TODO 查询样式 + String edgeStyle = Optional.ofNullable(edgeStyleService.queryByUuid(styleUuid)).map(EdgeStyleVO::getEdgeStyle).orElse(edgeStyleService.loadDefaultStyle()); + + Edge retEdge = new Edge(); +// retEdge.setSource(); +// retEdge.setTarget(); +// retEdge.setAttrs(); +// retEdge.setRouter(); +// retEdge.setConnector(); +// retEdge.setLabels(); +// retEdge.setConsumerInfo(); +// retEdge.setHistoryInfo(); + return retEdge; + + } +} 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 b2ac98d4f21a5b154aa7552a80181aa4378b25c3..c6597c7e953d20f52bca516c5dec95aa5f852b2c 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 @@ -19,6 +19,10 @@ public final class GraphRepository implements ApplicationContextAware { } private void doGraphRepositoryReload() { + // TODO 加载所有缓存 + } + + public void refresh(String systemUuid, String useCaseUuid) { // TODO 刷新缓存 } } diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/exception/GraphAdapterException.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/exception/GraphAdapterException.java new file mode 100644 index 0000000000000000000000000000000000000000..2b9f315e1d4135f3572d79535708c85992277bd3 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/exception/GraphAdapterException.java @@ -0,0 +1,27 @@ +package cn.icanci.loopstack.bic.biz.exception; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/22 21:46 + */ +public class GraphAdapterException extends RuntimeException { + public GraphAdapterException() { + super(); + } + + public GraphAdapterException(String message) { + super(message); + } + + public GraphAdapterException(String message, Throwable cause) { + super(message, cause); + } + + public GraphAdapterException(Throwable cause) { + super(cause); + } + + protected GraphAdapterException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/EdgeStyleService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/EdgeStyleService.java index ec533c00b5ccf27c78536f81cc5a8033f52832c5..34a7254d181d2c8a5eadbe07821750044bc37673 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/EdgeStyleService.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/EdgeStyleService.java @@ -30,4 +30,6 @@ public interface EdgeStyleService extends BaseService { List loadSelector(String systemUuid); String loadDefaultStyle(); + + EdgeStyleVO queryByUuid(String uuid); } 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 2c26e5e92cd79d1fc17fd5edf6b9a7754d1b4798..476f14b75a2e978dfc3748029fb577e9dd6dc32e 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 @@ -24,4 +24,6 @@ public interface UnitViewSnapshotService extends BaseService 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/EdgeStyleServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/EdgeStyleServiceImpl.java index d632b0777bf7965873522cd6f1329bf629638a94..2ac95a9f2eebb647acbf5db01d6a2c2124705738 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/EdgeStyleServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/EdgeStyleServiceImpl.java @@ -99,4 +99,9 @@ public class EdgeStyleServiceImpl implements EdgeStyleService { public String loadDefaultStyle() { return TemplateFileUtils.queryDefaultEdgeStyleTemplate(); } + + @Override + public EdgeStyleVO queryByUuid(String uuid) { + return edgeStyleMapper.do2vo(edgeStyleDAO.queryByUuid(uuid)); + } } 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 f9c937767ebfe602a8bc37019a36c70d8ddf72c0..5acb2f46d60287000eecefb2f4c7944e8b12483c 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 @@ -4,10 +4,14 @@ import javax.annotation.Resource; import org.springframework.stereotype.Service; +import cn.hutool.json.JSONUtil; +import cn.icanci.loopstack.bic.biz.adapter.GraphAdapter; import cn.icanci.loopstack.bic.biz.service.SnapshotService; import cn.icanci.loopstack.bic.biz.service.UnitViewSnapshotIndexService; import cn.icanci.loopstack.bic.biz.service.UnitViewSnapshotService; import cn.icanci.loopstack.bic.common.model.snapshot.UnitViewSnapshotIndexVO; +import cn.icanci.loopstack.bic.common.model.snapshot.UnitViewSnapshotVO; +import cn.icanci.loopstack.bic.graph.Graph; /** * 快照服务 @@ -21,13 +25,24 @@ public class SnapshotServiceImpl implements SnapshotService { private UnitViewSnapshotService unitViewSnapshotService; @Resource private UnitViewSnapshotIndexService unitViewSnapshotIndexService; + @Resource + private GraphAdapter graphAdapter; // TODO 数据一致性问题 @Override public void refresh(String systemUuid, String useCaseUuid) { long version = refreshSnapshotIndex(systemUuid, useCaseUuid); - // TODO 构建数据模型 - // TODO 更新内存构建缓存 + 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); + } + unitViewSnapshot.setVersion(version); + unitViewSnapshot.setSnapshot(snapshot); + unitViewSnapshotService.save(unitViewSnapshot); } /** 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 7373270218de2631c74a06e6ae3acbd7f82bf27f..478a3df494adb911b340c9f500cc975c1c04c5d9 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 @@ -6,6 +6,7 @@ import javax.annotation.Resource; import org.springframework.stereotype.Service; +import cn.icanci.loopstack.bic.biz.cache.GraphRepository; import cn.icanci.loopstack.bic.biz.mapper.UnitViewSnapshotMapper; import cn.icanci.loopstack.bic.biz.service.UnitViewSnapshotService; import cn.icanci.loopstack.bic.common.model.snapshot.UnitViewSnapshotVO; @@ -24,6 +25,8 @@ public class UnitViewSnapshotServiceImpl implements UnitViewSnapshotService { private UnitViewSnapshotDAO unitViewSnapshotDAO; @Resource private UnitViewSnapshotMapper unitViewSnapshotMapper; + @Resource + private GraphRepository graphRepository; @Override public List queryAll() { @@ -39,6 +42,7 @@ public class UnitViewSnapshotServiceImpl implements UnitViewSnapshotService { } else { unitViewSnapshotDAO.update(unitViewSnapshotMapper.vo2do(unitViewSnapshotVO)); } + graphRepository.refresh(unitViewSnapshotVO.getSystemUuid(), unitViewSnapshotVO.getUseCaseUuid()); } @Override @@ -57,4 +61,9 @@ public class UnitViewSnapshotServiceImpl implements UnitViewSnapshotService { 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/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/EdgeStyleDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/EdgeStyleDAO.java index 3f20432d3027fd5687a0ba8892d2371cddd6d59b..7252c0eeac58841adda6fce6ee754e6fb4b08722 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/EdgeStyleDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/EdgeStyleDAO.java @@ -16,6 +16,8 @@ public interface EdgeStyleDAO extends BaseDAO { EdgeStyleDO queryBySystemUuidAndKey(String systemUuid, String key); + EdgeStyleDO queryByUuid(String uuid); + /** 列 */ interface EdgeStyleColumn extends BaseColumn { String SYSTEM_UUID = "systemUuid"; diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UnitViewSnapshotDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UnitViewSnapshotDAO.java index 3c483c5b6cbc21d795a4b1f1c511583a959fa892..b7864118f7e4ab8b14e7351e9a24bedf6c320eac 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UnitViewSnapshotDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/daointerface/UnitViewSnapshotDAO.java @@ -14,6 +14,8 @@ public interface UnitViewSnapshotDAO extends BaseDAO { UnitViewSnapshotDO queryBySystemUuidAndUseCaseUuid(String systemUuid, String useCaseUuid); + UnitViewSnapshotDO queryBySystemUuidAndUseCaseUuidAndVersion(String systemUuid, String useCaseUuid, long version); + /** 列 */ interface UnitViewSnapshotColumn extends BaseColumn { String SYSTEM_UUID = "systemUuid"; diff --git a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoEdgeStyleDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoEdgeStyleDAO.java index ba7af7ee317422944378eded9ff602fe362a3308..f2ee5c66229ea2bd2d2aeaf3855c6aeff42dcefe 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoEdgeStyleDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoEdgeStyleDAO.java @@ -90,4 +90,12 @@ public class MongoEdgeStyleDAO extends AbstractBaseDAO implements E return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); } + + @Override + public EdgeStyleDO queryByUuid(String uuid) { + Criteria criteria = Criteria.where(EdgeStyleColumn.UUID).is(uuid); + criteria.and(EdgeStyleColumn.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/MongoUnitViewSnapshotDAO.java b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUnitViewSnapshotDAO.java index f01339c52405ab63b710459f1b839ba7ffcf9151..b0a27cc33153f16049d9dfc0dd465a5efbad938c 100644 --- a/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUnitViewSnapshotDAO.java +++ b/dal/src/main/java/cn/icanci/loopstack/bic/dal/mongo/mongo/MongoUnitViewSnapshotDAO.java @@ -72,4 +72,14 @@ public class MongoUnitViewSnapshotDAO extends AbstractBaseDAO edges; + /** 节点 */ + List nodes; +} diff --git a/graph/src/main/java/cn/icanci/loopstack/bic/graph/UnitViewGraph.java b/graph/src/main/java/cn/icanci/loopstack/bic/graph/UnitViewGraph.java new file mode 100644 index 0000000000000000000000000000000000000000..b028b541f34cda334e6a71cac1d06aefd7ab3bdf --- /dev/null +++ b/graph/src/main/java/cn/icanci/loopstack/bic/graph/UnitViewGraph.java @@ -0,0 +1,19 @@ +package cn.icanci.loopstack.bic.graph; + +import java.util.List; + +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/22 20:45 + */ +@Data +public class UnitViewGraph { + /** 边 */ + List edges; + /** 节点 */ + List nodes; +} diff --git a/views/src/main/resources/vueboot/src/views/bic-config/dialog/node-vue-form.vue b/views/src/main/resources/vueboot/src/views/bic-config/dialog/node-vue-form.vue index 1e2588f877d12646927cd51cea101ef8a65dc83c..2c9924579a619f079c32a496a10d9cf8bce78ec7 100644 --- a/views/src/main/resources/vueboot/src/views/bic-config/dialog/node-vue-form.vue +++ b/views/src/main/resources/vueboot/src/views/bic-config/dialog/node-vue-form.vue @@ -7,9 +7,14 @@ :visible.sync="dialogVisible" :close-on-press-escape="false" :close-on-click-modal="false" + :fullscreen="fullScreen" width="80%" :before-close="clearForm"> - + +
+ 节点组件配置 + +