Commit 964b108a by qiuchaofei

1.添加接口,用来查询系统大图,2添加下钻接口,查询系统拥有的表,表拥有的字段等。

parent 20fa2b3e
......@@ -27,10 +27,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.*;
@RequestMapping(value = "api/metadata")
@RestController
......@@ -164,10 +161,191 @@ public class MetaDataController {
logger.info("开始获取系统级的大图");
ReturnReslult result = new ReturnReslult();
List<MetaData> metaDataList = metadataService.finAllMetaData();
Map<String,Node> nodeMap = new HashMap<>();
Map<String,String> child2Parent = new HashMap<>();
Map<String,List<String>> parent2Children = new HashMap<>();
Map<String,List<String>> source2Target = new HashMap<>();
Map<String,List<String>> target2Source = new HashMap<>();
Map<String, MetaModel> metaModelMap = new HashMap<>();
for(MetaData metaData:metaDataList){
Node node = new Node();
String[] strings = metaData.getMetadataId().split("=");
String modelName = strings[0];
//如果有system,则虚拟创建一个节点,用来做顶层节点
if(metaData.getSystem()!=null && !metaData.getSystem().equals("")){
String systemName = metaData.getSystem();
Node systemNode = new Node();
systemNode.setId("catalog="+systemName);
systemNode.setName(systemName);
String newModelName = "Catalog";
systemNode.setIcon(newModelName);
if(!metaModelMap.containsKey(newModelName)){
MetaModel model = new MetaModel();
String iconContext = getIconByModelId(newModelName);
model.setModelName(newModelName);
model.setCnName(newModelName);
model.setDescription("");
model.setIcon(iconContext);
metaModelMap.put(newModelName,model);
}
systemNode.setType("MetaData");
result.getNodes().add(systemNode);
nodeMap.put(""+systemNode.getId(),systemNode);
child2Parent.put(""+metaData.getId(),systemNode.getId());
}
node.setId(metaData.getMetadataId());
node.setIcon(modelName);
if(!metaModelMap.containsKey(modelName)){
MetaModel model = new MetaModel();
String iconContext = getIconByModelId(modelName);
model.setModelName(modelName);
model.setCnName(modelName);
model.setDescription("");
model.setIcon(iconContext);
metaModelMap.put(modelName,model);
}
node.setName(metaData.getName());
node.setType("MetaData");
result.getNodes().add(node);
nodeMap.put(""+metaData.getId(),node);
}
logger.info("节点的数量:"+result.getNodes().size());
List<BaseRelationship> baseRelationshipList = baseRelationshipService.findAllRelation();
/**
* 分成两部分,一个是组合关系,一个是依赖关系。
*
*/
for(BaseRelationship baseRelationship:baseRelationshipList ){
Long startId = baseRelationship.getStart().getId();
Long endId = baseRelationship.getEnd().getId();
if(baseRelationship.getName().equals("流入")
|| baseRelationship.getName().equals("流出")){
if(source2Target.get(startId)!=null){
source2Target.get(startId).add(""+endId);
}else {
List<String> targets = new ArrayList<>();
targets.add(""+endId);
source2Target.put(""+startId,targets);
}
if(target2Source.get(endId)!=null){
target2Source.get(endId).add(""+startId);
}else {
List<String> sources = new ArrayList<>();
sources.add(""+startId);
target2Source.put(""+endId,sources);
}
}else if( baseRelationship.getName().equals("流出")){
}else if(baseRelationship.getName().equals("组合") ){
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);
}
}
}
//专门处理流入 流出的关系
for(BaseRelationship baseRelationship:baseRelationshipList ){
String startId = baseRelationship.getStart().getId()+"";
String endId = baseRelationship.getEnd().getId()+"";
String startMetaId = "";
String endMetaId ="";
if(baseRelationship.getName().equals("流入")
|| baseRelationship.getName().equals("流出")){
startId = getParentId(""+startId,child2Parent);
// if(child2Parent . containsKey(startId)){
// startId = child2Parent.get(startId);
// }
endId = getParentId(""+endId,child2Parent);
// if(child2Parent . containsKey(endId)){
// endId = child2Parent.get(endId);
// }
if(nodeMap.containsKey(""+startId)){
Node startNode = nodeMap.get(""+startId);
startMetaId = nodeMap.get(""+startId).getId();
}
if(nodeMap.containsKey(""+endId)){
endMetaId = nodeMap.get(""+endId).getId();
}
Edge edge = new Edge();
edge.setEdgeId(""+baseRelationship.getId());
edge.setFromId(startMetaId);
edge.setToId(endMetaId);
edge.setType(baseRelationship.getName());
result.getEdges().add(edge);
}
}
for(Object obj : child2Parent.keySet()){
logger.info("child:"+ obj + " ,parent:"+ child2Parent.get(obj));
}
for(Object obj : parent2Children.keySet()){
List<String> children = parent2Children.get(obj);
logger.info("parent:"+ obj);
for(String child:children){
logger.info(" child:" + child );
}
}
for(Object obj : source2Target.keySet()){
List<String> targets = source2Target.get(obj);
logger.info("source:"+ obj);
for(String target:targets){
logger.info(" target:" + target );
}
}
for(Object obj : target2Source.keySet()){
List<String> sources = target2Source.get(obj);
logger.info("target:"+ obj);
for(String source:sources){
logger.info(" source:" + source );
}
}
return result;
}
private String getParentId (String neo4jId,Map<String,String> child2Parent){
String parentId = neo4jId;
while(child2Parent.containsKey(neo4jId)){
parentId = child2Parent.get(neo4jId);
neo4jId = parentId;
}
return parentId;
}
/**
* 传入一个节点与层数,返回指定节点的直接下层节点
*/
......@@ -177,8 +355,39 @@ public class MetaDataController {
public ReturnReslult getNextDrill(String dataId){
logger.info("开始获取直接下层节点");
List<MetaData> metaDataList = new ArrayList<>();
Map<String, MetaModel> metaModelMap = new HashMap<>();
ReturnReslult result = new ReturnReslult();
//如果是系统,就用名称去查询,如果是其他类型,就用id去查询
if(dataId.startsWith("catalog=")){
String[] dataIds = dataId.split("=");
String dataName = dataIds[1];
metaDataList = metadataService.findChildrenByParentName(dataName);
}else {
metaDataList = metadataService.findChildrenByParentId(dataId);
}
for(MetaData metaData:metaDataList){
Node node = new Node();
String[] strings = metaData.getMetadataId().split("=");
String modelName = strings[0];
node.setId(metaData.getMetadataId());
node.setIcon(modelName);
if(!metaModelMap.containsKey(modelName)){
MetaModel model = new MetaModel();
String iconContext = getIconByModelId(modelName);
model.setModelName(modelName);
model.setCnName(modelName);
model.setDescription("");
model.setIcon(iconContext);
metaModelMap.put(modelName,model);
}
node.setName(metaData.getName());
node.setType("MetaData");
result.getNodes().add(node);
}
return result;
}
......
......@@ -32,6 +32,18 @@ public class MetaData extends BaseNode {
private String relation;
//其他属性
private String property;
public String getSystem() {
return system;
}
public void setSystem(String system) {
this.system = system;
}
//所属系统
private String system;
public String getPath() {
return path;
}
......
......@@ -26,4 +26,9 @@ public interface MetadataRepository extends Neo4jRepository<MetaData,Long> {
List<MetaData> findMetaData(@Param("dataName") String dataName , @Param("n") int n );
@Query("match (data:MetaData{system:{parentName}}) return data")
List<MetaData> findMetaDataByParentName(@Param("parentName") String parentName );
@Query("MATCH p=(n:MetaData {metadataId:{parentId}})-[r:Composition]->(m) RETURN m")
List<MetaData> findMetaDataByParentId(@Param("parentId") String parentId);
}
......@@ -14,6 +14,9 @@ public interface IMetadataService {
ReturnReslult findNodeByDataId (String metadataId, int depth);
List<MetaData> findChildrenByParentId(String parentId);
List<MetaData> findChildrenByParentName(String parentName);
List<MetaData> finAllMetaData();
/**
......
......@@ -136,6 +136,17 @@ public class MetadataServiceImpl implements IMetadataService {
}
@Override
public List<MetaData> findChildrenByParentId(String parentId) {
return metadataRepository.findMetaDataByParentId(parentId);
}
@Override
public List<MetaData> findChildrenByParentName(String parentName) {
return metadataRepository.findMetaDataByParentName(parentName);
}
@Override
public List<MetaData> finAllMetaData() {
return (List<MetaData>)metadataRepository.findAll();
}
......
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