Commit 352d3355 by linxu
parents 527c2ec0 06a96f10
......@@ -47,314 +47,177 @@ public class MetaDataController {
private IBaseRelationshipService baseRelationshipService;
/**
* 查询元数据,关系
* 返回 node,edge,icon
*/
@ApiOperation(tags = "", value = "获取所有的节点与关系")
@RequestMapping(path = "/result1", method = RequestMethod.GET)
public ReturnReslult getAllNodeAndRelation() {
logger.info("开始获取所有的节点与关系");
ReturnReslult result = new ReturnReslult();
List<MetaData> metaDataList = metadataService.finAllMetaData();
Map<Long, Node> nodeMap = new HashMap<>();
Map<String, MetaModel> metaModelMap = new HashMap<>();
for (MetaData metaData : metaDataList) {
Node node = new Node();
String[] strings = metaData.getMetadataId().split("=");
String modelName = strings[0];
node.setId(metaData.getMetadataId());
node.setIcon(modelName);
if (!metaModelMap.containsKey(modelName)) {
MetaModel model = new MetaModel();
String iconContext = getIconByModelId(modelName);
model.setModelName(modelName);
model.setCnName(modelName);
model.setDescription("");
model.setIcon(iconContext);
metaModelMap.put(modelName, model);
}
node.setName(metaData.getName());
node.setType("MetaData");
result.getNodes().add(node);
nodeMap.put(metaData.getId(), node);
}
List<TempNode> allTempNode = metadataService.findAllTempNode();
for (TempNode tempNode : allTempNode) {
Node node = new Node();
String[] strings = tempNode.getMetadataId().split("=");
String modelName = strings[0];
node.setId(tempNode.getMetadataId());
node.setIcon(modelName);
if (!metaModelMap.containsKey(modelName)) {
MetaModel model = new MetaModel();
String iconContext = getIconByModelId(modelName);
model.setModelName(modelName);
model.setCnName(modelName);
model.setDescription("");
model.setIcon(iconContext);
metaModelMap.put(modelName, model);
}
node.setName(tempNode.getName());
node.setType("TempNode");
result.getNodes().add(node);
nodeMap.put(tempNode.getId(), node);
}
logger.info("节点的数量:" + result.getNodes().size());
List<BaseRelationship> baseRelationshipList = baseRelationshipService.findAllRelation();
for (BaseRelationship baseRelationship : baseRelationshipList) {
Edge edge = new Edge();
edge.setEdgeId(String.valueOf(baseRelationship.getId()));
Long startId = baseRelationship.getStart().getId();
Long endId = baseRelationship.getEnd().getId();
String startMetaId = "";
String endMEtaId = "";
if (nodeMap.containsKey(startId)) {
startMetaId = nodeMap.get(startId).getId();
}
if (nodeMap.containsKey(endId)) {
endMEtaId = nodeMap.get(endId).getId();
}
if (StringUtils.isNotBlank(startMetaId) && StringUtils.isNotBlank(endMEtaId)) {
edge.setFromId(startMetaId);
edge.setToId(endMEtaId);
edge.setType(baseRelationship.getName());
result.getEdges().add(edge);
}
}
logger.info("关系的数量:" + result.getEdges().size());
result.setMetaModelMap(metaModelMap);
return result;
}
@ApiOperation(tags = "", value = "传入元模型名称,返回该元模型的元数据所有关系")
// @RequestMapping(path = "/getNodeAndRelationByModel", method = RequestMethod.GET)
@RequestMapping(path = "/getNodeAndRelationByModel", method = RequestMethod.GET)
public ReturnReslult getNodeAndRelationByModel(String modelName) {
if (modelName == null || modelName.equals("")) {
modelName = "Table";
}
ReturnReslult returnReslult = metadataService.findResultByModelName(modelName);
return returnReslult;
}
/**
* 查询元数据
*/
@RequestMapping(path = "/list", method = RequestMethod.GET)
public List<MetaData> getUserNodeList() {
logger.info("获取所有的节点");
return metadataService.finAllMetaData();
}
/**
* 返回一个系统级的大图
*/
@ApiOperation(tags = "", value = "系统级的大图")
// @RequestMapping(path = "/getBigGraph", method = RequestMethod.GET)
@RequestMapping(path = "/result", method = RequestMethod.GET)
public ReturnReslult getBigGraph() {
logger.info("开始获取系统级的大图");
ReturnReslult result = new ReturnReslult();
List<MetaData> metaDataList = metadataService.finAllMetaData();
Map<String, Node> nodeMap = new HashMap<>();
Map<String, String> child2Parent = new HashMap<>();
Map<String, List<String>> parent2Children = new HashMap<>();
Map<String, List<String>> source2Target = new HashMap<>();
Map<String, List<String>> target2Source = new HashMap<>();
Map<String, MetaModel> metaModelMap = new HashMap<>();
for (MetaData metaData : metaDataList) {
Node node = new Node();
String[] strings = metaData.getMetadataId().split("=");
String modelName = strings[0];
public ReturnReslult getBigGraph(String modelName0) {
//如果有system,则虚拟创建一个节点,用来做顶层节点
if (metaData.getSystem() != null && !metaData.getSystem().equals("")) {
String systemName = metaData.getSystem();
logger.info("传入的元模型名称是:"+modelName0);
ReturnReslult returnReslult = new ReturnReslult();
if (modelName0 == null || modelName0.equals("")) {
modelName0 = "Table";
}
if(!modelName0.toLowerCase().equals("all")){
returnReslult = metadataService.findResultByModelName(modelName0);
}else {
List<MetaData> metaDataList = metadataService.finAllMetaData();
Map<String, Node> nodeMap = new HashMap<>();
Map<String, String> child2Parent = new HashMap<>();
Map<String, List<String>> parent2Children = new HashMap<>();
Map<String, List<String>> source2Target = new HashMap<>();
Map<String, List<String>> target2Source = new HashMap<>();
Map<String, MetaModel> metaModelMap = new HashMap<>();
for (MetaData metaData : metaDataList) {
Node node = new Node();
String[] strings = metaData.getMetadataId().split("=");
String modelName = strings[0];
//如果有system,则虚拟创建一个节点,用来做顶层节点
if (metaData.getSystem() != null && !metaData.getSystem().equals("")) {
String systemName = metaData.getSystem();
Node systemNode = new Node();
systemNode.setId("catalog=" + systemName);
systemNode.setName(systemName);
String newModelName = "Catalog";
systemNode.setIcon(newModelName);
if (!metaModelMap.containsKey(newModelName)) {
MetaModel model = new MetaModel();
String iconContext = getIconByModelId(newModelName);
model.setModelName(newModelName);
model.setCnName(newModelName);
model.setDescription("");
model.setIcon(iconContext);
metaModelMap.put(newModelName, model);
}
Node systemNode = new Node();
systemNode.setId("catalog=" + systemName);
systemNode.setName(systemName);
String newModelName = "Catalog";
systemNode.setIcon(newModelName);
systemNode.setType("MetaData");
returnReslult.getNodes().add(systemNode);
nodeMap.put("" + systemNode.getId(), systemNode);
child2Parent.put("" + metaData.getId(), systemNode.getId());
}
if (!metaModelMap.containsKey(newModelName)) {
node.setId(metaData.getMetadataId());
node.setIcon(modelName);
if (!metaModelMap.containsKey(modelName)) {
MetaModel model = new MetaModel();
String iconContext = getIconByModelId(newModelName);
model.setModelName(newModelName);
model.setCnName(newModelName);
String iconContext = getIconByModelId(modelName);
model.setModelName(modelName);
model.setCnName(modelName);
model.setDescription("");
model.setIcon(iconContext);
metaModelMap.put(newModelName, model);
metaModelMap.put(modelName, model);
}
node.setName(metaData.getName());
node.setType("MetaData");
returnReslult.getNodes().add(node);
nodeMap.put("" + metaData.getId(), node);
systemNode.setType("MetaData");
result.getNodes().add(systemNode);
nodeMap.put("" + systemNode.getId(), systemNode);
child2Parent.put("" + metaData.getId(), systemNode.getId());
}
logger.info("节点的数量:" + returnReslult.getNodes().size());
List<BaseRelationship> baseRelationshipList = baseRelationshipService.findAllRelation();
/**
* 分成两部分,一个是组合关系,一个是依赖关系。
*
*/
for (BaseRelationship baseRelationship : baseRelationshipList) {
Long startId = baseRelationship.getStart().getId();
Long endId = baseRelationship.getEnd().getId();
if (baseRelationship.getName().equals("流入")
|| baseRelationship.getName().equals("流出")) {
if (source2Target.get(startId) != null) {
source2Target.get(startId).add("" + endId);
} else {
List<String> targets = new ArrayList<>();
targets.add("" + endId);
source2Target.put("" + startId, targets);
}
if (target2Source.get(endId) != null) {
target2Source.get(endId).add("" + startId);
} else {
List<String> sources = new ArrayList<>();
sources.add("" + startId);
target2Source.put("" + endId, sources);
}
node.setId(metaData.getMetadataId());
node.setIcon(modelName);
if (!metaModelMap.containsKey(modelName)) {
MetaModel model = new MetaModel();
String iconContext = getIconByModelId(modelName);
model.setModelName(modelName);
model.setCnName(modelName);
model.setDescription("");
model.setIcon(iconContext);
metaModelMap.put(modelName, model);
}
node.setName(metaData.getName());
node.setType("MetaData");
result.getNodes().add(node);
nodeMap.put("" + metaData.getId(), node);
}
logger.info("节点的数量:" + result.getNodes().size());
List<BaseRelationship> baseRelationshipList = baseRelationshipService.findAllRelation();
/**
* 分成两部分,一个是组合关系,一个是依赖关系。
*
*/
for (BaseRelationship baseRelationship : baseRelationshipList) {
Long startId = baseRelationship.getStart().getId();
Long endId = baseRelationship.getEnd().getId();
if (baseRelationship.getName().equals("流入")
|| baseRelationship.getName().equals("流出")) {
if (source2Target.get(startId) != null) {
source2Target.get(startId).add("" + endId);
} else {
List<String> targets = new ArrayList<>();
targets.add("" + endId);
source2Target.put("" + startId, targets);
}
if (target2Source.get(endId) != null) {
target2Source.get(endId).add("" + startId);
} else {
List<String> sources = new ArrayList<>();
sources.add("" + startId);
target2Source.put("" + endId, sources);
}
} else if (baseRelationship.getName().equals("流出")) {
} else if (baseRelationship.getName().equals("流出")) {
} else if (baseRelationship.getName().equals("组合")) {
child2Parent.put("" + endId, "" + startId);
if (parent2Children.get("" + startId) != null) {
parent2Children.get("" + startId).add("" + endId);
} else {
List<String> children = new ArrayList<>();
children.add("" + endId);
} else if (baseRelationship.getName().equals("组合")) {
child2Parent.put("" + endId, "" + startId);
if (parent2Children.get("" + startId) != null) {
parent2Children.get("" + startId).add("" + endId);
} else {
List<String> children = new ArrayList<>();
children.add("" + endId);
parent2Children.put("" + startId, children);
parent2Children.put("" + startId, children);
}
}
}
}
//专门处理流入 流出的关系
for (BaseRelationship baseRelationship : baseRelationshipList) {
//专门处理流入 流出的关系
for (BaseRelationship baseRelationship : baseRelationshipList) {
String startId = baseRelationship.getStart().getId() + "";
String endId = baseRelationship.getEnd().getId() + "";
String startId = baseRelationship.getStart().getId() + "";
String endId = baseRelationship.getEnd().getId() + "";
String startMetaId = "";
String endMetaId = "";
String startMetaId = "";
String endMetaId = "";
if (baseRelationship.getName().equals("流入")
|| baseRelationship.getName().equals("流出")) {
if (baseRelationship.getName().equals("流入")
|| baseRelationship.getName().equals("流出")) {
startId = getParentId("" + startId, child2Parent);
startId = getParentId("" + startId, child2Parent);
// if(child2Parent . containsKey(startId)){
// startId = child2Parent.get(startId);
// }
endId = getParentId("" + endId, child2Parent);
endId = getParentId("" + endId, child2Parent);
// if(child2Parent . containsKey(endId)){
// endId = child2Parent.get(endId);
// }
if (nodeMap.containsKey("" + startId)) {
Node startNode = nodeMap.get("" + startId);
if (nodeMap.containsKey("" + startId)) {
Node startNode = nodeMap.get("" + startId);
startMetaId = nodeMap.get("" + startId).getId();
}
startMetaId = nodeMap.get("" + startId).getId();
}
if (nodeMap.containsKey("" + endId)) {
endMetaId = nodeMap.get("" + endId).getId();
if (nodeMap.containsKey("" + endId)) {
endMetaId = nodeMap.get("" + endId).getId();
}
Edge edge = new Edge();
edge.setEdgeId("" + baseRelationship.getId());
edge.setFromId(startMetaId);
edge.setToId(endMetaId);
edge.setType(baseRelationship.getName());
returnReslult.getEdges().add(edge);
}
Edge edge = new Edge();
edge.setEdgeId("" + baseRelationship.getId());
edge.setFromId(startMetaId);
edge.setToId(endMetaId);
edge.setType(baseRelationship.getName());
result.getEdges().add(edge);
}
}
// for(Object obj : child2Parent.keySet()){
// logger.info("child:"+ obj + " ,parent:"+ child2Parent.get(obj));
// }
// for(Object obj : parent2Children.keySet()){
// List<String> children = parent2Children.get(obj);
// logger.info("parent:"+ obj);
// for(String child:children){
// logger.info(" child:" + child );
// }
// }
//
// for(Object obj : source2Target.keySet()){
// List<String> targets = source2Target.get(obj);
// logger.info("source:"+ obj);
// for(String target:targets){
// logger.info(" target:" + target );
// }
// }
//
//
// for(Object obj : target2Source.keySet()){
// List<String> sources = target2Source.get(obj);
// logger.info("target:"+ obj);
// for(String source:sources){
// logger.info(" source:" + source );
// }
// }
logger.info("关系的数量:" + result.getEdges().size());
result.setMetaModelMap(metaModelMap);
logger.info("关系的数量:" + returnReslult.getEdges().size());
returnReslult.setMetaModelMap(metaModelMap);
}
return result;
return returnReslult;
}
private String getParentId(String neo4jId, Map<String, String> child2Parent) {
......@@ -517,7 +380,7 @@ public class MetaDataController {
/**
* 查询所有的节点类型
*/
@ApiOperation(tags = "", value = "查询所有的节点型")
@ApiOperation(tags = "", value = "查询所有的节点元模型")
@RequestMapping(path = "/listAllNodeType", method = RequestMethod.GET)
public List<String> getAllNodeType() {
......@@ -530,7 +393,6 @@ public class MetaDataController {
@ApiOperation(tags = "", value = "传入元数据id,显示的层数,查找出与该元数据有关系的数据")
@RequestMapping(path = "/getNodeByDataId", method = RequestMethod.GET)
public ReturnReslult getNodeByDataId(String metadataId, int depth) {
return metadataService.findNodeByDataId(metadataId, depth);
}
......@@ -544,17 +406,6 @@ public class MetaDataController {
}
/**
* 添加元数据的接口
*/
@RequestMapping(path = "/addMetadata", method = RequestMethod.POST)
public MetaData addMetadata(@RequestBody MetaData metaData) {
System.out.println("这是写入元数据的方法。");
MetaData metaData1 = metadataService.addMetaData(metaData);
return metaData1;
}
/**
* 同步元数据关系的接口,传入一个环境名称(catalognName),从mongo读取关系,存入到neo4j中
......
......@@ -229,8 +229,23 @@ public class MetadataServiceImpl implements IMetadataService {
if (analysisId.contains(metadataId1)) {
continue;
}
String impactCypher = "MATCH p=(a:MetaData{metadataId:\"" + metadataId + "\"})-[r:Composition]->()-->()-->()<-[r1:Composition]-(b:MetaData{metadataId:\"" + metadataId1 + "\"})\n" +
"RETURN p";
String impactCypher = "";
if(modelName.toLowerCase().equals("table") ){
impactCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId + "\"})-[r:Composition]->()-->()-->()<-[r1:Composition]-(b:MetaData{metadataId:\"" + metadataId1 + "\"})\n" +
"RETURN p";
}else if(modelName.toLowerCase().equals("sqlscript")){
impactCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId + "\"})-[r:Execute]->()-->()-->()<-[r1:Execute]-(b:MetaData{metadataId:\"" + metadataId1 + "\"})\n" +
"RETURN p";
}else if(modelName.toLowerCase().equals("etljob")){
impactCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId + "\"})-[r:Execute]->()-[r1:Execute]->()-->()-->()<-[r2:Execute]-()<-[r3:Execute]-(b:MetaData{metadataId:\"" + metadataId1 + "\"})\n" +
"RETURN p";
}else if(modelName.toLowerCase().equals("column") ||modelName.toLowerCase().equals("sql") ){
impactCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId + "\"})-->()-->(b:MetaData{metadataId:\"" + metadataId1 + "\"})\n" +
"RETURN p";
}
StatementResult impactResult = session.run(impactCypher);
if (impactResult.hasNext()) {
logger.info(metadataId + " --->>" + metadataId1);
......@@ -242,12 +257,24 @@ public class MetadataServiceImpl implements IMetadataService {
edge.setEdgeId("" + count++);
returnReslult.getEdges().add(edge);
}
String lineageCypher = "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-[r:Composition]->() -->()-->()<-[r1:Composition]-(b:MetaData{metadataId:\"" + metadataId + "\"})\n" +
"RETURN p";
String lineageCypher = "";
if(modelName.toLowerCase().equals("table")){
lineageCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-[r:Composition]->() -->()-->()<-[r1:Composition]-(b:MetaData{metadataId:\"" + metadataId + "\"})\n" +
"RETURN p";
}else if(modelName.toLowerCase().equals("sqlscript")){
lineageCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-[r:Execute]->() -->()-->()<-[r1:Execute]-(b:MetaData{metadataId:\"" + metadataId + "\"})\n" +
"RETURN p";
}else if(modelName.toLowerCase().equals("etljob")){
lineageCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-[r:Execute]->()-[r1:Execute]->()-->()-->()<-[r2:Execute]-()<-[r3:Execute]-(b:MetaData{metadataId:\"" + metadataId + "\"})\n" +
"RETURN p";
}else if(modelName.toLowerCase().equals("column") ||modelName.toLowerCase().equals("sql") ){
lineageCypher= "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-->()-->(b:MetaData{metadataId:\"" + metadataId + "\"})\n" +
"RETURN p";
}
// String lineageCypher = "MATCH p=(a:MetaData{metadataId:\"" + metadataId1 + "\"})-[r:Composition]->() -->()-->()<-[r1:Composition]-(b:MetaData{metadataId:\"" + metadataId + "\"})\n" +
// "RETURN p";
StatementResult lineageResult = session.run(lineageCypher);
if (lineageResult.hasNext()) {
logger.info(metadataId + "<<-- " + metadataId1);
Edge edge = new Edge();
......@@ -554,23 +581,17 @@ public class MetadataServiceImpl implements IMetadataService {
@Override
public List<String> findAllNodeTypes() {
Iterable<MetaData> dataIterable = metadataRepository.findAll();
List<String> labels = new ArrayList<>();
Neo4jConfig neo4jConfig = new Neo4jConfig();
Driver neo4jConnection = neo4jConfig.getNeo4jConnection();
Session session = neo4jConnection.session();
String getLabels = " MATCH (n) RETURN distinct labels(n) as name ";
StatementResult result = session.run(getLabels);
while (result.hasNext()) {
Record record = (Record) result.next();
String labelName = record.get("name").toString();
Value name = record.get("name");
List<Object> objects = name.asList();
int size = objects.size();
String type = "";
Object object = objects.get(size - 1);
labels.add(object.toString());
for(MetaData data :dataIterable){
String metadataId = data.getMetadataId();
String[] metadataIds = metadataId.split("=");
String modelName = metadataIds[0];
if(!labels.contains(modelName)){
labels.add(modelName);
}
}
return labels;
}
......
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