Browse Source

根据性别和年龄进行过滤

kongwz 4 years ago
parent
commit
a703c3c048

+ 2 - 0
src/main/java/com/diagbot/entity/node/YiBaoDiseaseName.java

@@ -17,6 +17,8 @@ public class YiBaoDiseaseName extends BaseNode  {
 
 	@Property(name = "性别")
 	private String gender;
+	@Property(name = "年龄")
+	private String age;
 
 	@Relationship(type = "医保疾病名称相关医保ICD-10代码", direction = Relationship.OUTGOING)
 	private Set<YiBaoICD_10Code> yibaoicd_10codes = new HashSet<>();

+ 11 - 6
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -26,6 +26,7 @@ import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.repository.*;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.NeoUtil;
 import com.diagbot.util.RedisUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.BillNeoVO;
@@ -267,7 +268,7 @@ public class NeoFacade {
         }
         symptoms = Stream.of(symptom_chief,symptom_present).flatMap(Collection::stream).distinct().collect(Collectors.toList());
         //症状推疾病
-        List<String> allDis_bySymptom = getDisBySymptom(symptoms);
+        List<String> allDis_bySymptom = getDisBySymptom(symptoms,age,sex);
         allDis.addAll(allDis_bySymptom);
         //体征推出的疾病
         //化验推出的疾病辅检
@@ -331,12 +332,12 @@ public class NeoFacade {
         return neoPushDTOS;
     }
 
-    public List<String> getDisBySymptom(List<String> symptoms){
+    public List<String> getDisBySymptom(List<String> symptoms,Integer age,Integer sex){
         List<String> symptomCache = getSymptomCache();
         //取交集
         symptoms.retainAll(symptomCache);
         long start = System.currentTimeMillis();
-        List<String> allDis_bySymptom = pushDis(symptomNameRepository, symptoms);
+        List<String> allDis_bySymptom = pushDis(symptomNameRepository, symptoms,age,sex);
         long end = System.currentTimeMillis();
         return allDis_bySymptom;
         }
@@ -349,7 +350,7 @@ public class NeoFacade {
      * @param symptoms
      * @return
      */
-    public List<String> pushDis(SymptomNameRepository symptomNameRepository,List<String> symptoms){
+    public List<String> pushDis(SymptomNameRepository symptomNameRepository,List<String> symptoms,Integer age,Integer sex){
         List<String> allDis = Lists.newArrayList();
 
         /*if(ListUtil.isNotEmpty(symptoms)){
@@ -364,8 +365,12 @@ public class NeoFacade {
             });
         }*/
         List<Symptom> byNameIn = symptomNameRepository.findByNameIn(symptoms);
-        allDis = byNameIn.stream().filter(z -> z.getDisease() != null && z.getDisease().size() > 0)
-                .map(z -> z.getDisease().stream().map(y -> y.getName()).collect(Collectors.toList())).flatMap(List::stream)
+        /*List<YiBaoDiseaseName> collect = byNameIn.stream()
+                .map(x -> x.getDisease().stream().filter(z -> NeoUtil.matchBasic(z,sex,age)).collect(Collectors.toList()))
+                .flatMap(List::stream).collect(Collectors.toList());*/
+
+        allDis = byNameIn.stream()
+                .map(z -> z.getDisease().stream().filter(o -> NeoUtil.matchBasic(o,sex,age)).map(y -> y.getName()).collect(Collectors.toList())).flatMap(List::stream)
                 .collect(Collectors.toList());
         return allDis;
     }

+ 18 - 0
src/main/java/com/diagbot/util/NeoUtil.java

@@ -3,6 +3,7 @@ package com.diagbot.util;
 import com.alibaba.fastjson.JSONObject;
 import com.diagbot.dto.NodeNeoDTO;
 import com.diagbot.dto.PushBaseDTO;
+import com.diagbot.entity.node.YiBaoDiseaseName;
 import com.diagbot.repository.Constants;
 import com.diagbot.repository.NodeInfo;
 import com.diagbot.repository.datautil;
@@ -121,4 +122,21 @@ public class NeoUtil {
 
         return medtype;
     }
+
+    public static boolean matchBasic(YiBaoDiseaseName disease, int gender_code, int age){
+        boolean match = true;
+        String gender_neo4j = disease.getGender();
+        String age_neo4j = disease.getAge();
+        if((gender_neo4j != null && gender_neo4j.equals("男") && gender_code != 1) ||
+                (gender_neo4j != null && gender_neo4j.equals("女") && gender_code != 2)){
+            match = false;
+        }else if(age_neo4j != null){
+            String[] betweenAge = age_neo4j.split("-");
+            if(betweenAge.length == 2 && (age < Integer.parseInt(betweenAge[0])
+                    || age > Integer.parseInt(betweenAge[1]))){
+                match = false;
+            }
+        }
+        return match;
+    }
 }