Commit 8ee8c8b6 by qiuchaofei

1.添加查询字段id的接口

parent 09ba54ec
package com.keymobile.metadata.metadataRelation.service;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnNode;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnReslult;
import java.util.List;
import java.util.Map;
......@@ -19,4 +20,8 @@ public interface ITableService {
Map<String ,List<ReturnNode>> getchildrenByTableId(String tableId);
String getTableId(String environment, String system, String tableName);
ReturnReslult getQualityData(String columnId);
ReturnReslult getRelationAboutTables(String tableId);
}
......@@ -4,7 +4,10 @@ import com.keymobile.metadata.metadataRelation.config.Neo4jConfig;
import com.keymobile.metadata.metadataRelation.pojo.BaseNode;
import com.keymobile.metadata.metadataRelation.pojo.MetaData;
import com.keymobile.metadata.metadataRelation.pojo.metadata.*;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.MetaModel;
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.remote.DataAssertRemoteService;
import com.keymobile.metadata.metadataRelation.remote.DataQualityReportRemoteService;
import com.keymobile.metadata.metadataRelation.remote.DataStandardRemoteService;
......@@ -14,6 +17,8 @@ import com.keymobile.metadata.metadataRelation.service.ITableService;
import com.keymobile.metadata.metadataRelation.util.Neo4jTool;
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.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -33,6 +38,8 @@ public class TableServiceImpl implements ITableService {
private Neo4jETLJobRepository neo4jETLJobRepository;
@Autowired
private Neo4jFileRepository neo4jFileRepository;
@Autowired
private Neo4jETLScriptRepository neo4jETLScriptRepository;
@Autowired
private DataStandardRemoteService dataStandardRemoteService;
......@@ -166,8 +173,11 @@ public class TableServiceImpl implements ITableService {
if(tableId.startsWith("Table=")){
Neo4jTable neo4jTable = neo4jTableRepository.findNeo4jTableByMetadataId(tableId);
ReturnNode returnNode = new ReturnNode();
if(neo4jTable != null){
returnNode.setId(neo4jTable.getMetadataId());
returnNode.setName(neo4jTable.getName());
}
returnNode.setType("Table");
// 获取属性
......@@ -240,6 +250,228 @@ public class TableServiceImpl implements ITableService {
return returnNodeList;
}
@Override
public ReturnReslult getQualityData(String columnId) {
ReturnReslult returnReslult = new ReturnReslult();
Map<String,ReturnNode> returnNodeMap = new HashMap<>();
Map<String,ReturnEdge> returnEdgeMap = new HashMap<>();
Neo4jConfig neo4jConfig = new Neo4jConfig();
Driver neo4jConnection = neo4jConfig.getNeo4jConnection();
Session session = neo4jConnection.session();
//
String cypher = "match p=(n:Neo4jColumn{metadataId:\""+columnId+"\"})<-[r*0..10]->(m) return p"; // "match (n) where ( n:Neo4jTable or n:Neo4jSchema ) and (n.name=~'(?i).*"+name+".*' or n.name=~'(?i).*"+name+".*') return n skip "+offsetInt+" limit "+countInt;
long starttime = System.currentTimeMillis();
StatementResult result = session.run(cypher);
while(result.hasNext()){
Record record = result.next();
List<Value> values = record.values();
for (Value value : values) {
if (value.type().name().equals("PATH")) {
Path p = value.asPath();
Iterable<Node> nodes = p.nodes();
Map<Long, MetaData> nodesMap = new HashMap<>();
for (Node node : nodes) {
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
// metaDataList.add(data);
ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName());
String[] strings = metaData.getMetadataId().split("=");
String modelName = strings[0];
returnNode.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);
// }
returnNode.setType("MetaData");
returnNodeMap.put(returnNode.getId(),returnNode);
nodesMap.put(node.id(), metaData);
}
Iterable<Relationship> relationships = p.relationships();
for (Relationship relationship : relationships) {
Long startID = relationship.startNodeId();
Long endID = relationship.endNodeId();
String rType = relationship.type();
/**
* asMap 相当于 节点的properties属性信息
*/
// relationship.id();
//
ReturnEdge edge = new ReturnEdge();
String relationName =
nodesMap.get(startID).getMetadataId() + "-" + rType + "-"
+ nodesMap.get(endID).getMetadataId();
edge.setEdgeId(String.valueOf(relationship.id()));
String startMetaId = "";
String endMEtaId = "";
if (nodesMap.containsKey(startID)) {
startMetaId = nodesMap.get(startID).getMetadataId();
}
if (nodesMap.containsKey(endID)) {
endMEtaId = nodesMap.get(endID).getMetadataId();
}
edge.setFromId(startMetaId);
edge.setToId(endMEtaId);
edge.setType(rType);
returnEdgeMap.put(edge.getEdgeId(),edge);
}
}
}
}
for(Object obj:returnNodeMap.keySet()){
ReturnNode returnNode = (ReturnNode)returnNodeMap.get(obj);
returnReslult.getNodes().add(returnNode);
}
for(Object obj:returnEdgeMap.keySet()){
ReturnEdge returnEdge = (ReturnEdge)returnEdgeMap.get(obj);
returnReslult.getEdges().add(returnEdge);
}
return returnReslult;
}
@Override
public ReturnReslult getRelationAboutTables(String tableId) {
ReturnReslult returnReslult = new ReturnReslult();
Map<String,ReturnNode> returnNodeMap = new HashMap<>();
Map<String,ReturnEdge> returnEdgeMap = new HashMap<>();
List<Neo4jTable> targetTableList = new ArrayList<>();
Neo4jTable returnTable = neo4jTableRepository.findNeo4jTableByMetadataId(tableId);
ReturnNode returnTableNode = new ReturnNode();
returnTableNode.setId(returnTable.getMetadataId());
returnTableNode.setName(returnTable.getName());
returnTableNode.setType("Table");
returnReslult.getNodes().add(returnTableNode);
List<BaseNode> targetBaseNodeList = neo4jTableRepository.getTargetTable(tableId);
for(BaseNode targetBaseNode:targetBaseNodeList){
if(targetBaseNode.getMetadataId().startsWith("Table=")){
//是表
Neo4jTable neo4jTable = neo4jTableRepository.findNeo4jTableByMetadataId(targetBaseNode.getMetadataId());
targetTableList.add(neo4jTable);
}else if(targetBaseNode.getMetadataId().startsWith("ETLScript=")){
getTargetRelationAboutTables(targetBaseNode.getMetadataId(),targetTableList);
//不是表,就继续找
}
}
for(Neo4jTable sourceTable:targetTableList){
ReturnNode returnNode = new ReturnNode();
returnNode.setId(sourceTable.getMetadataId());
returnNode.setName(sourceTable.getName());
returnNode.setType("Table");
returnNodeMap.put(sourceTable.getMetadataId(),returnNode);
ReturnEdge returnEdge = new ReturnEdge();
String edgeId = tableId +"_"+returnNode.getId() ;
returnEdge.setEdgeId(edgeId);
returnEdge.setFromId(tableId);
returnEdge.setToId(returnNode.getId() );
returnEdgeMap.put(edgeId,returnEdge);
}
List<Neo4jTable> sourceTableList = new ArrayList<>();
List<BaseNode> sourceBaseNodeList = neo4jTableRepository.getSourceTable(tableId);
for(BaseNode sourceBaseNode:sourceBaseNodeList){
if(sourceBaseNode.getMetadataId().startsWith("Table=")){
//是表
Neo4jTable neo4jTable = neo4jTableRepository.findNeo4jTableByMetadataId(sourceBaseNode.getMetadataId());
sourceTableList.add(neo4jTable);
}else if(sourceBaseNode.getMetadataId().startsWith("ETLScript=")){
getSourceRelationAboutTables(sourceBaseNode.getMetadataId(),sourceTableList);
//不是表,就继续找
}
}
for(Neo4jTable sourceTable:sourceTableList){
ReturnNode returnNode = new ReturnNode();
returnNode.setId(sourceTable.getMetadataId());
returnNode.setName(sourceTable.getName());
returnNode.setType("Table");
returnNodeMap.put(sourceTable.getMetadataId(),returnNode);
ReturnEdge returnEdge = new ReturnEdge();
String edgeId = returnNode.getId()+"_"+tableId;
returnEdge.setEdgeId(edgeId);
returnEdge.setFromId(returnNode.getId());
returnEdge.setToId(tableId);
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 getTargetRelationAboutTables(String metadataId, List<Neo4jTable> targetTableList) {
List<BaseNode> targetNodeList = new ArrayList<>();
if(metadataId.startsWith("ETLScript=")){
targetNodeList = neo4jETLScriptRepository.getTargets(metadataId);
}else if(metadataId.startsWith("File=")){
targetNodeList = neo4jFileRepository.getTargets(metadataId);
}
for(BaseNode targetNode:targetNodeList){
if(targetNode.getMetadataId().startsWith("Table=")){
//是表
Neo4jTable neo4jTable = neo4jTableRepository.findNeo4jTableByMetadataId(targetNode.getMetadataId());
targetTableList.add(neo4jTable);
}else if(targetNode.getMetadataId().startsWith("ETLScript=")){
getTargetRelationAboutTables(targetNode.getMetadataId(),targetTableList);
//不是表,就继续找
}
}
}
private void getSourceRelationAboutTables(String metadataId, List<Neo4jTable> sourceTableList) {
List<BaseNode> sourceBaseNodes = new ArrayList<>();
if(metadataId.startsWith("ETLScript=")){
sourceBaseNodes = neo4jETLScriptRepository.getSources(metadataId);
}else if(metadataId.startsWith("File=")){
sourceBaseNodes = neo4jFileRepository.getSources(metadataId);
}
for(BaseNode sourceBaseNode:sourceBaseNodes){
if(sourceBaseNode.getMetadataId().startsWith("Table=")){
//是表
Neo4jTable neo4jTable = neo4jTableRepository.findNeo4jTableByMetadataId(sourceBaseNode.getMetadataId());
sourceTableList.add(neo4jTable);
}else if(sourceBaseNode.getMetadataId().startsWith("ETLScript=")){
getSourceRelationAboutTables(sourceBaseNode.getMetadataId(),sourceTableList);
//不是表,就继续找
}
}
}
@Override
public Map<String, List<ReturnNode>> autoMatchBySchemaIdAndInputWord(String schemaId, String keyWord) {
logger.info("开始在 "+schemaId+" 下模糊查找:" + keyWord);
......@@ -249,9 +481,16 @@ public class TableServiceImpl implements ITableService {
Session session = neo4jConnection.session();
// match(n) where (n:Neo4jTable or n:Neo4jSchema ) and (n.name =~'.*部门1.*' or n.cnName =~'.*部门1.*') return n
//match (n:MetaData) where n.name=~'(?i).*APP.*' return n
String cypher = // "match (n) where ( n:Neo4jTable or n:Neo4jSchema ) and (n.name=~'(?i).*"+name+".*' or n.name=~'(?i).*"+name+".*') return n skip "+offsetInt+" limit "+countInt;
"match (n:Neo4jSchema{metadataId:\""+schemaId+"\"})-[r:Composition]->(m:Neo4jTable) " +
" where m.name =~'.*"+keyWord+".*' or m.cnName =~'.*"+keyWord+".*' return m ";
String cypher = ""; // "match (n) where ( n:Neo4jTable or n:Neo4jSchema ) and (n.name=~'(?i).*"+name+".*' or n.name=~'(?i).*"+name+".*') return n skip "+offsetInt+" limit "+countInt;
if(schemaId.startsWith("Schema=")){
cypher = "match (n:Neo4jSchema{metadataId:\""+schemaId+"\"})-[r:Composition]->(m:Neo4jTable) " +
" where m.name =~'(?i).*"+keyWord+".*' or m.cnName =~'.*"+keyWord+".*' return m ";
}else if(schemaId.startsWith("Table=")){
cypher = "match (n:Neo4jTable{metadataId:\""+schemaId+"\"})-[r:Composition]->(m:Neo4jColumn) " +
" where m.name =~'(?i).*"+keyWord+".*' or m.cnName =~'.*"+keyWord+".*' return m ";
}
long starttime = System.currentTimeMillis();
StatementResult result = session.run(cypher);
......@@ -327,6 +566,8 @@ public class TableServiceImpl implements ITableService {
}
@Override
public Map<String, List<ReturnNode>> getSourceAndTargetTableByTableId(String tableId) {
Map<String, List<ReturnNode>> sourceAndTargetTable = new HashMap<>();
......
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