瀏覽代碼

Merge remote-tracking branch 'origin/master'

MarkHuang 4 年之前
父節點
當前提交
d5f33db8e7

+ 4 - 0
src/main/java/com/diagbot/dto/RetrievalDTO.java

@@ -49,4 +49,8 @@ public class RetrievalDTO {
      * 症状
      */
     private List<String> symptomNames;
+    /**
+     * 体征
+     */
+    private List<String> vitalNames;
 }

+ 1 - 0
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -460,6 +460,7 @@ public class NeoFacade {
         if (presentPushVo != null) {
             if (ListUtil.isNotEmpty(presentPushVo.getSymptoms())) {
                 symptom_present = presentPushVo.getSymptoms().stream().map(x -> x.getName()).collect(Collectors.toList());
+                symptom_present = symptom_present.size() >= 5? symptom_present.subList(0,5) : symptom_present;
             }
         }
         symptoms = Stream.of(symptom_chief, symptom_present).flatMap(Collection::stream).distinct().collect(Collectors.toList());

+ 18 - 0
src/main/java/com/diagbot/facade/RetrievalFacade.java

@@ -62,6 +62,9 @@ public class RetrievalFacade {
     @Autowired
     SymptomNameRepository symptomNameRepository;
 
+    @Autowired
+    VitalRepository vitalRepository;
+
     @Autowired
     BaseNodeRepository baseNodeRepository;
 
@@ -147,6 +150,9 @@ public class RetrievalFacade {
             case 9:
                 retrievalDTO.setSymptomNames(getSymptomNames(retrievalVO.getInputStr(), retrievalVO.getSize()));
                 break;
+            case 10:
+                retrievalDTO.setVitalNames(getVitalNames(retrievalVO.getInputStr(), retrievalVO.getSize()));
+                break;
 
         }
 
@@ -366,6 +372,18 @@ public class RetrievalFacade {
     }
 
 
+    /**
+     * 获取体征列表
+     */
+    public List<String> getVitalNames(String name, Integer size) {
+
+        VitalNameNode vitalNameNode = new VitalNameNode();
+        List<String> vitallist = vitalNameNode.getVitals(name, size, vitalRepository);
+
+        return vitallist;
+    }
+
+
     /**
      * 医学知识(静态信息)检索
      *

+ 27 - 3
src/main/java/com/diagbot/process/PushProcess.java

@@ -34,13 +34,37 @@ public class PushProcess {
     public PushDTO process(PushVO pushVo, Map<String, Map<String, String>> standConvertMap, WordCrfDTO wordCrfDTO) {
         int length = pushVo.getLength();
         PushDTO pushDTO = new PushDTO();
-
         List<String> ruleTypeList = Arrays.asList(pushVo.getFeatureType().split(","));
         Map<String, List<String>> typeWords = typeWords(standConvertMap);
         //生成push入参,供图谱调用
         NeoPushVO pushVO = commonFacade.generatePushInput(wordCrfDTO);
         Map<String, List<PushBaseDTO>> dis = new HashMap<>();
-        //如果下的诊断有数据就反推
+        List<String> push = neoFacade.getPush(pushVO);
+        if (pushVO.getDiagVo() != null && ListUtil.isNotEmpty(pushVO.getDiagVo().getDiags())) {
+            List<String> collect = pushVO.getDiagVo().getDiags().stream().map(x -> x.getName()).collect(Collectors.toList());
+            push.removeAll(collect);
+            collect.addAll(push);
+            push = collect;
+        }
+        if (ListUtil.isNotEmpty(push)) {
+            //先把所有疾病推出来
+            if (ruleTypeList.contains("7")) {
+                List<PushBaseDTO> diseeases =  push.stream().map(x -> {
+                    PushBaseDTO pushBaseDTO = new PushBaseDTO();
+                    pushBaseDTO.setName(x);
+                    return pushBaseDTO;
+                }).collect(Collectors.toList());
+                diseeases = diseeases.subList(0, diseeases.size() >= length ? length : diseeases.size());
+                dis.put(DiseaseTypeEnum.possibleDis.getName(), diseeases);
+                pushDTO.setDis(dis);
+            }
+            //把第一个推送出来的诊断set到diagOrder中,再反推
+            setPushVo(pushVO, push);
+            //调用反推
+            reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO, dis);
+        }
+        return pushDTO;
+        /*//如果下的诊断有数据就反推
         if (pushVO.getDiagVo() != null && ListUtil.isNotEmpty(pushVO.getDiagVo().getDiags())) {
             reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO, dis);
         } else {
@@ -65,7 +89,7 @@ public class PushProcess {
                 reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO, dis);
             }
         }
-        return pushDTO;
+        return pushDTO;*/
     }
 
     private void setPushVo(NeoPushVO pushVO, List<String> push) {

+ 1 - 1
src/main/java/com/diagbot/repository/LisNameRepository.java

@@ -50,6 +50,6 @@ public interface LisNameRepository extends Neo4jRepository<LisName, Long> {
             "RETURN n,[ (n)-[r]->(m) | [ r, m ] ], ID(n)\n")
     List<LisName> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
 
-    @Query("MATCH (n:实验室检查名称) RETURN DISTINCT n.name as name LIMIT $size")
+    @Query("MATCH (n:实验室检查名称) RETURN DISTINCT n.name as name LIMIT {size}")
     List<String> getname(@Param("size") Integer size);
 }

+ 1 - 1
src/main/java/com/diagbot/repository/LisSetRepository.java

@@ -50,7 +50,7 @@ public interface LisSetRepository extends Neo4jRepository<LisSet, Long> {
             "RETURN n,[ (n)-[r]->(m) | [ r, m ] ], ID(n)\n")
     List<LisSet> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
 
-    @Query("MATCH (n:实验室检查套餐名) RETURN DISTINCT(n.name) LIMIT $size")
+    @Query("MATCH (n:实验室检查套餐名) RETURN DISTINCT(n.name) LIMIT {size}")
     List<String> getname(@Param("size") Integer size);
 }
 

+ 1 - 1
src/main/java/com/diagbot/repository/PacsNameRepository.java

@@ -92,6 +92,6 @@ public interface PacsNameRepository extends Neo4jRepository<PacsName, Long> {
 
 
     @Query("MATCH (n) WHERE (n:辅助检查名称 OR n:辅助检查子项目名称)\n" +
-            "RETURN DISTINCT n.name as name LIMIT ($size)\n")
+            "RETURN DISTINCT n.name as name LIMIT {size}\n")
     List<String> getPACSNames(@Param("size") Integer size);
 }

+ 1 - 1
src/main/java/com/diagbot/repository/SymptomNameRepository.java

@@ -41,7 +41,7 @@ public interface SymptomNameRepository extends Neo4jRepository<Symptom, Long> {
             "match(d:医保疾病名称)-[r{典型:1}]->(s:体征) where  s.name in {py} return d.name")
     List<String> getDisBySymptoms_1(@Param("py")List<String> symptoms);
 
-    @Query("MATCH (n:医保疾病名称) return distinct(n.name) as name LIMIT $(size)")
+    @Query("MATCH (n:症状) return distinct(n.name) as name LIMIT {size}")
     List<String> getSymptomNames(@Param("size") Integer size);
 }
 

+ 48 - 0
src/main/java/com/diagbot/repository/VitalNameNode.java

@@ -0,0 +1,48 @@
+package com.diagbot.repository;
+
+import com.diagbot.entity.node.Vital;
+import com.diagbot.util.ListUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class VitalNameNode {
+
+    /**
+     * 获取体征名称列表
+     */
+    public List<String> getVitalList(String name, Integer size, VitalRepository vitalRepository) {
+        List<String> vitallt = new ArrayList<>();
+        if (null == size) {
+            size = 100;
+        }
+
+        List<Vital> vitallist = vitalRepository.index(name, name, size);
+
+        if (ListUtil.isNotEmpty(vitallist) && vitallist.size() > size) {
+            vitallist = vitallist.subList(0, size);
+        }
+
+        for (Vital vital : vitallist) {
+            vitallt.add(vital.getName());
+        }
+        return vitallt;
+    }
+
+
+
+    /**
+     * 获取体征名称列表
+     */
+    public List<String> getVitals(String name, Integer size, VitalRepository vitalRepository) {
+        List<String> vitallt = new ArrayList<>();
+        if (null == size || size == 0) {
+            size = Constants.termsize;
+        }
+
+        vitallt = vitalRepository.getVitalNames(size);
+
+        return vitallt;
+    }
+}
+

+ 19 - 0
src/main/java/com/diagbot/repository/VitalRepository.java

@@ -17,5 +17,24 @@ public interface VitalRepository extends Neo4jRepository<Vital, Long> {
 
     List<Vital> findByNameContaining(String name);
 
+    @Query("MATCH (n:`体征`) WHERE toLower(n.`name`) = toLower($name) \n" +
+            "OR toLower(n.`拼音编码`) = toLower($pycode)  \n" +
+            "RETURN n,[ (n)-[r]->(m) | [ r, m ] ], ID(n)\n" +
+            "union\n" +
+            "MATCH (n:`体征`) WHERE toLower(n.`name`) starts with toLower($name) \n" +
+            "OR toLower(n.`拼音编码`) starts with toLower($pycode)  \n" +
+            "WITH n SKIP 0 LIMIT $size\n" +
+            "RETURN n,[ (n)-[r]->(m) | [ r, m ] ], ID(n)\n" +
+            "union\n" +
+            "MATCH (n:`体征`) WHERE toLower(n.`name`) CONTAINS toLower($name) \n" +
+            "OR toLower(n.`拼音编码`) CONTAINS toLower($pycode)  \n" +
+            "WITH n SKIP 0 LIMIT $size\n" +
+            "RETURN n,[ (n)-[r]->(m) | [ r, m ] ], ID(n)\n")
+    List<Vital> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+
+
+    @Query("MATCH (n:体征) return distinct(n.name) as name LIMIT {size}")
+    List<String> getVitalNames(@Param("size") Integer size);
+
 }
 

+ 1 - 1
src/main/java/com/diagbot/repository/YiBaoDiseaseNameRepository.java

@@ -51,7 +51,7 @@ public interface YiBaoDiseaseNameRepository extends Neo4jRepository<YiBaoDisease
     List<YiBaoDiseaseName> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
 
 
-    @Query("MATCH (n:医保疾病名称) RETURN DISTINCT n.name as name LIMIT $size")
+    @Query("MATCH (n:医保疾病名称) RETURN DISTINCT n.name as name LIMIT {size}")
     List<String> getDiseaseNames(@Param("size") Integer size);
 }
 

+ 1 - 1
src/main/java/com/diagbot/repository/YiBaoOperationNameRepository.java

@@ -51,6 +51,6 @@ public interface YiBaoOperationNameRepository extends Neo4jRepository<YiBaoOpera
     List<YiBaoOperationName> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
 
 
-    @Query("MATCH (n:医保手术和操作名称) RETURN DISTINCT n.name as name LIMIT $size")
+    @Query("MATCH (n:医保手术和操作名称) RETURN DISTINCT n.name as name LIMIT {size}")
     List<String> getOperationNames(@Param("size") Integer size);
 }

+ 1 - 1
src/main/java/com/diagbot/web/RetrievalController.java

@@ -46,7 +46,7 @@ public class RetrievalController {
     }
 
     @ApiOperation(value = "术语名称检索[Mark]",
-            notes = "type: 类型:1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、9-症状 <br>" +
+            notes = "type: 类型:1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、9-症状、10-体征 <br>" +
                     "inputStr: 检索内容<br>" )
     @PostMapping("/namelist")
     public RespDTO<RetrievalDTO> namelist(@Valid @RequestBody RetrievalVO retrievalVO) {