Explorar o código

模糊查询接口修改

yuchengwei hai 6 meses
pai
achega
88a8f105f5

+ 3 - 11
src/main/java/com/qizhen/healsphere/facade/KgFacade.java

@@ -33,16 +33,8 @@ public class KgFacade extends KgServiceImpl {
 
 
     public List<NodeDTO> getNode(KgQuery kgQuery){
-        List<String> list = baseNodeRepository.findNodeByNameLike(kgQuery.getLabelName(), kgQuery.getInputStr());
-        List<NodeDTO> result = new ArrayList<>();
-        if (CollUtil.isNotEmpty(list)){
-            for (String node : list){
-                NodeDTO nodeDTO = new NodeDTO();
-                nodeDTO.setName(node);
-                result.add(nodeDTO);
-            }
-        }
-        return result;
+
+        return baseNodeRepository.findNodeByNameLike(kgQuery.getLabelName(), kgQuery.getInputStr());
     }
 
     public GraphLabelDTO getGraphFac(KgQuery kgQuery) {
@@ -75,7 +67,7 @@ public class KgFacade extends KgServiceImpl {
                         rsId++;
                     }
                     GNodeDTO nNodeDTO
-                            = new GNodeDTO("", 1, "", nodeId, "diamond", 10,graphDTO.getProperties(),nodeId);
+                            = new GNodeDTO("", 1, "", nodeId, "diamond", 10,graphDTO.getProperties(),graphDTO.getId());
                     node.add(nNodeDTO);
                     links.add(new LinkDTO(gNodeDTO.getName(), nNodeDTO.getName(), baseNodeRSDTO.getRType()));
                     nodeId++;

+ 10 - 7
src/main/java/com/qizhen/healsphere/repository/neo4j/BaseNodeRepository.java

@@ -2,8 +2,8 @@ package com.qizhen.healsphere.repository.neo4j;
 
 import cn.hutool.core.collection.CollUtil;
 import com.qizhen.healsphere.config.Neo4jUtil;
-import org.neo4j.driver.v1.*;
 import com.qizhen.healsphere.repository.neo4j.entity.BaseEntity;
+import com.qizhen.healsphere.web.dto.NodeDTO;
 import org.neo4j.driver.v1.Record;
 import org.neo4j.driver.v1.Session;
 import org.neo4j.driver.v1.StatementResult;
@@ -16,7 +16,6 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 @Repository
 public class BaseNodeRepository {
@@ -47,18 +46,22 @@ public class BaseNodeRepository {
 
     }
 
-    public List<String> findNodeByNameLike(String label,String name) {
-        String query = String.format("MATCH (n:`%s`) WHERE n.name contains $name and (n.is_deleted = 'N' or NOT exists(n.is_deleted)) return distinct n.name limit 20", label);
+    public List<NodeDTO> findNodeByNameLike(String label,String name) {
+        String query = String.format("MATCH (n:`%s`) WHERE n.name contains $name and (n.is_deleted = 'N' or NOT exists(n.is_deleted)) return distinct n.name as name,id(n) as id,head(Labels(n)) as label limit 20", label);
         try(Session session = neo4jUtil.getSession()) {
             StatementResult result = session.run(query,Values.parameters("name", name));
-            List<String> names = new ArrayList<>();
+            List<NodeDTO> nodeDTOS = new ArrayList<>();
             if(result.hasNext()) {
                 List<Record> records = result.list();
                 for (Record record : records) {
-                    names.addAll(record.values().stream().map(Value::asString).collect(Collectors.toList()));
+                    NodeDTO nodeDTO = new NodeDTO();
+                    nodeDTO.setName(record.get("name").asString());
+                    nodeDTO.setNodeId(record.get("id").asLong());
+                    nodeDTO.setLabel(record.get("label").asString());
+                    nodeDTOS.add(nodeDTO);
                 }
             }
-            return names;
+            return nodeDTOS;
         }
 
     }

+ 33 - 11
src/main/java/com/qizhen/healsphere/service/impl/KgServiceImpl.java

@@ -2,6 +2,7 @@ package com.qizhen.healsphere.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import com.qizhen.healsphere.config.Neo4jUtil;
+import com.qizhen.healsphere.service.BaseNodeService;
 import com.qizhen.healsphere.service.KgService;
 import com.qizhen.healsphere.web.dto.BaseNodeRSDTO;
 import com.qizhen.healsphere.web.dto.GraphDTO;
@@ -34,6 +35,9 @@ public class KgServiceImpl implements KgService {
     @Autowired
     private Neo4jUtil neo4jUtil;
 
+    @Autowired
+    private BaseNodeService nodeService;
+
     @Override
     public List<GraphDTO> getGraph(KgQuery kgQuery){
         Map<String,Object> map = new HashMap<>();
@@ -92,17 +96,35 @@ public class KgServiceImpl implements KgService {
                 rtypeMap.put(rType, nextNodeDTOS);
             }
 
-            GraphDTO graphDTO = graphMap.values().stream().findFirst().get();
-
-            List<BaseNodeRSDTO> baseNodeRSDTOS = new ArrayList<>();
-            rtypeMap.forEach((key, value) -> {
-                BaseNodeRSDTO nodeRSDTO = new BaseNodeRSDTO();
-                nodeRSDTO.setRType(key);
-                nodeRSDTO.setENodeDTOS(value);
-                baseNodeRSDTOS.add(nodeRSDTO);
-            });
-            graphDTO.setENodeRSDTOS(baseNodeRSDTOS);
-            graphDTOList.add(graphDTO);
+            if (CollUtil.isNotEmpty(graphMap)) {
+                GraphDTO graphDTO = graphMap.values().stream().findFirst().get();
+
+                List<BaseNodeRSDTO> baseNodeRSDTOS = new ArrayList<>();
+                rtypeMap.forEach((key, value) -> {
+                    BaseNodeRSDTO nodeRSDTO = new BaseNodeRSDTO();
+                    nodeRSDTO.setRType(key);
+                    nodeRSDTO.setENodeDTOS(value);
+                    baseNodeRSDTOS.add(nodeRSDTO);
+                });
+                graphDTO.setENodeRSDTOS(baseNodeRSDTOS);
+                graphDTOList.add(graphDTO);
+            }else{
+                Map<String, Object> node = nodeService.findNode(kgQuery.getLabelName(), kgQuery.getInputStr());
+                if (CollUtil.isNotEmpty(node)){
+                    Map<String,Object> properties = (Map<String,Object>)node.get("properties");
+                    List<String> labelList = (List<String>) node.get("labels");
+                    GraphDTO graphDTO = new GraphDTO();
+                    graphDTO.setName(properties.get("name").toString());
+                    graphDTO.setLabel(labelList.get(0));
+                    graphDTO.setId((Long)node.get("id"));
+                    graphDTO.setProperties(properties);
+                    graphDTOList.add(graphDTO);
+                }
+
+            }
+
+
+
 
             return graphDTOList;
 

+ 2 - 0
src/main/java/com/qizhen/healsphere/web/dto/NodeDTO.java

@@ -12,4 +12,6 @@ import lombok.Setter;
 @Setter
 public class NodeDTO {
     private String name;
+    private Long nodeId;
+    private String label;
 }

+ 6 - 8
src/test/java/com/qizhen/healsphere/KgGraphTests.java

@@ -3,7 +3,7 @@ package com.qizhen.healsphere;
 import cn.hutool.json.JSONUtil;
 import com.qizhen.healsphere.facade.KgFacade;
 import com.qizhen.healsphere.service.impl.KgServiceImpl;
-import com.qizhen.healsphere.web.dto.NodeDTO;
+import com.qizhen.healsphere.web.dto.GraphLabelDTO;
 import com.qizhen.healsphere.web.param.KgQuery;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -12,8 +12,6 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.util.List;
-
 @RunWith(SpringRunner.class)
 @ComponentScan(basePackages = {"com.qizhen.healsphere.model","com.qizhen.healsphere.repository"})
 @SpringBootTest
@@ -33,15 +31,15 @@ public class KgGraphTests {
 
         KgQuery kq = new KgQuery();
         kq.setLabelName("疾病");
-        kq.setInputStr("急性");
+        kq.setInputStr("test3");
 //        List<Map<String,Object>> graph = kgServiceImpl.getGraphNew(kq);
 //        System.out.println(JSONUtil.toJsonStr(graph));
 //        List<GraphDTO> graph = kgServiceImpl.getGraph(kq);
 //        System.out.println(JSONUtil.toJsonStr(graph));
-//        GraphLabelDTO graphFac = kgFacade.getGraphFac(kq);
-//        System.out.println(JSONUtil.toJsonStr(graphFac));
-        List<NodeDTO> node = kgFacade.getNode(kq);
-        System.out.println(JSONUtil.toJsonStr(node));
+        GraphLabelDTO graphFac = kgFacade.getGraphFac(kq);
+        System.out.println(JSONUtil.toJsonStr(graphFac));
+//        List<NodeDTO> node = kgFacade.getNode(kq);
+//        System.out.println(JSONUtil.toJsonStr(node));
 //        String uri = "bolt://173.18.12.194:7687";
 //        String user = "neo4j";
 //        String password = "12345678";