diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/GraphDtsService.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/GraphDtsService.java new file mode 100644 index 0000000000000000000000000000000000000000..2aeced1b865450fc854af9f78b55e0c4d9571361 --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/GraphDtsService.java @@ -0,0 +1,11 @@ +package cn.icanci.loopstack.bic.biz.dts; + +/** + * 图数据同步服务 + * + * @author icanci + * @since 1.0 Created in 2023/09/17 16:32 + */ +public interface GraphDtsService { + void dtsUnitViewTree(T type); +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/GraphDtsServiceProxy.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/GraphDtsServiceProxy.java new file mode 100644 index 0000000000000000000000000000000000000000..28cbc066a22075a9a5701ffeef15d29be918fc6b --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/GraphDtsServiceProxy.java @@ -0,0 +1,40 @@ +package cn.icanci.loopstack.bic.biz.dts; + +import java.util.Map; + +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; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/17 16:36 + */ +@Service +@SuppressWarnings("all") +public class GraphDtsServiceProxy implements GraphDtsService, ApplicationContextAware { + + private final Map, GraphDtsService> graphDtsServiceMap = Maps.newConcurrentMap(); + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + Map beansOfType = applicationContext.getBeansOfType(GraphDtsService.class); + beansOfType.forEach((k, v) -> graphDtsServiceMap.put(v.getClass().getInterfaces()[0], v)); + } + + @Override + public void dtsUnitViewTree(Object type) { + if (type == null) { + throw new RuntimeException("type is null"); + } + + GraphDtsService graphDtsService = graphDtsServiceMap.get(type.getClass()); + if (graphDtsService == this || graphDtsService == null) { + throw new RuntimeException(type.getClass() + " is not support"); + } + graphDtsService.dtsUnitViewTree(type); + } +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..35ce494fd0b037fee4cc3e996e70902d29e9c90e --- /dev/null +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/dts/impl/UnitViewTreeGraphDtsServiceImpl.java @@ -0,0 +1,62 @@ +package cn.icanci.loopstack.bic.biz.dts.impl; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import cn.hutool.core.lang.Pair; +import cn.icanci.loopstack.bic.biz.dts.GraphDtsService; +import cn.icanci.loopstack.bic.biz.service.UnitViewService; +import cn.icanci.loopstack.bic.common.model.graph.*; + +/** + * @author icanci + * @since 1.0 Created in 2023/09/17 16:33 + */ +@Service +public class UnitViewTreeGraphDtsServiceImpl implements GraphDtsService { + @Resource + private UnitViewService unitViewService; + + @Override + public void dtsUnitViewTree(UnitViewTreeVO unitViewTree) { + String systemUuid = unitViewTree.getSystemUuid(); + String useCaseUuid = unitViewTree.getUseCaseUuid(); + + UnitViewVO unitViewVO = unitViewService.queryBySystemUuidAndUseCaseUuid(systemUuid, useCaseUuid); + UnitViewVO uv = adapter2UnitViewVO(unitViewTree); + if (unitViewVO == null) { + unitViewService.save(uv); + } else { + uv.setId(unitViewVO.getId()); + uv.setUuid(unitViewVO.getUuid()); + uv.setCreateTime(unitViewVO.getCreateTime()); + uv.setDeleted(unitViewVO.isDeleted()); + uv.setEnv(unitViewVO.getEnv()); + unitViewService.save(uv); + } + } + + private UnitViewVO adapter2UnitViewVO(UnitViewTreeVO tree) { + String systemUuid = tree.getSystemUuid(); + String useCaseUuid = tree.getUseCaseUuid(); + UnitViewVO uv = new UnitViewVO(); + uv.setSystemUuid(systemUuid); + uv.setUseCaseUuid(useCaseUuid); + + List relationModel = tree.getRelationModel(); + Pair, List> pair = adapter2Pair(relationModel); + uv.setEdges(pair.getKey()); + uv.setNodes(pair.getValue()); + return uv; + } + + private Pair, List> adapter2Pair(List relationModel) { + // TODO 处理结对数据 前端也需要处理,这里不太优雅 + // 结对 目标找到所有的node和所有的edge + // 同一个node的样式必须完全一样 + return null; + } +} diff --git a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewTreeServiceImpl.java b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewTreeServiceImpl.java index 22db240b4671875bd5da9e46d0c972baf7a29ef6..46d65d276f7fac342676e4883f18dac7a59623c3 100644 --- a/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewTreeServiceImpl.java +++ b/biz/src/main/java/cn/icanci/loopstack/bic/biz/service/impl/UnitViewTreeServiceImpl.java @@ -6,6 +6,7 @@ import javax.annotation.Resource; import org.springframework.stereotype.Service; +import cn.icanci.loopstack.bic.biz.dts.GraphDtsServiceProxy; import cn.icanci.loopstack.bic.biz.mapper.UnitViewTreeMapper; import cn.icanci.loopstack.bic.biz.service.UnitViewTreeService; import cn.icanci.loopstack.bic.common.model.graph.UnitViewTreeVO; @@ -21,9 +22,11 @@ import cn.icanci.loopstack.bic.dal.mongo.dateobject.UnitViewTreeDO; public class UnitViewTreeServiceImpl implements UnitViewTreeService { @Resource - private UnitViewTreeDAO unitViewTreeDAO; + private UnitViewTreeDAO unitViewTreeDAO; @Resource - private UnitViewTreeMapper unitViewTreeMapper; + private UnitViewTreeMapper unitViewTreeMapper; + @Resource + private GraphDtsServiceProxy graphDtsServiceProxy; @Override public List queryAll() { @@ -39,6 +42,7 @@ public class UnitViewTreeServiceImpl implements UnitViewTreeService { } else { unitViewTreeDAO.update(unitViewTreeMapper.vo2do(unitViewTreeVO)); } + graphDtsServiceProxy.dtsUnitViewTree(unitViewTreeVO); } @Override diff --git a/views/src/main/resources/vueboot/src/views/bic-config/components/ruleTreeNode.vue b/views/src/main/resources/vueboot/src/views/bic-config/components/ruleTreeNode.vue index c0a68435f6860687d2fba0b4511e09a55a778b87..cca98783cf547bdc3dca185da5a5117664bf246f 100644 --- a/views/src/main/resources/vueboot/src/views/bic-config/components/ruleTreeNode.vue +++ b/views/src/main/resources/vueboot/src/views/bic-config/components/ruleTreeNode.vue @@ -189,6 +189,7 @@ label-position="right" ref="relationModelDetailForm" :model="relationModelDetail" label-width="180px"> + @@ -215,7 +217,7 @@ - +