Commit 5fb060d1 by qiuchaofei

1.修复代码审核发现的问题。

parent 5079dc66
...@@ -32,7 +32,6 @@ import org.springframework.security.core.userdetails.UserDetails; ...@@ -32,7 +32,6 @@ import org.springframework.security.core.userdetails.UserDetails;
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;
import sun.misc.BASE64Encoder;
@RestController @RestController
@Api(value = "把metadata写入neo4j数据库", tags = "metadata to neo4j") @Api(value = "把metadata写入neo4j数据库", tags = "metadata to neo4j")
...@@ -66,6 +65,8 @@ public class MetaDataController { ...@@ -66,6 +65,8 @@ public class MetaDataController {
@Autowired @Autowired
private IETLJobService etlJobService ; private IETLJobService etlJobService ;
String metadataName = "MetaData";
/** /**
* 获取所有的节点 * 获取所有的节点
*/ */
...@@ -163,8 +164,7 @@ public class MetaDataController { ...@@ -163,8 +164,7 @@ public class MetaDataController {
ReturnReslult returnReslult = new ReturnReslult(); ReturnReslult returnReslult = new ReturnReslult();
int sizeInt = Integer.valueOf(size); int sizeInt = Integer.valueOf(size);
if (StringUtils.isBlank(modelName0)) {
if (modelName0 == null || modelName0.equals("")) {
modelName0 = "Table"; modelName0 = "Table";
} }
if(modelName0.contains(",")){ if(modelName0.contains(",")){
...@@ -181,7 +181,6 @@ public class MetaDataController { ...@@ -181,7 +181,6 @@ public class MetaDataController {
}else if( !modelName0.toLowerCase().equals("all")){ }else if( !modelName0.toLowerCase().equals("all")){
returnReslult = metadataService.findResultByModelName(modelName0,sizeInt); returnReslult = metadataService.findResultByModelName(modelName0,sizeInt);
}else{ }else{
List<MetaData> metaDataList = metadataService.finAllMetaData();
Map<String, ReturnNode> nodeMap = new HashMap<>(); Map<String, ReturnNode> nodeMap = new HashMap<>();
Map<String, String> child2Parent = new HashMap<>(); Map<String, String> child2Parent = new HashMap<>();
...@@ -190,155 +189,168 @@ public class MetaDataController { ...@@ -190,155 +189,168 @@ public class MetaDataController {
Map<String, List<String>> target2Source = new HashMap<>(); Map<String, List<String>> target2Source = new HashMap<>();
Map<String, MetaModel> metaModelMap = new HashMap<>(); Map<String, MetaModel> metaModelMap = new HashMap<>();
for (MetaData metaData : metaDataList) {
ReturnNode node = new ReturnNode();
String[] strings = metaData.getMetadataId().split("=");
String modelName = strings[0];
//如果有system,则虚拟创建一个节点,用来做顶层节点
if (metaData.getSystem() != null && !metaData.getSystem().equals("")) {
String systemName = metaData.getSystem();
ReturnNode systemNode = new ReturnNode();
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);
}
systemNode.setType("MetaData"); getModelMapAndNodeMapFromNeo4j(returnReslult, sizeInt, nodeMap, child2Parent, metaModelMap);
returnReslult.getNodes().add(systemNode); logger.info("节点的数量:" + returnReslult.getNodes().size());
nodeMap.put("" + systemNode.getId(), systemNode); List<BaseRelationship> baseRelationshipList = baseRelationshipService.findAllRelation();
if(nodeMap.size() >= sizeInt){ /**
break; * 分成两部分,一个是组合关系,一个是依赖关系。
} */
getRelationFromBaseRelationShip(child2Parent, parent2Children, source2Target, target2Source, baseRelationshipList);
//专门处理流入 流出的关系
getInputAndOutput(returnReslult, nodeMap, child2Parent, baseRelationshipList);
child2Parent.put("" + metaData.getId(), systemNode.getId()); logger.info("关系的数量:" + returnReslult.getEdges().size());
} returnReslult.setMetaModelMap(metaModelMap);
}
return returnReslult;
}
private void getModelMapAndNodeMapFromNeo4j(ReturnReslult returnReslult, int sizeInt, Map<String, ReturnNode> nodeMap, Map<String, String> child2Parent, Map<String, MetaModel> metaModelMap) {
List<MetaData> metaDataList = metadataService.finAllMetaData();
for (MetaData metaData : metaDataList) {
node.setId(metaData.getMetadataId()); ReturnNode node = new ReturnNode();
node.setIcon(modelName); String[] strings = metaData.getMetadataId().split("=");
if (!metaModelMap.containsKey(modelName)) {
//如果有system,则虚拟创建一个节点,用来做顶层节点
if (metaData.getSystem() != null && !metaData.getSystem().equals("")) {
String systemName = metaData.getSystem();
ReturnNode systemNode = new ReturnNode();
systemNode.setId("catalog=" + systemName);
systemNode.setName(systemName);
String newModelName = "Catalog";
systemNode.setIcon(newModelName);
if (!metaModelMap.containsKey(newModelName)) {
MetaModel model = new MetaModel(); MetaModel model = new MetaModel();
String iconContext = getIconByModelId(modelName); String iconContext = getIconByModelId(newModelName);
model.setModelName(modelName); model.setModelName(newModelName);
model.setCnName(modelName); model.setCnName(newModelName);
model.setDescription(""); model.setDescription("");
model.setIcon(iconContext); model.setIcon(iconContext);
metaModelMap.put(modelName, model); metaModelMap.put(newModelName, model);
} }
node.setName(metaData.getName());
node.setType("MetaData");
returnReslult.getNodes().add(node);
nodeMap.put("" + metaData.getId(), node); systemNode.setType(metadataName);
returnReslult.getNodes().add(systemNode);
nodeMap.put("" + systemNode.getId(), systemNode);
if(nodeMap.size() >= sizeInt){ if(nodeMap.size() >= sizeInt){
break; break;
} }
child2Parent.put("" + metaData.getId(), systemNode.getId());
} }
logger.info("节点的数量:" + returnReslult.getNodes().size()); String modelName = strings[0];
List<BaseRelationship> baseRelationshipList = baseRelationshipService.findAllRelation(); 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(metadataName);
returnReslult.getNodes().add(node);
for (BaseRelationship baseRelationship : baseRelationshipList) { nodeMap.put("" + metaData.getId(), node);
Long startId = baseRelationship.getStart().getId(); if(nodeMap.size() >= sizeInt){
Long endId = baseRelationship.getEnd().getId(); break;
}
}
}
if (baseRelationship.getName().equals("流入") private void getRelationFromBaseRelationShip(Map<String, String> child2Parent, Map<String, List<String>> parent2Children, Map<String, List<String>> source2Target, Map<String, List<String>> target2Source, List<BaseRelationship> baseRelationshipList) {
|| baseRelationship.getName().equals("流出")) { for (BaseRelationship baseRelationship : baseRelationshipList) {
Long startId = baseRelationship.getStart().getId();
Long endId = baseRelationship.getEnd().getId();
if (source2Target.get(startId) != null) { if (baseRelationship.getName().equals("流入")
source2Target.get(startId).add("" + endId); || baseRelationship.getName().equals("流出")) {
} 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("流出")) { 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("流出")) {
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); } else if (baseRelationship.getName().equals("组合")) {
} getChildren2Parent(child2Parent, parent2Children, startId, endId);
}
} }
}
}
//专门处理流入 流出的关系 private void getChildren2Parent(Map<String, String> child2Parent, Map<String, List<String>> parent2Children, Long startId, Long endId) {
for (BaseRelationship baseRelationship : baseRelationshipList) { 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);
}
}
private void getInputAndOutput(ReturnReslult returnReslult, Map<String, ReturnNode> nodeMap, Map<String, String> child2Parent, List<BaseRelationship> baseRelationshipList) {
for (BaseRelationship baseRelationship : baseRelationshipList) {
String startId = baseRelationship.getStart().getId() + ""; String startId = baseRelationship.getStart().getId() + "";
String endId = baseRelationship.getEnd().getId() + ""; String endId = baseRelationship.getEnd().getId() + "";
String startMetaId = ""; String startMetaId = "";
String endMetaId = ""; String endMetaId = "";
if (baseRelationship.getName().equals("流入") if (baseRelationship.getName().equals("流入")
|| baseRelationship.getName().equals("流出")) { || baseRelationship.getName().equals("流出")) {
startId = getParentId("" + startId, child2Parent); startId = getParentId("" + startId, child2Parent);
// if(child2Parent . containsKey(startId)){ // if(child2Parent . containsKey(startId)){
// startId = child2Parent.get(startId); // startId = child2Parent.get(startId);
// } // }
endId = getParentId("" + endId, child2Parent); endId = getParentId("" + endId, child2Parent);
// if(child2Parent . containsKey(endId)){ // if(child2Parent . containsKey(endId)){
// endId = child2Parent.get(endId); // endId = child2Parent.get(endId);
// } // }
if (nodeMap.containsKey("" + startId)) { if (nodeMap.containsKey("" + startId)) {
ReturnNode startNode = nodeMap.get("" + startId); ReturnNode startNode = nodeMap.get("" + startId);
startMetaId = nodeMap.get("" + startId).getId(); startMetaId = nodeMap.get("" + startId).getId();
} }
if (nodeMap.containsKey("" + endId)) {
endMetaId = nodeMap.get("" + endId).getId();
}
if(StringUtils.isNotBlank(startMetaId) &&StringUtils.isNotBlank(endMetaId)){
ReturnEdge edge = new ReturnEdge();
edge.setEdgeId("" + baseRelationship.getId());
edge.setFromId(startMetaId);
edge.setToId(endMetaId);
edge.setType(baseRelationship.getName());
returnReslult.getEdges().add(edge);
}
if (nodeMap.containsKey("" + endId)) {
endMetaId = nodeMap.get("" + endId).getId();
}
if(StringUtils.isNotBlank(startMetaId) &&StringUtils.isNotBlank(endMetaId)){
ReturnEdge edge = new ReturnEdge();
edge.setEdgeId("" + baseRelationship.getId());
edge.setFromId(startMetaId);
edge.setToId(endMetaId);
edge.setType(baseRelationship.getName());
returnReslult.getEdges().add(edge);
} }
}
logger.info("关系的数量:" + returnReslult.getEdges().size()); }
returnReslult.setMetaModelMap(metaModelMap);
} }
return returnReslult;
} }
...@@ -402,7 +414,7 @@ public class MetaDataController { ...@@ -402,7 +414,7 @@ public class MetaDataController {
} }
node.setName(metaData.getName()); node.setName(metaData.getName());
node.setType("MetaData"); node.setType(metadataName);
result.getNodes().add(node); result.getNodes().add(node);
} }
...@@ -483,20 +495,21 @@ public class MetaDataController { ...@@ -483,20 +495,21 @@ public class MetaDataController {
// 图片转化成base64字符串 // 图片转化成base64字符串
public static String GetImageStr(String imgFile) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理 public static String GetImageStr(String imgFile) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
logger.info("存放图标的路径:" + imgFile); logger.info("存放图标的路径:" + imgFile);
InputStream in = null;
byte[] data = null; byte[] data = null;
// 读取图片字节数组 // 读取图片字节数组
try { try ( InputStream in = new FileInputStream(imgFile);
in = new FileInputStream(imgFile); ){
data = new byte[in.available()]; data = new byte[in.available()];
in.read(data); in.read(data);
in.close(); in.close();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
Base64.Encoder base64Encoder = Base64.getEncoder();
return base64Encoder.encodeToString(data);
// 对字节数组Base64编码 // 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder(); // BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);// 返回Base64编码过的字节数组字符串 // return encoder.encode(data);// 返回Base64编码过的字节数组字符串
} }
/** /**
...@@ -548,7 +561,7 @@ public class MetaDataController { ...@@ -548,7 +561,7 @@ public class MetaDataController {
@RequestMapping(path = "/syschroRelationFromMongo", method = RequestMethod.POST) @RequestMapping(path = "/syschroRelationFromMongo", method = RequestMethod.POST)
public String synchroRelationFromMongo(String catalogName) { public String synchroRelationFromMongo(String catalogName) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
LogManager.logInfo(LogConstants.CTX_Relation, "用户 "+ getUserName() + " 在 "+ sdf.format(new Date())+"同步"+catalogName+"的元数据。" ); LogManager.logInfo(LogConstants.CTX_RELATION, "用户 "+ getUserName() + " 在 "+ sdf.format(new Date())+"同步环境:"+catalogName+" 的元数据。" );
logger.info("开始异步迁移元数据:从mongo到neo4j"); logger.info("开始异步迁移元数据:从mongo到neo4j");
String flag = "success"; String flag = "success";
asyncDataFromMongoToNeo4j.asyncDataFromMongoToNeo4j(catalogName); asyncDataFromMongoToNeo4j.asyncDataFromMongoToNeo4j(catalogName);
...@@ -561,7 +574,7 @@ public class MetaDataController { ...@@ -561,7 +574,7 @@ public class MetaDataController {
@RequestMapping(path = "/synchroRelationByJobId", method = RequestMethod.POST) @RequestMapping(path = "/synchroRelationByJobId", method = RequestMethod.POST)
public String synchroRelationByJobId(String catalogName,String jobId) { public String synchroRelationByJobId(String catalogName,String jobId) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
LogManager.logInfo(LogConstants.CTX_Relation, "用户 "+ getUserName() + " 在 "+ sdf.format(new Date())+"同步"+catalogName+" JobId:"+jobId+"的元数据。" ); LogManager.logInfo(LogConstants.CTX_RELATION, "用户 "+ getUserName() + " 在 "+ sdf.format(new Date())+"同步环境:"+catalogName+" JobId:"+jobId+" 的元数据。" );
logger.info("开始异步迁移元数据:从mongo到neo4j"); logger.info("开始异步迁移元数据:从mongo到neo4j");
String flag = "success"; String flag = "success";
......
package com.keymobile.metadata.metadataRelation.controller; package com.keymobile.metadata.metadataRelation.controller;
import com.keymobile.metadata.metadataRelation.config.FeignClientConfig;
import com.keymobile.metadata.metadataRelation.logging.LogConstants; import com.keymobile.metadata.metadataRelation.logging.LogConstants;
import com.keymobile.metadata.metadataRelation.logging.LogManager; import com.keymobile.metadata.metadataRelation.logging.LogManager;
import com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jSchema;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnNode; 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.remote.DataAssertRemoteService;
import com.keymobile.metadata.metadataRelation.remote.DataStandardRemoteService; import com.keymobile.metadata.metadataRelation.remote.DataStandardRemoteService;
import com.keymobile.metadata.metadataRelation.remote.TagRemoteService; import com.keymobile.metadata.metadataRelation.remote.TagRemoteService;
import com.keymobile.metadata.metadataRelation.service.*; import com.keymobile.metadata.metadataRelation.service.*;
import com.keymobile.metadata.metadataRelation.service.impl.SystemServiceImpl;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import net.sf.json.JSONObject;
import org.apache.catalina.security.SecurityConfig;
import org.apache.commons.lang3.time.DateUtils;
import org.hibernate.loader.custom.Return;
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;
...@@ -26,7 +18,6 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -26,7 +18,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.sql.SQLOutput;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
...@@ -66,6 +57,9 @@ public class RelationalGraphController { ...@@ -66,6 +57,9 @@ public class RelationalGraphController {
@Autowired @Autowired
private TagRemoteService tagRemoteService; private TagRemoteService tagRemoteService;
private String etlJobModelName = "ETLJob=";
private String tableModelName = "Table=";
private String etlScriptModelName = "ETLScript=";
//测试标准的接口 //测试标准的接口
@ApiOperation(tags = "", value = "测试标准的接口") @ApiOperation(tags = "", value = "测试标准的接口")
@RequestMapping(path = "/testDataAssertRemoteService", method = RequestMethod.GET) @RequestMapping(path = "/testDataAssertRemoteService", method = RequestMethod.GET)
...@@ -197,11 +191,11 @@ public class RelationalGraphController { ...@@ -197,11 +191,11 @@ public class RelationalGraphController {
@RequestMapping(path = "/getAttributeByMetadataId", method = RequestMethod.GET) @RequestMapping(path = "/getAttributeByMetadataId", method = RequestMethod.GET)
public Map<String,String> getAttributeByMetadataId(String metadataId){ public Map<String,String> getAttributeByMetadataId(String metadataId){
Map<String,String> attributeMap = new HashMap<>(); Map<String,String> attributeMap = new HashMap<>();
if(metadataId.startsWith("Table=")){ if(metadataId.startsWith(tableModelName)){
attributeMap = tableService.getAttributeByTableId(metadataId); attributeMap = tableService.getAttributeByTableId(metadataId);
} else if(metadataId.startsWith("ETLJob=")){ } else if(metadataId.startsWith(etlJobModelName)){
attributeMap = etlJobService.getAttributeByETLJobId(metadataId); attributeMap = etlJobService.getAttributeByETLJobId(metadataId);
}else if(metadataId.startsWith("ETLScript=")) { }else if(metadataId.startsWith(etlScriptModelName)) {
attributeMap = etlScriptService.getAttributeByETLScriptId(metadataId); attributeMap = etlScriptService.getAttributeByETLScriptId(metadataId);
}else { }else {
attributeMap = metadataService.getMetaDataByMetadataId(metadataId); attributeMap = metadataService.getMetaDataByMetadataId(metadataId);
...@@ -218,9 +212,9 @@ public class RelationalGraphController { ...@@ -218,9 +212,9 @@ public class RelationalGraphController {
public Map<String, List<ReturnNode>> getChildren(String metadataId,String size) { public Map<String, List<ReturnNode>> getChildren(String metadataId,String size) {
logger.info("传入的元数据Id是:"+metadataId); logger.info("传入的元数据Id是:"+metadataId);
Map<String ,List<ReturnNode>> returnNodeMap = new HashMap<>(); Map<String ,List<ReturnNode>> returnNodeMap = new HashMap<>();
if(metadataId.startsWith("Table=")){ if(metadataId.startsWith(tableModelName)){
returnNodeMap = tableService.getchildrenByTableId(metadataId); returnNodeMap = tableService.getchildrenByTableId(metadataId);
}else if(metadataId.startsWith("ETLJob=")) { }else if(metadataId.startsWith(etlJobModelName)) {
returnNodeMap = etlJobService.getchildrenByEtlJobId(metadataId); returnNodeMap = etlJobService.getchildrenByEtlJobId(metadataId);
} }
return returnNodeMap; return returnNodeMap;
...@@ -248,15 +242,15 @@ public class RelationalGraphController { ...@@ -248,15 +242,15 @@ public class RelationalGraphController {
@RequestMapping(path = "/getRelationTablesTableId", method = RequestMethod.GET) @RequestMapping(path = "/getRelationTablesTableId", method = RequestMethod.GET)
public Map<String,List<ReturnNode>> getRelationTablesTableId(String tableId){ public Map<String,List<ReturnNode>> getRelationTablesTableId(String tableId){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
LogManager.logInfo(LogConstants.CTX_Relation, "用户 "+ getUserName() + " 在 "+ sdf.format(new Date()) + " 查看了 "+tableId+"的全链分析" ); LogManager.logInfo(LogConstants.CTX_RELATION, "用户 "+ getUserName() + " 在 "+ sdf.format(new Date()) + " 查看了 "+tableId+"的全链分析" );
Map<String, List<ReturnNode>> relationTables = new HashMap<>(); Map<String, List<ReturnNode>> relationTables = new HashMap<>();
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
if(tableId.startsWith("Table=")){ if(tableId.startsWith(tableModelName)){
relationTables = tableService.getSourceAndTargetTableByTableId (tableId); relationTables = tableService.getSourceAndTargetTableByTableId (tableId);
}else if(tableId.startsWith("ETLJob=")){ }else if(tableId.startsWith(etlJobModelName)){
relationTables = etlJobService.getSourceAndTargetObjectByMedataDataId (tableId); relationTables = etlJobService.getSourceAndTargetObjectByMedataDataId (tableId);
}else if(tableId.startsWith("ETLScript=")){ }else if(tableId.startsWith(etlScriptModelName)){
relationTables = etlScriptService.getSourceAndTargetObjectByMedataDataId (tableId); relationTables = etlScriptService.getSourceAndTargetObjectByMedataDataId (tableId);
}else if(tableId.startsWith("File=")){ }else if(tableId.startsWith("File=")){
relationTables = fileService.getSourceAndTargetObjectByMedataDataId (tableId); relationTables = fileService.getSourceAndTargetObjectByMedataDataId (tableId);
...@@ -287,7 +281,7 @@ public class RelationalGraphController { ...@@ -287,7 +281,7 @@ public class RelationalGraphController {
@RequestMapping(path = "/getRelationObjectByTableId", method = RequestMethod.GET) @RequestMapping(path = "/getRelationObjectByTableId", method = RequestMethod.GET)
public Map<String,List<ReturnNode>> getRelationObjectByTableId(String tableId){ public Map<String,List<ReturnNode>> getRelationObjectByTableId(String tableId){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
LogManager.logInfo(LogConstants.CTX_Relation, "用户 "+ getUserName() + " 在 "+ sdf.format(new Date()) + " 查看了 "+tableId+"的关系分析" ); LogManager.logInfo(LogConstants.CTX_RELATION, "用户 "+ getUserName() + " 在 "+ sdf.format(new Date()) + " 查看了 "+tableId+"的关系分析" );
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
Map<String, List<ReturnNode>> relationObjects = tableService.getRelationObjectByTableId (tableId); Map<String, List<ReturnNode>> relationObjects = tableService.getRelationObjectByTableId (tableId);
...@@ -346,14 +340,14 @@ public class RelationalGraphController { ...@@ -346,14 +340,14 @@ public class RelationalGraphController {
@ApiOperation(tags = "", value = "传入环境id,系统名,schema名,表名,获取表id") @ApiOperation(tags = "", value = "传入环境id,系统名,schema名,表名,获取表id")
@RequestMapping(path = "/getTableIdByEnvironmentSystemTableName", method = RequestMethod.GET) @RequestMapping(path = "/getTableIdByEnvironmentSystemTableName", method = RequestMethod.GET)
public String getTableIdByEnvironmentSystemTableName(String environment,String system,String tableName){ public String getTableIdByEnvironmentSystemTableName(String environment,String system,String tableName){
logger.info("获取表id。"); logger.info("获取环境id:"+environment +" ;系统:" + system+ " ;table:"+tableName);
return tableService.getTableId(environment,system,tableName); return tableService.getTableId(environment,system,tableName);
} }
@ApiOperation(tags = "", value = "传入质量相关的字段id,返回与该字段id有关系的字段,表,数据库,系统") @ApiOperation(tags = "", value = "传入质量相关的字段id,返回与该字段id有关系的字段,表,数据库,系统")
@RequestMapping(path = "/getQualityDataRelations", method = RequestMethod.GET) @RequestMapping(path = "/getQualityDataRelations", method = RequestMethod.GET)
public ReturnReslult getQualityDataRelations(String columnId){ public ReturnReslult getQualityDataRelations(String columnId){
logger.info("获取表id。"+columnId); logger.info("传入的字段id:"+columnId);
return tableService.getQualityData(columnId); return tableService.getQualityData(columnId);
} }
......
package com.keymobile.metadata.metadataRelation.logging; package com.keymobile.metadata.metadataRelation.logging;
public interface LogConstants { public final class LogConstants {
public static final String CTX_Relation = "metadata.relation"; public static final String CTX_RELATION = "metadata.relation";
// public static final String CTX_HARVESTERTASK = "harvester.HARVESTERTASK";
// public static final String CTX_TASKSCHEDULE = "harvester.TASKSCHEDULE";
// public static final String CTX_TASKEXTRACTDETAIL = "harvester.TASKEXTRACTDETAIL";
} }
...@@ -14,6 +14,8 @@ import org.springframework.stereotype.Service; ...@@ -14,6 +14,8 @@ import org.springframework.stereotype.Service;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
@Service @Service
@EnableAsync @EnableAsync
...@@ -26,6 +28,8 @@ public class AsyncDataFromMongoToNeo4j { ...@@ -26,6 +28,8 @@ public class AsyncDataFromMongoToNeo4j {
private IMetadataRelationService metadataRelationService; private IMetadataRelationService metadataRelationService;
@Autowired @Autowired
private AsyncRelation asyncRelation ;
@Autowired
private JdbcTemplate jdbcTemplate; private JdbcTemplate jdbcTemplate;
//定时同步数据, //定时同步数据,
...@@ -44,9 +48,9 @@ public class AsyncDataFromMongoToNeo4j { ...@@ -44,9 +48,9 @@ public class AsyncDataFromMongoToNeo4j {
return user; return user;
} }
}); });
for(MongoData scope:scopeList){ // for(MongoData scope:scopeList){
// asyncDataFromMongoToNeo4j(scope.get_id()); // asyncDataFromMongoToNeo4j(scope.get_id());
} // }
} }
...@@ -71,7 +75,7 @@ public class AsyncDataFromMongoToNeo4j { ...@@ -71,7 +75,7 @@ public class AsyncDataFromMongoToNeo4j {
metadataService.syschroMetadataFromMongo(catalogName,mongoDataList); metadataService.syschroMetadataFromMongo(catalogName,mongoDataList);
//再同步元数据的横向关系 //再同步元数据的横向关系
metadataService.syschroTable2EtlJobRelations(catalogName); // metadataService.syschroTable2EtlJobRelations(catalogName);
//同步1104报表 //同步1104报表
// metadataService.syschro1104Relations(catalogName); // metadataService.syschro1104Relations(catalogName);
...@@ -84,13 +88,23 @@ public class AsyncDataFromMongoToNeo4j { ...@@ -84,13 +88,23 @@ public class AsyncDataFromMongoToNeo4j {
long end = System.currentTimeMillis(); long end = System.currentTimeMillis();
logger.info("同步数据完成,用时:"+(end-start)); logger.info("同步数据完成,用时:"+(end-start));
} }
@Async @Async
public void asyncJobFromMongo2Neo4j(String catalogName,String jobId) { public void asyncJobFromMongo2Neo4j(String catalogName,String jobId) {
CompletableFuture<String> future = asyncRelation.asyncJobFromMongo2Neo4j(catalogName, jobId);
try {
String message = future.get();
System.out.println("message:"+message);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
//先按照环境id,作业id,删除关系,然后同步关系, //先按照环境id,作业id,删除关系,然后同步关系,
// 一般来说,关系的字段已经存在neo4j,但是sql不一定存在, // 一般来说,关系的字段已经存在neo4j,但是sql不一定存在,
// 如果sql不存在,需要先同步sql ,srcipt,job,再建立关系。 // 如果sql不存在,需要先同步sql ,srcipt,job,再建立关系。
metadataRelationService.deleteRelationByJobId(catalogName,jobId); // metadataRelationService.deleteRelationByJobId(catalogName,jobId);
metadataRelationService.syschroRelationFromMongo(catalogName,jobId); // metadataRelationService.syschroRelationFromMongo(catalogName,jobId);
} }
} }
package com.keymobile.metadata.metadataRelation.service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Service;
import java.util.concurrent.CompletableFuture;
@Service
public class AsyncRelation {
private static final Logger logger = LoggerFactory.getLogger(AsyncRelation.class);
public synchronized CompletableFuture<String> asyncJobFromMongo2Neo4j(String catalogName, String jobId) {
logger.info("开始异步 同步数据,catalog="+catalogName + " jobId="+jobId);
//先按照环境id,作业id,删除关系,然后同步关系,
// 一般来说,关系的字段已经存在neo4j,但是sql不一定存在,
// 如果sql不存在,需要先同步sql ,srcipt,job,再建立关系。
// metadataRelationService.deleteRelationByJobId(catalogName,jobId);
// metadataRelationService.syschroRelationFromMongo(catalogName,jobId);
return CompletableFuture.completedFuture("同步 环境="+catalogName+" jobId="+jobId+"完成。");
}
}
...@@ -191,7 +191,7 @@ public class BaseRelationshipServiceImpl implements IBaseRelationshipService { ...@@ -191,7 +191,7 @@ public class BaseRelationshipServiceImpl implements IBaseRelationshipService {
// (m{metadataId:"Table=1=d644b631fa8c434e928bcd1f1665b060"}) // (m{metadataId:"Table=1=d644b631fa8c434e928bcd1f1665b060"})
// create (n)<-[r:Composition]-(m) // create (n)<-[r:Composition]-(m)
// return n,m,r // return n,m,r
String cypher = " match (n{metadataId:\""+startId+"\"}),(m{metadataId:\""+endId+"\"}) merge (n)-[r:"+relationType+"]->(m) set r.jobId ="+jobId; String cypher = " match ( n {metadataId:\""+startId+"\"}),(m { metadataId:\""+endId+"\"}) merge (n)-[r:"+relationType+"]->(m) set r.jobId ="+jobId;
// logger.info("运行保存关系完成:" + cypher); // logger.info("运行保存关系完成:" + cypher);
session.run(cypher); session.run(cypher);
...@@ -202,12 +202,12 @@ public class BaseRelationshipServiceImpl implements IBaseRelationshipService { ...@@ -202,12 +202,12 @@ public class BaseRelationshipServiceImpl implements IBaseRelationshipService {
Neo4jConfig neo4jConfig = new Neo4jConfig(); Neo4jConfig neo4jConfig = new Neo4jConfig();
Driver neo4jConnection = neo4jConfig.getNeo4jConnection(); Driver neo4jConnection = neo4jConfig.getNeo4jConnection();
Session session = neo4jConnection.session(); Session session = neo4jConnection.session();
// match (n{metadataId:"Column=1=d9c2d67e56a3428e8e4f22918782437f"}), // match (n { metadataId:"Column=1=0c8a3201eaf349918363471496c19a96"}),
// (m{metadataId:"Table=1=d644b631fa8c434e928bcd1f1665b060"}) // ( m { metadataId:"SQL=1=b33fc95c948a43d7af504632bf6e7641"} )
// create (n)<-[r:Composition]-(m) // merge (n)-[r:流向]->(m)
// return n,m,r // set r={jobId:"0",descriptio:"0" }
String cypher = " match (n{metadataId:\""+startId+"\"}),(m{metadataId:\""+endId+"\"}) " + String cypher = "match (n { metadataId:\""+startId+"\"}), ( m { metadataId:\""+endId+"\"} ) " +
"merge (n)-[r:"+relationType+"]->(m) set r.jobId ="+description + " and r.description = "+ description; "merge (n)-[r:"+relationType+"]->(m) set r = {jobId:"+jobId+",description:"+description+" }";// set r.jobId ="+description + " and r.description = "+ description;
// logger.info("运行保存关系完成:" + cypher); // logger.info("运行保存关系完成:" + cypher);
session.run(cypher); session.run(cypher);
......
...@@ -20,6 +20,10 @@ public class ColumnServiceImpl implements IColumnService { ...@@ -20,6 +20,10 @@ public class ColumnServiceImpl implements IColumnService {
@Autowired @Autowired
private Neo4jColumnRepository neo4jColumnRepository; private Neo4jColumnRepository neo4jColumnRepository;
private String columnModelName = "Column";
private String columnModelEqual = "Column=";
private String etlSqlModelEqual = "ETLSql=";
@Override @Override
public ReturnReslult getRelationAboutColumn(String columnId) { public ReturnReslult getRelationAboutColumn(String columnId) {
ReturnReslult returnReslult = new ReturnReslult(); ReturnReslult returnReslult = new ReturnReslult();
...@@ -32,15 +36,15 @@ public class ColumnServiceImpl implements IColumnService { ...@@ -32,15 +36,15 @@ public class ColumnServiceImpl implements IColumnService {
ReturnNode returnColumn = new ReturnNode(); ReturnNode returnColumn = new ReturnNode();
returnColumn.setId(neo4jColumn.getMetadataId()); returnColumn.setId(neo4jColumn.getMetadataId());
returnColumn.setName(neo4jColumn.getName()); returnColumn.setName(neo4jColumn.getName());
returnColumn.setType("Column"); returnColumn.setType(columnModelName);
returnReslult.getNodes().add(returnColumn); returnReslult.getNodes().add(returnColumn);
List<BaseNode> targetBaseNodeList = neo4jColumnRepository.getTargetColumn(columnId); List<BaseNode> targetBaseNodeList = neo4jColumnRepository.getTargetColumn(columnId);
for(BaseNode targetBaseNode:targetBaseNodeList){ for(BaseNode targetBaseNode:targetBaseNodeList){
if(targetBaseNode.getMetadataId().startsWith("Column=")){ if(targetBaseNode.getMetadataId().startsWith(columnModelEqual)){
//是字段 //是字段
targetNodeList.add(targetBaseNode); targetNodeList.add(targetBaseNode);
}else if(targetBaseNode.getMetadataId().startsWith("ETLSql=")){ }else if(targetBaseNode.getMetadataId().startsWith(etlSqlModelEqual)){
getTargetRelationAboutColumns(targetBaseNode.getMetadataId(),targetNodeList); getTargetRelationAboutColumns(targetBaseNode.getMetadataId(),targetNodeList);
//不是字段,就继续找 //不是字段,就继续找
} }
...@@ -50,7 +54,7 @@ public class ColumnServiceImpl implements IColumnService { ...@@ -50,7 +54,7 @@ public class ColumnServiceImpl implements IColumnService {
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(sourceNode.getMetadataId()); returnNode.setId(sourceNode.getMetadataId());
returnNode.setName(sourceNode.getName()); returnNode.setName(sourceNode.getName());
returnNode.setType("Column"); returnNode.setType(columnModelName);
returnNodeMap.put(sourceNode.getMetadataId(),returnNode); returnNodeMap.put(sourceNode.getMetadataId(),returnNode);
ReturnEdge returnEdge = new ReturnEdge(); ReturnEdge returnEdge = new ReturnEdge();
...@@ -64,10 +68,10 @@ public class ColumnServiceImpl implements IColumnService { ...@@ -64,10 +68,10 @@ public class ColumnServiceImpl implements IColumnService {
List<BaseNode> sourceNodeList = new ArrayList<>(); List<BaseNode> sourceNodeList = new ArrayList<>();
List<BaseNode> sourceBaseNodeList = neo4jColumnRepository.getSourceColumn(columnId); List<BaseNode> sourceBaseNodeList = neo4jColumnRepository.getSourceColumn(columnId);
for(BaseNode sourceBaseNode:sourceBaseNodeList){ for(BaseNode sourceBaseNode:sourceBaseNodeList){
if(sourceBaseNode.getMetadataId().startsWith("Column=")){ if(sourceBaseNode.getMetadataId().startsWith(columnModelEqual)){
//是字段 //是字段
sourceNodeList.add(sourceBaseNode); sourceNodeList.add(sourceBaseNode);
}else if(sourceBaseNode.getMetadataId().startsWith("ETLSql=")){ }else if(sourceBaseNode.getMetadataId().startsWith(etlSqlModelEqual)){
getSourceRelationAboutColumns(sourceBaseNode.getMetadataId(),sourceNodeList); getSourceRelationAboutColumns(sourceBaseNode.getMetadataId(),sourceNodeList);
//不是字段,就继续找 //不是字段,就继续找
} }
...@@ -77,7 +81,7 @@ public class ColumnServiceImpl implements IColumnService { ...@@ -77,7 +81,7 @@ public class ColumnServiceImpl implements IColumnService {
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(sourceNode.getMetadataId()); returnNode.setId(sourceNode.getMetadataId());
returnNode.setName(sourceNode.getName()); returnNode.setName(sourceNode.getName());
returnNode.setType("Column"); returnNode.setType(columnModelName);
returnNodeMap.put(sourceNode.getMetadataId(),returnNode); returnNodeMap.put(sourceNode.getMetadataId(),returnNode);
ReturnEdge returnEdge = new ReturnEdge(); ReturnEdge returnEdge = new ReturnEdge();
...@@ -101,16 +105,16 @@ public class ColumnServiceImpl implements IColumnService { ...@@ -101,16 +105,16 @@ public class ColumnServiceImpl implements IColumnService {
private void getSourceRelationAboutColumns(String metadataId, List<BaseNode> sourceReturnNodeList) { private void getSourceRelationAboutColumns(String metadataId, List<BaseNode> sourceReturnNodeList) {
List<BaseNode> sourceNodeList = new ArrayList<>(); List<BaseNode> sourceNodeList = new ArrayList<>();
if(metadataId.startsWith("ETLSql=")){ if(metadataId.startsWith(etlSqlModelEqual)){
sourceNodeList = neo4jColumnRepository.getSourceColumn(metadataId); sourceNodeList = neo4jColumnRepository.getSourceColumn(metadataId);
}else if(metadataId.startsWith("File=")){ }else if(metadataId.startsWith("File=")){
// targetNodeList = neo4jFileRepository.getTargets(metadataId); // targetNodeList = neo4jFileRepository.getTargets(metadataId);
} }
for(BaseNode sourceNode:sourceNodeList){ for(BaseNode sourceNode:sourceNodeList){
if(sourceNode.getMetadataId().startsWith("Column=")){ if(sourceNode.getMetadataId().startsWith(columnModelEqual)){
//是表 //是表
sourceReturnNodeList.add(sourceNode); sourceReturnNodeList.add(sourceNode);
}else if(sourceNode.getMetadataId().startsWith("ETLSql=")){ }else if(sourceNode.getMetadataId().startsWith(etlSqlModelEqual)){
getSourceRelationAboutColumns(sourceNode.getMetadataId(),sourceReturnNodeList); getSourceRelationAboutColumns(sourceNode.getMetadataId(),sourceReturnNodeList);
//不是表,就继续找 //不是表,就继续找
} }
...@@ -119,16 +123,16 @@ public class ColumnServiceImpl implements IColumnService { ...@@ -119,16 +123,16 @@ public class ColumnServiceImpl implements IColumnService {
private void getTargetRelationAboutColumns(String metadataId, List<BaseNode> returnNodeList) { private void getTargetRelationAboutColumns(String metadataId, List<BaseNode> returnNodeList) {
List<BaseNode> targetNodeList = new ArrayList<>(); List<BaseNode> targetNodeList = new ArrayList<>();
if(metadataId.startsWith("ETLSql=")){ if(metadataId.startsWith(etlSqlModelEqual)){
targetNodeList = neo4jColumnRepository.getTargetColumn(metadataId); targetNodeList = neo4jColumnRepository.getTargetColumn(metadataId);
}else if(metadataId.startsWith("File=")){ }else if(metadataId.startsWith("File=")){
// targetNodeList = neo4jFileRepository.getTargets(metadataId); // targetNodeList = neo4jFileRepository.getTargets(metadataId);
} }
for(BaseNode targetNode:targetNodeList){ for(BaseNode targetNode:targetNodeList){
if(targetNode.getMetadataId().startsWith("Column=")){ if(targetNode.getMetadataId().startsWith(columnModelEqual)){
//是表 //是表
returnNodeList.add(targetNode); returnNodeList.add(targetNode);
}else if(targetNode.getMetadataId().startsWith("ETLSql=")){ }else if(targetNode.getMetadataId().startsWith(etlSqlModelEqual)){
getTargetRelationAboutColumns(targetNode.getMetadataId(),returnNodeList); getTargetRelationAboutColumns(targetNode.getMetadataId(),returnNodeList);
//不是表,就继续找 //不是表,就继续找
} }
......
...@@ -27,6 +27,7 @@ public class ETLJobServiceImpl implements IETLJobService { ...@@ -27,6 +27,7 @@ public class ETLJobServiceImpl implements IETLJobService {
return null; return null;
} }
private String tableModelName = "Table";
@Override @Override
public Map<String, String> getAttributeByETLJobId(String tableId) { public Map<String, String> getAttributeByETLJobId(String tableId) {
Map<String,String> attributeMap = getAttributeMap(tableId); Map<String,String> attributeMap = getAttributeMap(tableId);
...@@ -84,7 +85,7 @@ public class ETLJobServiceImpl implements IETLJobService { ...@@ -84,7 +85,7 @@ public class ETLJobServiceImpl implements IETLJobService {
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(baseNode.getMetadataId()); returnNode.setId(baseNode.getMetadataId());
returnNode.setName(baseNode.getName()); returnNode.setName(baseNode.getName());
returnNode.setType("Table"); returnNode.setType(tableModelName);
// 获取属性 // 获取属性
// Map<String,String> attributeMap = getAttributeMap(metadataId); // Map<String,String> attributeMap = getAttributeMap(metadataId);
// List<BaseNode> sourceEtlScriptBetween2TableList = neo4jTableRepository.getSourceEtlScriptBetween2Table(tableId, metadataId); // List<BaseNode> sourceEtlScriptBetween2TableList = neo4jTableRepository.getSourceEtlScriptBetween2Table(tableId, metadataId);
...@@ -115,7 +116,7 @@ public class ETLJobServiceImpl implements IETLJobService { ...@@ -115,7 +116,7 @@ public class ETLJobServiceImpl implements IETLJobService {
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(baseNode.getMetadataId()); returnNode.setId(baseNode.getMetadataId());
returnNode.setName(baseNode.getName()); returnNode.setName(baseNode.getName());
returnNode.setType("Table"); returnNode.setType(tableModelName);
// 获取属性 // 获取属性
// Map<String,String> attributeMap = getAttributeMap(metadataId); // Map<String,String> attributeMap = getAttributeMap(metadataId);
// List<BaseNode> sourceEtlScriptBetween2TableList = neo4jTableRepository.getSourceEtlScriptBetween2Table(tableId, metadataId); // List<BaseNode> sourceEtlScriptBetween2TableList = neo4jTableRepository.getSourceEtlScriptBetween2Table(tableId, metadataId);
...@@ -144,7 +145,7 @@ public class ETLJobServiceImpl implements IETLJobService { ...@@ -144,7 +145,7 @@ public class ETLJobServiceImpl implements IETLJobService {
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(neo4jETLJob.getMetadataId()); returnNode.setId(neo4jETLJob.getMetadataId());
returnNode.setName(neo4jETLJob.getName()); returnNode.setName(neo4jETLJob.getName());
returnNode.setType("Table"); returnNode.setType(tableModelName);
returnTableList.add(returnNode); returnTableList.add(returnNode);
// 获取属性 // 获取属性
// Map<String,String> attributeMap = getAttributeMap(tableId); // Map<String,String> attributeMap = getAttributeMap(tableId);
......
...@@ -19,6 +19,10 @@ public class ETLScriptServiceImpl implements IETLScriptService { ...@@ -19,6 +19,10 @@ public class ETLScriptServiceImpl implements IETLScriptService {
@Autowired @Autowired
private MetadataRepoRemoteService metadataRepoRemoteService; private MetadataRepoRemoteService metadataRepoRemoteService;
private String tableModelName = "Table=";
private String etlScriptModelName = "ETLScript";
@Autowired @Autowired
Neo4jETLScriptRepository neo4jETLScriptRepository; Neo4jETLScriptRepository neo4jETLScriptRepository;
@Override @Override
...@@ -50,14 +54,14 @@ public class ETLScriptServiceImpl implements IETLScriptService { ...@@ -50,14 +54,14 @@ public class ETLScriptServiceImpl implements IETLScriptService {
List<BaseNode> sourceBaseNodeList = neo4jETLScriptRepository.getTargets(scriptId); List<BaseNode> sourceBaseNodeList = neo4jETLScriptRepository.getTargets(scriptId);
for(BaseNode baseNode:sourceBaseNodeList){ for(BaseNode baseNode:sourceBaseNodeList){
String metadataId = baseNode.getMetadataId(); String metadataId = baseNode.getMetadataId();
if(metadataId.startsWith("Table=")||metadataId.startsWith("ETLScript=")){ if(metadataId.startsWith(tableModelName)||metadataId.startsWith("ETLScript=")){
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(baseNode.getMetadataId()); returnNode.setId(baseNode.getMetadataId());
returnNode.setName(baseNode.getName()); returnNode.setName(baseNode.getName());
if(metadataId.startsWith("Table=")){ if(metadataId.startsWith(tableModelName)){
returnNode.setType("Table"); returnNode.setType("Table");
}else { }else {
returnNode.setType("ETLScript"); returnNode.setType(etlScriptModelName);
} }
// 获取属性 // 获取属性
// Map<String,String> attributeMap = getAttributeMap(metadataId); // Map<String,String> attributeMap = getAttributeMap(metadataId);
...@@ -85,14 +89,14 @@ public class ETLScriptServiceImpl implements IETLScriptService { ...@@ -85,14 +89,14 @@ public class ETLScriptServiceImpl implements IETLScriptService {
List<BaseNode> sourceBaseNodeList = neo4jETLScriptRepository.getSources(scriptId); List<BaseNode> sourceBaseNodeList = neo4jETLScriptRepository.getSources(scriptId);
for(BaseNode baseNode:sourceBaseNodeList){ for(BaseNode baseNode:sourceBaseNodeList){
String metadataId = baseNode.getMetadataId(); String metadataId = baseNode.getMetadataId();
if(metadataId.startsWith("Table=")||metadataId.startsWith("ETLScript=")){ if(metadataId.startsWith(tableModelName)||metadataId.startsWith("ETLScript=")){
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(baseNode.getMetadataId()); returnNode.setId(baseNode.getMetadataId());
returnNode.setName(baseNode.getName()); returnNode.setName(baseNode.getName());
if(metadataId.startsWith("Table=")){ if(metadataId.startsWith(tableModelName)){
returnNode.setType("Table"); returnNode.setType("Table");
}else { }else {
returnNode.setType("ETLScript"); returnNode.setType(etlScriptModelName);
} }
// 获取属性 // 获取属性
// Map<String,String> attributeMap = getAttributeMap(metadataId); // Map<String,String> attributeMap = getAttributeMap(metadataId);
...@@ -122,7 +126,7 @@ public class ETLScriptServiceImpl implements IETLScriptService { ...@@ -122,7 +126,7 @@ public class ETLScriptServiceImpl implements IETLScriptService {
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(neo4jETLScript.getMetadataId()); returnNode.setId(neo4jETLScript.getMetadataId());
returnNode.setName(neo4jETLScript.getName()); returnNode.setName(neo4jETLScript.getName());
returnNode.setType("ETLScript"); returnNode.setType(etlScriptModelName);
returnTableList.add(returnNode); returnTableList.add(returnNode);
// 获取属性 // 获取属性
// Map<String,String> attributeMap = getAttributeMap(tableId); // Map<String,String> attributeMap = getAttributeMap(tableId);
......
...@@ -57,46 +57,21 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService { ...@@ -57,46 +57,21 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService {
@Autowired @Autowired
private IBaseRelationshipService relationshipService; private IBaseRelationshipService relationshipService;
private String FORWARD = "forward";
private String BACKWARD = "backward";
private String tableModelName = "Table=";
private String etlJobModelName = "ETLJob=";
private String etlScriptModelName = "ETLScript=";
private String columnModelEqual = "Column=";
@Override @Override
public ReturnReslult expandNodeByMetadataId(String metadataId, String direction){ public ReturnReslult expandNodeByMetadataId(String metadataId, String direction){
//方向有,forward,backword,all //方向有,forward,backword,all
logger.info("开始展开节点,元数据id:"+metadataId); logger.info("开始展开节点,元数据id:"+metadataId);
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
String directionNeo4j = ""; String directionNeo4j = getDirect(direction);
if(direction.equals("forward")){
directionNeo4j = "-[r:流向]->";
}else if(direction.equals("backward")){
directionNeo4j = "<-[r:流向]-";
}else if(direction.equals("all")){
directionNeo4j = "<-[r:流向]->";
}
ReturnReslult returnReslult = new ReturnReslult(); ReturnReslult returnReslult = new ReturnReslult();
//区分是表,还是job、script、sql,再调用相应的展开接口 //区分是表,还是job、script、sql,再调用相应的展开接口
String cypher = ""; String cypher = getCypher(metadataId, direction, directionNeo4j);
if(metadataId.startsWith("Table=")){
cypher = " match p=(n:Neo4jTable {metadataId:\""+metadataId+"\"})"+directionNeo4j+"(m) return p ";
}else if(metadataId.startsWith("ETLJob=")){
cypher = " match p=(n:Neo4jETLJob {metadataId:\""+metadataId+"\"})"+directionNeo4j+"(m) return p "
+ "union match p=(n:Neo4jETLJob {metadataId:\""+metadataId+"\"}) -[r:Composition]->(m) return p ";
}else if(metadataId.startsWith("ETLScript=")){
if(direction.equals("forward")){
cypher = " match (n:Neo4jETLScript {metadataId:\""+metadataId+"\"})"+directionNeo4j+"(m) return m "
+" union match (n:Neo4jETLScript{metadataId:\""+metadataId+"\"})-[r0:TempRelation*1..]-> (m) return m"
;
}else if(direction.equals("backward")){
cypher = " match (n:Neo4jETLScript {metadataId:\""+metadataId+"\"})"+directionNeo4j+"(m) return m "
+" union match (n:Neo4jETLScript{metadataId:\""+metadataId+"\"})<-[r0:TempRelation*1..]- (m) return m"
;
}
// + "union match p=(n:Neo4jETLScript {metadataId:\""+metadataId+"\"}) <-[r:Composition]->(m) return p ";
}else if(metadataId.startsWith("SQL=")){
cypher="match p=(n:Neo4jETLSql {metadataId:\""+metadataId+"\"}) <-[r:Composition]->(m) return p";
}else if(metadataId.startsWith("File=")){
cypher = " match p=(n:Neo4jFile {metadataId:\""+metadataId+"\"})"+directionNeo4j+"(m) return p ";
} else {
}
Map<Long, MetaData> longMetaDataMap = new HashMap<>(); Map<Long, MetaData> longMetaDataMap = new HashMap<>();
Map<String, ReturnEdge> edgeMap = new HashMap<>(); Map<String, ReturnEdge> edgeMap = new HashMap<>();
Neo4jConfig neo4jConfig = new Neo4jConfig(); Neo4jConfig neo4jConfig = new Neo4jConfig();
...@@ -108,75 +83,12 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService { ...@@ -108,75 +83,12 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService {
List<Value> values = record.values(); List<Value> values = record.values();
for (Value value : values) { for (Value value : values) {
if (value.type().name().equals("NODE")) { if (value.type().name().equals("NODE")) {
Node node = value.asNode(); getRelationFromNeo4jNode(metadataId, direction, returnReslult, edgeMap, value);
// if (getRelationFromNeo4jNode(metadataId, direction, returnReslult, edgeMap, value)) continue;
Map<Long, MetaData> nodesMap = new HashMap<>();
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
String neo4jMetadataId = metaData.getMetadataId();
if(neo4jMetadataId.startsWith("Table=")||neo4jMetadataId.startsWith("ETLScript=")){
ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName());
if(neo4jMetadataId.startsWith("Table=")){
returnNode.setType("Table");
}else if(neo4jMetadataId.startsWith("ETLScript=")){
returnNode.setType("ETLScript");
}
returnReslult.getNodes().add(returnNode);
nodesMap.put(node.id(), metaData);
ReturnEdge edge = new ReturnEdge();
String edgeId = metadataId+"_"+metaData.getMetadataId();
if(edgeMap.containsKey(edgeId)){
continue;
}
edge.setEdgeId(edgeId);
edgeMap.put(edgeId,edge);
if(direction.equals("forward")){
edge.setFromId(metadataId);
edge.setToId(metaData.getMetadataId());
}else if(direction.equals("backward")){
edge.setFromId(metaData.getMetadataId());
edge.setToId(metadataId );
}
edge.setType("流向");
}
} }
if(value.type().name().equals("PATH")){ if(value.type().name().equals("PATH")){
Path path = value.asPath(); getRelationFromNeo4jRelationShip(longMetaDataMap, edgeMap, value);
Iterable<Node> nodes = path.nodes();
for(Node node:nodes){
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
longMetaDataMap.put(node.id(),metaData);
}
Iterable<Relationship> relationships = path.relationships();
for(Relationship relationship:relationships){
long startLong = relationship.startNodeId();
long endLong = relationship.endNodeId();
String relationType = relationship.type();
String relationName = ""+relationship.get("name");
if(longMetaDataMap.containsKey(startLong )&& longMetaDataMap.containsKey(endLong)){
ReturnEdge edge = new ReturnEdge();
String edgeId = startLong+"_"+endLong;
if(edgeMap.containsKey(edgeId)){
continue;
}
edge.setEdgeId(edgeId);
edgeMap.put(edgeId,edge);
edge.setFromId(longMetaDataMap.get(startLong).getMetadataId());
edge.setToId(longMetaDataMap.get(endLong).getMetadataId());
edge.setType(relationType);
}
}
} }
} }
} }
...@@ -197,6 +109,120 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService { ...@@ -197,6 +109,120 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService {
return returnReslult; return returnReslult;
} }
private boolean getRelationFromNeo4jNode(String metadataId, String direction, ReturnReslult returnReslult, Map<String, ReturnEdge> edgeMap, Value value) {
Node node = value.asNode();
Map<Long, MetaData> nodesMap = new HashMap<>();
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
String neo4jMetadataId = metaData.getMetadataId();
if(neo4jMetadataId.startsWith(tableModelName)||neo4jMetadataId.startsWith(etlScriptModelName)){
ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName());
if(neo4jMetadataId.startsWith(tableModelName)){
returnNode.setType("Table");
}else if(neo4jMetadataId.startsWith(etlScriptModelName)){
returnNode.setType("ETLScript");
}
returnReslult.getNodes().add(returnNode);
nodesMap.put(node.id(), metaData);
ReturnEdge edge = new ReturnEdge();
String edgeId = metadataId+"_"+metaData.getMetadataId();
if(edgeMap.containsKey(edgeId)){
return true;
}
if(direction.equals(FORWARD)){
edge.setFromId(metadataId);
edge.setToId(metaData.getMetadataId());
}else if(direction.equals(BACKWARD)){
edge.setFromId(metaData.getMetadataId());
edge.setToId(metadataId );
}
edge.setType("流向");
edge.setEdgeId(edgeId);
edgeMap.put(edgeId,edge);
}
return false;
}
private void getRelationFromNeo4jRelationShip(Map<Long, MetaData> longMetaDataMap, Map<String, ReturnEdge> edgeMap, Value value) {
Path path = value.asPath();
Iterable<Node> nodes = path.nodes();
for(Node node:nodes){
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
longMetaDataMap.put(node.id(),metaData);
}
Iterable<Relationship> relationships = path.relationships();
for(Relationship relationship:relationships){
long startLong = relationship.startNodeId();
long endLong = relationship.endNodeId();
String relationType = relationship.type();
String relationName = ""+relationship.get("name");
if(longMetaDataMap.containsKey(startLong )&& longMetaDataMap.containsKey(endLong)){
ReturnEdge edge = new ReturnEdge();
String edgeId = startLong+"_"+endLong;
if(edgeMap.containsKey(edgeId)){
continue;
}
edge.setEdgeId(edgeId);
edgeMap.put(edgeId,edge);
edge.setFromId(longMetaDataMap.get(startLong).getMetadataId());
edge.setToId(longMetaDataMap.get(endLong).getMetadataId());
edge.setType(relationType);
}
}
}
private String getCypher(String metadataId, String direction, String directionNeo4j) {
String cypher = "";
if(metadataId.startsWith(tableModelName)){
cypher = " match p=(n:Neo4jTable {metadataId:\""+metadataId+"\"})"+directionNeo4j+"(m) return p ";
}else if(metadataId.startsWith(etlJobModelName)){
cypher = " match p=(n:Neo4jETLJob {metadataId:\""+metadataId+"\"})"+directionNeo4j+"(m) return p "
+ "union match p=(n:Neo4jETLJob {metadataId:\""+metadataId+"\"}) -[r:Composition]->(m) return p ";
}else if(metadataId.startsWith(etlScriptModelName)){
if(direction.equals(FORWARD)){
cypher = " match (n:Neo4jETLScript {metadataId:\""+metadataId+"\"})"+directionNeo4j+"(m) return m "
+" union match (n:Neo4jETLScript{metadataId:\""+metadataId+"\"})-[r0:TempRelation*1..]-> (m) return m"
;
}else if(direction.equals(BACKWARD)){
cypher = " match (n:Neo4jETLScript {metadataId:\""+metadataId+"\"})"+directionNeo4j+"(m) return m "
+" union match (n:Neo4jETLScript{metadataId:\""+metadataId+"\"})<-[r0:TempRelation*1..]- (m) return m"
;
}
// + "union match p=(n:Neo4jETLScript {metadataId:\""+metadataId+"\"}) <-[r:Composition]->(m) return p ";
}else if(metadataId.startsWith("SQL=")){
cypher="match p=(n:Neo4jETLSql {metadataId:\""+metadataId+"\"}) <-[r:Composition]->(m) return p";
}else if(metadataId.startsWith("File=")){
cypher = " match p=(n:Neo4jFile {metadataId:\""+metadataId+"\"})"+directionNeo4j+"(m) return p ";
} else {
}
return cypher;
}
private String getDirect(String direction) {
String directionNeo4j = "";
if(direction.equals(FORWARD)){
directionNeo4j = "-[r:流向]->";
}else if(direction.equals(BACKWARD)){
directionNeo4j = "<-[r:流向]-";
}else if(direction.equals("all")){
directionNeo4j = "<-[r:流向]->";
}
return directionNeo4j;
}
@Override @Override
public ReturnReslult filterJosnByModelName(String reulstJson, String filterModel,String retainModel) { public ReturnReslult filterJosnByModelName(String reulstJson, String filterModel,String retainModel) {
ReturnReslult newReslult = new ReturnReslult(); ReturnReslult newReslult = new ReturnReslult();
...@@ -226,96 +252,18 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService { ...@@ -226,96 +252,18 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService {
} }
} }
for(ReturnEdge oldEdge:oldEdgeList){ getNewRelationFromOldRelation(oldEdgeList, source2Target, target2Source);
String formId = oldEdge.getFromId();
String toId = oldEdge.getToId();
if(source2Target.containsKey(formId)){
source2Target.get(formId).add(toId);
}else {
List<String > toIdList = new ArrayList<>();
toIdList.add(toId);
source2Target.put(formId,toIdList);
}
if(target2Source.containsKey(toId)){
target2Source.get(toId).add(formId);
}else {
List<String> fromIdList = new ArrayList<>();
fromIdList.add(formId);
target2Source.put(toId,fromIdList);
}
}
Map<String ,ReturnEdge> newEdgeMap = new HashMap<>(); Map<String ,ReturnEdge> newEdgeMap = new HashMap<>();
//先用需要保留的,在从需要保留的另一端,看看是否需要过滤,如果要过了,就继续找,直到找到不需要过滤的节点 //先用需要保留的,在从需要保留的另一端,看看是否需要过滤,如果要过了,就继续找,直到找到不需要过滤的节点
for(String remianNodeId :remianNodeIdList){ for(String remianNodeId :remianNodeIdList){
if(source2Target.containsKey(remianNodeId)){ if(source2Target.containsKey(remianNodeId)){
List<String> toIdList = source2Target.get(remianNodeId); filterNodeFromSource(remianNodeIdList, source2Target, newEdgeMap, remianNodeId);
if(toIdList == null ){ // if (filterNodeFromSource(remianNodeIdList, source2Target, newEdgeMap, remianNodeId)) continue;
continue;
}
for(String toId:toIdList){
if(remianNodeIdList.contains(toId)){
ReturnEdge newEdge = new ReturnEdge();
newEdge.setEdgeId(remianNodeId+"_"+toId);
newEdge.setFromId(remianNodeId);
newEdge.setToId(toId);
newEdge.setType("流向");
newEdgeMap.put(newEdge.getEdgeId(),newEdge);
}else {
List<String> to2toIdList = source2Target.get(toId);
if(to2toIdList == null ){
continue;
}
for(String to2toId:to2toIdList){
if(remianNodeIdList.contains(to2toId)){
ReturnEdge newEdge = new ReturnEdge();
newEdge.setEdgeId(remianNodeId+"_"+to2toId);
newEdge.setFromId(remianNodeId);
newEdge.setToId(to2toId);
newEdge.setType("流向");
newEdgeMap.put(newEdge.getEdgeId(),newEdge);
}else {
}
}
}
}
} }
if(target2Source.containsKey(remianNodeId)){ if(target2Source.containsKey(remianNodeId)){
List<String> fromIdList = target2Source.get(remianNodeId); filterNodeFromTarget(remianNodeIdList, target2Source, newEdgeMap, remianNodeId);
for(String fromId:fromIdList){
if(remianNodeIdList.contains(fromId)){
ReturnEdge newEdge = new ReturnEdge();
newEdge.setEdgeId(fromId +"_"+remianNodeId);
newEdge.setFromId(fromId);
newEdge.setToId(remianNodeId );
newEdge.setType("流向");
newEdgeMap.put(newEdge.getEdgeId(),newEdge);
}else {
List<String> from2FromIdList = target2Source.get(fromId);
if(from2FromIdList == null ){
continue;
}
for(String from2FromId:from2FromIdList){
if(remianNodeIdList.contains(from2FromId)){
ReturnEdge newEdge = new ReturnEdge();
newEdge.setEdgeId(from2FromId +"_"+remianNodeId);
newEdge.setFromId(from2FromId);
newEdge.setToId(remianNodeId );
newEdge.setType("流向");
newEdgeMap.put(newEdge.getEdgeId(),newEdge);
}else {
}
}
}
}
} }
} }
...@@ -347,6 +295,99 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService { ...@@ -347,6 +295,99 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService {
return newReslult; return newReslult;
} }
private void filterNodeFromSource(List<String> remianNodeIdList, Map<String, List<String>> source2Target, Map<String, ReturnEdge> newEdgeMap, String remianNodeId) {
List<String> toIdList = source2Target.get(remianNodeId);
if(toIdList == null ){
return ;
}
for(String toId:toIdList){
if(remianNodeIdList.contains(toId)){
ReturnEdge newEdge = new ReturnEdge();
newEdge.setEdgeId(remianNodeId+"_"+toId);
newEdge.setFromId(remianNodeId);
newEdge.setToId(toId);
newEdge.setType("流向");
newEdgeMap.put(newEdge.getEdgeId(),newEdge);
}else {
List<String> to2toIdList = source2Target.get(toId);
if(to2toIdList == null ){
continue;
}
for(String to2toId:to2toIdList){
if(remianNodeIdList.contains(to2toId)){
ReturnEdge newEdge = new ReturnEdge();
newEdge.setEdgeId(remianNodeId+"_"+to2toId);
newEdge.setFromId(remianNodeId);
newEdge.setToId(to2toId);
newEdge.setType("流向");
newEdgeMap.put(newEdge.getEdgeId(),newEdge);
}
}
}
}
}
private void filterNodeFromTarget(List<String> remianNodeIdList, Map<String, List<String>> target2Source, Map<String, ReturnEdge> newEdgeMap, String remianNodeId) {
List<String> fromIdList = target2Source.get(remianNodeId);
if(fromIdList == null){
return;
}
for(String fromId:fromIdList){
if(remianNodeIdList.contains(fromId)){
ReturnEdge newEdge = new ReturnEdge();
newEdge.setEdgeId(fromId +"_"+remianNodeId);
newEdge.setFromId(fromId);
newEdge.setToId(remianNodeId );
newEdge.setType("流向");
newEdgeMap.put(newEdge.getEdgeId(),newEdge);
}else {
List<String> from2FromIdList = target2Source.get(fromId);
if(from2FromIdList == null ){
continue;
}
for(String from2FromId:from2FromIdList){
if(remianNodeIdList.contains(from2FromId)){
ReturnEdge newEdge = new ReturnEdge();
newEdge.setEdgeId(from2FromId +"_"+remianNodeId);
newEdge.setFromId(from2FromId);
newEdge.setToId(remianNodeId );
newEdge.setType("流向");
newEdgeMap.put(newEdge.getEdgeId(),newEdge);
}
}
}
}
}
private void getNewRelationFromOldRelation(List<ReturnEdge> oldEdgeList, Map<String, List<String>> source2Target, Map<String, List<String>> target2Source) {
for(ReturnEdge oldEdge:oldEdgeList){
String formId = oldEdge.getFromId();
String toId = oldEdge.getToId();
if(source2Target.containsKey(formId)){
source2Target.get(formId).add(toId);
}else {
List<String > toIdList = new ArrayList<>();
toIdList.add(toId);
source2Target.put(formId,toIdList);
}
if(target2Source.containsKey(toId)){
target2Source.get(toId).add(formId);
}else {
List<String> fromIdList = new ArrayList<>();
fromIdList.add(formId);
target2Source.put(toId,fromIdList);
}
}
}
@Override @Override
public void deleteRelationByJobId(String catalogName, String jobId) { public void deleteRelationByJobId(String catalogName, String jobId) {
try{ try{
...@@ -400,9 +441,9 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService { ...@@ -400,9 +441,9 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService {
for(Document relation :relationList){ for(Document relation :relationList){
description = relation.getString("description"); description = relation.getString("description");
String type = relation.getString("type"); String type = relation.getString("type");
if(!(type.equals("Input") || type.equals("Output"))){ // if(!(type.equals("Input") || type.equals("Output"))){
continue; // continue;
} // }
String sourceId =relation.getString("source"); //relationMongo.getSource(); String sourceId =relation.getString("source"); //relationMongo.getSource();
String targetId =relation.getString("target"); // relationMongo.getTarget(); String targetId =relation.getString("target"); // relationMongo.getTarget();
...@@ -419,95 +460,153 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService { ...@@ -419,95 +460,153 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService {
String endId = ""; String endId = "";
//如果是字段,上升到表,如果是sql,上升到etlscript,其他的模型之间的关系暂不处理 //如果是字段,上升到表,如果是sql,上升到etlscript,其他的模型之间的关系暂不处理
// 先同步etlsql等模型。 // 先同步etlsql等模型。
if(sourceId.contains("Column=") && targetId.contains("Column=") ){ if(sourceId.contains(columnModelEqual) && targetId.contains(columnModelEqual) ){
Map<String, Object> sourceParent = metadataRepoRemoteService.getParent(sourceId); startId = getParentId(sourceId);
Map<String, Object> targetParent = metadataRepoRemoteService.getParent(targetId); endId = getParentId(targetId);
} else if(sourceId.contains(columnModelEqual) && targetId.contains("SQL=") ){
//要记录字段级别的关系
if (sourceParent == null ) {
logger.info("没有找到id:" + sourceId + "的父节点元数据。");
continue;
}
if (targetParent==null) {
logger.info("没有找到id:" + targetId + "的父节点元数据。");
continue;
}
startId = (String )sourceParent.get("_id");
endId = (String )targetParent.get("_id");
} else if(sourceId.contains("Column=") && targetId.contains("SQL=") ){
etlSqlIdMap.put(targetId,""); etlSqlIdMap.put(targetId,"");
Map<String, Object> sourceParent = metadataRepoRemoteService.getParent(sourceId); startId = getParentId(sourceId);
Map<String, Object> targetParent = metadataRepoRemoteService.getParent(targetId); endId = getParentId(targetId);
if (sourceParent == null ) {
logger.info("没有找到id:" + sourceId + "的父节点元数据。");
continue;
}
if (targetParent==null) {
logger.info("没有找到id:" + targetId + "的父节点元数据。");
continue;
}
String targetParentId = (String) targetParent.get("_id"); // Map<String, Object> sourceParent = metadataRepoRemoteService.getParent(sourceId);
Map<String, Object> targetParentParent = metadataRepoRemoteService.getParent(targetParentId); //
if (targetParentParent==null) { // if (sourceParent == null ) {
logger.info("没有找到id:" + targetId + "的祖父节点元数据。"); // logger.info("没有找到sourceId:" + sourceId + "的父节点。");
continue; // continue;
} // }
// startId = (String )sourceParent.get("_id");
startId = (String )sourceParent.get("_id"); // Map<String, Object> targetParent = metadataRepoRemoteService.getParent(targetId);
endId = (String )targetParent.get("_id"); // if (targetParent==null) {
// logger.info("没有找到targetId:" + targetId + "的父节点元数据。");
// continue;
// }
// String targetParentId = (String) targetParent.get("_id");
// endId = (String )targetParent.get("_id");
etlScriptIdMap.put(endId,""); etlScriptIdMap.put(endId,"");
String parentParentId = (String ) targetParentParent.get("_id"); // Map<String, Object> targetParentParent = metadataRepoRemoteService.getParent(endId);
// if (targetParentParent==null) {
// logger.info("没有找到元数据id:" + targetId + "的祖父节点元数据。");
// continue;
// }
String parentParentId = getParentId(endId);//(String ) targetParentParent.get("_id");
etlJobIdMap.put(parentParentId,""); etlJobIdMap.put(parentParentId,"");
}else if(sourceId.contains("SQL=") && targetId.contains("Column=")){ }else if(sourceId.contains("SQL=") && targetId.contains(columnModelEqual)){
etlSqlIdMap.put(sourceId,""); etlSqlIdMap.put(sourceId,"");
Map<String, Object> sourceParent = metadataRepoRemoteService.getParent(sourceId);
Map<String, Object> targetParent = metadataRepoRemoteService.getParent(targetId);
if (sourceParent == null ) { startId = getParentId(sourceId);
logger.info("没有找到id:" + sourceId + "的父节点元数据。"); endId = getParentId(targetId);
continue;
}
if (targetParent==null) {
logger.info("没有找到id:" + targetId + "的父节点元数据。");
continue;
}
String sourceParenttId = (String) sourceParent.get("_id");
etlScriptIdMap.put(sourceParenttId,"");
Map<String, Object> sourceParentParent = metadataRepoRemoteService.getParent(sourceParenttId);
if (sourceParentParent==null) {
logger.info("没有找到id:" + sourceId + "的祖父节点元数据。");
continue;
}
String parentParentId = (String ) sourceParentParent.get("_id");
etlJobIdMap.put(parentParentId,"");
startId = (String )sourceParent.get("_id"); // Map<String, Object> sourceParent = metadataRepoRemoteService.getParent(sourceId);
endId = (String )targetParent.get("_id"); // if (sourceParent == null ) {
// logger.info("没有找到sourceId:" + sourceId + "的sourceParent数据");
// continue;
// }
// startId = (String )sourceParent.get("_id");
// Map<String, Object> targetParent = metadataRepoRemoteService.getParent(targetId);
// if (targetParent==null) {
// logger.info("没有找到targetId:" + targetId + "的targetParent数据。");
// continue;
// }
// endId = (String )targetParent.get("_id");
// String sourceParenttId = (String) sourceParent.get("_id");
etlScriptIdMap.put(startId,"");
// Map<String, Object> sourceParentParent = metadataRepoRemoteService.getParent(startId);
// if (sourceParentParent==null) {
// logger.info("没有找到id:" + sourceId + "的祖父节点元数据。");
// continue;
// }
// String parentParentId = (String ) sourceParentParent.get("_id");
String parentParentId = getParentId(startId);
etlJobIdMap.put(parentParentId,"");
} }
String relationId = startId+"_"+endId; String relationId = startId+"_"+endId;
edgeIdMap.put(relationId,description); edgeIdMap.put(relationId,description);
} }
} }
for(Object obj : etlJobIdMap.keySet()){ saveEtlJobToNeo4j(etlJobIdMap);
logger.info("开始同步 etlJob,id="+ obj); saveEtlScriptToNeo4j(etlScriptIdMap);
saveEtlSqlToNeo4j(etlSqlIdMap);
long start = System.currentTimeMillis();
int count=1;
saveDependencyRelationToNeo4j(jobId, edgeIdMap, count);
long end = System.currentTimeMillis();
logger.info("一共在neo4j,创建了多少关系:"+edgeIdMap.size() + " ,总用时:"+(end-start));
}
private String getParentId(String targetId) {
String parentId = "";
Map<String, Object> targetParent = metadataRepoRemoteService.getParent(targetId);
if (targetParent==null) {
logger.info("没有找到元数据的targetId=" + targetId + "的父节点。");
}else {
parentId = (String )targetParent.get("_id");
}
return parentId;
}
// private String getSourceParentId(String sourceId) {
// Map<String, Object> sourceParent = metadataRepoRemoteService.getParent(sourceId);
// //要记录字段级别的关系
// if (sourceParent == null ) {
// logger.info("没有找到元数据sourceId:" + sourceId + "的父节点元数据。");
// }
// String startId = (String )sourceParent.get("_id");
// return startId;
// }
private void saveDependencyRelationToNeo4j(String jobId, Map<String, String> edgeIdMap, int count) {
for(Object obj : edgeIdMap.keySet()){
if(count%100 == 0){
logger.info("创建了"+count+"关系:");
}
String edgeId = (String) obj;
String[] dataIds = edgeId.split("_");
String startId = dataIds[0];
String endId = dataIds[1];
String description = edgeIdMap.get(obj);
if(description ==null || description.equalsIgnoreCase("")){
relationshipService.saveRelation(startId,endId,"流向",jobId);
}else{
relationshipService.saveRelation(startId,endId,"流向",jobId,description);
}
}
}
private void saveEtlSqlToNeo4j(Map<String, String> etlSqlIdMap) {
for(Object obj : etlSqlIdMap.keySet()){
logger.info("开始同步 etlsql,id="+ obj);
String metadataId = (String )obj; String metadataId = (String )obj;
Neo4jETLJob neo4jETLJob1 = neo4jETLJobRepository.findNeo4jETLJobByMetadataId(metadataId); Neo4jETLSql neo4jETLsql1 = neo4jETLSqlRepository.findNeo4jETLSqlByMetadataId(metadataId);
if(neo4jETLJob1 ==null ){ if(neo4jETLsql1 ==null ){
//不存在就从 mongo同步 //不存在就从 mongo同步
Map<String, Object> attribute = metadataRepoRemoteService.getMetadata(metadataId); Map<String, Object> attribute = metadataRepoRemoteService.getMetadata(metadataId);
String metadataName = (String ) attribute.get("name"); String metadataName = (String ) attribute.get("name");
Neo4jETLJob neo4jETLJob = new Neo4jETLJob(); Neo4jETLSql neo4jETLJob = new Neo4jETLSql();
neo4jETLJob.setMetadataId(metadataId); neo4jETLJob.setMetadataId(metadataId);
neo4jETLJob.setName(metadataName); neo4jETLJob.setName(metadataName);
neo4jETLJobRepository.save(neo4jETLJob); neo4jETLSqlRepository.save(neo4jETLJob);
} }
} }
}
private void saveEtlScriptToNeo4j(Map<String, String> etlScriptIdMap) {
for(Object obj : etlScriptIdMap.keySet()){ for(Object obj : etlScriptIdMap.keySet()){
String metadataId = (String )obj; String metadataId = (String )obj;
logger.info("开始同步 etlScript,id="+ metadataId); logger.info("开始同步 etlScript,id="+ metadataId);
...@@ -522,43 +621,23 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService { ...@@ -522,43 +621,23 @@ public class MetadataRelationServiceImpl implements IMetadataRelationService {
neo4jETLScriptRepository.save(neo4jETLJob); neo4jETLScriptRepository.save(neo4jETLJob);
} }
} }
}
for(Object obj : etlSqlIdMap.keySet()){ private void saveEtlJobToNeo4j(Map<String, String> etlJobIdMap) {
logger.info("开始同步 etlsql,id="+ obj); for(Object obj : etlJobIdMap.keySet()){
logger.info("开始同步 etlJob,id="+ obj);
String metadataId = (String )obj; String metadataId = (String )obj;
Neo4jETLSql neo4jETLsql1 = neo4jETLSqlRepository.findNeo4jETLSqlByMetadataId(metadataId); Neo4jETLJob neo4jETLJob1 = neo4jETLJobRepository.findNeo4jETLJobByMetadataId(metadataId);
if(neo4jETLsql1 ==null ){ if(neo4jETLJob1 ==null ){
//不存在就从 mongo同步 //不存在就从 mongo同步
Map<String, Object> attribute = metadataRepoRemoteService.getMetadata(metadataId); Map<String, Object> attribute = metadataRepoRemoteService.getMetadata(metadataId);
String metadataName = (String ) attribute.get("name"); String metadataName = (String ) attribute.get("name");
Neo4jETLSql neo4jETLJob = new Neo4jETLSql(); Neo4jETLJob neo4jETLJob = new Neo4jETLJob();
neo4jETLJob.setMetadataId(metadataId); neo4jETLJob.setMetadataId(metadataId);
neo4jETLJob.setName(metadataName); neo4jETLJob.setName(metadataName);
neo4jETLSqlRepository.save(neo4jETLJob); neo4jETLJobRepository.save(neo4jETLJob);
}
}
long start = System.currentTimeMillis();
int count=1;
for(Object obj : edgeIdMap.keySet()){
if(count%100 == 0){
logger.info("创建了"+count+"关系:");
}
String edgeId = (String) obj;
String[] dataIds = edgeId.split("_");
String startId = dataIds[0];
String endId = dataIds[1];
String description = edgeIdMap.get(obj);
if(description ==null || description.equalsIgnoreCase("")){
relationshipService.saveRelation(startId,endId,"流向",jobId);
}else{
relationshipService.saveRelation(startId,endId,"流向",jobId,description);
} }
} }
long end = System.currentTimeMillis();
logger.info("一共在neo4j,创建了多少关系:"+edgeIdMap.size() + " ,总用时:"+(end-start));
} }
......
...@@ -27,6 +27,10 @@ public class MongoDbServiceImpl { ...@@ -27,6 +27,10 @@ public class MongoDbServiceImpl {
private static final String PREFIX_METADATA_NODE = "Metadata_"; private static final String PREFIX_METADATA_NODE = "Metadata_";
private static final String PARENT_ID = "parentId";
private static final String INPUT = "Input";
private static final String OUTPUT = "Output";
/** /**
* 查询所有 * 查询所有
* *
...@@ -56,7 +60,7 @@ public class MongoDbServiceImpl { ...@@ -56,7 +60,7 @@ public class MongoDbServiceImpl {
logger.info("开始从mongo获取元数据:"+ parentName); logger.info("开始从mongo获取元数据:"+ parentName);
try { try {
Query query = new Query(); Query query = new Query();
query.addCriteria(Criteria.where("parentId").is(parentName)); query.addCriteria(Criteria.where(PARENT_ID).is(parentName));
List<MongoData> mongoDataList = mongoTemplate.find(query, MongoData.class,PREFIX_METADATA_NODE+catalogName); List<MongoData> mongoDataList = mongoTemplate.find(query, MongoData.class,PREFIX_METADATA_NODE+catalogName);
return mongoDataList; return mongoDataList;
...@@ -77,7 +81,7 @@ public class MongoDbServiceImpl { ...@@ -77,7 +81,7 @@ public class MongoDbServiceImpl {
// logger.info("开始从mongo获取元数据:"+ parentId); // logger.info("开始从mongo获取元数据:"+ parentId);
try { try {
Query query = new Query(); Query query = new Query();
query.addCriteria(Criteria.where("parentId").is(parentId)); query.addCriteria(Criteria.where(PARENT_ID).is(parentId));
List<MongoData> mongoDataList = mongoTemplate.find(query, MongoData.class,PREFIX_METADATA_NODE+catalogName); List<MongoData> mongoDataList = mongoTemplate.find(query, MongoData.class,PREFIX_METADATA_NODE+catalogName);
return mongoDataList;// mongoTemplate.findAll(MongoData.class, "md_relation_" + catalogName); return mongoDataList;// mongoTemplate.findAll(MongoData.class, "md_relation_" + catalogName);
...@@ -92,14 +96,14 @@ public class MongoDbServiceImpl { ...@@ -92,14 +96,14 @@ public class MongoDbServiceImpl {
* 分页查询所有子节点,返回document * 分页查询所有子节点,返回document
* *
* public List<Document> findRelationByPage(Pageable pageable, String catalogName) { * public List<Document> findRelationByPage(Pageable pageable, String catalogName) {
* Query query = new Query(new Criteria().orOperator(Criteria.where("type").is("Input"),Criteria.where("type").is("Output"))); * Query query = new Query(new Criteria().orOperator(Criteria.where("type").is(INPUT),Criteria.where("type").is(OUTPUT)));
* query.with(pageable); * query.with(pageable);
* return mongoTemplate.find(query, Document.class, PREFIX_MD_RELATION + catalogName); * return mongoTemplate.find(query, Document.class, PREFIX_MD_RELATION + catalogName);
* } * }
*/ */
public List<Document> getDocumentByparentIdByPage(Pageable pageable, String catalogName,String parentId) { public List<Document> getDocumentByparentIdByPage(Pageable pageable, String catalogName,String parentId) {
logger.info("开始从mongo查找子节点:"+ parentId); logger.info("开始从mongo查找子节点:"+ parentId);
Query query = Query.query(Criteria.where("parentId").is(parentId)); Query query = Query.query(Criteria.where(PARENT_ID).is(parentId));
query.with(pageable); query.with(pageable);
return mongoTemplate.find(query, Document.class, PREFIX_METADATA_NODE + catalogName); return mongoTemplate.find(query, Document.class, PREFIX_METADATA_NODE + catalogName);
...@@ -108,7 +112,7 @@ public class MongoDbServiceImpl { ...@@ -108,7 +112,7 @@ public class MongoDbServiceImpl {
public long countDocumentByParentId(Pageable pageable, String catalogName,String parentId) { public long countDocumentByParentId(Pageable pageable, String catalogName,String parentId) {
Query query = Query.query(Criteria.where("parentId").is(parentId)); Query query = Query.query(Criteria.where(PARENT_ID).is(parentId));
query.with(pageable); query.with(pageable);
return mongoTemplate.count(query, Document.class, PREFIX_METADATA_NODE + catalogName); return mongoTemplate.count(query, Document.class, PREFIX_METADATA_NODE + catalogName);
} }
...@@ -154,13 +158,13 @@ public class MongoDbServiceImpl { ...@@ -154,13 +158,13 @@ public class MongoDbServiceImpl {
} }
public List<Document> findRelationByPage(Pageable pageable, String catalogName) { public List<Document> findRelationByPage(Pageable pageable, String catalogName) {
Query query = new Query(new Criteria().orOperator(Criteria.where("type").is("Input"),Criteria.where("type").is("Output"))); Query query = new Query(new Criteria().orOperator(Criteria.where("type").is(INPUT),Criteria.where("type").is(OUTPUT)));
query.with(pageable); query.with(pageable);
return mongoTemplate.find(query, Document.class, PREFIX_MD_RELATION + catalogName); return mongoTemplate.find(query, Document.class, PREFIX_MD_RELATION + catalogName);
} }
public long countRelation(Pageable pageable, String catalogName) { public long countRelation(Pageable pageable, String catalogName) {
Query query = new Query(new Criteria().orOperator(Criteria.where("type").is("Input"),Criteria.where("type").is("Output"))); Query query = new Query(new Criteria().orOperator(Criteria.where("type").is(INPUT),Criteria.where("type").is(OUTPUT)));
query.with(pageable); query.with(pageable);
return mongoTemplate.count(query, Document.class, PREFIX_MD_RELATION + catalogName); return mongoTemplate.count(query, Document.class, PREFIX_MD_RELATION + catalogName);
} }
...@@ -168,20 +172,20 @@ public class MongoDbServiceImpl { ...@@ -168,20 +172,20 @@ public class MongoDbServiceImpl {
public long countRelationByJobId(Pageable pageable, String catalogName,String jobId) { public long countRelationByJobId(Pageable pageable, String catalogName,String jobId) {
Query query = new Query(new Criteria() .andOperator(Criteria.where("jobId").is(jobId), Query query = new Query(new Criteria() .andOperator(Criteria.where("jobId").is(jobId),
new Criteria().orOperator(Criteria.where("type").is("Input"),Criteria.where("type").is("Output")) new Criteria().orOperator(Criteria.where("type").is(INPUT),Criteria.where("type").is(OUTPUT))
) )
); );
// Query query = new Query(new Criteria().orOperator(Criteria.where("type").is("Input"),Criteria.where("type").is("Output"))); // Query query = new Query(new Criteria().orOperator(Criteria.where("type").is(INPUT),Criteria.where("type").is(OUTPUT)));
query.with(pageable); query.with(pageable);
return mongoTemplate.count(query, Document.class, PREFIX_MD_RELATION + catalogName); return mongoTemplate.count(query, Document.class, PREFIX_MD_RELATION + catalogName);
} }
public List<Document> findRelationByJobIdByPage(Pageable pageable, String catalogName,String jobId) { public List<Document> findRelationByJobIdByPage(Pageable pageable, String catalogName,String jobId) {
Query query = new Query(new Criteria() .andOperator(Criteria.where("jobId").is(jobId), Query query = new Query(new Criteria() .andOperator(Criteria.where("jobId").is(jobId),
new Criteria().orOperator(Criteria.where("type").is("Input"),Criteria.where("type").is("Output")) new Criteria().orOperator(Criteria.where("type").is(INPUT),Criteria.where("type").is(OUTPUT))
) )
); );
// Query query = new Query(new Criteria().orOperator(Criteria.where("type").is("Input"),Criteria.where("type").is("Output"))); // Query query = new Query(new Criteria().orOperator(Criteria.where("type").is(INPUT),Criteria.where("type").is(OUTPUT)));
query.with(pageable); query.with(pageable);
return mongoTemplate.find(query, Document.class, PREFIX_MD_RELATION + catalogName); return mongoTemplate.find(query, Document.class, PREFIX_MD_RELATION + catalogName);
} }
......
...@@ -17,7 +17,7 @@ import org.slf4j.LoggerFactory; ...@@ -17,7 +17,7 @@ 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 java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
...@@ -66,43 +66,51 @@ public class MultiModelServiceImpl implements MultiModelService { ...@@ -66,43 +66,51 @@ public class MultiModelServiceImpl implements MultiModelService {
Map<Long, Long> child2Parent = new HashMap<>(); Map<Long, Long> child2Parent = new HashMap<>();
Map<Long, List<Long>> parent2Children = new HashMap<>(); Map<Long, List<Long>> parent2Children = new HashMap<>();
for(CompositionRelation compositionRelation:compositionRelationList){ getCompositionRelations(compositionRelationList, child2Parent, parent2Children);
if(compositionRelation == null){
continue;
}
Long parentId = compositionRelation.getStart().getId();
Long childId = compositionRelation.getEnd().getId();
child2Parent.put(childId,parentId);
if(parent2Children.containsKey(parentId)){
parent2Children.get(parentId).add(childId);
}else {
List<Long> children = new ArrayList<>();
children.add(childId);
parent2Children.put(parentId,children);
}
}
for(ExecuteRelation executeRelation:executeRelationList){ getExecuteRelations(executeRelationList, child2Parent, parent2Children);
Long parentId = executeRelation.getStart().getId();
Long childId = executeRelation.getEnd().getId();
child2Parent.put(childId,parentId);
if(parent2Children.containsKey(parentId)){
parent2Children.get(parentId).add(childId);
}else {
List<Long> children = new ArrayList<>();
children.add(childId);
parent2Children.put(parentId,children);
}
}
Map<Long, List<Long>> source2Targets = new HashMap<>(); Map<Long, List<Long>> source2Targets = new HashMap<>();
Map<Long, List<Long>> target2Sources = new HashMap<>(); Map<Long, List<Long>> target2Sources = new HashMap<>();
//上升inout output的关系到父级 //上升inout output的关系到父级
List<InputRelation> inputRelationList = (List<InputRelation>) inputRelationReRepository.findAll(); List<InputRelation> inputRelationList = (List<InputRelation>) inputRelationReRepository.findAll();
getsourceAndTargetRelationFromInput(child2Parent, source2Targets, target2Sources, inputRelationList);
List<OutputRelation> outputRelationList = (List<OutputRelation>) outputRelationRepository.findAll(); List<OutputRelation> outputRelationList = (List<OutputRelation>) outputRelationRepository.findAll();
for(InputRelation inputRelation:inputRelationList){ getSourceAndTargetFromOutput(child2Parent, source2Targets, target2Sources, outputRelationList);
Long targetId = inputRelation.getEnd().getId();
Long sourceId = inputRelation.getStart().getId(); Map<Long, MetaData> metaDataMapLong = new HashMap<>();
List<Long> filterMetadata = new ArrayList<>();
List<Long> returnMetadata = new ArrayList<>();
//得到要过滤的节点过滤节点
for(MetaData metadata:metaDataList){
Long dataId = metadata.getId();
String metadataId = metadata.getMetadataId();
String[] strings = metadataId.split("=");
String modelName = strings[0];
if(modelNameList.contains(modelName)){
returnMetadata.add(dataId);
}else {
filterMetadata.add(dataId);
}
metaDataMapLong.put(dataId, metadata);
}
//过滤节点,深度优先从入口节点遍历
getRelationFromFilterMetadata(source2Targets, target2Sources, filterMetadata);
ReturnReslult returnReslult = getReturnReslult(parent2Children, source2Targets, metaDataMapLong, returnMetadata);
Map<String, MetaModel> metaModelMap = getStringMetaModelMap(metaDataMapLong, returnMetadata, returnReslult);
returnReslult.setMetaModelMap(metaModelMap);
return returnReslult;
}
private void getSourceAndTargetFromOutput(Map<Long, Long> child2Parent, Map<Long, List<Long>> source2Targets, Map<Long, List<Long>> target2Sources, List<OutputRelation> outputRelationList) {
for(OutputRelation outputRelation:outputRelationList){
Long sourceId = outputRelation.getStart().getId();
Long targetId = outputRelation.getEnd().getId();
if(source2Targets.containsKey(sourceId)){ if(source2Targets.containsKey(sourceId)){
source2Targets.get(sourceId).add(targetId); source2Targets.get(sourceId).add(targetId);
...@@ -122,28 +130,34 @@ public class MultiModelServiceImpl implements MultiModelService { ...@@ -122,28 +130,34 @@ public class MultiModelServiceImpl implements MultiModelService {
// //
Long sourceParentId = getParentId(sourceId,child2Parent); Long sourceParentId = getParentId(sourceId,child2Parent);
Long targetParentId = getParentId(targetId,child2Parent); Long targetParentId = getParentId(targetId,child2Parent);
if(sourceParentId!=null && targetParentId!=null){ getParentRelations(source2Targets, target2Sources, sourceParentId, targetParentId);
if(source2Targets.containsKey(sourceParentId)){ }
source2Targets.get(sourceParentId).add(targetParentId); }
}else {
List<Long> targets = new ArrayList<>();
targets.add(targetParentId);
source2Targets.put(sourceParentId,targets);
}
if(target2Sources.containsKey(targetParentId)){ private void getParentRelations(Map<Long, List<Long>> source2Targets, Map<Long, List<Long>> target2Sources, Long sourceParentId, Long targetParentId) {
target2Sources.get(targetParentId).add(sourceParentId); if (sourceParentId != null && targetParentId != null) {
}else { if (source2Targets.containsKey(sourceParentId)) {
List<Long> sources = new ArrayList<>(); source2Targets.get(sourceParentId).add(targetParentId);
sources.add(sourceParentId); } else {
target2Sources.put(targetParentId,sources); List<Long> targets = new ArrayList<>();
} targets.add(targetParentId);
source2Targets.put(sourceParentId, targets);
}
if (target2Sources.containsKey(targetParentId)) {
target2Sources.get(targetParentId).add(sourceParentId);
} else {
List<Long> sources = new ArrayList<>();
sources.add(sourceParentId);
target2Sources.put(targetParentId, sources);
} }
} }
}
for(OutputRelation outputRelation:outputRelationList){ private void getsourceAndTargetRelationFromInput(Map<Long, Long> child2Parent, Map<Long, List<Long>> source2Targets, Map<Long, List<Long>> target2Sources, List<InputRelation> inputRelationList) {
Long sourceId = outputRelation.getStart().getId(); for(InputRelation inputRelation:inputRelationList){
Long targetId = outputRelation.getEnd().getId(); Long targetId = inputRelation.getEnd().getId();
Long sourceId = inputRelation.getStart().getId();
if(source2Targets.containsKey(sourceId)){ if(source2Targets.containsKey(sourceId)){
source2Targets.get(sourceId).add(targetId); source2Targets.get(sourceId).add(targetId);
...@@ -163,42 +177,31 @@ public class MultiModelServiceImpl implements MultiModelService { ...@@ -163,42 +177,31 @@ public class MultiModelServiceImpl implements MultiModelService {
// //
Long sourceParentId = getParentId(sourceId,child2Parent); Long sourceParentId = getParentId(sourceId,child2Parent);
Long targetParentId = getParentId(targetId,child2Parent); Long targetParentId = getParentId(targetId,child2Parent);
if(sourceParentId!=null && targetParentId!=null){ getParentSourceAnd(source2Targets, target2Sources, sourceParentId, targetParentId);
if(source2Targets.containsKey(sourceParentId)){ }
source2Targets.get(sourceParentId).add(targetParentId); }
}else {
List<Long> targets = new ArrayList<>();
targets.add(targetParentId);
source2Targets.put(sourceParentId,targets);
}
if(target2Sources.containsKey(targetParentId)){ private void getParentSourceAnd(Map<Long, List<Long>> source2Targets, Map<Long, List<Long>> target2Sources, Long sourceParentId, Long targetParentId) {
target2Sources.get(targetParentId).add(sourceParentId); if (sourceParentId != null && targetParentId != null) {
}else { if (source2Targets.containsKey(sourceParentId)) {
List<Long> sources = new ArrayList<>(); source2Targets.get(sourceParentId).add(targetParentId);
sources.add(sourceParentId); } else {
target2Sources.put(targetParentId,sources); List<Long> targets = new ArrayList<>();
} targets.add(targetParentId);
source2Targets.put(sourceParentId, targets);
} }
}
Map<Long, MetaData> metaDataMapLong = new HashMap<>(); if (target2Sources.containsKey(targetParentId)) {
List<Long> filterMetadata = new ArrayList<>(); target2Sources.get(targetParentId).add(sourceParentId);
List<Long> returnMetadata = new ArrayList<>(); } else {
//得到要过滤的节点过滤节点 List<Long> sources = new ArrayList<>();
for(MetaData metadata:metaDataList){ sources.add(sourceParentId);
Long dataId = metadata.getId(); target2Sources.put(targetParentId, sources);
String metadataId = metadata.getMetadataId();
String[] strings = metadataId.split("=");
String modelName = strings[0];
if(modelNameList.contains(modelName)){
returnMetadata.add(dataId);
}else {
filterMetadata.add(dataId);
} }
metaDataMapLong.put(dataId, metadata);
} }
}
//过滤节点,深度优先从入口节点遍历 private void getRelationFromFilterMetadata(Map<Long, List<Long>> source2Targets, Map<Long, List<Long>> target2Sources, List<Long> filterMetadata) {
for(Long filterNode :filterMetadata){ for(Long filterNode :filterMetadata){
if(source2Targets.containsKey(filterNode) && target2Sources.containsKey(filterNode) ){ if(source2Targets.containsKey(filterNode) && target2Sources.containsKey(filterNode) ){
List<Long> targets = source2Targets.get(filterNode); List<Long> targets = source2Targets.get(filterNode);
...@@ -208,38 +211,105 @@ public class MultiModelServiceImpl implements MultiModelService { ...@@ -208,38 +211,105 @@ public class MultiModelServiceImpl implements MultiModelService {
target2Sources.remove(filterNode); target2Sources.remove(filterNode);
for(Long target:targets){ for(Long target:targets){
for(Long source:sources){ for(Long source:sources){
if(source2Targets.containsKey(source)){ getFilterNodeSource2Target(source2Targets, target2Sources, filterNode, target, source);
List<Long> newTargets = source2Targets.get(source);
newTargets.remove(filterNode);
if(!newTargets.contains(target)) {
newTargets.add(target);
}
source2Targets.put(source,newTargets);
}else{
List<Long> newTargets = new ArrayList<>();
newTargets.add(target);
source2Targets.put(source,newTargets);
}
if(target2Sources.containsKey(target)){
List<Long> newSources = target2Sources.get(target);
newSources.remove(filterNode);
if(!newSources.contains(source)){
newSources.add(source);
}
target2Sources.put(target,newSources);
}else {
List<Long> newSources = new ArrayList<>();
newSources.add(source);
target2Sources.put(target,newSources);
}
} }
} }
} }
} }
}
private void getFilterNodeSource2Target(Map<Long, List<Long>> source2Targets, Map<Long, List<Long>> target2Sources, Long filterNode, Long target, Long source) {
if(source2Targets.containsKey(source)){
List<Long> newTargets = source2Targets.get(source);
newTargets.remove(filterNode);
if(!newTargets.contains(target)) {
newTargets.add(target);
}
source2Targets.put(source,newTargets);
}else{
List<Long> newTargets = new ArrayList<>();
newTargets.add(target);
source2Targets.put(source,newTargets);
}
if(target2Sources.containsKey(target)){
List<Long> newSources = target2Sources.get(target);
newSources.remove(filterNode);
if(!newSources.contains(source)){
newSources.add(source);
}
target2Sources.put(target,newSources);
}else {
List<Long> newSources = new ArrayList<>();
newSources.add(source);
target2Sources.put(target,newSources);
}
}
private void getExecuteRelations(List<ExecuteRelation> executeRelationList, Map<Long, Long> child2Parent, Map<Long, List<Long>> parent2Children) {
for(ExecuteRelation executeRelation:executeRelationList){
Long parentId = executeRelation.getStart().getId();
Long childId = executeRelation.getEnd().getId();
child2Parent.put(childId,parentId);
if(parent2Children.containsKey(parentId)){
parent2Children.get(parentId).add(childId);
}else {
List<Long> children = new ArrayList<>();
children.add(childId);
parent2Children.put(parentId,children);
}
}
}
private void getCompositionRelations(List<CompositionRelation> compositionRelationList, Map<Long, Long> child2Parent, Map<Long, List<Long>> parent2Children) {
for(CompositionRelation compositionRelation:compositionRelationList){
if(compositionRelation == null){
continue;
}
Long parentId = compositionRelation.getStart().getId();
Long childId = compositionRelation.getEnd().getId();
child2Parent.put(childId,parentId);
if(parent2Children.containsKey(parentId)){
parent2Children.get(parentId).add(childId);
}else {
List<Long> children = new ArrayList<>();
children.add(childId);
parent2Children.put(parentId,children);
}
}
}
private Map<String, MetaModel> getStringMetaModelMap(Map<Long, MetaData> metaDataMapLong, List<Long> returnMetadata, ReturnReslult returnReslult) {
Map<String, MetaModel> metaModelMap = new HashMap<>();
for(Long returnMeta:returnMetadata){
MetaData metaData = metaDataMapLong.get(returnMeta);
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");
returnReslult.getNodes().add(returnNode);
}
return metaModelMap;
}
private ReturnReslult getReturnReslult(Map<Long, List<Long>> parent2Children, Map<Long, List<Long>> source2Targets, Map<Long, MetaData> metaDataMapLong, List<Long> returnMetadata) {
ReturnReslult returnReslult = new ReturnReslult(); ReturnReslult returnReslult = new ReturnReslult();
for(Object obj: source2Targets.keySet()){ for(Object obj: source2Targets.keySet()){
...@@ -265,18 +335,23 @@ public class MultiModelServiceImpl implements MultiModelService { ...@@ -265,18 +335,23 @@ public class MultiModelServiceImpl implements MultiModelService {
} }
} }
for(Object obj: parent2Children.keySet()){ getResultFromParent2Children(parent2Children, metaDataMapLong, returnMetadata, returnReslult);
return returnReslult;
}
private void getResultFromParent2Children(Map<Long, List<Long>> parent2Children, Map<Long, MetaData> metaDataMapLong, List<Long> returnMetadata, ReturnReslult returnReslult) {
for (Object obj : parent2Children.keySet()) {
Long fromId = (Long) obj; Long fromId = (Long) obj;
if(!returnMetadata.contains(fromId)){ if (!returnMetadata.contains(fromId)) {
continue; continue;
} }
List<Long> toIds = parent2Children.get(obj); List<Long> toIds = parent2Children.get(obj);
for(Long toId:toIds){ for (Long toId : toIds) {
if(!returnMetadata.contains(toId)){ if (!returnMetadata.contains(toId)) {
continue; continue;
} }
ReturnEdge edge = new ReturnEdge(); ReturnEdge edge = new ReturnEdge();
edge.setEdgeId(fromId+"_"+toId); edge.setEdgeId(fromId + "_" + toId);
MetaData startNode = metaDataMapLong.get(fromId); MetaData startNode = metaDataMapLong.get(fromId);
MetaData endNode = metaDataMapLong.get(toId); MetaData endNode = metaDataMapLong.get(toId);
...@@ -287,33 +362,6 @@ public class MultiModelServiceImpl implements MultiModelService { ...@@ -287,33 +362,6 @@ public class MultiModelServiceImpl implements MultiModelService {
returnReslult.getEdges().add(edge); returnReslult.getEdges().add(edge);
} }
} }
Map<String, MetaModel> metaModelMap = new HashMap<>();
for(Long returnMeta:returnMetadata){
MetaData metaData = metaDataMapLong.get(returnMeta);
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");
returnReslult.getNodes().add(returnNode);
}
returnReslult.setMetaModelMap(metaModelMap);
return returnReslult;
} }
@Override @Override
...@@ -697,20 +745,22 @@ public class MultiModelServiceImpl implements MultiModelService { ...@@ -697,20 +745,22 @@ public class MultiModelServiceImpl implements MultiModelService {
// 图片转化成base64字符串 // 图片转化成base64字符串
public static String GetImageStr(String imgFile) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理 public static String GetImageStr(String imgFile) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
logger.info("存放图标的路径:" + imgFile); logger.info("存放图标的路径:" + imgFile);
InputStream in = null;
byte[] data = null; byte[] data = null;
// 读取图片字节数组 // 读取图片字节数组
try { try (InputStream in = new FileInputStream(imgFile)){
in = new FileInputStream(imgFile);
data = new byte[in.available()]; data = new byte[in.available()];
in.read(data); in.read(data);
in.close();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
// 对字节数组Base64编码 // 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder(); Base64.Encoder base64Encoder = Base64.getEncoder();
return encoder.encode(data);// 返回Base64编码过的字节数组字符串
return base64Encoder.encodeToString(data);
// BASE64Encoder encoder = new BASE64Encoder();
//
// return encoder.encode(data);// 返回Base64编码过的字节数组字符串
} }
private void traveNodeDFS(Long edgeStartId,Long sourceId, Map<Long, List<Long>> source2Targets,Map<Long, List<Long>> target2sources, private void traveNodeDFS(Long edgeStartId,Long sourceId, Map<Long, List<Long>> source2Targets,Map<Long, List<Long>> target2sources,
...@@ -742,8 +792,6 @@ public class MultiModelServiceImpl implements MultiModelService { ...@@ -742,8 +792,6 @@ public class MultiModelServiceImpl implements MultiModelService {
// traveNodeDFS(target,target,source2Targets,target2sources,filterMetadata,newEdges,isAnalysised); // traveNodeDFS(target,target,source2Targets,target2sources,filterMetadata,newEdges,isAnalysised);
// } // }
} }
}else{
} }
if(target2sources.containsKey(sourceId)){ if(target2sources.containsKey(sourceId)){
List<Long> sources = target2sources.get(sourceId); List<Long> sources = target2sources.get(sourceId);
......
...@@ -28,6 +28,8 @@ public class SchemaServiceImpl implements ISchemaService { ...@@ -28,6 +28,8 @@ public class SchemaServiceImpl implements ISchemaService {
return null; return null;
} }
private String MetadataModelName = "metadata";
private String LevelName = "level";
@Override @Override
public Map<String, List<ReturnNode>> getTablesBySchemaId(String schemaId) { public Map<String, List<ReturnNode>> getTablesBySchemaId(String schemaId) {
...@@ -42,49 +44,13 @@ public class SchemaServiceImpl implements ISchemaService { ...@@ -42,49 +44,13 @@ public class SchemaServiceImpl implements ISchemaService {
returnNode.setName(baseNode.getName()); returnNode.setName(baseNode.getName());
if(baseNode.getMetadataId().startsWith("Table=")){ if(baseNode.getMetadataId().startsWith("Table=")){
returnNode.setType("表"); getTableNode(schemaMap, returnNode);
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=")){ }else if(baseNode.getMetadataId().startsWith("View=")){
returnNode.setType("视图"); getViewNode(schemaMap, returnNode);
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=")){ }else if(baseNode.getMetadataId().startsWith("Function=")){
returnNode.setType("函数"); getFunctionNode(schemaMap, returnNode);
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=")){ }else if(baseNode.getMetadataId().startsWith("Procedure=")){
returnNode.setType("存储过程"); getProcedureNode(schemaMap, returnNode);
if(schemaMap.containsKey("存储过程")){
List<ReturnNode> returnNodeList = schemaMap.get("存储过程");
returnNodeList.add(returnNode);
}else {
List<ReturnNode> returnNodeList = new ArrayList<>();
returnNodeList.add(returnNode);
schemaMap.put("存储过程",returnNodeList);
}
}else { }else {
returnNode.setType("其他类型"); returnNode.setType("其他类型");
if(schemaMap.containsKey("其他类型")){ if(schemaMap.containsKey("其他类型")){
...@@ -102,6 +68,58 @@ public class SchemaServiceImpl implements ISchemaService { ...@@ -102,6 +68,58 @@ public class SchemaServiceImpl implements ISchemaService {
return schemaMap; return schemaMap;
} }
private void getProcedureNode(Map<String, List<ReturnNode>> schemaMap, ReturnNode returnNode) {
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);
}
}
private void getFunctionNode(Map<String, List<ReturnNode>> schemaMap, ReturnNode returnNode) {
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);
}
}
private void getViewNode(Map<String, List<ReturnNode>> schemaMap, ReturnNode returnNode) {
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);
}
}
private void getTableNode(Map<String, List<ReturnNode>> schemaMap, ReturnNode returnNode) {
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);
}
}
private static final Logger logger = LoggerFactory.getLogger(SchemaServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(SchemaServiceImpl.class);
...@@ -130,7 +148,7 @@ public class SchemaServiceImpl implements ISchemaService { ...@@ -130,7 +148,7 @@ public class SchemaServiceImpl implements ISchemaService {
metadataIds.add(schemaId); metadataIds.add(schemaId);
try{ try{
Map<String,List<Map<String,Object>>> returnResults = Map<String,List<Map<String,Object>>> returnResults =
tagRemoteService.getTagByMetadataId(metadataIds, "metadata", "level","", true,false); tagRemoteService.getTagByMetadataId(metadataIds, MetadataModelName, LevelName,"", true,false);
for(Object obj : returnResults.keySet()){ for(Object obj : returnResults.keySet()){
System.out.println(obj+" : "+returnResults.get(obj)); System.out.println(obj+" : "+returnResults.get(obj));
List<Map<String,Object>> mapList = returnResults.get(obj); List<Map<String,Object>> mapList = returnResults.get(obj);
...@@ -194,53 +212,57 @@ public class SchemaServiceImpl implements ISchemaService { ...@@ -194,53 +212,57 @@ public class SchemaServiceImpl implements ISchemaService {
if(size % count ==0){ if(size % count ==0){
logger.info("开始第"+num+"次调用标签,schema数量:"+schemaIds.size()); logger.info("开始第"+num+"次调用标签,schema数量:"+schemaIds.size());
Map<String,List<Map<String,Object>>> returnResults = Map<String,List<Map<String,Object>>> returnResults =
tagRemoteService.getTagByMetadataId(schemaIds, "metadata","level", "", true,false); tagRemoteService.getTagByMetadataId(schemaIds, MetadataModelName,LevelName, "", true,false);
logger.info("第"+num+"次调用标签接口完成。"); logger.info("第"+num+"次调用标签接口完成。");
num++; num++;
for(Object obj : returnResults.keySet()){
String schemaId = (String)obj; saveLabelFromTag(layer, neo4jSchemaMap, returnResults);
List<Map<String,Object>> mapList = returnResults.get(obj); // for(Object obj : returnResults.keySet()){
for(Map<String,Object> map : mapList){ // String schemaId = (String)obj;
String label =(String) map.get("name"); // List<Map<String,Object>> mapList = returnResults.get(obj);
if(layer.contains(label)){ // for(Map<String,Object> map : mapList){
Neo4jSchema neo4jSchema = neo4jSchemaMap.get(schemaId); // String label =(String) map.get("name");
neo4jSchema.setLabel(label); // if(layer.contains(label)){
neo4jSchemaRepository.save(neo4jSchema); // Neo4jSchema neo4jSchema = neo4jSchemaMap.get(schemaId);
// neo4jSchema.setLabel(label);
break; // neo4jSchemaRepository.save(neo4jSchema);
} //
} // break;
} // }
// }
// }
schemaIds.clear(); schemaIds.clear();
} }
} }
if(schemaIds !=null && schemaIds.size()!=0){ if(schemaIds !=null && schemaIds.size()!=0){
logger.info("开始第"+num+"次调用标签,schema数量:"+schemaIds.size()); logger.info("开始第"+num+"次调用标签,schema数量:"+schemaIds.size());
Map<String,List<Map<String,Object>>> returnResults = Map<String,List<Map<String,Object>>> returnResults =
tagRemoteService.getTagByMetadataId(schemaIds, "metadata","level", "", true,false); tagRemoteService.getTagByMetadataId(schemaIds, MetadataModelName,LevelName, "", true,false);
logger.info("第"+num+"次调用标签接口完成。"); logger.info("第"+num+"次调用标签接口完成。");
for(Object obj : returnResults.keySet()){ saveLabelFromTag(layer, neo4jSchemaMap, returnResults);
String schemaId = (String)obj;
List<Map<String,Object>> mapList = returnResults.get(obj);
for(Map<String,Object> map : mapList){
String label =(String) map.get("name");
if(layer.contains(label)){
Neo4jSchema neo4jSchema = neo4jSchemaMap.get(schemaId);
neo4jSchema.setLabel(label);
neo4jSchemaRepository.save(neo4jSchema);
break;
}
}
}
} }
long time2 = System.currentTimeMillis(); long time2 = System.currentTimeMillis();
logger.info("同步所有schema的标签完成。数量是:"+schemaIdList.size()+" ,用时:"+(time2-time1)); logger.info("同步所有schema的标签完成。数量是:"+schemaIdList.size()+" ,用时:"+(time2-time1));
return true; return true;
} }
private void saveLabelFromTag(List<String> layer, Map<String, Neo4jSchema> neo4jSchemaMap, Map<String, List<Map<String, Object>>> returnResults) {
for (Object obj : returnResults.keySet()) {
String schemaId = (String) obj;
List<Map<String, Object>> mapList = returnResults.get(obj);
for (Map<String, Object> map : mapList) {
String label = (String) map.get("name");
if (layer.contains(label)) {
Neo4jSchema neo4jSchema = neo4jSchemaMap.get(schemaId);
neo4jSchema.setLabel(label);
neo4jSchemaRepository.save(neo4jSchema);
break;
}
}
}
}
@Override @Override
public Map<String, String> getSchemaAndLabelMap(List<String> schemaIds) { public Map<String, String> getSchemaAndLabelMap(List<String> schemaIds) {
Map<String,String> schemaIdAndLabelMap = new HashMap<>(); Map<String,String> schemaIdAndLabelMap = new HashMap<>();
...@@ -262,14 +284,11 @@ public class SchemaServiceImpl implements ISchemaService { ...@@ -262,14 +284,11 @@ public class SchemaServiceImpl implements ISchemaService {
layer.add(SchemaLayerObject.jishicengData); layer.add(SchemaLayerObject.jishicengData);
layer.add(SchemaLayerObject.yingyongcengData); layer.add(SchemaLayerObject.yingyongcengData);
String returnLabel = "";
try { try {
Map<String,List<Map<String,Object>>> returnResults = Map<String,List<Map<String,Object>>> returnResults =
tagRemoteService.getTagByMetadataId(schemaIds, "metadata","level", "", true,false); tagRemoteService.getTagByMetadataId(schemaIds, MetadataModelName,LevelName, "", true,false);
for(Object obj : returnResults.keySet()){ for(Object obj : returnResults.keySet()){
String schemaId = (String)obj; String schemaId = (String)obj;
System.out.println(obj+" : "+returnResults.get(obj));
List<Map<String,Object>> mapList = returnResults.get(obj); List<Map<String,Object>> mapList = returnResults.get(obj);
for(Map<String,Object> map : mapList){ for(Map<String,Object> map : mapList){
String label =(String) map.get("name"); String label =(String) map.get("name");
......
...@@ -50,24 +50,7 @@ public class SystemServiceImpl implements ISystemService { ...@@ -50,24 +50,7 @@ public class SystemServiceImpl implements ISystemService {
returnNode.setName(neo4jSchema.getName()); returnNode.setName(neo4jSchema.getName());
returnNode.setType("Schema"); returnNode.setType("Schema");
String label = neo4jSchema.getLabel(); SetLabel(tyshcList, jcshcList, zhshcList, tjshcList, fxshcList, jsshcList, yysjcList, neo4jSchema, returnNode);
if(SchemaLayerObject.tieyuanceng.equals(label) ||SchemaLayerObject.tieyuancengData.equals(label) ){
tyshcList.add(returnNode);
}else if(SchemaLayerObject.jichuceng.equals(label) ||SchemaLayerObject.jichucengData.equals(label)){
jcshcList.add(returnNode);
}else if(SchemaLayerObject.zhengheceng.equals(label) ||SchemaLayerObject.zhenghecengData.equals(label)){
zhshcList.add(returnNode);
}else if(SchemaLayerObject.tongjiceng.equals(label) ||SchemaLayerObject.tongjicengData.equals(label)){
tjshcList.add(returnNode);
}else if(SchemaLayerObject.fenxiceng.equals(label) ||SchemaLayerObject.fenxicengData.equals(label)){
fxshcList.add(returnNode);
}else if(SchemaLayerObject.jishiceng.equals(label) || SchemaLayerObject.jishicengData.equals(label)){
jsshcList.add(returnNode);
}else if(SchemaLayerObject.yingyongceng.equals(label) ||SchemaLayerObject.yingyongcengData.equals(label)){
yysjcList.add(returnNode);
}else {
// schemaMap.get("未分层").add(returnNode);
}
// if(schemaMap .containsKey(label)){ // if(schemaMap .containsKey(label)){
// List<ReturnNode> returnNodeList = schemaMap.get(label); // List<ReturnNode> returnNodeList = schemaMap.get(label);
...@@ -81,6 +64,11 @@ public class SystemServiceImpl implements ISystemService { ...@@ -81,6 +64,11 @@ public class SystemServiceImpl implements ISystemService {
// } // }
} }
SetLabelToSchema(schemaMap, tyshcList, jcshcList, zhshcList, tjshcList, fxshcList, jsshcList, yysjcList);
return schemaMap;
}
private void SetLabelToSchema(Map<String, List<ReturnNode>> schemaMap, List<ReturnNode> tyshcList, List<ReturnNode> jcshcList, List<ReturnNode> zhshcList, List<ReturnNode> tjshcList, List<ReturnNode> fxshcList, List<ReturnNode> jsshcList, List<ReturnNode> yysjcList) {
if(tyshcList !=null && tyshcList.size()!=0){ if(tyshcList !=null && tyshcList.size()!=0){
schemaMap.put(SchemaLayerObject.tieyuanceng,tyshcList); schemaMap.put(SchemaLayerObject.tieyuanceng,tyshcList);
} }
...@@ -102,7 +90,27 @@ public class SystemServiceImpl implements ISystemService { ...@@ -102,7 +90,27 @@ public class SystemServiceImpl implements ISystemService {
if(yysjcList !=null && yysjcList.size()!=0){ if(yysjcList !=null && yysjcList.size()!=0){
schemaMap.put(SchemaLayerObject.yingyongceng,yysjcList); schemaMap.put(SchemaLayerObject.yingyongceng,yysjcList);
} }
return schemaMap; }
private void SetLabel(List<ReturnNode> tyshcList, List<ReturnNode> jcshcList, List<ReturnNode> zhshcList, List<ReturnNode> tjshcList, List<ReturnNode> fxshcList, List<ReturnNode> jsshcList, List<ReturnNode> yysjcList, Neo4jSchema neo4jSchema, ReturnNode returnNode) {
String label = neo4jSchema.getLabel();
if(SchemaLayerObject.tieyuanceng.equals(label) ||SchemaLayerObject.tieyuancengData.equals(label) ){
tyshcList.add(returnNode);
}else if(SchemaLayerObject.jichuceng.equals(label) ||SchemaLayerObject.jichucengData.equals(label)){
jcshcList.add(returnNode);
}else if(SchemaLayerObject.zhengheceng.equals(label) ||SchemaLayerObject.zhenghecengData.equals(label)){
zhshcList.add(returnNode);
}else if(SchemaLayerObject.tongjiceng.equals(label) ||SchemaLayerObject.tongjicengData.equals(label)){
tjshcList.add(returnNode);
}else if(SchemaLayerObject.fenxiceng.equals(label) ||SchemaLayerObject.fenxicengData.equals(label)){
fxshcList.add(returnNode);
}else if(SchemaLayerObject.jishiceng.equals(label) || SchemaLayerObject.jishicengData.equals(label)){
jsshcList.add(returnNode);
}else if(SchemaLayerObject.yingyongceng.equals(label) ||SchemaLayerObject.yingyongcengData.equals(label)){
yysjcList.add(returnNode);
}else {
// schemaMap.get("未分层").add(returnNode);
}
} }
@Override @Override
......
...@@ -4,7 +4,6 @@ import com.keymobile.metadata.metadataRelation.config.Neo4jConfig; ...@@ -4,7 +4,6 @@ import com.keymobile.metadata.metadataRelation.config.Neo4jConfig;
import com.keymobile.metadata.metadataRelation.pojo.BaseNode; 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.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.ReturnEdge;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnNode; import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnNode;
import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnReslult; import com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnReslult;
...@@ -51,6 +50,16 @@ public class TableServiceImpl implements ITableService { ...@@ -51,6 +50,16 @@ public class TableServiceImpl implements ITableService {
@Autowired @Autowired
private MetadataRepoRemoteService metadataRepoRemoteService; private MetadataRepoRemoteService metadataRepoRemoteService;
private String TableEqual = "Table=";
private String TableModelName = "Table";
private String ColumnModelName = "Column";
private String ETLScriptModelName = "ETLScript=";
private String FileModelName = "File=";
private String SystemModelName = "System=";
private String EtlJobEqual = "ETLJob=";
private String JobAnalyzer = "jobAnalyzer";
@Override @Override
public Map<String, List<ReturnNode>> getRelationObjectByTableId(String tableId) { public Map<String, List<ReturnNode>> getRelationObjectByTableId(String tableId) {
//传入表id,查找与该表相关的“模型,资产,标准,质量,作业”, //传入表id,查找与该表相关的“模型,资产,标准,质量,作业”,
...@@ -59,25 +68,9 @@ public class TableServiceImpl implements ITableService { ...@@ -59,25 +68,9 @@ public class TableServiceImpl implements ITableService {
List<ReturnNode> etlJobs = new ArrayList<>(); List<ReturnNode> etlJobs = new ArrayList<>();
//获取关联作业, //获取关联作业,
List<BaseNode> sourceBaseNodes = neo4jTableRepository.getSourceEtlJob(tableId); List<BaseNode> sourceBaseNodes = neo4jTableRepository.getSourceEtlJob(tableId);
for(BaseNode sourceBaseNode:sourceBaseNodes){ getEtjJobFromSource(etlJobs, sourceBaseNodes);
if(sourceBaseNode.getMetadataId().startsWith("ETLJob=")){
ReturnNode returnNode = new ReturnNode();
returnNode.setId(sourceBaseNode.getMetadataId());
returnNode.setName(sourceBaseNode.getName());
returnNode.setType("ETLJob");
etlJobs.add(returnNode);
}
}
List<BaseNode> targetBaseNodes = neo4jTableRepository.getTargetEtlJob(tableId); List<BaseNode> targetBaseNodes = neo4jTableRepository.getTargetEtlJob(tableId);
for(BaseNode targetBaseNode:targetBaseNodes){ getEtlJobFromTarget(etlJobs, targetBaseNodes);
if(targetBaseNode.getMetadataId().startsWith("ETLJob=")){
ReturnNode returnNode = new ReturnNode();
returnNode.setId(targetBaseNode.getMetadataId());
returnNode.setName(targetBaseNode.getName());
returnNode.setType("ETLJob");
etlJobs.add(returnNode);
}
}
relationObjects.put("作业",etlJobs); relationObjects.put("作业",etlJobs);
//质量报告 //质量报告
...@@ -102,8 +95,8 @@ public class TableServiceImpl implements ITableService { ...@@ -102,8 +95,8 @@ public class TableServiceImpl implements ITableService {
reportIdList.add(reportId); reportIdList.add(reportId);
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(reportId); returnNode.setId(reportId);
returnNode.setName(dataQualityRepost.get("jobAnalyzer")); returnNode.setName(dataQualityRepost.get(JobAnalyzer));
returnNode.setCnName(dataQualityRepost.get("jobAnalyzer")); returnNode.setCnName(dataQualityRepost.get(JobAnalyzer));
returnNode.setAttributeMaps(dataQualityRepost); returnNode.setAttributeMaps(dataQualityRepost);
qualityList.add(returnNode); qualityList.add(returnNode);
} }
...@@ -167,10 +160,34 @@ public class TableServiceImpl implements ITableService { ...@@ -167,10 +160,34 @@ public class TableServiceImpl implements ITableService {
return relationObjects; return relationObjects;
} }
private void getEtlJobFromTarget(List<ReturnNode> etlJobs, List<BaseNode> targetBaseNodes) {
for (BaseNode targetBaseNode : targetBaseNodes) {
if (targetBaseNode.getMetadataId().startsWith(EtlJobEqual)) {
ReturnNode returnNode = new ReturnNode();
returnNode.setId(targetBaseNode.getMetadataId());
returnNode.setName(targetBaseNode.getName());
returnNode.setType("ETLJob");
etlJobs.add(returnNode);
}
}
}
private void getEtjJobFromSource(List<ReturnNode> etlJobs, List<BaseNode> sourceBaseNodes) {
for (BaseNode sourceBaseNode : sourceBaseNodes) {
if (sourceBaseNode.getMetadataId().startsWith(EtlJobEqual)) {
ReturnNode returnNode = new ReturnNode();
returnNode.setId(sourceBaseNode.getMetadataId());
returnNode.setName(sourceBaseNode.getName());
returnNode.setType("ETLJob");
etlJobs.add(returnNode);
}
}
}
private List<ReturnNode> getCurrentTableInfo(String tableId) { private List<ReturnNode> getCurrentTableInfo(String tableId) {
List<ReturnNode> returnTableList = new ArrayList<>(); List<ReturnNode> returnTableList = new ArrayList<>();
if(tableId.startsWith("Table=")){ if(tableId.startsWith(TableEqual)){
Neo4jTable neo4jTable = neo4jTableRepository.findNeo4jTableByMetadataId(tableId); Neo4jTable neo4jTable = neo4jTableRepository.findNeo4jTableByMetadataId(tableId);
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
if(neo4jTable != null){ if(neo4jTable != null){
...@@ -178,13 +195,13 @@ public class TableServiceImpl implements ITableService { ...@@ -178,13 +195,13 @@ public class TableServiceImpl implements ITableService {
returnNode.setName(neo4jTable.getName()); returnNode.setName(neo4jTable.getName());
} }
returnNode.setType("Table"); returnNode.setType(TableModelName);
// 获取属性 // 获取属性
Map<String,String> attributeMap = getAttributeMap(tableId); Map<String,String> attributeMap = getAttributeMap(tableId);
returnNode.setAttributeMaps(attributeMap); returnNode.setAttributeMaps(attributeMap);
returnTableList.add(returnNode); returnTableList.add(returnNode);
}else if(tableId.startsWith("ETLJob=")){ }else if(tableId.startsWith(EtlJobEqual)){
Neo4jETLJob neo4jETLJob = neo4jETLJobRepository.findNeo4jETLJobByMetadataId(tableId); Neo4jETLJob neo4jETLJob = neo4jETLJobRepository.findNeo4jETLJobByMetadataId(tableId);
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(neo4jETLJob.getMetadataId()); returnNode.setId(neo4jETLJob.getMetadataId());
...@@ -193,7 +210,7 @@ public class TableServiceImpl implements ITableService { ...@@ -193,7 +210,7 @@ public class TableServiceImpl implements ITableService {
// //
returnTableList.add(returnNode); returnTableList.add(returnNode);
}else if(tableId.startsWith("ETLScript=")){ }else if(tableId.startsWith(ETLScriptModelName)){
Neo4jETLScript neo4jETLScript = neo4jETLScriptRepository.findNeo4jETLScriptByMetadataId(tableId); Neo4jETLScript neo4jETLScript = neo4jETLScriptRepository.findNeo4jETLScriptByMetadataId(tableId);
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(neo4jETLScript.getMetadataId()); returnNode.setId(neo4jETLScript.getMetadataId());
...@@ -231,7 +248,7 @@ public class TableServiceImpl implements ITableService { ...@@ -231,7 +248,7 @@ public class TableServiceImpl implements ITableService {
MetaData metaData = new MetaData(); MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData); Neo4jTool.transMap2Bean(stringObjectMap, metaData);
if(metaData.getMetadataId() == null ){ if(metaData.getMetadataId() == null ){
metaData.setMetadataId("System="+metaData.getName()); metaData.setMetadataId(SystemModelName+metaData.getName());
} }
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
...@@ -268,28 +285,87 @@ public class TableServiceImpl implements ITableService { ...@@ -268,28 +285,87 @@ public class TableServiceImpl implements ITableService {
StatementResult result = session.run(cypher); StatementResult result = session.run(cypher);
while(result.hasNext()){ while(result.hasNext()){
Record record = result.next(); getResultFromColumn(returnNodeMap, returnEdgeMap, result);
List<Value> values = record.values(); }
for (Value value : values) { for(Object obj:returnNodeMap.keySet()){
if (value.type().name().equals("PATH")) { ReturnNode returnNode = (ReturnNode)returnNodeMap.get(obj);
Path p = value.asPath(); returnReslult.getNodes().add(returnNode);
Iterable<Node> nodes = p.nodes(); }
Map<Long, MetaData> nodesMap = new HashMap<>(); for(Object obj:returnEdgeMap.keySet()){
for (Node node : nodes) { ReturnEdge returnEdge = (ReturnEdge)returnEdgeMap.get(obj);
Map<String, Object> stringObjectMap = node.asMap(); returnReslult.getEdges().add(returnEdge);
}
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData); return returnReslult;
}
private void getResultFromColumn(Map<String, ReturnNode> returnNodeMap, Map<String, ReturnEdge> returnEdgeMap, StatementResult result) {
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) {
getResultFromNeo4jNode(returnNodeMap, nodesMap, node);
}
Iterable<Relationship> relationships = p.relationships();
for (Relationship relationship : relationships) {
getResultFromNeo4jRelationShip(returnEdgeMap, nodesMap, relationship);
}
}
}
}
private void getResultFromNeo4jRelationShip(Map<String, ReturnEdge> returnEdgeMap, Map<Long, MetaData> nodesMap, Relationship relationship) {
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);
}
private void getResultFromNeo4jNode(Map<String, ReturnNode> returnNodeMap, Map<Long, MetaData> nodesMap, Node node) {
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
// metaDataList.add(data); // metaDataList.add(data);
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId()); returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName()); returnNode.setName(metaData.getName());
String[] strings = metaData.getMetadataId().split("="); String[] strings = metaData.getMetadataId().split("=");
String modelName = strings[0]; String modelName = strings[0];
returnNode.setIcon(modelName); returnNode.setIcon(modelName);
// if (!metaModelMap.containsKey(modelName)) { // if (!metaModelMap.containsKey(modelName)) {
// MetaModel model = new MetaModel(); // MetaModel model = new MetaModel();
// String iconContext = getIconByModelId(modelName); // String iconContext = getIconByModelId(modelName);
...@@ -299,56 +375,9 @@ public class TableServiceImpl implements ITableService { ...@@ -299,56 +375,9 @@ public class TableServiceImpl implements ITableService {
// model.setIcon(iconContext); // model.setIcon(iconContext);
// metaModelMap.put(modelName, model); // metaModelMap.put(modelName, model);
// } // }
returnNode.setType("MetaData"); returnNode.setType("MetaData");
returnNodeMap.put(returnNode.getId(),returnNode); returnNodeMap.put(returnNode.getId(),returnNode);
nodesMap.put(node.id(), metaData); 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 @Override
...@@ -364,16 +393,16 @@ public class TableServiceImpl implements ITableService { ...@@ -364,16 +393,16 @@ public class TableServiceImpl implements ITableService {
ReturnNode returnTableNode = new ReturnNode(); ReturnNode returnTableNode = new ReturnNode();
returnTableNode.setId(returnTable.getMetadataId()); returnTableNode.setId(returnTable.getMetadataId());
returnTableNode.setName(returnTable.getName()); returnTableNode.setName(returnTable.getName());
returnTableNode.setType("Table"); returnTableNode.setType(TableModelName);
returnReslult.getNodes().add(returnTableNode); returnReslult.getNodes().add(returnTableNode);
List<BaseNode> targetBaseNodeList = neo4jTableRepository.getTargetTable(tableId); List<BaseNode> targetBaseNodeList = neo4jTableRepository.getTargetTable(tableId);
for(BaseNode targetBaseNode:targetBaseNodeList){ for(BaseNode targetBaseNode:targetBaseNodeList){
if(targetBaseNode.getMetadataId().startsWith("Table=")){ if(targetBaseNode.getMetadataId().startsWith(TableEqual)){
//是表 //是表
Neo4jTable neo4jTable = neo4jTableRepository.findNeo4jTableByMetadataId(targetBaseNode.getMetadataId()); Neo4jTable neo4jTable = neo4jTableRepository.findNeo4jTableByMetadataId(targetBaseNode.getMetadataId());
targetTableList.add(neo4jTable); targetTableList.add(neo4jTable);
}else if(targetBaseNode.getMetadataId().startsWith("ETLScript=")){ }else if(targetBaseNode.getMetadataId().startsWith(ETLScriptModelName)){
getTargetRelationAboutTables(targetBaseNode.getMetadataId(),targetTableList); getTargetRelationAboutTables(targetBaseNode.getMetadataId(),targetTableList);
//不是表,就继续找 //不是表,就继续找
} }
...@@ -383,7 +412,7 @@ public class TableServiceImpl implements ITableService { ...@@ -383,7 +412,7 @@ public class TableServiceImpl implements ITableService {
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(sourceTable.getMetadataId()); returnNode.setId(sourceTable.getMetadataId());
returnNode.setName(sourceTable.getName()); returnNode.setName(sourceTable.getName());
returnNode.setType("Table"); returnNode.setType(TableModelName);
returnNodeMap.put(sourceTable.getMetadataId(),returnNode); returnNodeMap.put(sourceTable.getMetadataId(),returnNode);
ReturnEdge returnEdge = new ReturnEdge(); ReturnEdge returnEdge = new ReturnEdge();
...@@ -397,11 +426,11 @@ public class TableServiceImpl implements ITableService { ...@@ -397,11 +426,11 @@ public class TableServiceImpl implements ITableService {
List<Neo4jTable> sourceTableList = new ArrayList<>(); List<Neo4jTable> sourceTableList = new ArrayList<>();
List<BaseNode> sourceBaseNodeList = neo4jTableRepository.getSourceTable(tableId); List<BaseNode> sourceBaseNodeList = neo4jTableRepository.getSourceTable(tableId);
for(BaseNode sourceBaseNode:sourceBaseNodeList){ for(BaseNode sourceBaseNode:sourceBaseNodeList){
if(sourceBaseNode.getMetadataId().startsWith("Table=")){ if(sourceBaseNode.getMetadataId().startsWith(TableEqual)){
//是表 //是表
Neo4jTable neo4jTable = neo4jTableRepository.findNeo4jTableByMetadataId(sourceBaseNode.getMetadataId()); Neo4jTable neo4jTable = neo4jTableRepository.findNeo4jTableByMetadataId(sourceBaseNode.getMetadataId());
sourceTableList.add(neo4jTable); sourceTableList.add(neo4jTable);
}else if(sourceBaseNode.getMetadataId().startsWith("ETLScript=")){ }else if(sourceBaseNode.getMetadataId().startsWith(ETLScriptModelName)){
getSourceRelationAboutTables(sourceBaseNode.getMetadataId(),sourceTableList); getSourceRelationAboutTables(sourceBaseNode.getMetadataId(),sourceTableList);
//不是表,就继续找 //不是表,就继续找
} }
...@@ -411,7 +440,7 @@ public class TableServiceImpl implements ITableService { ...@@ -411,7 +440,7 @@ public class TableServiceImpl implements ITableService {
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(sourceTable.getMetadataId()); returnNode.setId(sourceTable.getMetadataId());
returnNode.setName(sourceTable.getName()); returnNode.setName(sourceTable.getName());
returnNode.setType("Table"); returnNode.setType(TableModelName);
returnNodeMap.put(sourceTable.getMetadataId(),returnNode); returnNodeMap.put(sourceTable.getMetadataId(),returnNode);
ReturnEdge returnEdge = new ReturnEdge(); ReturnEdge returnEdge = new ReturnEdge();
...@@ -473,12 +502,12 @@ public class TableServiceImpl implements ITableService { ...@@ -473,12 +502,12 @@ public class TableServiceImpl implements ITableService {
returnTable.setId(neo4jTable.getMetadataId()); returnTable.setId(neo4jTable.getMetadataId());
returnTable.setName(neo4jTable.getName()); returnTable.setName(neo4jTable.getName());
returnTable.setType("Table"); returnTable.setType(TableModelName);
returnNodeMap.put(returnTable.getId(),returnTable); returnNodeMap.put(returnTable.getId(),returnTable);
} }
//先找出 表的前后关系,再找出表的字段,然后找出字段的前后关系, //先找出 表的前后关系,再找出表的字段,然后找出字段的前后关系,
String sourceTablecypher = "match (n:Neo4jTable{metadataId:\""+ tableId +"\"})<-[r1:流向]-(n1)<-[r0:TempRelation*0..]-(m2)<-[r:流向]-(m1) return m1"; String sourceTablecypher = "match ( n:Neo4jTable { metadataId:\""+ tableId +"\"})<-[r1:流向]-(n1)<-[r0:TempRelation*0..]-(m2)<-[r:流向]-(m1) return m1";
long time01=System.currentTimeMillis(); long time01=System.currentTimeMillis();
StatementResult sourceTableResult = session.run(sourceTablecypher); StatementResult sourceTableResult = session.run(sourceTablecypher);
...@@ -487,37 +516,9 @@ public class TableServiceImpl implements ITableService { ...@@ -487,37 +516,9 @@ public class TableServiceImpl implements ITableService {
runCypherCount++; runCypherCount++;
// 先找出源表 // 先找出源表
while(sourceTableResult.hasNext()){ while(sourceTableResult.hasNext()){
Record record = sourceTableResult.next(); getReturnResultFromSourceTable(tableId, returnNodeMap, returnEdgeMap, tableIdMap, sourceTableResult);
List<Value> values = record.values();
for (Value value : values) {
if(value.type().name().equals("NODE")){
Node node = value.asNode();
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
if(metaData.getMetadataId() == null ){
metaData.setMetadataId("System="+metaData.getName());
}
ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName());
returnNode.setCnName(metaData.getCnName());
returnNode.setDataPath(metaData.getPath());
returnNode.setType("Table");
returnNodeMap.put(returnNode.getId(),returnNode);
tableIdMap.put(returnNode.getId(),"");
ReturnEdge returnEdge = new ReturnEdge();
String edgeId =returnNode.getId() +"_"+ tableId;
returnEdge.setFromId(returnNode.getId());
returnEdge.setToId(tableId );
returnEdge.setType("To");
returnEdge.setEdgeId(edgeId);
returnEdgeMap.put(edgeId,returnEdge);
}
}
} }
String targetTablecypher = "match (n:Neo4jTable{metadataId:\""+ tableId +"\"})-[r1:流向]->(n1)-[r0:TempRelation*0..]->(m2)-[r:流向]->(m1) return m1"; String targetTablecypher = "match ( n: Neo4jTable{metadataId:\""+ tableId +"\"})-[r1:流向]->(n1)-[r0:TempRelation*0..]->(m2)-[r:流向]->(m1) return m1";
long time20=System.currentTimeMillis(); long time20=System.currentTimeMillis();
StatementResult targetTablecResult = session.run(targetTablecypher); StatementResult targetTablecResult = session.run(targetTablecypher);
runCypherCount++; runCypherCount++;
...@@ -525,36 +526,7 @@ public class TableServiceImpl implements ITableService { ...@@ -525,36 +526,7 @@ public class TableServiceImpl implements ITableService {
runCypherTime += (time21-time20); runCypherTime += (time21-time20);
// 找出目标表 // 找出目标表
while(targetTablecResult.hasNext()){ while(targetTablecResult.hasNext()){
Record record = targetTablecResult.next(); getReturnResultFromTargetTable(tableId, returnNodeMap, returnEdgeMap, tableIdMap, targetTablecResult);
List<Value> values = record.values();
for (Value value : values) {
if(value.type().name().equals("NODE")){
Node node = value.asNode();
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
if(metaData.getMetadataId() == null ){
metaData.setMetadataId("System="+metaData.getName());
}
ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName());
returnNode.setCnName(metaData.getCnName());
returnNode.setDataPath(metaData.getPath());
returnNode.setType("Table");
returnNodeMap.put(returnNode.getId(),returnNode);
tableIdMap.put(returnNode.getId(),"");
ReturnEdge returnEdge = new ReturnEdge();
String edgeId = tableId+"_"+returnNode.getId();
returnEdge.setFromId(tableId);
returnEdge.setToId(returnNode.getId());
returnEdge.setType("To");
returnEdge.setEdgeId(edgeId);
returnEdgeMap.put(edgeId,returnEdge);
}
}
} }
int respossitoryCount= 0; int respossitoryCount= 0;
...@@ -577,38 +549,7 @@ public class TableServiceImpl implements ITableService { ...@@ -577,38 +549,7 @@ public class TableServiceImpl implements ITableService {
runCypherTime += (time31-time30); runCypherTime += (time31-time30);
runCypherCount++; runCypherCount++;
while(targetColumnResult.hasNext()){ while(targetColumnResult.hasNext()){
Record record = targetColumnResult.next(); getResultFromTargetColumn(childrenEdgeMap, withRelationColumns, currentColumnId, targetColumnResult);
List<Value> values = record.values();
for (Value value : values) {
if(value.type().name().equals("NODE")){
Node node = value.asNode();
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
if(metaData.getMetadataId() == null ){
metaData.setMetadataId("System="+metaData.getName());
}
ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName());
returnNode.setCnName(metaData.getCnName());
returnNode.setType("Column");
returnNode.setDataPath(metaData.getPath());
// returnNodeMap.put(returnNode.getId(),returnNode);
withRelationColumns.put(currentColumnId,"");
withRelationColumns.put(returnNode.getId(),"");
ReturnEdge returnEdge = new ReturnEdge();
String edgeId = currentColumnId+"_"+returnNode.getId();
returnEdge.setFromId(currentColumnId);
returnEdge.setToId(returnNode.getId());
returnEdge.setType("To");
returnEdge.setEdgeId(edgeId);
childrenEdgeMap.put(edgeId,returnEdge);
}
}
} }
String sourceColumncypher = "match (m:Neo4jColumn{metadataId:\""+currentColumnId+"\"})<-[r1:流向]-(n1)<-[r0:TempRelation*0..]-(m2)<-[r:流向]-(m1) return m1"; String sourceColumncypher = "match (m:Neo4jColumn{metadataId:\""+currentColumnId+"\"})<-[r1:流向]-(n1)<-[r0:TempRelation*0..]-(m2)<-[r:流向]-(m1) return m1";
...@@ -618,36 +559,7 @@ public class TableServiceImpl implements ITableService { ...@@ -618,36 +559,7 @@ public class TableServiceImpl implements ITableService {
long time41=System.currentTimeMillis(); long time41=System.currentTimeMillis();
runCypherTime += (time41-time40); runCypherTime += (time41-time40);
while(sourceColumnResult.hasNext()){ while(sourceColumnResult.hasNext()){
Record record = sourceColumnResult.next(); getResultFromSourceColumn(childrenEdgeMap, withRelationColumns, currentColumnId, sourceColumnResult);
List<Value> values = record.values();
for (Value value : values) {
if(value.type().name().equals("NODE")){
Node node = value.asNode();
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
if(metaData.getMetadataId() == null ){
metaData.setMetadataId("System="+metaData.getName());
}
ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName());
returnNode.setCnName(metaData.getCnName());
returnNode.setDataPath(metaData.getPath());
returnNode.setType("Column");
// returnNodeMap.put(returnNode.getId(),returnNode);
withRelationColumns.put(currentColumnId,"");
withRelationColumns.put(returnNode.getId(),"");
ReturnEdge returnEdge = new ReturnEdge();
String edgeId =returnNode.getId() +"_"+currentColumnId;
returnEdge.setFromId(returnNode.getId() );
returnEdge.setToId(currentColumnId);
returnEdge.setType("To");
returnEdge.setEdgeId(edgeId);
childrenEdgeMap.put(edgeId,returnEdge);
}
}
} }
} }
...@@ -660,45 +572,9 @@ public class TableServiceImpl implements ITableService { ...@@ -660,45 +572,9 @@ public class TableServiceImpl implements ITableService {
StatementResult table2CoumnResult = session.run(table2CoumnCypher); StatementResult table2CoumnResult = session.run(table2CoumnCypher);
long time104 = System.currentTimeMillis(); long time104 = System.currentTimeMillis();
runCypherTime += (time104 - time103); runCypherTime += (time104 - time103);
ReturnNode currentTableNode = returnNodeMap.get(currentTableId); ReturnNode currentTableNode = returnNodeMap.get(currentTableId);
while(table2CoumnResult.hasNext()){ while(table2CoumnResult.hasNext()){
Record record = table2CoumnResult.next(); getReturnNodeFromColumn(withRelationColumns, table2CoumnResult, currentTableNode);
List<Value> values = record.values();
for (Value value : values) {
if(value.type().name().equals("NODE")){
Node node = value.asNode();
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
if(metaData.getMetadataId() == null ){
metaData.setMetadataId("System="+metaData.getName());
}
String columnId = metaData.getMetadataId();
ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName());
returnNode.setCnName(metaData.getCnName());
returnNode.setDataPath(metaData.getPath());
if(!withRelationColumns.containsKey(columnId)){
returnNode.setDataPath("noRelation");
}
returnNode.setType("Column");
currentTableNode.getChildren().add(returnNode);
// ReturnEdge returnEdge = new ReturnEdge();
// String edgeId = currentTableId+"_"+columnId;
// returnEdge.setEdgeId(edgeId);
// returnEdge.setFromId(currentTableId);
// returnEdge.setToId(columnId);
// returnEdge.setType("Composition");
// returnEdgeMap.put(edgeId,returnEdge);
}
}
} }
} }
...@@ -723,19 +599,182 @@ public class TableServiceImpl implements ITableService { ...@@ -723,19 +599,182 @@ public class TableServiceImpl implements ITableService {
return returnReslult; return returnReslult;
} }
private void getReturnNodeFromColumn(Map<String, String> withRelationColumns, StatementResult table2CoumnResult, ReturnNode currentTableNode) {
Record record = table2CoumnResult.next();
List<Value> values = record.values();
for (Value value : values) {
if(value.type().name().equals("NODE")){
Node node = value.asNode();
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
if(metaData.getMetadataId() == null ){
metaData.setMetadataId(SystemModelName+metaData.getName());
}
String columnId = metaData.getMetadataId();
ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName());
returnNode.setCnName(metaData.getCnName());
returnNode.setDataPath(metaData.getPath());
if(!withRelationColumns.containsKey(columnId)){
returnNode.setDataPath("noRelation");
}
returnNode.setType(ColumnModelName);
currentTableNode.getChildren().add(returnNode);
}
}
}
private void getResultFromTargetColumn(Map<String, ReturnEdge> childrenEdgeMap, Map<String, String> withRelationColumns, String currentColumnId, StatementResult targetColumnResult) {
Record record = targetColumnResult.next();
List<Value> values = record.values();
for (Value value : values) {
if(value.type().name().equals("NODE")){
Node node = value.asNode();
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
if(metaData.getMetadataId() == null ){
metaData.setMetadataId(SystemModelName+metaData.getName());
}
ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName());
returnNode.setCnName(metaData.getCnName());
returnNode.setType(ColumnModelName);
returnNode.setDataPath(metaData.getPath());
// returnNodeMap.put(returnNode.getId(),returnNode);
withRelationColumns.put(currentColumnId,"");
withRelationColumns.put(returnNode.getId(),"");
ReturnEdge returnEdge = new ReturnEdge();
String edgeId = currentColumnId+"_"+returnNode.getId();
returnEdge.setFromId(currentColumnId);
returnEdge.setToId(returnNode.getId());
returnEdge.setType("To");
returnEdge.setEdgeId(edgeId);
childrenEdgeMap.put(edgeId,returnEdge);
}
}
}
private void getResultFromSourceColumn(Map<String, ReturnEdge> childrenEdgeMap, Map<String, String> withRelationColumns, String currentColumnId, StatementResult sourceColumnResult) {
Record record = sourceColumnResult.next();
List<Value> values = record.values();
for (Value value : values) {
if(value.type().name().equals("NODE")){
Node node = value.asNode();
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
if(metaData.getMetadataId() == null ){
metaData.setMetadataId(SystemModelName+metaData.getName());
}
ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName());
returnNode.setCnName(metaData.getCnName());
returnNode.setDataPath(metaData.getPath());
returnNode.setType(ColumnModelName);
// returnNodeMap.put(returnNode.getId(),returnNode);
withRelationColumns.put(currentColumnId,"");
withRelationColumns.put(returnNode.getId(),"");
ReturnEdge returnEdge = new ReturnEdge();
String edgeId =returnNode.getId() +"_"+currentColumnId;
returnEdge.setFromId(returnNode.getId() );
returnEdge.setToId(currentColumnId);
returnEdge.setType("To");
returnEdge.setEdgeId(edgeId);
childrenEdgeMap.put(edgeId,returnEdge);
}
}
}
private void getReturnResultFromTargetTable(String tableId, Map<String, ReturnNode> returnNodeMap, Map<String, ReturnEdge> returnEdgeMap, Map<String, String> tableIdMap, StatementResult targetTablecResult) {
Record record = targetTablecResult.next();
List<Value> values = record.values();
for (Value value : values) {
if(value.type().name().equals("NODE")){
Node node = value.asNode();
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
if(metaData.getMetadataId() == null ){
metaData.setMetadataId(SystemModelName+metaData.getName());
}
ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName());
returnNode.setCnName(metaData.getCnName());
returnNode.setDataPath(metaData.getPath());
returnNode.setType(TableModelName);
returnNodeMap.put(returnNode.getId(),returnNode);
tableIdMap.put(returnNode.getId(),"");
ReturnEdge returnEdge = new ReturnEdge();
String edgeId = tableId+"_"+returnNode.getId();
returnEdge.setFromId(tableId);
returnEdge.setToId(returnNode.getId());
returnEdge.setType("To");
returnEdge.setEdgeId(edgeId);
returnEdgeMap.put(edgeId,returnEdge);
}
}
}
private void getReturnResultFromSourceTable(String tableId, Map<String, ReturnNode> returnNodeMap, Map<String, ReturnEdge> returnEdgeMap, Map<String, String> tableIdMap, StatementResult sourceTableResult) {
Record record = sourceTableResult.next();
List<Value> values = record.values();
for (Value value : values) {
if(value.type().name().equals("NODE")){
Node node = value.asNode();
Map<String, Object> stringObjectMap = node.asMap();
MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData);
if(metaData.getMetadataId() == null ){
metaData.setMetadataId(SystemModelName+metaData.getName());
}
ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId());
returnNode.setName(metaData.getName());
returnNode.setCnName(metaData.getCnName());
returnNode.setDataPath(metaData.getPath());
returnNode.setType(TableModelName);
returnNodeMap.put(returnNode.getId(),returnNode);
tableIdMap.put(returnNode.getId(),"");
ReturnEdge returnEdge = new ReturnEdge();
String edgeId =returnNode.getId() +"_"+ tableId;
returnEdge.setFromId(returnNode.getId());
returnEdge.setToId(tableId );
returnEdge.setType("To");
returnEdge.setEdgeId(edgeId);
returnEdgeMap.put(edgeId,returnEdge);
}
}
}
private void getTargetRelationAboutTables(String metadataId, List<Neo4jTable> targetTableList) { private void getTargetRelationAboutTables(String metadataId, List<Neo4jTable> targetTableList) {
List<BaseNode> targetNodeList = new ArrayList<>(); List<BaseNode> targetNodeList = new ArrayList<>();
if(metadataId.startsWith("ETLScript=")){ if(metadataId.startsWith(ETLScriptModelName)){
targetNodeList = neo4jETLScriptRepository.getTargets(metadataId); targetNodeList = neo4jETLScriptRepository.getTargets(metadataId);
}else if(metadataId.startsWith("File=")){ }else if(metadataId.startsWith(FileModelName)){
targetNodeList = neo4jFileRepository.getTargets(metadataId); targetNodeList = neo4jFileRepository.getTargets(metadataId);
} }
for(BaseNode targetNode:targetNodeList){ for(BaseNode targetNode:targetNodeList){
if(targetNode.getMetadataId().startsWith("Table=")){ if(targetNode.getMetadataId().startsWith(TableEqual)){
//是表 //是表
Neo4jTable neo4jTable = neo4jTableRepository.findNeo4jTableByMetadataId(targetNode.getMetadataId()); Neo4jTable neo4jTable = neo4jTableRepository.findNeo4jTableByMetadataId(targetNode.getMetadataId());
targetTableList.add(neo4jTable); targetTableList.add(neo4jTable);
}else if(targetNode.getMetadataId().startsWith("ETLScript=")){ }else if(targetNode.getMetadataId().startsWith(ETLScriptModelName)){
getTargetRelationAboutTables(targetNode.getMetadataId(),targetTableList); getTargetRelationAboutTables(targetNode.getMetadataId(),targetTableList);
//不是表,就继续找 //不是表,就继续找
} }
...@@ -744,17 +783,17 @@ public class TableServiceImpl implements ITableService { ...@@ -744,17 +783,17 @@ public class TableServiceImpl implements ITableService {
private void getSourceRelationAboutTables(String metadataId, List<Neo4jTable> sourceTableList) { private void getSourceRelationAboutTables(String metadataId, List<Neo4jTable> sourceTableList) {
List<BaseNode> sourceBaseNodes = new ArrayList<>(); List<BaseNode> sourceBaseNodes = new ArrayList<>();
if(metadataId.startsWith("ETLScript=")){ if(metadataId.startsWith(ETLScriptModelName)){
sourceBaseNodes = neo4jETLScriptRepository.getSources(metadataId); sourceBaseNodes = neo4jETLScriptRepository.getSources(metadataId);
}else if(metadataId.startsWith("File=")){ }else if(metadataId.startsWith(FileModelName)){
sourceBaseNodes = neo4jFileRepository.getSources(metadataId); sourceBaseNodes = neo4jFileRepository.getSources(metadataId);
} }
for(BaseNode sourceBaseNode:sourceBaseNodes){ for(BaseNode sourceBaseNode:sourceBaseNodes){
if(sourceBaseNode.getMetadataId().startsWith("Table=")){ if(sourceBaseNode.getMetadataId().startsWith(TableEqual)){
//是表 //是表
Neo4jTable neo4jTable = neo4jTableRepository.findNeo4jTableByMetadataId(sourceBaseNode.getMetadataId()); Neo4jTable neo4jTable = neo4jTableRepository.findNeo4jTableByMetadataId(sourceBaseNode.getMetadataId());
sourceTableList.add(neo4jTable); sourceTableList.add(neo4jTable);
}else if(sourceBaseNode.getMetadataId().startsWith("ETLScript=")){ }else if(sourceBaseNode.getMetadataId().startsWith(ETLScriptModelName)){
getSourceRelationAboutTables(sourceBaseNode.getMetadataId(),sourceTableList); getSourceRelationAboutTables(sourceBaseNode.getMetadataId(),sourceTableList);
//不是表,就继续找 //不是表,就继续找
} }
...@@ -776,7 +815,7 @@ public class TableServiceImpl implements ITableService { ...@@ -776,7 +815,7 @@ public class TableServiceImpl implements ITableService {
if(schemaId.startsWith("Schema=")){ if(schemaId.startsWith("Schema=")){
cypher = "match (n:Neo4jSchema{metadataId:\""+schemaId+"\"})-[r:Composition]->(m:Neo4jTable) " + cypher = "match (n:Neo4jSchema{metadataId:\""+schemaId+"\"})-[r:Composition]->(m:Neo4jTable) " +
" where m.name =~'(?i).*"+keyWord+".*' or m.cnName =~'.*"+keyWord+".*' return m "; " where m.name =~'(?i).*"+keyWord+".*' or m.cnName =~'.*"+keyWord+".*' return m ";
}else if(schemaId.startsWith("Table=")){ }else if(schemaId.startsWith(TableEqual)){
cypher = "match (n:Neo4jTable{metadataId:\""+schemaId+"\"})-[r:Composition]->(m:Neo4jColumn) " + cypher = "match (n:Neo4jTable{metadataId:\""+schemaId+"\"})-[r:Composition]->(m:Neo4jColumn) " +
" where m.name =~'(?i).*"+keyWord+".*' or m.cnName =~'.*"+keyWord+".*' return m "; " where m.name =~'(?i).*"+keyWord+".*' or m.cnName =~'.*"+keyWord+".*' return m ";
} }
...@@ -795,7 +834,7 @@ public class TableServiceImpl implements ITableService { ...@@ -795,7 +834,7 @@ public class TableServiceImpl implements ITableService {
MetaData metaData = new MetaData(); MetaData metaData = new MetaData();
Neo4jTool.transMap2Bean(stringObjectMap, metaData); Neo4jTool.transMap2Bean(stringObjectMap, metaData);
if(metaData.getMetadataId() == null ){ if(metaData.getMetadataId() == null ){
metaData.setMetadataId("System="+metaData.getName()); metaData.setMetadataId(SystemModelName+metaData.getName());
} }
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(metaData.getMetadataId()); returnNode.setId(metaData.getMetadataId());
...@@ -812,7 +851,7 @@ public class TableServiceImpl implements ITableService { ...@@ -812,7 +851,7 @@ public class TableServiceImpl implements ITableService {
Map<String, List<ReturnNode>> returnNodeMap = new HashMap<>(); Map<String, List<ReturnNode>> returnNodeMap = new HashMap<>();
if(schemaId.startsWith("Schema=")){ if(schemaId.startsWith("Schema=")){
returnNodeMap.put("表",returnNodeList); returnNodeMap.put("表",returnNodeList);
}else if(schemaId.startsWith("Table=")){ }else if(schemaId.startsWith(TableEqual)){
returnNodeMap.put("字段",returnNodeList); returnNodeMap.put("字段",returnNodeList);
} }
return returnNodeMap; return returnNodeMap;
...@@ -841,11 +880,11 @@ public class TableServiceImpl implements ITableService { ...@@ -841,11 +880,11 @@ public class TableServiceImpl implements ITableService {
attributeMap.put("主键",""+columnRemote.get("isPrimaryKey")); attributeMap.put("主键",""+columnRemote.get("isPrimaryKey"));
returnNode.setName(columnRemote.get("name")+""); returnNode.setName(columnRemote.get("name")+"");
returnNode.setType("Column"); returnNode.setType(ColumnModelName);
returnNode.setAttributeMaps(attributeMap); returnNode.setAttributeMaps(attributeMap);
returnColumnList.add(returnNode); returnColumnList.add(returnNode);
} }
columnMap.put("Column",returnColumnList); columnMap.put(ColumnModelName,returnColumnList);
return columnMap; return columnMap;
} }
...@@ -897,8 +936,8 @@ public class TableServiceImpl implements ITableService { ...@@ -897,8 +936,8 @@ public class TableServiceImpl implements ITableService {
reportIdList.add(reportId); reportIdList.add(reportId);
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(reportId); returnNode.setId(reportId);
returnNode.setName(dataQualityRepost.get("jobAnalyzer")); returnNode.setName(dataQualityRepost.get(JobAnalyzer));
returnNode.setCnName(dataQualityRepost.get("jobAnalyzer")); returnNode.setCnName(dataQualityRepost.get(JobAnalyzer));
returnNode.setAttributeMaps(dataQualityRepost); returnNode.setAttributeMaps(dataQualityRepost);
qualityList.add(returnNode); qualityList.add(returnNode);
} }
...@@ -946,14 +985,14 @@ public class TableServiceImpl implements ITableService { ...@@ -946,14 +985,14 @@ public class TableServiceImpl implements ITableService {
List<BaseNode> sourceBaseNodeList = neo4jTableRepository.getTargets(tableId); List<BaseNode> sourceBaseNodeList = neo4jTableRepository.getTargets(tableId);
for(BaseNode baseNode:sourceBaseNodeList){ for(BaseNode baseNode:sourceBaseNodeList){
String metadataId = baseNode.getMetadataId(); String metadataId = baseNode.getMetadataId();
if(metadataId.startsWith("Table=") ||metadataId.startsWith("ETLScript=") if(metadataId.startsWith(TableEqual) ||metadataId.startsWith(ETLScriptModelName)
||metadataId.startsWith("File=")){ ||metadataId.startsWith(FileModelName)){
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(baseNode.getMetadataId()); returnNode.setId(baseNode.getMetadataId());
returnNode.setName(baseNode.getName()); returnNode.setName(baseNode.getName());
if(metadataId.startsWith("Table=")){ if(metadataId.startsWith(TableEqual)){
returnNode.setType("Table"); returnNode.setType(TableModelName);
}else if(metadataId.startsWith("ETLScript=")){ }else if(metadataId.startsWith(ETLScriptModelName)){
returnNode.setType("ETLScript"); returnNode.setType("ETLScript");
} else { } else {
returnNode.setType("File"); returnNode.setType("File");
...@@ -983,14 +1022,14 @@ public class TableServiceImpl implements ITableService { ...@@ -983,14 +1022,14 @@ public class TableServiceImpl implements ITableService {
List<BaseNode> sourceBaseNodeList = neo4jTableRepository.getSources(tableId); List<BaseNode> sourceBaseNodeList = neo4jTableRepository.getSources(tableId);
for(BaseNode baseNode:sourceBaseNodeList){ for(BaseNode baseNode:sourceBaseNodeList){
String metadataId = baseNode.getMetadataId(); String metadataId = baseNode.getMetadataId();
if(metadataId.startsWith("Table=")||metadataId.startsWith("File=") if(metadataId.startsWith(TableEqual)||metadataId.startsWith(FileModelName)
||metadataId.startsWith("ETLScript=")){ ||metadataId.startsWith(ETLScriptModelName)){
ReturnNode returnNode = new ReturnNode(); ReturnNode returnNode = new ReturnNode();
returnNode.setId(baseNode.getMetadataId()); returnNode.setId(baseNode.getMetadataId());
returnNode.setName(baseNode.getName()); returnNode.setName(baseNode.getName());
if(metadataId.startsWith("Table=")){ if(metadataId.startsWith(TableEqual)){
returnNode.setType("Table"); returnNode.setType(TableModelName);
}else if(metadataId.startsWith("ETLScript=")){ }else if(metadataId.startsWith(ETLScriptModelName)){
returnNode.setType("ETLScript"); returnNode.setType("ETLScript");
} else { } else {
returnNode.setType("File"); returnNode.setType("File");
......
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