Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/java/com/qizhen/healsphere/repository/neo4j/BaseNodeRepository.java
SGTY 5 tháng trước cách đây
mục cha
commit
4545a00be6
23 tập tin đã thay đổi với 414 bổ sung126 xóa
  1. 4 4
      src/main/java/com/qizhen/healsphere/config/Neo4jUtil.java
  2. 21 4
      src/main/java/com/qizhen/healsphere/facade/KgFacade.java
  3. 22 3
      src/main/java/com/qizhen/healsphere/repository/neo4j/BaseNodeRepository.java
  4. 1 1
      src/main/java/com/qizhen/healsphere/service/KgService.java
  5. 18 0
      src/main/java/com/qizhen/healsphere/service/PropertyService.java
  6. 99 19
      src/main/java/com/qizhen/healsphere/service/impl/KgServiceImpl.java
  7. 60 0
      src/main/java/com/qizhen/healsphere/service/impl/PropertyServiceImpl.java
  8. 9 0
      src/main/java/com/qizhen/healsphere/web/KgController.java
  9. 58 0
      src/main/java/com/qizhen/healsphere/web/PropertyController.java
  10. 1 1
      src/main/java/com/qizhen/healsphere/web/RelationshipController.java
  11. 4 0
      src/main/java/com/qizhen/healsphere/web/dto/BaseNodeDTO.java
  12. 6 2
      src/main/java/com/qizhen/healsphere/web/dto/GNodeDTO.java
  13. 3 3
      src/main/java/com/qizhen/healsphere/web/dto/LinkDTO.java
  14. 15 0
      src/main/java/com/qizhen/healsphere/web/dto/NodeDTO.java
  15. 14 0
      src/main/java/com/qizhen/healsphere/web/vo/DeletePropertyVO.java
  16. 18 0
      src/main/java/com/qizhen/healsphere/web/vo/PropertyVO.java
  17. 14 0
      src/main/java/com/qizhen/healsphere/web/vo/UpdatePropertyVO.java
  18. 5 6
      src/main/resources/application-local.yml
  19. 12 49
      src/main/resources/application-test.yml
  20. 5 0
      src/main/resources/application.yml
  21. 0 16
      src/main/resources/bootstrap.yml
  22. 12 12
      src/main/resources/mapper/neo4j/KgMapper.xml
  23. 13 6
      src/test/java/com/qizhen/healsphere/KgGraphTests.java

+ 4 - 4
src/main/java/com/qizhen/healsphere/config/Neo4jUtil.java

@@ -10,14 +10,14 @@ import org.springframework.context.annotation.Configuration;
 public class Neo4jUtil {
 
 //    @Value("${spring.neo4j.uri}")
-//    private static String url = "bolt://173.18.12.194:7687";
-    private static String url = "bolt://172.16.8.59:7687";
+    private static String url = "bolt://173.18.12.194:7687";
+//    private static String url = "bolt://172.16.8.59:7687";
 //    @Value("${spring.neo4j.authentication.username}")
     private static String username = "neo4j";
 
 //    @Value("${spring.neo4j.authentication.password}")
-//    private static String password = "12345678";
-    private static String password = "1Qaz@wsx";
+    private static String password = "12345678";
+//    private static String password = "1Qaz@wsx";
 
     private static Driver driver;
 

+ 21 - 4
src/main/java/com/qizhen/healsphere/facade/KgFacade.java

@@ -6,6 +6,7 @@ import cn.hutool.json.JSONUtil;
 import com.qizhen.healsphere.common.exception.CommonErrorCode;
 import com.qizhen.healsphere.common.exception.CommonException;
 import com.qizhen.healsphere.repository.mapper.entity.PresetInfo;
+import com.qizhen.healsphere.repository.neo4j.BaseNodeRepository;
 import com.qizhen.healsphere.service.impl.KgServiceImpl;
 import com.qizhen.healsphere.web.dto.*;
 import com.qizhen.healsphere.web.param.KgQuery;
@@ -27,6 +28,22 @@ import java.util.Map;
 public class KgFacade extends KgServiceImpl {
     @Autowired
     private PresetInfoFacade presetInfoFacade;
+    @Autowired
+    private BaseNodeRepository baseNodeRepository;
+
+
+    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;
+    }
 
     public GraphLabelDTO getGraphFac(KgQuery kgQuery) {
         GraphLabelDTO graphLabelDTO = new GraphLabelDTO();
@@ -37,7 +54,7 @@ public class KgFacade extends KgServiceImpl {
         if (CollUtil.isEmpty(res)) {
             throw new CommonException(CommonErrorCode.NOT_EXISTS);
         } else {
-            Integer nodeId = 0;
+            long nodeId = 0;
             categories.add(new CategorieDTO("中心词"));
             categories.add(new CategorieDTO("关系"));
             Map<String, Integer> cMap = new HashMap<>();
@@ -46,7 +63,7 @@ public class KgFacade extends KgServiceImpl {
 
             GraphDTO graphDTO = res.get(0);
             GNodeDTO gNodeDTO
-                    = new GNodeDTO(graphDTO.getLabel(), 0, graphDTO.getName(), nodeId, "circle", 50);
+                    = new GNodeDTO(graphDTO.getLabel(), 0, graphDTO.getName(), nodeId, "circle", 50,graphDTO.getProperties());
             nodeId++;
             node.add(gNodeDTO);
             if (CollUtil.isNotEmpty(graphDTO.getENodeRSDTOS())) {
@@ -58,7 +75,7 @@ public class KgFacade extends KgServiceImpl {
                         rsId++;
                     }
                     GNodeDTO nNodeDTO
-                            = new GNodeDTO("", 1, "", nodeId, "diamond", 10);
+                            = new GNodeDTO("", 1, "", nodeId, "diamond", 10,graphDTO.getProperties());
                     node.add(nNodeDTO);
                     links.add(new LinkDTO(gNodeDTO.getName(), nNodeDTO.getName(), baseNodeRSDTO.getRType()));
                     nodeId++;
@@ -70,7 +87,7 @@ public class KgFacade extends KgServiceImpl {
                             }
                             GNodeDTO eNodeDTO
                                     = new GNodeDTO(baseNodeDTO.getLabel(), cMap.get(baseNodeRSDTO.getRType()),
-                                    baseNodeDTO.getName(), nodeId, symbol, 28);
+                                    baseNodeDTO.getName(), nodeId, symbol, 28, baseNodeDTO.getProperties());
                             nodeId++;
                             node.add(eNodeDTO);
                             links.add(new LinkDTO(nNodeDTO.getName(), eNodeDTO.getName(), ""));

+ 22 - 3
src/main/java/com/qizhen/healsphere/repository/neo4j/BaseNodeRepository.java

@@ -1,6 +1,7 @@
 package com.qizhen.healsphere.repository.neo4j;
 
 import com.qizhen.healsphere.config.Neo4jUtil;
+import org.neo4j.driver.v1.*;
 import com.qizhen.healsphere.repository.neo4j.entity.BaseEntity;
 import org.neo4j.driver.v1.Record;
 import org.neo4j.driver.v1.Session;
@@ -9,7 +10,11 @@ import org.neo4j.driver.v1.Values;
 import org.neo4j.driver.v1.types.Node;
 import org.springframework.stereotype.Repository;
 
-import java.util.*;
+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 {
@@ -37,6 +42,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' return distinct n.name limit 20", label);
+        try(Session session = Neo4jUtil.getSession()) {
+            StatementResult result = session.run(query,Values.parameters("name", name));
+            List<String> names = 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()));
+                }
+            }
+            return names;
+        }
+
+    }
+
     /**
      * 根据id查询实体属性
      * @param id
@@ -85,7 +106,6 @@ public class BaseNodeRepository {
             return listMap;
 
         }
-
     }
 
     /**
@@ -116,7 +136,6 @@ public class BaseNodeRepository {
                 map.put("properties", node.asMap());
             }
             return map;
-
         }
     }
 

+ 1 - 1
src/main/java/com/qizhen/healsphere/service/KgService.java

@@ -19,5 +19,5 @@ public interface KgService {
 
     List<GraphDTO> getGraph(KgQuery kgQuery);
 
-    Collection<Map> getGraphNew(KgQuery kgQuery);
+    List<Map<String,Object>> getGraphNew(KgQuery kgQuery);
 }

+ 18 - 0
src/main/java/com/qizhen/healsphere/service/PropertyService.java

@@ -0,0 +1,18 @@
+package com.qizhen.healsphere.service;
+
+import com.qizhen.healsphere.web.vo.DeletePropertyVO;
+import com.qizhen.healsphere.web.vo.EntityVO;
+import com.qizhen.healsphere.web.vo.UpdatePropertyVO;
+
+import java.util.List;
+import java.util.Map;
+
+public interface PropertyService {
+
+
+    List<Map<String, Object>> createEntityProperty(List<EntityVO> entityList);
+
+    List<Map<String, Object>> deleteEntityProperty(List<DeletePropertyVO> deletePropertyList);
+
+    Map<String, Object> updateEntityProperty(UpdatePropertyVO updateProperty);
+}

+ 99 - 19
src/main/java/com/qizhen/healsphere/service/impl/KgServiceImpl.java

@@ -1,12 +1,20 @@
 package com.qizhen.healsphere.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import com.qizhen.healsphere.config.Neo4jUtil;
 import com.qizhen.healsphere.service.KgService;
+import com.qizhen.healsphere.web.dto.BaseNodeRSDTO;
 import com.qizhen.healsphere.web.dto.GraphDTO;
+import com.qizhen.healsphere.web.dto.NextNodeDTO;
 import com.qizhen.healsphere.web.param.KgQuery;
-import org.springframework.data.neo4j.repository.query.QueryFragmentsAndParameters;
+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.Service;
 
-import java.util.Collection;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -37,32 +45,104 @@ public class KgServiceImpl implements KgService {
         String cypherQuery = "MATCH (n:" + kgQuery.getLabelName() + ")-[r]->(m)\n" +
                 "            where n.name = $inputStr\n" +
                 "            OPTIONAL MATCH p=(m)-[]->(o) where head(Labels(m)) in [\"疾病\",\"症状\",\"药品通用名\",\"手术和操作\",\"实验室检查\",\"辅助检查\"]\n" +
-                "            RETURN head(Labels(n)) as sLabel,n.name as sName,Type (r) as rType, head(Labels(m)) as eLabel,m.name as eName, count(p) as pCount\n" +
+                "            RETURN n,Type (r) as rType, m, count(p) as pCount\n" +
                 "            ORDER BY rType";
-        QueryFragmentsAndParameters parameters = new QueryFragmentsAndParameters(cypherQuery,map);
+
+
+        try(Session session = Neo4jUtil.getSession()) {
+            StatementResult result = session.run(cypherQuery, Values.parameters("inputStr", kgQuery.getInputStr()));
+            List<GraphDTO> graphDTOList = new ArrayList<>();
+
+            Map<String,GraphDTO> graphMap = new HashMap<>();
+            Map<String,List<NextNodeDTO>> rtypeMap = new HashMap<>();
+
+            while (result.hasNext()) {
+                Record record = result.next();
+                Node nodeN = record.get("n").asNode();
+                Node nodeM = record.get("m").asNode();
+                String sLabel = nodeN.labels().iterator().next();
+                String sName = nodeN.asMap().get("name").toString();
+                long sId = nodeN.id();
+                Map<String, Object> sProp = nodeN.asMap();
+
+                String rType = record.get("rType").asString();
+                String eLabel = nodeM.labels().iterator().next();
+                String eName = nodeM.asMap().get("name").toString();
+                long eId = nodeM.id();
+                Map<String, Object> eProp = nodeM.asMap();
+
+                int pCount = record.get("pCount").asInt();
+
+                if (!graphMap.containsKey(sName+"_"+sLabel)) {
+                    GraphDTO graphDTO = new GraphDTO();
+                    graphDTO.setName(sName);
+                    graphDTO.setLabel(sLabel);
+                    graphDTO.setId(sId);
+                    graphDTO.setProperties(sProp);
+                    graphMap.put(sName, graphDTO);
+                }
+                NextNodeDTO nextNodeDTO = new NextNodeDTO();
+                nextNodeDTO.setName(eName);
+                nextNodeDTO.setLabel(eLabel);
+                nextNodeDTO.setPCount(pCount);
+                nextNodeDTO.setId(eId);
+                nextNodeDTO.setProperties(eProp);
+
+                List<NextNodeDTO> nextNodeDTOS = rtypeMap.get(rType);
+                if (CollUtil.isEmpty(nextNodeDTOS)) {
+                    nextNodeDTOS = new ArrayList<>();
+                }
+                nextNodeDTOS.add(nextNodeDTO);
+                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);
+
+            return graphDTOList;
+
+        }
+
+//        QueryFragmentsAndParameters parameters = new QueryFragmentsAndParameters(cypherQuery,map);
+
+
 //        return neo4jTemplate.toExecutableQuery(GraphDTO.class,parameters).getResults();
-        return null;
+//        return null;
     }
 
     @Override
-    public Collection<Map> getGraphNew(KgQuery kgQuery){
-//        String cypherQuery = "MATCH (n:" + kgQuery.getLabelName() + ")-[r]->(m)\n" +
-//                "            where n.name = $inputStr\n" +
-//                "            OPTIONAL MATCH p=(m)-[]->(o) where head(Labels(m)) in [\"疾病\",\"症状\",\"药品通用名\",\"手术和操作\",\"实验室检查\",\"辅助检查\"]\n" +
-//                "            RETURN head(Labels(n)) as sLabel,n.name as sName,Type (r) as rType, head(Labels(m)) as eLabel,m.name as eName, count(p) as pCount\n" +
-//                "            ORDER BY rType";
-//
-//        Collection<Map<String, Object>> mapCollection = neo4jClient.query(cypherQuery).bind(kgQuery.getInputStr()).to("inputStr").fetch().all();
-//        return mapCollection;
-        Map<String,Object> map = new HashMap<>();
-        map.put("inputStr",kgQuery.getInputStr());
+    public List<Map<String,Object>> getGraphNew(KgQuery kgQuery){
         String cypherQuery = "MATCH (n:" + kgQuery.getLabelName() + ")-[r]->(m)\n" +
                 "            where n.name = $inputStr\n" +
                 "            OPTIONAL MATCH p=(m)-[]->(o) where head(Labels(m)) in [\"疾病\",\"症状\",\"药品通用名\",\"手术和操作\",\"实验室检查\",\"辅助检查\"]\n" +
                 "            RETURN head(Labels(n)) as sLabel,n.name as sName,Type (r) as rType, head(Labels(m)) as eLabel,m.name as eName, count(p) as pCount\n" +
                 "            ORDER BY rType";
-        QueryFragmentsAndParameters parameters = new QueryFragmentsAndParameters(cypherQuery,map);
-//        return neo4jTemplate.toExecutableQuery(Map.class,parameters).getResults();
-        return null;
+
+        try(Session session = Neo4jUtil.getSession()) {
+            StatementResult result = session.run(cypherQuery, Values.parameters("inputStr", kgQuery.getInputStr()));
+            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(record.asMap());
+                }
+            }
+            return listMap;
+
+        }
     }
 }

+ 60 - 0
src/main/java/com/qizhen/healsphere/service/impl/PropertyServiceImpl.java

@@ -0,0 +1,60 @@
+package com.qizhen.healsphere.service.impl;
+
+import com.qizhen.healsphere.repository.neo4j.BasePropertyRepository;
+import com.qizhen.healsphere.service.PropertyService;
+import com.qizhen.healsphere.web.vo.DeletePropertyVO;
+import com.qizhen.healsphere.web.vo.EntityVO;
+import com.qizhen.healsphere.web.vo.UpdatePropertyVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class PropertyServiceImpl implements PropertyService {
+
+    @Autowired
+    BasePropertyRepository propertyRepository;
+
+
+    @Override
+    public List<Map<String, Object>> createEntityProperty(List<EntityVO> entityList) {
+
+        List<Map<String, Object>> list = entityList.stream()
+                .map(entityVO -> propertyRepository.createProperty(
+                        entityVO.getLabel(),
+                        entityVO.getNodeId(),
+                        entityVO.getProperty()))
+                .collect(Collectors.toList());
+        return list;
+    }
+
+
+    @Override
+    public List<Map<String, Object>> deleteEntityProperty(List<DeletePropertyVO> deletePropertyList) {
+
+        List<Map<String, Object>> list = deletePropertyList.stream()
+                .map(deletePropertyVO -> propertyRepository.deleteProperty(
+                        deletePropertyVO.getLabel(),
+                        deletePropertyVO.getNodeId(),
+                        deletePropertyVO.getPropertyName()))
+                .collect(Collectors.toList());
+
+        return list;
+    }
+
+    @Override
+    public Map<String, Object> updateEntityProperty(UpdatePropertyVO updateProperty) {
+
+        return propertyRepository.updateProperty(
+                updateProperty.getLabel(),
+                updateProperty.getNodeId(),
+                updateProperty.getOldPropertyName(),
+                updateProperty.getNewPropertyName(),
+                updateProperty.getNewPropertyValue());
+    }
+
+
+}

+ 9 - 0
src/main/java/com/qizhen/healsphere/web/KgController.java

@@ -1,6 +1,7 @@
 package com.qizhen.healsphere.web;
 
 import com.qizhen.healsphere.web.dto.GraphLabelDTO;
+import com.qizhen.healsphere.web.dto.NodeDTO;
 import com.qizhen.healsphere.web.dto.RespDTO;
 import com.qizhen.healsphere.web.dto.TreeDTO;
 import com.qizhen.healsphere.facade.KgFacade;
@@ -15,6 +16,7 @@ import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * @Description: 朗通知识图谱控制层
@@ -54,5 +56,12 @@ public class KgController {
         log.info("获取树形分类缓存成功");
         return RespDTO.onSuc(kgFacade.getTreeFac(kgTree));
     }
+
+    @ApiOperation(value = "查询节点", notes = "查询节点")
+    @RequestMapping(value = "/getNode", method = RequestMethod.POST)
+    @ResponseBody
+    public RespDTO<List<NodeDTO>> getNode(@RequestBody @Valid KgQuery kgQuery) {
+        return RespDTO.onSuc(kgFacade.getNode(kgQuery));
+    }
 }
 

+ 58 - 0
src/main/java/com/qizhen/healsphere/web/PropertyController.java

@@ -0,0 +1,58 @@
+package com.qizhen.healsphere.web;
+
+import com.qizhen.healsphere.service.PropertyService;
+import com.qizhen.healsphere.web.dto.RespDTO;
+import com.qizhen.healsphere.web.vo.DeletePropertyVO;
+import com.qizhen.healsphere.web.vo.EntityVO;
+import com.qizhen.healsphere.web.vo.UpdatePropertyVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+import java.util.Map;
+
+@Controller
+@RequestMapping("/property")
+@Api(value = "属性API", tags = { "属性API" })
+public class PropertyController {
+
+    @Autowired
+    PropertyService propertyService;
+
+    @ApiOperation(value = "批量新增实体属性",
+            notes = "")
+    @RequestMapping(value = "/createEntityProperty",method = RequestMethod.POST)
+    @ResponseBody
+    public RespDTO<List<Map<String, Object>>> createEntityProperty(@RequestBody List<EntityVO> entityList) {
+
+        List<Map<String, Object>> list = propertyService.createEntityProperty(entityList);
+        return RespDTO.onSuc(list);
+    }
+
+    @ApiOperation(value = "删除实体属性",
+            notes = "")
+    @RequestMapping(value = "/deleteEntityProperty",method = RequestMethod.DELETE)
+    @ResponseBody
+    public RespDTO<List<Map<String, Object>>> deleteEntityProperty(@RequestBody List<DeletePropertyVO> deletePropertyList) {
+
+        List<Map<String, Object>> list = propertyService.deleteEntityProperty(deletePropertyList);
+        return RespDTO.onSuc(list);
+    }
+
+    @ApiOperation(value = "更新实体属性",
+            notes = "")
+    @RequestMapping(value = "/updateEntityProperty",method = RequestMethod.PUT)
+    @ResponseBody
+    public RespDTO<Map<String, Object>> updateEntityProperty(@RequestBody UpdatePropertyVO updateProperty) {
+
+        Map<String, Object> entity = propertyService.updateEntityProperty(updateProperty);
+        return RespDTO.onSuc(entity);
+    }
+
+}

+ 1 - 1
src/main/java/com/qizhen/healsphere/web/RelationshipController.java

@@ -22,7 +22,7 @@ public class RelationshipController {
     RelationshipService relationshipService;
 
 
-    @ApiOperation(value = "批量新增关系",
+    @ApiOperation(value = "批量新增关系(实体链接)",
             notes = "")
     @RequestMapping(value = "/createRelationship",method = RequestMethod.POST)
     @ResponseBody

+ 4 - 0
src/main/java/com/qizhen/healsphere/web/dto/BaseNodeDTO.java

@@ -3,6 +3,8 @@ package com.qizhen.healsphere.web.dto;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Map;
+
 /**
  * @Description:
  * @author: gaodm
@@ -13,4 +15,6 @@ import lombok.Setter;
 public class BaseNodeDTO {
     private String name;
     private String label;
+    private Long id;
+    private Map<String,Object> properties;
 }

+ 6 - 2
src/main/java/com/qizhen/healsphere/web/dto/GNodeDTO.java

@@ -3,6 +3,8 @@ package com.qizhen.healsphere.web.dto;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Map;
+
 /**
  * @Description:
  * @author: gaodm
@@ -14,16 +16,18 @@ public class GNodeDTO {
     private String type;
     private Integer category;
     private String label;
-    private Integer name;
+    private Long name;
     private String symbol;
     private Integer symbolSize;
+    private Map<String, Object> properties;
 
-    public GNodeDTO(String type, Integer category, String label, Integer name, String symbol, Integer symbolSize) {
+    public GNodeDTO(String type, Integer category, String label, Long name, String symbol, Integer symbolSize, Map<String, Object> properties) {
         this.type = type;
         this.category = category;
         this.label = label;
         this.name = name;
         this.symbol = symbol;
         this.symbolSize = symbolSize;
+        this.properties = properties;
     }
 }

+ 3 - 3
src/main/java/com/qizhen/healsphere/web/dto/LinkDTO.java

@@ -11,11 +11,11 @@ import lombok.Setter;
 @Getter
 @Setter
 public class LinkDTO {
-    private Integer source;
-    private Integer target;
+    private Long source;
+    private Long target;
     private String value;
 
-    public LinkDTO(Integer source, Integer target, String value) {
+    public LinkDTO(Long source, Long target, String value) {
         this.source = source;
         this.target = target;
         this.value = value;

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

@@ -0,0 +1,15 @@
+package com.qizhen.healsphere.web.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/3/16 10:11
+ */
+@Getter
+@Setter
+public class NodeDTO {
+    private String name;
+}

+ 14 - 0
src/main/java/com/qizhen/healsphere/web/vo/DeletePropertyVO.java

@@ -0,0 +1,14 @@
+package com.qizhen.healsphere.web.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+@Getter
+@Setter
+public class DeletePropertyVO {
+    private Long nodeId;
+    private String label;
+    private String propertyName;
+}

+ 18 - 0
src/main/java/com/qizhen/healsphere/web/vo/PropertyVO.java

@@ -0,0 +1,18 @@
+package com.qizhen.healsphere.web.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+@Getter
+@Setter
+public class PropertyVO {
+    //实体id
+    private Long nodeId;
+    //实体标签
+    private String label;
+    //属性名称
+    private String propertyName;
+    private Map<String, Object> property;
+}

+ 14 - 0
src/main/java/com/qizhen/healsphere/web/vo/UpdatePropertyVO.java

@@ -0,0 +1,14 @@
+package com.qizhen.healsphere.web.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class UpdatePropertyVO {
+    private Long nodeId;
+    private String label;
+    private String oldPropertyName;
+    private String newPropertyName;
+    private String newPropertyValue;
+}

+ 5 - 6
src/main/resources/application-local.yml

@@ -1,8 +1,3 @@
-server:
-  port: 8080
-  max-http-header-size: 10MB
-
-
 swagger:
   enable: true
 
@@ -26,4 +21,8 @@ spring:
 
 springfox:
   documentation:
-    enabled: true
+    enabled: true
+
+server:
+  port: 8086
+  max-http-header-size: 10MB

+ 12 - 49
src/main/resources/application-test.yml

@@ -1,23 +1,11 @@
 spring:
   datasource:
-#    dynamic:
-#      primary: neo4j
-#      # 数据库配置
-#      datasource:
-#        neo4j:
-#          driver-class-name: org.neo4j.jdbc.Driver
-#          url: jdbc:neo4j:http://173.18.12.194:7474
-#          username: neo4j
-#          password: 12345678
-#        mysql:
-#          driver-class-name: com.mysql.cj.jdbc.Driver
-#          url: jdbc:mysql://173.18.12.194:3306/sys-ltkg?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false
-#          username: root
-#          password: dsYun8!@#
-    driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://173.18.12.194:3306/sys-ltkg?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false
-    username: root
-    password: dsYun8!@#
+    hikari:
+      driver-class-name: com.mysql.jdbc.Driver
+      username: root
+      password: dsYun8!@#
+      jdbc-url: jdbc:mysql://173.18.12.194:3306/sys-ltkg?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false
+
   neo4j:
     uri: bolt://173.18.12.206:7687
     authentication:
@@ -27,37 +15,12 @@ spring:
 #mybatis
 mybatis:
   type-aliases-package: com.qizhen.healsphere.repository.mapper.entity
-  mapper-locations: classpath:mapper/*.xml
-
-#mybatis-plus
-mybatis-plus:
-  mapper-locations: classpath:/mapper/*Mapper.xml
-  #实体扫描,多个package用逗号或者分号分隔
-  typeAliasesPackage: com.qizhen.healsphererepository.mapper.entity
-  global-config:
-    #刷新mapper 调试神器
-    db-config:
-      #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
-      id-type: id_worker
-      #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
-      field-strategy: not_empty
-      #驼峰下划线转换
-      column-underline: true
-      #数据库大写下划线转换
-      #capital-mode: true
-      #刷新mapper 调试神器
-      refresh-mapper: true
-      #逻辑删除配置
-      logic-delete-value: 0
-      logic-not-delete-value: 1
-      #自定义填充策略接口实现
-      #meta-object-handler: com.baomidou.springboot.xxx
-      #自定义SQL注入器
-      #sql-injector: com.baomidou.springboot.xxx
-  configuration:
-    map-underscore-to-camel-case: true
-    cache-enabled: false
+  mapper-locations: classpath:mapper/mysql/*.xml
 
 springfox:
   documentation:
-    enabled: true
+    enabled: true
+
+server:
+  port: 8080
+  max-http-header-size: 10MB

+ 5 - 0
src/main/resources/application.yml

@@ -0,0 +1,5 @@
+spring:
+  profiles:
+    active: local
+#  application:
+#    name: healsphere

+ 0 - 16
src/main/resources/bootstrap.yml

@@ -1,16 +0,0 @@
-spring:
-  profiles:
-    active: local
-  application:
-    name: healsphere
-#  mvc:
-#    pathmatch:
-#      matching-strategy: ant_path_matcher
-#  jackson:
-#    default-property-inclusion: non_null
-#    deserialization:
-#      ACCEPT_FLOAT_AS_INT: false
-server:
-  port: 8080
-  max-http-header-size: 10MB
-

+ 12 - 12
src/main/resources/mapper/neo4j/KgMapper.xml

@@ -3,18 +3,18 @@
 <!--        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">-->
 <!--<mapper namespace="com.qizhen.healsphere.repository.mapper.KgMapper">-->
 
-<!--    <resultMap id="GraphResultMap" type="com.qizhen.healsphere.web.dto.GraphDTO">-->
-<!--        <result column="sName" property="name"/>-->
-<!--        <result column="sLabel" property="label"/>-->
-<!--        <collection property="eNodeRSDTOS" ofType="com.qizhen.healsphere.web.dto.BaseNodeRSDTO">-->
-<!--            <result column="rType" property="rType"/>-->
-<!--            <collection property="eNodeDTOS" ofType="com.qizhen.healsphere.web.dto.NextNodeDTO">-->
-<!--                <result column="eName" property="name"/>-->
-<!--                <result column="eLabel" property="label"/>-->
-<!--                <result column="pCount" property="pCount"/>-->
-<!--            </collection>-->
-<!--        </collection>-->
-<!--    </resultMap>-->
+    <resultMap id="GraphResultMap" type="com.qizhen.healsphere.web.dto.GraphDTO">
+        <result column="sName" property="name"/>
+        <result column="sLabel" property="label"/>
+        <collection property="eNodeRSDTOS" ofType="com.qizhen.healsphere.web.dto.BaseNodeRSDTO">
+            <result column="rType" property="rType"/>
+            <collection property="eNodeDTOS" ofType="com.qizhen.healsphere.web.dto.NextNodeDTO">
+                <result column="eName" property="name"/>
+                <result column="eLabel" property="label"/>
+                <result column="pCount" property="pCount"/>
+            </collection>
+        </collection>
+    </resultMap>
 
 <!--    <select id="getGraph" parameterType='com.qizhen.healsphere.web.param.KgQuery' resultMap="GraphResultMap">-->
 <!--        MATCH (n:${labelName})-[r]->(m)-->

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

@@ -1,7 +1,9 @@
 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.param.KgQuery;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -10,8 +12,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.util.Collection;
-import java.util.Map;
+import java.util.List;
 
 @RunWith(SpringRunner.class)
 @ComponentScan(basePackages = {"com.qizhen.healsphere.model","com.qizhen.healsphere.repository"})
@@ -20,6 +21,9 @@ public class KgGraphTests {
     @Autowired
     KgServiceImpl kgServiceImpl;
 
+    @Autowired
+    KgFacade kgFacade;
+
 
     @Test
     public void contextLoads() {}
@@ -29,12 +33,15 @@ public class KgGraphTests {
 
         KgQuery kq = new KgQuery();
         kq.setLabelName("疾病");
-        kq.setInputStr("急性胰腺炎");
-        Collection<Map> graph = kgServiceImpl.getGraphNew(kq);
-        System.out.println(JSONUtil.toJsonStr(graph));
+        kq.setInputStr("急性");
+//        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));
 //        String uri = "bolt://173.18.12.194:7687";
 //        String user = "neo4j";
 //        String password = "12345678";