|
@@ -1,80 +1,72 @@
|
|
|
package com.qizhen.healsphere.repository.neo4j;
|
|
|
|
|
|
-import org.neo4j.driver.types.Node;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.data.neo4j.core.Neo4jClient;
|
|
|
+import com.qizhen.healsphere.config.Neo4jUtil;
|
|
|
+import org.neo4j.driver.v1.Record;
|
|
|
+import org.neo4j.driver.v1.Session;
|
|
|
+import org.neo4j.driver.v1.StatementResult;
|
|
|
+import org.neo4j.driver.v1.Values;
|
|
|
+import org.neo4j.driver.v1.types.Node;
|
|
|
import org.springframework.stereotype.Repository;
|
|
|
|
|
|
import java.util.*;
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
@Repository
|
|
|
public class BaseNodeRepository {
|
|
|
|
|
|
- @Autowired
|
|
|
- private Neo4jClient neo4jClient;
|
|
|
-
|
|
|
- public BaseNodeRepository(Neo4jClient neo4jClient) {
|
|
|
- this.neo4jClient = neo4jClient;
|
|
|
- }
|
|
|
-
|
|
|
public Map<String,Object> findNodeByName(String label,String name) {
|
|
|
String query = String.format("MATCH (n:`%s`) WHERE n.name = $name and n.is_deleted = 'N' RETURN n", label);
|
|
|
- Optional<Map> optionalMap = neo4jClient.query(query)
|
|
|
- .bind(name).to("name")
|
|
|
- .fetchAs(Map.class)
|
|
|
- .mappedBy((typeSystem, record) -> {
|
|
|
- Node node = record.get("n").asNode();
|
|
|
-
|
|
|
- Map<String, Object> result = new HashMap<>();
|
|
|
- result.put("id", node.id());
|
|
|
- result.put("labels", node.labels()); // 获取节点的标签
|
|
|
- result.put("properties", node.asMap()); // 获取节点的属性
|
|
|
+ try(Session session = Neo4jUtil.getSession()) {
|
|
|
+ StatementResult result = session.run(query,Values.parameters("name", name));
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ if(result.hasNext()) {
|
|
|
+ Node node = result.single().get("n").asNode();
|
|
|
+ map.put("id", node.id());
|
|
|
+ map.put("labels", node.labels());
|
|
|
+ map.put("properties", node.asMap());
|
|
|
+ }
|
|
|
+ return map;
|
|
|
|
|
|
- return result;
|
|
|
- }).one();
|
|
|
- return (Map<String, Object>) optionalMap.orElse(null);
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
public Map<String,Object> findNodeById(Long id) {
|
|
|
String query = "MATCH (n) WHERE id(n) = $nodeId and n.is_deleted = 'N' RETURN n";
|
|
|
- Optional<Map> optionalMap = neo4jClient.query(query)
|
|
|
- .bind(id).to("nodeId")
|
|
|
- .fetchAs(Map.class)
|
|
|
- .mappedBy((typeSystem, record) -> {
|
|
|
- Node node = record.get("n").asNode();
|
|
|
-
|
|
|
- Map<String, Object> result = new HashMap<>();
|
|
|
- result.put("id", node.id());
|
|
|
- result.put("labels", node.labels()); // 获取节点的标签
|
|
|
- result.put("properties", node.asMap()); // 获取节点的属性
|
|
|
+ try(Session session = Neo4jUtil.getSession()) {
|
|
|
+ StatementResult result = session.run(query,Values.parameters("nodeId", id));
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ if(result.hasNext()) {
|
|
|
+ Node node = result.single().get("n").asNode();
|
|
|
+ map.put("id", node.id());
|
|
|
+ map.put("labels", node.labels());
|
|
|
+ map.put("properties", node.asMap());
|
|
|
+ }
|
|
|
+ return map;
|
|
|
|
|
|
- return result;
|
|
|
- }).one();
|
|
|
- return (Map<String, Object>) optionalMap.orElse(null);
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
public List<Map<String,Object>> findNodeListByName(String label, String name) {
|
|
|
String query = String.format("MATCH (n:`%s`) WHERE n.name =~ %s$name%s and n.is_deleted = 'N' RETURN n", label,".*",".*");
|
|
|
- Collection<Map> mapCollection = neo4jClient.query(query)
|
|
|
- .bind(name).to("name")
|
|
|
- .fetchAs(Map.class)
|
|
|
- .mappedBy((typeSystem, record) -> {
|
|
|
- Node node = record.get("n").asNode();
|
|
|
|
|
|
- Map<String, Object> result = new HashMap<>();
|
|
|
- result.put("id", node.id());
|
|
|
- result.put("labels", node.labels()); // 获取节点的标签
|
|
|
- result.put("properties", node.asMap()); // 获取节点的属性
|
|
|
+ try(Session session = Neo4jUtil.getSession()) {
|
|
|
+ StatementResult result = session.run(query,Values.parameters("name", name));
|
|
|
+ List<Map<String,Object>> listMap = new ArrayList<>();
|
|
|
+ if(result.hasNext()) {
|
|
|
+ List<Record> records = result.list();
|
|
|
+ for (Record record : records) {
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ Node node = record.get("n").asNode();
|
|
|
+ map.put("id", node.id());
|
|
|
+ map.put("labels", node.labels());
|
|
|
+ map.put("properties", node.asMap());
|
|
|
+ listMap.add(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return listMap;
|
|
|
|
|
|
- return result;
|
|
|
- }).all();
|
|
|
- if (mapCollection.isEmpty()) {
|
|
|
- return Collections.emptyList();
|
|
|
}
|
|
|
- return mapCollection.stream().map(e -> (Map<String, Object>) e).collect(Collectors.toList());
|
|
|
|
|
|
}
|
|
|
|
|
@@ -88,46 +80,43 @@ public class BaseNodeRepository {
|
|
|
createClause.setLength(createClause.length() - 2);
|
|
|
}
|
|
|
|
|
|
- String query = String.format("CREATE (n:`%s` { %s }) RETURN n", label, createClause);
|
|
|
+ String query = String.format("MERGE (n:`%s` { %s }) RETURN n", label, createClause);
|
|
|
|
|
|
- return (Map<String, Object>) neo4jClient.query(query)
|
|
|
- .bindAll(properties)
|
|
|
- .fetchAs(Map.class).mappedBy((typeSystem, record) -> {
|
|
|
- Node node = record.get("n").asNode();
|
|
|
-
|
|
|
- Map<String, Object> result = new HashMap<>();
|
|
|
- result.put("id", node.id());
|
|
|
- result.put("labels", node.labels()); // 获取节点的标签
|
|
|
- result.put("properties", node.asMap()); // 获取节点的属性
|
|
|
+ try(Session session = Neo4jUtil.getSession()) {
|
|
|
+ StatementResult result = session.run(query);
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ if(result.hasNext()) {
|
|
|
+ Node node = result.single().get("n").asNode();
|
|
|
+ map.put("id", node.id());
|
|
|
+ map.put("labels", node.labels());
|
|
|
+ map.put("properties", node.asMap());
|
|
|
+ }
|
|
|
+ return map;
|
|
|
|
|
|
- return result;
|
|
|
- }).one().orElse(null);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public Map<String, Object> updateNode(Long nodeId, String name) {
|
|
|
-
|
|
|
String query = "MATCH (n) WHERE id(n) = $nodeId SET n.name=$name RETURN n";
|
|
|
-
|
|
|
- return neo4jClient.query(query)
|
|
|
- .bind(nodeId).to("nodeId")
|
|
|
- .bind(name).to("name")
|
|
|
- .fetchAs(Map.class).mappedBy((typeSystem, record) -> {
|
|
|
- Node node = record.get("n").asNode();
|
|
|
-
|
|
|
- Map<String, Object> result = new HashMap<>();
|
|
|
- result.put("id", node.id());
|
|
|
- result.put("labels", node.labels()); // 获取节点的标签
|
|
|
- result.put("properties", node.asMap()); // 获取节点的属性
|
|
|
-
|
|
|
- return result;
|
|
|
- }).one().orElse(null);
|
|
|
+ try(Session session = Neo4jUtil.getSession()) {
|
|
|
+ StatementResult result = session.run(query,Values.parameters("name", name));
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ if(result.hasNext()) {
|
|
|
+ Node node = result.single().get("n").asNode();
|
|
|
+ map.put("id", node.id());
|
|
|
+ map.put("labels", node.labels());
|
|
|
+ map.put("properties", node.asMap());
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public void deleteNode(Long nodeId) {
|
|
|
- String query = "MATCH (n) WHERE id(n) = $nodeId SET n.is_deleted = 'Y'";
|
|
|
-
|
|
|
- neo4jClient.query(query)
|
|
|
- .bind(nodeId).to("nodeId")
|
|
|
- .run();
|
|
|
+ String query = "MATCH (n) WHERE id(n) = $nodeId SET n.is_deleted = 'Y' " +
|
|
|
+ "WITH n MATCH (n)-[r]-() " +
|
|
|
+ "DELETE r";
|
|
|
+ try(Session session = Neo4jUtil.getSession()) {
|
|
|
+ session.run(query,Values.parameters("nodeId", nodeId));
|
|
|
+ }
|
|
|
}
|
|
|
}
|