Commit 0c5f98b1 by qiuchaofei

1.按照新原型设计模型,实体类,新的前后端接口。2修改从mongo同步数据到neo4j的方法。

parent 03229683
...@@ -12,9 +12,9 @@ import java.util.stream.Collectors; ...@@ -12,9 +12,9 @@ import java.util.stream.Collectors;
import com.keymobile.metadata.metadataRelation.pojo.BaseRelationship; import com.keymobile.metadata.metadataRelation.pojo.BaseRelationship;
import com.keymobile.metadata.metadataRelation.pojo.MetaData; import com.keymobile.metadata.metadataRelation.pojo.MetaData;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.Edge; import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnEdge;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.MetaModel; import com.keymobile.metadata.metadataRelation.pojo.returnBean.MetaModel;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.Node; import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnNode;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnReslult; import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnReslult;
import com.keymobile.metadata.metadataRelation.service.AsyncDataFromMongoToNeo4j; import com.keymobile.metadata.metadataRelation.service.AsyncDataFromMongoToNeo4j;
import com.keymobile.metadata.metadataRelation.service.IBaseRelationshipService; import com.keymobile.metadata.metadataRelation.service.IBaseRelationshipService;
...@@ -30,7 +30,6 @@ import org.slf4j.Logger; ...@@ -30,7 +30,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.system.ApplicationHome; import org.springframework.boot.system.ApplicationHome;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
...@@ -165,7 +164,7 @@ public class MetaDataController { ...@@ -165,7 +164,7 @@ public class MetaDataController {
returnReslult = metadataService.findResultByModelName(modelName0,sizeInt); returnReslult = metadataService.findResultByModelName(modelName0,sizeInt);
}else{ }else{
List<MetaData> metaDataList = metadataService.finAllMetaData(); List<MetaData> metaDataList = metadataService.finAllMetaData();
Map<String, Node> nodeMap = new HashMap<>(); Map<String, ReturnNode> nodeMap = new HashMap<>();
Map<String, String> child2Parent = new HashMap<>(); Map<String, String> child2Parent = new HashMap<>();
Map<String, List<String>> parent2Children = new HashMap<>(); Map<String, List<String>> parent2Children = new HashMap<>();
...@@ -175,7 +174,7 @@ public class MetaDataController { ...@@ -175,7 +174,7 @@ public class MetaDataController {
Map<String, MetaModel> metaModelMap = new HashMap<>(); Map<String, MetaModel> metaModelMap = new HashMap<>();
for (MetaData metaData : metaDataList) { for (MetaData metaData : metaDataList) {
Node node = new Node(); ReturnNode node = new ReturnNode();
String[] strings = metaData.getMetadataId().split("="); String[] strings = metaData.getMetadataId().split("=");
String modelName = strings[0]; String modelName = strings[0];
...@@ -184,7 +183,7 @@ public class MetaDataController { ...@@ -184,7 +183,7 @@ public class MetaDataController {
String systemName = metaData.getSystem(); String systemName = metaData.getSystem();
Node systemNode = new Node(); ReturnNode systemNode = new ReturnNode();
systemNode.setId("catalog=" + systemName); systemNode.setId("catalog=" + systemName);
systemNode.setName(systemName); systemNode.setName(systemName);
String newModelName = "Catalog"; String newModelName = "Catalog";
...@@ -297,7 +296,7 @@ public class MetaDataController { ...@@ -297,7 +296,7 @@ public class MetaDataController {
// } // }
if (nodeMap.containsKey("" + startId)) { if (nodeMap.containsKey("" + startId)) {
Node startNode = nodeMap.get("" + startId); ReturnNode startNode = nodeMap.get("" + startId);
startMetaId = nodeMap.get("" + startId).getId(); startMetaId = nodeMap.get("" + startId).getId();
} }
...@@ -306,7 +305,7 @@ public class MetaDataController { ...@@ -306,7 +305,7 @@ public class MetaDataController {
endMetaId = nodeMap.get("" + endId).getId(); endMetaId = nodeMap.get("" + endId).getId();
} }
if(StringUtils.isNotBlank(startMetaId) &&StringUtils.isNotBlank(endMetaId)){ if(StringUtils.isNotBlank(startMetaId) &&StringUtils.isNotBlank(endMetaId)){
Edge edge = new Edge(); ReturnEdge edge = new ReturnEdge();
edge.setEdgeId("" + baseRelationship.getId()); edge.setEdgeId("" + baseRelationship.getId());
edge.setFromId(startMetaId); edge.setFromId(startMetaId);
edge.setToId(endMetaId); edge.setToId(endMetaId);
...@@ -368,7 +367,7 @@ public class MetaDataController { ...@@ -368,7 +367,7 @@ public class MetaDataController {
metaDataList = metadataService.findChildrenByParentId(dataId,count); metaDataList = metadataService.findChildrenByParentId(dataId,count);
} }
for (MetaData metaData : metaDataList) { for (MetaData metaData : metaDataList) {
Node node = new Node(); ReturnNode node = new ReturnNode();
String[] strings = metaData.getMetadataId().split("="); String[] strings = metaData.getMetadataId().split("=");
String modelName = strings[0]; String modelName = strings[0];
......
package com.keymobile.metadata.metadataRelation.controller;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jSchema;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnNode;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnReslult;
import com.keymobile.metadata.metadataRelation.service.IMetadataService;
import com.keymobile.metadata.metadataRelation.service.ISchemaService;
import com.keymobile.metadata.metadataRelation.service.ISystemService;
import com.keymobile.metadata.metadataRelation.service.impl.SystemServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
@Api(value = "关系图谱的接口", tags = "relational graph controller")
public class RelationalGraphController {
private static final Logger logger = LoggerFactory.getLogger(RelationalGraphController.class);
@Autowired
private IMetadataService metadataService;
@Autowired
private ISystemService systemService;
@Autowired
private ISchemaService schemaService;
//系统总图的接口
@ApiOperation(tags = "", value = "系统总图")
@RequestMapping(path = "/getSystemGraph1", method = RequestMethod.GET)
public ReturnReslult getSystemGraph1(){
int size = 300;
return metadataService.getSystemGraph(size);
}
//系统总图下钻获取schema,schema要分层
@ApiOperation(tags = "", value = "按照系统获取schema,要分层")
@RequestMapping(path = "/getSchemaBySystemId", method = RequestMethod.GET)
public Map<String, List<ReturnNode>> getSchemaBySystem(String systemId){
//传入一个系统名称/id,返回系统下的所有schema,注意分层
Map<String, List<ReturnNode>> stringListMap = systemService.getSchemaBySystemId(systemId);
int size = 300;
return stringListMap;// metadataService.getSystemGraph(size);
}
//单个schema的数据,包括表,视图,函数,过程等,列表形势
@ApiOperation(tags = "", value = "按照系统获取schema,要分层")
@RequestMapping(path = "/getTableBySchemaId", method = RequestMethod.GET)
public Map<String, List<ReturnNode>> getTableBySchemaId(String schemaId){
//传入一个系统名称/id,返回系统下的所有schema,注意分层
Map<String, List<ReturnNode>> stringListMap = schemaService.getTablesBySchemaId(schemaId);
int size = 300;
return stringListMap;// metadataService.getSystemGraph(size);
}
//关系的分层,图的形势,由里到外
//表的分析,关系分析--表与模型,表与质量,表与标准,表与作业的关系
//表的分析,链路分析,表与其他表的关系,其他表可以下钻,并且可以收缩。
//搜索接口,多个搜索结果,则先弹出列表(对象的全路径),再进行选择哪个对象
//同步数据,从mongo到neo4j,从“环境,系统,schema,表”的结构
}
...@@ -4,6 +4,25 @@ package com.keymobile.metadata.metadataRelation.pojo; ...@@ -4,6 +4,25 @@ package com.keymobile.metadata.metadataRelation.pojo;
public class BaseNode extends AllBaseEntity { public class BaseNode extends AllBaseEntity {
private String name; //名称 private String name; //名称
public String getCnName() {
return cnName;
}
public void setCnName(String cnName) {
this.cnName = cnName;
}
public String getMetadataId() {
return metadataId;
}
public void setMetadataId(String metadataId) {
this.metadataId = metadataId;
}
private String metadataId;
private String cnName;
// @Relationship(type= NodeType.REF) // @Relationship(type= NodeType.REF)
// private Set<BaseRelationship> relationships; //关系列表 // private Set<BaseRelationship> relationships; //关系列表
......
package com.keymobile.metadata.metadataRelation.pojo.metadata;
import com.keymobile.metadata.metadataRelation.pojo.BaseNode;
import org.neo4j.ogm.annotation.NodeEntity;
@NodeEntity(label = "Neo4jFunction")
public class Neo4jFunction extends BaseNode {
}
package com.keymobile.metadata.metadataRelation.pojo.metadata;
import com.keymobile.metadata.metadataRelation.pojo.BaseNode;
import org.neo4j.ogm.annotation.NodeEntity;
@NodeEntity(label="Neo4jJob")
public class Neo4jJob extends BaseNode {
}
package com.keymobile.metadata.metadataRelation.pojo.metadata;
import com.keymobile.metadata.metadataRelation.pojo.BaseNode;
import org.neo4j.ogm.annotation.NodeEntity;
@NodeEntity(label = "Neo4jProcedure")
public class Neo4jProcedure extends BaseNode {
}
package com.keymobile.metadata.metadataRelation.pojo.metadata;
import com.keymobile.metadata.metadataRelation.pojo.BaseNode;
import org.neo4j.ogm.annotation.NodeEntity;
@NodeEntity(label = "Neo4jSchema")
public class Neo4jSchema extends BaseNode {
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
private String label;
}
package com.keymobile.metadata.metadataRelation.pojo.metadata;
import com.keymobile.metadata.metadataRelation.pojo.BaseNode;
import org.neo4j.ogm.annotation.NodeEntity;
@NodeEntity(label = "Neo4jSystem")
public class Neo4jSystem extends BaseNode {
}
package com.keymobile.metadata.metadataRelation.pojo.metadata;
import com.keymobile.metadata.metadataRelation.pojo.BaseNode;
import org.neo4j.ogm.annotation.NodeEntity;
@NodeEntity(label ="Neo4jTable")
public class Neo4jTable extends BaseNode {
}
package com.keymobile.metadata.metadataRelation.pojo.metadata;
import com.keymobile.metadata.metadataRelation.pojo.BaseNode;
import org.neo4j.ogm.annotation.NodeEntity;
@NodeEntity(label ="Neo4jView")
public class Neo4jView extends BaseNode {
}
package com.keymobile.metadata.metadataRelation.pojo.mongo;
import java.util.ArrayList;
import java.util.List;
public class MongoData {
private String _id;
private String name;
private String cnName;
private String parentId;
public List<String> getSysList() {
return sysList;
}
public void setSysList(List<String> sysList) {
this.sysList = sysList;
}
private List<String> sysList = new ArrayList<>();
public String get_class() {
return _class;
}
public void set_class(String _class) {
this._class = _class;
}
private String _class;
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public String get_id() {
return _id;
}
public void set_id(String _id) {
this._id = _id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCnName() {
return cnName;
}
public void setCnName(String cnName) {
this.cnName = cnName;
}
}
package com.keymobile.metadata.metadataRelation.pojo.returnBean; package com.keymobile.metadata.metadataRelation.pojo.returnBean;
public class Edge { public class ReturnEdge {
private String edgeId; private String edgeId;
private String fromId; private String fromId;
......
package com.keymobile.metadata.metadataRelation.pojo.returnBean; package com.keymobile.metadata.metadataRelation.pojo.returnBean;
public class Node { public class ReturnNode {
private String name; private String name;
private String id; private String id;
......
...@@ -3,7 +3,6 @@ package com.keymobile.metadata.metadataRelation.pojo.returnBean; ...@@ -3,7 +3,6 @@ package com.keymobile.metadata.metadataRelation.pojo.returnBean;
import org.apache.commons.collections.map.HashedMap; import org.apache.commons.collections.map.HashedMap;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -20,9 +19,9 @@ public class ReturnReslult { ...@@ -20,9 +19,9 @@ public class ReturnReslult {
} }
private List<Edge> edges = new ArrayList<>(); private List<ReturnEdge> edges = new ArrayList<>();
private List<Node> nodes = new ArrayList<>(); private List<ReturnNode> nodes = new ArrayList<>();
public Map<String, MetaModel> getMetaModelMap() { public Map<String, MetaModel> getMetaModelMap() {
return metaModelMap; return metaModelMap;
...@@ -35,19 +34,19 @@ public class ReturnReslult { ...@@ -35,19 +34,19 @@ public class ReturnReslult {
private Map<String, MetaModel> metaModelMap = new HashedMap(); private Map<String, MetaModel> metaModelMap = new HashedMap();
public List<Edge> getEdges() { public List<ReturnEdge> getEdges() {
return edges; return edges;
} }
public void setEdges(List<Edge> edges) { public void setEdges(List<ReturnEdge> edges) {
this.edges = edges; this.edges = edges;
} }
public List<Node> getNodes() { public List<ReturnNode> getNodes() {
return nodes; return nodes;
} }
public void setNodes(List<Node> nodes) { public void setNodes(List<ReturnNode> nodes) {
this.nodes = nodes; this.nodes = nodes;
} }
......
package com.keymobile.metadata.metadataRelation.respository.metadata;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jFunction;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jTable;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface Neo4jFunctionRepository extends Neo4jRepository<Neo4jFunction, Long> {
List<Neo4jFunction> findNeo4jFunctionByMetadataId(String metadataId);
}
package com.keymobile.metadata.metadataRelation.respository.metadata;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jFunction;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jProcedure;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface Neo4jProcedureRepository extends Neo4jRepository<Neo4jProcedure, Long> {
List<Neo4jProcedure> findNeo4jProcedureByMetadataId(String metadataId);
}
package com.keymobile.metadata.metadataRelation.respository.metadata;
import com.keymobile.metadata.metadataRelation.pojo.BaseNode;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jSchema;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface Neo4jSchemaRepository extends Neo4jRepository<Neo4jSchema, Long> {
List<Neo4jSchema> findNeo4jSchemaByMetadataId(String metadataId);
@Query("match (n:Neo4jSchema{metadataId:{schemaId}} )-[r:Composition]->(m) return m ")
List<BaseNode> getTableBySchemaId(@Param("schemaId") String schemaId);
}
package com.keymobile.metadata.metadataRelation.respository.metadata;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jSchema;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jSystem;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface Neo4jSystemRepository extends Neo4jRepository<Neo4jSystem, Long> {
List<Neo4jSystem> findNeo4jSystemByMetadataId(String metadataId);
// @Query("MATCH p=(n:MetaData {metadataId:{parentId}})-[r:Composition]->(m) RETURN m limit {limit} ")
@Query("match (n:Neo4jSystem{metadataId:{systemId}} )-[r:Composition]->(m) return m ")
List<Neo4jSchema> getSchemaBySystemId(@Param("systemId") String systemId);
}
package com.keymobile.metadata.metadataRelation.respository.metadata;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jTable;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface Neo4jTableRepository extends Neo4jRepository<Neo4jTable,Long> {
List<Neo4jTable> findNeo4jTableByMetadataId(String metadataId);
}
package com.keymobile.metadata.metadataRelation.respository.metadata;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jProcedure;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jView;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface Neo4jViewRepository extends Neo4jRepository<Neo4jView,Long> {
List<Neo4jView> findNeo4jViewByMetadataId(String metadataId);
}
package com.keymobile.metadata.metadataRelation.service; package com.keymobile.metadata.metadataRelation.service;
import com.keymobile.metadata.metadataRelation.pojo.mongo.MongoData;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableAsync;
...@@ -10,6 +13,9 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; ...@@ -10,6 +13,9 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
@Service @Service
...@@ -19,12 +25,38 @@ public class AsyncDataFromMongoToNeo4j { ...@@ -19,12 +25,38 @@ public class AsyncDataFromMongoToNeo4j {
@Autowired @Autowired
private IMetadataService metadataService; private IMetadataService metadataService;
@Autowired
private JdbcTemplate jdbcTemplate;
@Async @Async
public void asyncDataFromMongoToNeo4j(String catalogName) { public void asyncDataFromMongoToNeo4j(String catalogName) {
metadataService.syschroRelationFromMongo(catalogName); String sql = "select scope_id, scope_name from auth_scope";
metadataService.deleteTempNodeByCatalogName(catalogName); List<MongoData> mongoDataList = jdbcTemplate.query(sql, new RowMapper<MongoData>() {
metadataService.createTempNode(catalogName); @Override
public MongoData mapRow(ResultSet resultSet, int i) throws SQLException {
MongoData user = new MongoData();
user.set_id(resultSet.getString("scope_id"));
user.setName(resultSet.getString("scope_name"));
user.setCnName(resultSet.getString("scope_name"));
user.set_class("System");
return user;
}
});
metadataService.syschroMetadataFromMongo(catalogName,mongoDataList);
//先同步元数据,纵向关系,root开始
//再同步元数据的横向关系
// metadataService.syschroRelationFromMongo(catalogName);
// // 同步其他数据(模型,标准,质量等)
//
// //同步作业内部的临时数据
// metadataService.deleteTempNodeByCatalogName(catalogName);
// metadataService.createTempNode(catalogName);
} }
......
...@@ -3,7 +3,6 @@ package com.keymobile.metadata.metadataRelation.service; ...@@ -3,7 +3,6 @@ package com.keymobile.metadata.metadataRelation.service;
import com.keymobile.metadata.metadataRelation.pojo.BaseNode; import com.keymobile.metadata.metadataRelation.pojo.BaseNode;
import com.keymobile.metadata.metadataRelation.pojo.BaseRelationship; import com.keymobile.metadata.metadataRelation.pojo.BaseRelationship;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.Edge;
import java.util.List; import java.util.List;
...@@ -67,4 +66,6 @@ public interface IBaseRelationshipService { ...@@ -67,4 +66,6 @@ public interface IBaseRelationshipService {
* @desc 根据节点名称, 获取所有有关系的节点 * @desc 根据节点名称, 获取所有有关系的节点
*/ */
List<BaseNode> findMetadataByStartName(String startName); List<BaseNode> findMetadataByStartName(String startName);
void saveRelation(String startMetadataId, String endMetadataid, String composition);
} }
...@@ -3,6 +3,7 @@ package com.keymobile.metadata.metadataRelation.service; ...@@ -3,6 +3,7 @@ package com.keymobile.metadata.metadataRelation.service;
import com.keymobile.metadata.metadataRelation.pojo.BaseRelationship; import com.keymobile.metadata.metadataRelation.pojo.BaseRelationship;
import com.keymobile.metadata.metadataRelation.pojo.MetaData; import com.keymobile.metadata.metadataRelation.pojo.MetaData;
import com.keymobile.metadata.metadataRelation.pojo.TempNode; import com.keymobile.metadata.metadataRelation.pojo.TempNode;
import com.keymobile.metadata.metadataRelation.pojo.mongo.MongoData;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnReslult; import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnReslult;
import java.util.List; import java.util.List;
...@@ -97,4 +98,6 @@ public interface IMetadataService { ...@@ -97,4 +98,6 @@ public interface IMetadataService {
Map<String, String> getAutoMatchByInput(String name,int countInt ,int offsetInt); Map<String, String> getAutoMatchByInput(String name,int countInt ,int offsetInt);
ReturnReslult searchGraphBySystem(String metadataId, int layerLong); ReturnReslult searchGraphBySystem(String metadataId, int layerLong);
void syschroMetadataFromMongo(String catalogName,List<MongoData> mongoDataList);
} }
package com.keymobile.metadata.metadataRelation.service;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnNode;
import java.util.List;
import java.util.Map;
public interface ISchemaService {
Map<String,String> getSchemaBySystem(String systemId);
Map<String, List<ReturnNode>> getTablesBySchemaId(String schemaId);
}
package com.keymobile.metadata.metadataRelation.service;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jSchema;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnNode;
import java.util.List;
import java.util.Map;
public interface ISystemService {
Map<String ,List<ReturnNode>> getSchemaBySystemId(String systemId);
}
...@@ -3,6 +3,8 @@ package com.keymobile.metadata.metadataRelation.service.impl; ...@@ -3,6 +3,8 @@ package com.keymobile.metadata.metadataRelation.service.impl;
import com.keymobile.metadata.metadataRelation.config.Neo4jConfig; import com.keymobile.metadata.metadataRelation.config.Neo4jConfig;
import com.keymobile.metadata.metadataRelation.pojo.*; import com.keymobile.metadata.metadataRelation.pojo.*;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jSchema;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jSystem;
import com.keymobile.metadata.metadataRelation.respository.*; import com.keymobile.metadata.metadataRelation.respository.*;
import com.keymobile.metadata.metadataRelation.service.IBaseRelationshipService; import com.keymobile.metadata.metadataRelation.service.IBaseRelationshipService;
import org.neo4j.driver.v1.Driver; import org.neo4j.driver.v1.Driver;
...@@ -165,4 +167,18 @@ public class BaseRelationshipServiceImpl implements IBaseRelationshipService { ...@@ -165,4 +167,18 @@ public class BaseRelationshipServiceImpl implements IBaseRelationshipService {
// } // }
return null; return null;
} }
@Override
public void saveRelation(String startId, String endId, String composition) {
Neo4jConfig neo4jConfig = new Neo4jConfig();
Driver neo4jConnection = neo4jConfig.getNeo4jConnection();
Session session = neo4jConnection.session();
// match (n{metadataId:"Column=1=d9c2d67e56a3428e8e4f22918782437f"}),
// (m{metadataId:"Table=1=d644b631fa8c434e928bcd1f1665b060"})
// create (n)<-[r:Composition]-(m)
// return n,m,r
String cypher = " match (n{metadataId:\""+startId+"\"}),(m{metadataId:\""+endId+"\"}) merge (n)-[r:"+composition+"]->(m) return n,m,r ";
session.run(cypher);
logger.info("运行保存关系完成:" + cypher);
}
} }
package com.keymobile.metadata.metadataRelation.service.impl; package com.keymobile.metadata.metadataRelation.service.impl;
import com.keymobile.metadata.metadataRelation.pojo.RelationMongo; import com.keymobile.metadata.metadataRelation.pojo.RelationMongo;
import com.keymobile.metadata.metadataRelation.pojo.mongo.MongoData;
import org.bson.Document; import org.bson.Document;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -9,6 +10,7 @@ import org.springframework.data.domain.Pageable; ...@@ -9,6 +10,7 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -22,12 +24,14 @@ public class MongoDbServiceImpl { ...@@ -22,12 +24,14 @@ public class MongoDbServiceImpl {
private MongoTemplate mongoTemplate; private MongoTemplate mongoTemplate;
/** /**
* 查询所有 * 查询所有
* *
* @return * @return
*/ */
public List<RelationMongo> findAll(String catalogName) { public List<RelationMongo> findAllRelationByCatalog(String catalogName) {
logger.info("--------------------->[MongoDB find start]"); logger.info("--------------------->[MongoDB find start]");
try { try {
return mongoTemplate.findAll(RelationMongo.class, "md_relation_" + catalogName); return mongoTemplate.findAll(RelationMongo.class, "md_relation_" + catalogName);
...@@ -39,6 +43,50 @@ public class MongoDbServiceImpl { ...@@ -39,6 +43,50 @@ public class MongoDbServiceImpl {
} }
/** /**
* 获取领域,获取系统,获取数据库
* */
/**
* 查询所有数据库
*
* @return
*/
public List<MongoData> findDatabaseByparentId(String catalogName,String collectionName) {
logger.info("开始从mongo获取元数据:"+ catalogName);
try {
Query query = new Query();
query.addCriteria(Criteria.where("parentId").is(catalogName));
List<MongoData> mongoDataList = mongoTemplate.find(query, MongoData.class,collectionName);
return mongoDataList;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 查询所有数据库
*
* @return
*/
public List<MongoData> findDataByparentId(String parentId,String collectionName) {
logger.info("开始从mongo获取元数据:"+ parentId);
try {
Query query = new Query();
query.addCriteria(Criteria.where("parentId").is(parentId));
List<MongoData> mongoDataList = mongoTemplate.find(query, MongoData.class,collectionName);
return mongoDataList;// mongoTemplate.findAll(MongoData.class, "md_relation_" + catalogName);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 查询所有 * 查询所有
* *
* @return * @return
......
package com.keymobile.metadata.metadataRelation.service.impl; package com.keymobile.metadata.metadataRelation.service.impl;
import com.keymobile.metadata.metadataRelation.config.Neo4jConfig;
import com.keymobile.metadata.metadataRelation.pojo.*; import com.keymobile.metadata.metadataRelation.pojo.*;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.Edge; import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnEdge;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.MetaModel; import com.keymobile.metadata.metadataRelation.pojo.returnBean.MetaModel;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnNode;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnReslult; import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnReslult;
import com.keymobile.metadata.metadataRelation.respository.*; import com.keymobile.metadata.metadataRelation.respository.*;
import com.keymobile.metadata.metadataRelation.service.MultiModelService; import com.keymobile.metadata.metadataRelation.service.MultiModelService;
import com.keymobile.metadata.metadataRelation.util.Neo4jTool;
import org.hibernate.boot.Metadata;
import org.neo4j.driver.v1.*;
import org.neo4j.driver.v1.types.Node;
import org.neo4j.driver.v1.types.Path;
import org.neo4j.driver.v1.types.Relationship;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.system.ApplicationHome; import org.springframework.boot.system.ApplicationHome;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import sun.misc.BASE64Encoder; import sun.misc.BASE64Encoder;
import sun.rmi.runtime.Log;
import javax.persistence.Table;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
...@@ -257,7 +249,7 @@ public class MultiModelServiceImpl implements MultiModelService { ...@@ -257,7 +249,7 @@ public class MultiModelServiceImpl implements MultiModelService {
if(!returnMetadata.contains(toId)){ if(!returnMetadata.contains(toId)){
continue; continue;
} }
Edge edge = new Edge(); ReturnEdge edge = new ReturnEdge();
edge.setEdgeId(fromId+"_"+toId); edge.setEdgeId(fromId+"_"+toId);
MetaData startNode = metaDataMapLong.get(fromId); MetaData startNode = metaDataMapLong.get(fromId);
...@@ -280,7 +272,7 @@ public class MultiModelServiceImpl implements MultiModelService { ...@@ -280,7 +272,7 @@ public class MultiModelServiceImpl implements MultiModelService {
if(!returnMetadata.contains(toId)){ if(!returnMetadata.contains(toId)){
continue; continue;
} }
Edge edge = new Edge(); ReturnEdge edge = new ReturnEdge();
edge.setEdgeId(fromId+"_"+toId); edge.setEdgeId(fromId+"_"+toId);
MetaData startNode = metaDataMapLong.get(fromId); MetaData startNode = metaDataMapLong.get(fromId);
...@@ -297,7 +289,7 @@ public class MultiModelServiceImpl implements MultiModelService { ...@@ -297,7 +289,7 @@ public class MultiModelServiceImpl implements MultiModelService {
for(Long returnMeta:returnMetadata){ for(Long returnMeta:returnMetadata){
MetaData metaData = metaDataMapLong.get(returnMeta); MetaData metaData = metaDataMapLong.get(returnMeta);
com.keymobile.metadata.metadataRelation.pojo.returnBean.Node returnNode = new com.keymobile.metadata.metadataRelation.pojo.returnBean.Node(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId()); returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName()); returnNode.setName(metaData.getName());
......
package com.keymobile.metadata.metadataRelation.service.impl;
import com.keymobile.metadata.metadataRelation.pojo.BaseNode;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jSchema;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnNode;
import com.keymobile.metadata.metadataRelation.respository.metadata.Neo4jSchemaRepository;
import com.keymobile.metadata.metadataRelation.respository.metadata.Neo4jSystemRepository;
import com.keymobile.metadata.metadataRelation.service.ISchemaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class SchemaServiceImpl implements ISchemaService {
@Autowired
private Neo4jSchemaRepository neo4jSchemaRepository;
@Override
public Map<String, String> getSchemaBySystem(String systemId) {
return null;
}
@Override
public Map<String, List<ReturnNode>> getTablesBySchemaId(String schemaId) {
Map<String ,List<ReturnNode>> schemaMap = new HashMap<>();
List<BaseNode> baseNodeList = neo4jSchemaRepository.getTableBySchemaId(schemaId);
for(BaseNode baseNode:baseNodeList){
ReturnNode returnNode = new ReturnNode();
returnNode.setId(baseNode.getMetadataId());
returnNode.setName(baseNode.getName());
if(baseNode.getMetadataId().startsWith("Table=")){
returnNode.setType("表");
if(schemaMap.containsKey("表")){
List<ReturnNode> returnNodeList = schemaMap.get("表");
returnNodeList.add(returnNode);
}else {
List<ReturnNode> returnNodeList = new ArrayList<>();
returnNodeList.add(returnNode);
schemaMap.put("表",returnNodeList);
}
}else if(baseNode.getMetadataId().startsWith("View=")){
returnNode.setType("视图");
if(schemaMap.containsKey("视图")){
List<ReturnNode> returnNodeList = schemaMap.get("视图");
returnNodeList.add(returnNode);
}else {
List<ReturnNode> returnNodeList = new ArrayList<>();
returnNodeList.add(returnNode);
schemaMap.put("视图",returnNodeList);
}
}else if(baseNode.getMetadataId().startsWith("Function=")){
returnNode.setType("函数");
if(schemaMap.containsKey("函数")){
List<ReturnNode> returnNodeList = schemaMap.get("函数");
returnNodeList.add(returnNode);
}else {
List<ReturnNode> returnNodeList = new ArrayList<>();
returnNodeList.add(returnNode);
schemaMap.put("函数",returnNodeList);
}
}else if(baseNode.getMetadataId().startsWith("Procedure=")){
returnNode.setType("存储过程");
if(schemaMap.containsKey("存储过程")){
List<ReturnNode> returnNodeList = schemaMap.get("存储过程");
returnNodeList.add(returnNode);
}else {
List<ReturnNode> returnNodeList = new ArrayList<>();
returnNodeList.add(returnNode);
schemaMap.put("存储过程",returnNodeList);
}
}else {
returnNode.setType("其他类型");
if(schemaMap.containsKey("其他类型")){
List<ReturnNode> returnNodeList = schemaMap.get("其他类型");
returnNodeList.add(returnNode);
}else {
List<ReturnNode> returnNodeList = new ArrayList<>();
returnNodeList.add(returnNode);
schemaMap.put("其他类型",returnNodeList);
}
}
}
return schemaMap;
}
}
package com.keymobile.metadata.metadataRelation.service.impl;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jSchema;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnNode;
import com.keymobile.metadata.metadataRelation.respository.metadata.Neo4jSystemRepository;
import com.keymobile.metadata.metadataRelation.service.ISystemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class SystemServiceImpl implements ISystemService {
@Autowired
private Neo4jSystemRepository neo4jSystemRepository;
@Override
public Map<String ,List<ReturnNode>> getSchemaBySystemId(String systemId) {
Map<String ,List<ReturnNode>> schemaMap = new HashMap<>();
List<Neo4jSchema> neo4jSchemaList = neo4jSystemRepository.getSchemaBySystemId(systemId);
for(Neo4jSchema neo4jSchema:neo4jSchemaList){
ReturnNode returnNode = new ReturnNode();
returnNode.setId(neo4jSchema.getMetadataId());
returnNode.setName(neo4jSchema.getName());
returnNode.setType("Schema");
String label = neo4jSchema.getLabel();
if(label == null || label.equals("")){
label = "未分层";
}
if(schemaMap .containsKey(label)){
List<ReturnNode> returnNodeList = schemaMap.get(label);
if(!returnNodeList.contains(returnNode)){
returnNodeList.add(returnNode);
}
}else{
List<ReturnNode> returnNodeList = new ArrayList<>();
returnNodeList.add(returnNode);
schemaMap.put(label,returnNodeList);
}
}
return schemaMap;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment