Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
neo4jRelation
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
qiuchaofei
neo4jRelation
Commits
fb645246
Commit
fb645246
authored
Apr 20, 2022
by
qiuchaofei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.添加字段级的图形分析,2.字段与sql的关系添加描述
parent
8ee8c8b6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
192 additions
and
5 deletions
+192
-5
Neo4jColumnRepository.java
...aRelation/respository/metadata/Neo4jColumnRepository.java
+13
-0
IBaseRelationshipService.java
...ta/metadataRelation/service/IBaseRelationshipService.java
+3
-0
IColumnService.java
...ile/metadata/metadataRelation/service/IColumnService.java
+9
-0
BaseRelationshipServiceImpl.java
...ataRelation/service/impl/BaseRelationshipServiceImpl.java
+15
-0
ColumnServiceImpl.java
...data/metadataRelation/service/impl/ColumnServiceImpl.java
+139
-0
MetadataServiceImpl.java
...ta/metadataRelation/service/impl/MetadataServiceImpl.java
+13
-5
No files found.
src/main/java/com/keymobile/metadata/metadataRelation/respository/metadata/Neo4jColumnRepository.java
View file @
fb645246
package
com
.
keymobile
.
metadata
.
metadataRelation
.
respository
.
metadata
;
package
com
.
keymobile
.
metadata
.
metadataRelation
.
respository
.
metadata
;
import
com.keymobile.metadata.metadataRelation.pojo.BaseNode
;
import
com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jColumn
;
import
com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jColumn
;
import
org.springframework.data.neo4j.annotation.Query
;
import
org.springframework.data.neo4j.repository.Neo4jRepository
;
import
org.springframework.data.neo4j.repository.Neo4jRepository
;
import
org.springframework.data.repository.query.Param
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
@Repository
@Repository
public
interface
Neo4jColumnRepository
extends
Neo4jRepository
<
Neo4jColumn
,
Long
>
{
public
interface
Neo4jColumnRepository
extends
Neo4jRepository
<
Neo4jColumn
,
Long
>
{
Neo4jColumn
findNeo4jColumnByMetadataId
(
String
metadataId
);
Neo4jColumn
findNeo4jColumnByMetadataId
(
String
metadataId
);
//match (n:Neo4jTable{metadataId:"Table=1=de175ee0b21c473f915cefaad6d798f1"})-[r1:流向]->(n1)-[r0:TempInput*0..]->(m)-[r:流向]->(m1) return m1
@Query
(
"match (n:Neo4jColumn{metadataId:{columnId}})<-[r1:流向]-(n1)<-[r0:TempRelation*0..]-(m)<-[r:流向]-(m1) where r.description=r1.description return m1 "
)
List
<
BaseNode
>
getSourceColumn
(
@Param
(
"columnId"
)
String
columnId
);
// @Query("match (n{metadataId:{tableId}} )-[r1:流向]->(m1)-[r:流向]->(m) return m ")
@Query
(
"match (n:Neo4jColumn{metadataId:{columnId}})-[r1:流向]->(n1)-[r0:TempRelation*0..]->(m)-[r:流向]->(m1) where r.description=r1.description return m1 "
)
List
<
BaseNode
>
getTargetColumn
(
@Param
(
"columnId"
)
String
columnId
);
}
}
src/main/java/com/keymobile/metadata/metadataRelation/service/IBaseRelationshipService.java
View file @
fb645246
...
@@ -68,4 +68,7 @@ public interface IBaseRelationshipService {
...
@@ -68,4 +68,7 @@ public interface IBaseRelationshipService {
List
<
BaseNode
>
findMetadataByStartName
(
String
startName
);
List
<
BaseNode
>
findMetadataByStartName
(
String
startName
);
void
saveRelation
(
String
startMetadataId
,
String
endMetadataid
,
String
composition
);
void
saveRelation
(
String
startMetadataId
,
String
endMetadataid
,
String
composition
);
void
saveRelation
(
String
startId
,
String
endId
,
String
relationType
,
String
description
);
}
}
src/main/java/com/keymobile/metadata/metadataRelation/service/IColumnService.java
0 → 100644
View file @
fb645246
package
com
.
keymobile
.
metadata
.
metadataRelation
.
service
;
import
com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnReslult
;
public
interface
IColumnService
{
ReturnReslult
getRelationAboutColumn
(
String
columnId
);
}
src/main/java/com/keymobile/metadata/metadataRelation/service/impl/BaseRelationshipServiceImpl.java
View file @
fb645246
...
@@ -181,4 +181,19 @@ public class BaseRelationshipServiceImpl implements IBaseRelationshipService {
...
@@ -181,4 +181,19 @@ public class BaseRelationshipServiceImpl implements IBaseRelationshipService {
session
.
run
(
cypher
);
session
.
run
(
cypher
);
// logger.info("运行保存关系完成:" + cypher);
// logger.info("运行保存关系完成:" + cypher);
}
}
@Override
public
void
saveRelation
(
String
startId
,
String
endId
,
String
relationType
,
String
description
)
{
Neo4jConfig
neo4jConfig
=
new
Neo4jConfig
();
Driver
neo4jConnection
=
neo4jConfig
.
getNeo4jConnection
();
Session
session
=
neo4jConnection
.
session
();
// match (n{metadataId:"Column=1=d9c2d67e56a3428e8e4f22918782437f"}),
// (m{metadataId:"Table=1=d644b631fa8c434e928bcd1f1665b060"})
// create (n)<-[r:Composition]-(m)
// return n,m,r
String
cypher
=
" match (n{metadataId:\""
+
startId
+
"\"}),(m{metadataId:\""
+
endId
+
"\"}) merge (n)-[r:"
+
relationType
+
"]->(m) set r.description ="
+
description
;
// logger.info("运行保存关系完成:" + cypher);
session
.
run
(
cypher
);
}
}
}
src/main/java/com/keymobile/metadata/metadataRelation/service/impl/ColumnServiceImpl.java
0 → 100644
View file @
fb645246
package
com
.
keymobile
.
metadata
.
metadataRelation
.
service
.
impl
;
import
com.keymobile.metadata.metadataRelation.pojo.BaseNode
;
import
com.keymobile.metadata.metadataRelation.pojo.metadata.Neo4jColumn
;
import
com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnEdge
;
import
com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnNode
;
import
com.keymobile.metadata.metadataRelation.pojo.returnBean.ReturnReslult
;
import
com.keymobile.metadata.metadataRelation.respository.metadata.Neo4jColumnRepository
;
import
com.keymobile.metadata.metadataRelation.service.IColumnService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@Service
public
class
ColumnServiceImpl
implements
IColumnService
{
@Autowired
private
Neo4jColumnRepository
neo4jColumnRepository
;
@Override
public
ReturnReslult
getRelationAboutColumn
(
String
columnId
)
{
ReturnReslult
returnReslult
=
new
ReturnReslult
();
Map
<
String
,
ReturnNode
>
returnNodeMap
=
new
HashMap
<>();
Map
<
String
,
ReturnEdge
>
returnEdgeMap
=
new
HashMap
<>();
List
<
BaseNode
>
targetNodeList
=
new
ArrayList
<>();
Neo4jColumn
neo4jColumn
=
neo4jColumnRepository
.
findNeo4jColumnByMetadataId
(
columnId
);
ReturnNode
returnColumn
=
new
ReturnNode
();
returnColumn
.
setId
(
neo4jColumn
.
getMetadataId
());
returnColumn
.
setName
(
neo4jColumn
.
getName
());
returnColumn
.
setType
(
"Column"
);
returnReslult
.
getNodes
().
add
(
returnColumn
);
List
<
BaseNode
>
targetBaseNodeList
=
neo4jColumnRepository
.
getTargetColumn
(
columnId
);
for
(
BaseNode
targetBaseNode:
targetBaseNodeList
){
if
(
targetBaseNode
.
getMetadataId
().
startsWith
(
"Column="
)){
//是字段
targetNodeList
.
add
(
targetBaseNode
);
}
else
if
(
targetBaseNode
.
getMetadataId
().
startsWith
(
"ETLSql="
)){
getTargetRelationAboutColumns
(
targetBaseNode
.
getMetadataId
(),
targetNodeList
);
//不是表,就继续找
}
}
for
(
BaseNode
sourceNode:
targetNodeList
){
ReturnNode
returnNode
=
new
ReturnNode
();
returnNode
.
setId
(
sourceNode
.
getMetadataId
());
returnNode
.
setName
(
sourceNode
.
getName
());
returnNode
.
setType
(
"Column"
);
returnNodeMap
.
put
(
sourceNode
.
getMetadataId
(),
returnNode
);
ReturnEdge
returnEdge
=
new
ReturnEdge
();
String
edgeId
=
columnId
+
"_"
+
returnNode
.
getId
()
;
returnEdge
.
setEdgeId
(
edgeId
);
returnEdge
.
setFromId
(
columnId
);
returnEdge
.
setToId
(
returnNode
.
getId
()
);
returnEdgeMap
.
put
(
edgeId
,
returnEdge
);
}
List
<
BaseNode
>
sourceNodeList
=
new
ArrayList
<>();
List
<
BaseNode
>
sourceBaseNodeList
=
neo4jColumnRepository
.
getSourceColumn
(
columnId
);
for
(
BaseNode
sourceBaseNode:
sourceBaseNodeList
){
if
(
sourceBaseNode
.
getMetadataId
().
startsWith
(
"Column="
)){
//是字段
sourceNodeList
.
add
(
sourceBaseNode
);
}
else
if
(
sourceBaseNode
.
getMetadataId
().
startsWith
(
"ETLSql="
)){
getSourceRelationAboutColumns
(
sourceBaseNode
.
getMetadataId
(),
sourceNodeList
);
//不是表,就继续找
}
}
for
(
BaseNode
sourceNode:
sourceNodeList
){
ReturnNode
returnNode
=
new
ReturnNode
();
returnNode
.
setId
(
sourceNode
.
getMetadataId
());
returnNode
.
setName
(
sourceNode
.
getName
());
returnNode
.
setType
(
"Column"
);
returnNodeMap
.
put
(
sourceNode
.
getMetadataId
(),
returnNode
);
ReturnEdge
returnEdge
=
new
ReturnEdge
();
String
edgeId
=
returnNode
.
getId
()+
"_"
+
columnId
;
returnEdge
.
setEdgeId
(
edgeId
);
returnEdge
.
setFromId
(
returnNode
.
getId
());
returnEdge
.
setToId
(
columnId
);
returnEdgeMap
.
put
(
edgeId
,
returnEdge
);
}
for
(
Object
obj
:
returnNodeMap
.
keySet
()){
returnReslult
.
getNodes
().
add
(
returnNodeMap
.
get
(
obj
));
}
for
(
Object
obj
:
returnEdgeMap
.
keySet
()){
returnReslult
.
getEdges
().
add
(
returnEdgeMap
.
get
(
obj
));
}
return
returnReslult
;
}
private
void
getSourceRelationAboutColumns
(
String
metadataId
,
List
<
BaseNode
>
sourceReturnNodeList
)
{
{
List
<
BaseNode
>
sourceNodeList
=
new
ArrayList
<>();
if
(
metadataId
.
startsWith
(
"ETLSql="
)){
sourceNodeList
=
neo4jColumnRepository
.
getSourceColumn
(
metadataId
);
}
else
if
(
metadataId
.
startsWith
(
"File="
)){
// targetNodeList = neo4jFileRepository.getTargets(metadataId);
}
for
(
BaseNode
sourceNode:
sourceNodeList
){
if
(
sourceNode
.
getMetadataId
().
startsWith
(
"Column="
)){
//是表
sourceReturnNodeList
.
add
(
sourceNode
);
}
else
if
(
sourceNode
.
getMetadataId
().
startsWith
(
"ETLSql="
)){
getSourceRelationAboutColumns
(
sourceNode
.
getMetadataId
(),
sourceReturnNodeList
);
//不是表,就继续找
}
}
}
}
private
void
getTargetRelationAboutColumns
(
String
metadataId
,
List
<
BaseNode
>
returnNodeList
)
{
List
<
BaseNode
>
targetNodeList
=
new
ArrayList
<>();
if
(
metadataId
.
startsWith
(
"ETLSql="
)){
targetNodeList
=
neo4jColumnRepository
.
getTargetColumn
(
metadataId
);
}
else
if
(
metadataId
.
startsWith
(
"File="
)){
// targetNodeList = neo4jFileRepository.getTargets(metadataId);
}
for
(
BaseNode
targetNode:
targetNodeList
){
if
(
targetNode
.
getMetadataId
().
startsWith
(
"Column="
)){
//是表
returnNodeList
.
add
(
targetNode
);
}
else
if
(
targetNode
.
getMetadataId
().
startsWith
(
"ETLSql="
)){
getTargetRelationAboutColumns
(
targetNode
.
getMetadataId
(),
returnNodeList
);
//不是表,就继续找
}
}
}
}
src/main/java/com/keymobile/metadata/metadataRelation/service/impl/MetadataServiceImpl.java
View file @
fb645246
...
@@ -1868,8 +1868,10 @@ public class MetadataServiceImpl implements IMetadataService {
...
@@ -1868,8 +1868,10 @@ public class MetadataServiceImpl implements IMetadataService {
for
(;
page
<
totalPageCount
;
page
++){
for
(;
page
<
totalPageCount
;
page
++){
List
<
Document
>
relationList
=
mongoDbServiceImpl
.
findRelationByPage
(
PageRequest
.
of
(
page
,
pageSize
,
Sort
.
by
(
"_id"
)),
catalogName
);
String
description
=
""
;
List
<
Document
>
relationList
=
mongoDbServiceImpl
.
findRelationByPage
(
PageRequest
.
of
(
page
,
pageSize
,
Sort
.
by
(
"_id"
)),
catalogName
);
for
(
Document
relation
:
relationList
){
for
(
Document
relation
:
relationList
){
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
;
...
@@ -1878,7 +1880,7 @@ public class MetadataServiceImpl implements IMetadataService {
...
@@ -1878,7 +1880,7 @@ public class MetadataServiceImpl implements IMetadataService {
String
targetId
=
relation
.
getString
(
"target"
);
// relationMongo.getTarget();
String
targetId
=
relation
.
getString
(
"target"
);
// relationMongo.getTarget();
//本身的字段级关系也要同步
//本身的字段级关系也要同步
edgeIdMap
.
put
(
sourceId
+
"_"
+
targetId
,
""
);
edgeIdMap
.
put
(
sourceId
+
"_"
+
targetId
,
description
);
Map
<
String
,
Object
>
sourceData
=
metadataRepoRemoteService
.
getMetadata
(
sourceId
);
Map
<
String
,
Object
>
sourceData
=
metadataRepoRemoteService
.
getMetadata
(
sourceId
);
Map
<
String
,
Object
>
targetData
=
metadataRepoRemoteService
.
getMetadata
(
targetId
);
Map
<
String
,
Object
>
targetData
=
metadataRepoRemoteService
.
getMetadata
(
targetId
);
...
@@ -1889,7 +1891,6 @@ public class MetadataServiceImpl implements IMetadataService {
...
@@ -1889,7 +1891,6 @@ public class MetadataServiceImpl implements IMetadataService {
String
endId
=
""
;
String
endId
=
""
;
//如果是字段,上升到表,如果是sql,上升到etlscript,其他的模型之间的关系暂不处理
//如果是字段,上升到表,如果是sql,上升到etlscript,其他的模型之间的关系暂不处理
if
(
sourceId
.
contains
(
"Column="
)
&&
targetId
.
contains
(
"Column="
)
){
if
(
sourceId
.
contains
(
"Column="
)
&&
targetId
.
contains
(
"Column="
)
){
Map
<
String
,
Object
>
sourceParent
=
metadataRepoRemoteService
.
getParent
(
sourceId
);
Map
<
String
,
Object
>
sourceParent
=
metadataRepoRemoteService
.
getParent
(
sourceId
);
Map
<
String
,
Object
>
targetParent
=
metadataRepoRemoteService
.
getParent
(
targetId
);
Map
<
String
,
Object
>
targetParent
=
metadataRepoRemoteService
.
getParent
(
targetId
);
...
@@ -1948,9 +1949,10 @@ public class MetadataServiceImpl implements IMetadataService {
...
@@ -1948,9 +1949,10 @@ public class MetadataServiceImpl implements IMetadataService {
endId
=
(
String
)
targetParent
.
get
(
"_id"
);
endId
=
(
String
)
targetParent
.
get
(
"_id"
);
}
}
String
relationId
=
startId
+
"_"
+
endId
;
String
relationId
=
startId
+
"_"
+
endId
;
edgeIdMap
.
put
(
relationId
,
""
);
edgeIdMap
.
put
(
relationId
,
description
);
}
}
}
}
long
start
=
System
.
currentTimeMillis
();
long
start
=
System
.
currentTimeMillis
();
int
count
=
1
;
int
count
=
1
;
for
(
Object
obj
:
edgeIdMap
.
keySet
()){
for
(
Object
obj
:
edgeIdMap
.
keySet
()){
...
@@ -1961,7 +1963,13 @@ public class MetadataServiceImpl implements IMetadataService {
...
@@ -1961,7 +1963,13 @@ public class MetadataServiceImpl implements IMetadataService {
String
[]
dataIds
=
edgeId
.
split
(
"_"
);
String
[]
dataIds
=
edgeId
.
split
(
"_"
);
String
startId
=
dataIds
[
0
];
String
startId
=
dataIds
[
0
];
String
endId
=
dataIds
[
1
];
String
endId
=
dataIds
[
1
];
relationshipService
.
saveRelation
(
startId
,
endId
,
"流向"
);
String
description
=
edgeIdMap
.
get
(
obj
);
if
(
description
==
null
||
description
.
equalsIgnoreCase
(
""
)){
relationshipService
.
saveRelation
(
startId
,
endId
,
"流向"
);
}
else
{
relationshipService
.
saveRelation
(
startId
,
endId
,
"流向"
,
description
);
}
}
}
long
end
=
System
.
currentTimeMillis
();
long
end
=
System
.
currentTimeMillis
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment