Commit fb645246 by qiuchaofei

1.添加字段级的图形分析,2.字段与sql的关系添加描述

parent 8ee8c8b6
package com.keymobile.metadata.metadataRelation.respository.metadata;
import com.keymobile.metadata.metadataRelation.pojo.BaseNode;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jColumn;
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 Neo4jColumnRepository extends Neo4jRepository<Neo4jColumn, Long> {
Neo4jColumn findNeo4jColumnByMetadataId(String metadataId);
//match (n:Neo4jTable{metadataId:"Table=1=de175ee0b21c473f915cefaad6d798f1"})-[r1:流向]->(n1)-[r0:TempInput*0..]->(m)-[r:流向]->(m1) return m1
@Query("match (n:Neo4jColumn{metadataId:{columnId}})<-[r1:流向]-(n1)<-[r0:TempRelation*0..]-(m)<-[r:流向]-(m1) where r.description=r1.description return m1 ")
List<BaseNode> getSourceColumn(@Param("columnId") String columnId);
// @Query("match (n{metadataId:{tableId}} )-[r1:流向]->(m1)-[r:流向]->(m) return m ")
@Query("match (n:Neo4jColumn{metadataId:{columnId}})-[r1:流向]->(n1)-[r0:TempRelation*0..]->(m)-[r:流向]->(m1) where r.description=r1.description return m1 ")
List<BaseNode> getTargetColumn(@Param("columnId") String columnId);
}
......@@ -68,4 +68,7 @@ public interface IBaseRelationshipService {
List<BaseNode> findMetadataByStartName(String startName);
void saveRelation(String startMetadataId, String endMetadataid, String composition);
void saveRelation(String startId, String endId, String relationType,String description);
}
package com.keymobile.metadata.metadataRelation.service;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnReslult;
public interface IColumnService {
ReturnReslult getRelationAboutColumn(String columnId);
}
......@@ -181,4 +181,19 @@ public class BaseRelationshipServiceImpl implements IBaseRelationshipService {
session.run(cypher);
// logger.info("运行保存关系完成:" + cypher);
}
@Override
public void saveRelation(String startId, String endId, String relationType,String description) {
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:"+relationType+"]->(m) set r.description ="+description;
// logger.info("运行保存关系完成:" + cypher);
session.run(cypher);
}
}
package com.keymobile.metadata.metadataRelation.service.impl;
import com.keymobile.metadata.metadataRelation.pojo.BaseNode;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jColumn;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnEdge;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnNode;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnReslult;
import com.keymobile.metadata.metadataRelation.respository.metadata.Neo4jColumnRepository;
import com.keymobile.metadata.metadataRelation.service.IColumnService;
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 ColumnServiceImpl implements IColumnService {
@Autowired
private Neo4jColumnRepository neo4jColumnRepository;
@Override
public ReturnReslult getRelationAboutColumn(String columnId) {
ReturnReslult returnReslult = new ReturnReslult();
Map<String, ReturnNode> returnNodeMap = new HashMap<>();
Map<String, ReturnEdge> returnEdgeMap = new HashMap<>();
List<BaseNode> targetNodeList = new ArrayList<>();
Neo4jColumn neo4jColumn = neo4jColumnRepository.findNeo4jColumnByMetadataId(columnId);
ReturnNode returnColumn = new ReturnNode();
returnColumn.setId(neo4jColumn.getMetadataId());
returnColumn.setName(neo4jColumn.getName());
returnColumn.setType("Column");
returnReslult.getNodes().add(returnColumn);
List<BaseNode> targetBaseNodeList = neo4jColumnRepository.getTargetColumn(columnId);
for(BaseNode targetBaseNode:targetBaseNodeList){
if(targetBaseNode.getMetadataId().startsWith("Column=")){
//是字段
targetNodeList.add(targetBaseNode);
}else if(targetBaseNode.getMetadataId().startsWith("ETLSql=")){
getTargetRelationAboutColumns(targetBaseNode.getMetadataId(),targetNodeList);
//不是表,就继续找
}
}
for(BaseNode sourceNode:targetNodeList){
ReturnNode returnNode = new ReturnNode();
returnNode.setId(sourceNode.getMetadataId());
returnNode.setName(sourceNode.getName());
returnNode.setType("Column");
returnNodeMap.put(sourceNode.getMetadataId(),returnNode);
ReturnEdge returnEdge = new ReturnEdge();
String edgeId = columnId +"_"+returnNode.getId() ;
returnEdge.setEdgeId(edgeId);
returnEdge.setFromId(columnId);
returnEdge.setToId(returnNode.getId() );
returnEdgeMap.put(edgeId,returnEdge);
}
List<BaseNode> sourceNodeList = new ArrayList<>();
List<BaseNode> sourceBaseNodeList = neo4jColumnRepository.getSourceColumn(columnId);
for(BaseNode sourceBaseNode:sourceBaseNodeList){
if(sourceBaseNode.getMetadataId().startsWith("Column=")){
//是字段
sourceNodeList.add(sourceBaseNode);
}else if(sourceBaseNode.getMetadataId().startsWith("ETLSql=")){
getSourceRelationAboutColumns(sourceBaseNode.getMetadataId(),sourceNodeList);
//不是表,就继续找
}
}
for(BaseNode sourceNode:sourceNodeList){
ReturnNode returnNode = new ReturnNode();
returnNode.setId(sourceNode.getMetadataId());
returnNode.setName(sourceNode.getName());
returnNode.setType("Column");
returnNodeMap.put(sourceNode.getMetadataId(),returnNode);
ReturnEdge returnEdge = new ReturnEdge();
String edgeId = returnNode.getId()+"_"+columnId;
returnEdge.setEdgeId(edgeId);
returnEdge.setFromId(returnNode.getId());
returnEdge.setToId(columnId);
returnEdgeMap.put(edgeId,returnEdge);
}
for(Object obj :returnNodeMap.keySet()){
returnReslult.getNodes().add(returnNodeMap.get(obj));
}
for(Object obj :returnEdgeMap.keySet()){
returnReslult.getEdges().add(returnEdgeMap.get(obj));
}
return returnReslult;
}
private void getSourceRelationAboutColumns(String metadataId, List<BaseNode> sourceReturnNodeList) {
{
List<BaseNode> sourceNodeList = new ArrayList<>();
if(metadataId.startsWith("ETLSql=")){
sourceNodeList = neo4jColumnRepository.getSourceColumn(metadataId);
}else if(metadataId.startsWith("File=")){
// targetNodeList = neo4jFileRepository.getTargets(metadataId);
}
for(BaseNode sourceNode:sourceNodeList){
if(sourceNode.getMetadataId().startsWith("Column=")){
//是表
sourceReturnNodeList.add(sourceNode);
}else if(sourceNode.getMetadataId().startsWith("ETLSql=")){
getSourceRelationAboutColumns(sourceNode.getMetadataId(),sourceReturnNodeList);
//不是表,就继续找
}
}
}
}
private void getTargetRelationAboutColumns(String metadataId, List<BaseNode> returnNodeList) {
List<BaseNode> targetNodeList = new ArrayList<>();
if(metadataId.startsWith("ETLSql=")){
targetNodeList = neo4jColumnRepository.getTargetColumn(metadataId);
}else if(metadataId.startsWith("File=")){
// targetNodeList = neo4jFileRepository.getTargets(metadataId);
}
for(BaseNode targetNode:targetNodeList){
if(targetNode.getMetadataId().startsWith("Column=")){
//是表
returnNodeList.add(targetNode);
}else if(targetNode.getMetadataId().startsWith("ETLSql=")){
getTargetRelationAboutColumns(targetNode.getMetadataId(),returnNodeList);
//不是表,就继续找
}
}
}
}
......@@ -1868,8 +1868,10 @@ public class MetadataServiceImpl implements IMetadataService {
for(; page< totalPageCount;page++){
List<Document> relationList = mongoDbServiceImpl.findRelationByPage(PageRequest.of(page,pageSize,Sort.by("_id")),catalogName);
String description = "";
List<Document> relationList = mongoDbServiceImpl.findRelationByPage(PageRequest.of(page,pageSize,Sort.by("_id")),catalogName);
for(Document relation :relationList){
description = relation.getString("description");
String type = relation.getString("type");
if(!(type.equals("Input") || type.equals("Output"))){
continue;
......@@ -1878,7 +1880,7 @@ public class MetadataServiceImpl implements IMetadataService {
String targetId =relation.getString("target"); // relationMongo.getTarget();
//本身的字段级关系也要同步
edgeIdMap.put(sourceId+"_"+targetId,"");
edgeIdMap.put(sourceId+"_"+targetId,description);
Map<String, Object> sourceData = metadataRepoRemoteService.getMetadata(sourceId);
Map<String, Object> targetData = metadataRepoRemoteService.getMetadata(targetId);
......@@ -1889,7 +1891,6 @@ public class MetadataServiceImpl implements IMetadataService {
String endId = "";
//如果是字段,上升到表,如果是sql,上升到etlscript,其他的模型之间的关系暂不处理
if(sourceId.contains("Column=") && targetId.contains("Column=") ){
Map<String, Object> sourceParent = metadataRepoRemoteService.getParent(sourceId);
Map<String, Object> targetParent = metadataRepoRemoteService.getParent(targetId);
......@@ -1948,9 +1949,10 @@ public class MetadataServiceImpl implements IMetadataService {
endId = (String )targetParent.get("_id");
}
String relationId = startId+"_"+endId;
edgeIdMap.put(relationId,"");
edgeIdMap.put(relationId,description);
}
}
long start = System.currentTimeMillis();
int count=1;
for(Object obj : edgeIdMap.keySet()){
......@@ -1961,7 +1963,13 @@ public class MetadataServiceImpl implements IMetadataService {
String[] dataIds = edgeId.split("_");
String startId = dataIds[0];
String endId = dataIds[1];
relationshipService.saveRelation(startId,endId,"流向");
String description = edgeIdMap.get(obj);
if(description ==null || description.equalsIgnoreCase("")){
relationshipService.saveRelation(startId,endId,"流向");
}else{
relationshipService.saveRelation(startId,endId,"流向",description);
}
}
long end = System.currentTimeMillis();
......
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