Bläddra i källkod

Merge remote-tracking branch 'origin/master' into innerDevelop

zhaops 4 år sedan
förälder
incheckning
eaf94c3906

+ 5 - 2
src/main/java/com/diagbot/config/CacheDeleteInit.java

@@ -35,13 +35,16 @@ public class CacheDeleteInit implements CommandLineRunner {
         neoFacade.getSymptomCache();
         log.info("CDSS-CORE服务启动加载图谱症状缓存成功!");
 
-        neoFacade.getDisSexCache();
+        cacheFacade.loadDiseaseTypeCache();
+        log.info("CDSS-CORE服务启动加载疾病属性(性别、年龄、发病率)缓存成功!");
+
+        /*neoFacade.getDisSexCache();
         log.info("CDSS-CORE服务启动加载图谱疾病对应性别信息缓存成功!");
 
         neoFacade.getDisAgeCache();
         log.info("CDSS-CORE服务启动加载图谱疾病对应年龄信息缓存成功!");
 
         neoFacade.getDisdistributionCache();
-        log.info("CDSS-CORE服务启动加载图谱疾病对应发病率缓存成功!");
+        log.info("CDSS-CORE服务启动加载图谱疾病对应发病率缓存成功!");*/
     }
 }

+ 20 - 0
src/main/java/com/diagbot/entity/DiseaseProperty.java

@@ -0,0 +1,20 @@
+package com.diagbot.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.data.neo4j.annotation.QueryResult;
+
+/**
+ * @author kwz
+ * @date 2020/10/15
+ * @time 14:23
+ */
+@Getter
+@Setter
+@QueryResult
+public class DiseaseProperty {
+    private String name;
+    private String sex;
+    private String age;
+    private String fbl;
+}

+ 2 - 1
src/main/java/com/diagbot/enums/RedisEnum.java

@@ -11,7 +11,8 @@ import lombok.Setter;
 
 public enum RedisEnum implements KeyedNamed {
 
-    drugType(1, "drugType:");
+    drugType(1, "drugType:"),
+    diseaseType(2, "diseaseType:");
 
     @Setter
     private int key;

+ 11 - 0
src/main/java/com/diagbot/facade/CacheFacade.java

@@ -66,6 +66,17 @@ public class CacheFacade {
 
     }
 
+    /**
+     * 加载疾病类型缓存(疾病的年龄、性别、发病率)
+     *
+     * @return
+     */
+    public void loadDiseaseTypeCache() {
+        redisUtil.deleteByPrex(RedisEnum.diseaseType.getName());
+        neoFacade.diseasePropertyCache();
+
+    }
+
     public void clearLoadCache(String str) {
         redisUtil.deleteByPrex(str);
     }

+ 12 - 1
src/main/java/com/diagbot/facade/CommonFacade.java

@@ -149,7 +149,8 @@ public class CommonFacade {
         List<Lis> lis = wordCrfDTO.getLis();
         if (ListUtil.isNotEmpty(lis)) {
             List<String> lis_unique = lis.stream().filter(x -> StringUtils.isBlank(x.getUniqueName()))
-                    .map(x -> x.getName() + x.getDetailName()).collect(Collectors.toList());
+//                    .map(x -> x.getName() + x.getDetailName()).collect(Collectors.toList());
+                    .map(x ->x.getDetailName()).collect(Collectors.toList());
             allLis.addAll(lis_unique);
         }
         //开单化验
@@ -378,6 +379,16 @@ public class CommonFacade {
     }
 
     public void processPresentLisPacs(WordCrfDTO wordCrfDTO){
+        DiagLabel diagLabel = wordCrfDTO.getDiagLabel();
+        List<com.diagbot.model.entity.Diag> diags = diagLabel.getDiags();
+        if(ListUtil.isNotEmpty(diags)){
+            wordCrfDTO.getDiag().addAll(diags.stream().filter(x ->x.getStandName()!= null).map(x ->{
+                Item i = new Item();
+                i.setName(x.getName());
+                i.setUniqueName(x.getStandName());
+                return i;
+            }).collect(Collectors.toList()));
+        }
         PresentLabel presentLabel = wordCrfDTO.getPresentLabel();
         List<com.diagbot.model.entity.Lis> lises = presentLabel.getLises();
         List<Lis> lisList = new ArrayList<>();

+ 1 - 1
src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -83,7 +83,7 @@ public class ConceptFacade {
                 }
                 break;
             case 3:
-                List<BaseNodeInfo> pacsNameList = pacsNameRepository.findByNameInIgnoreLabel(conceptVO.getNames());
+                List<BaseNodeInfo> pacsNameList = pacsNameRepository.findByNameInMultipleLabel(conceptVO.getNames());
                 if (ListUtil.isNotEmpty(pacsNameList)) {
                     retList = pacsNameList.stream()
                             .map(i -> i.getName())

+ 116 - 87
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -6,6 +6,7 @@ import com.diagbot.biz.push.entity.Lis;
 import com.diagbot.client.ChiefPresentSimilarityServiceClient;
 import com.diagbot.client.StandConvertServiceClient;
 import com.diagbot.dto.*;
+import com.diagbot.entity.DiseaseProperty;
 import com.diagbot.entity.node.*;
 import com.diagbot.enums.RedisEnum;
 import com.diagbot.enums.StandConvertEnum;
@@ -109,7 +110,7 @@ public class NeoFacade {
 
         String med_type;
         String med_name;
-        String comma="::";
+        String comma = "::";
 
         List<String> medClass = nodeRepository.getMedHuaXueClass();
         medClass.addAll(nodeRepository.getMedYaoLiClass());
@@ -136,6 +137,26 @@ public class NeoFacade {
         }
         return res;
     }
+
+    public void diseasePropertyCache() {
+        List<DiseaseProperty> diseaseProperty = nodeRepository.getDiseaseProperty();
+        if (ListUtil.isNotEmpty(diseaseProperty)) {
+            Map map = diseaseProperty.stream().collect(Collectors.toMap(
+                    k -> RedisEnum.diseaseType.getName() + k.getName(),
+                    v -> {
+                        Map<String, String> desc = new HashMap<>();
+                        desc.put("name", v.getName());
+                        desc.put("sex", v.getSex());
+                        desc.put("age", v.getAge());
+                        desc.put("fbl", v.getFbl());
+                        return desc;
+                    },
+                    (v1, v2) -> (v2)
+            ));
+            redisTemplate.opsForValue().multiSet(map);
+        }
+    }
+
     /**
      * 返回图谱中所有症状缓存信息
      *
@@ -146,13 +167,14 @@ public class NeoFacade {
         List<String> symptomClass = nodeRepository.getSymptomClass();
         return symptomClass;
     }
+
     /**
      * 返回图谱中所有疾病和性别信息
      *
      * @return
      */
     @Cacheable(value = "cache", key = "'disSexCache'")
-    public Map<String,String> getDisSexCache() {
+    public Map<String, String> getDisSexCache() {
         Map<String, String> disSexClass = Maps.newHashMap();
         List<String> disSex = nodeRepository.getDisSexClass();
         if (ListUtil.isNotEmpty(disSex)) {
@@ -163,42 +185,47 @@ public class NeoFacade {
         }
         return disSexClass;
     }
+
     /**
      * 返回图谱中所有疾病和年龄信息
      *
      * @return
      */
     @Cacheable(value = "cache", key = "'disAgeCache'")
-    public Map<String,String> getDisAgeCache() {
+    public Map<String, String> getDisAgeCache() {
         Map<String, String> disAgeClass = Maps.newHashMap();
         List<String> ageClass = nodeRepository.getDisAgeClass();
-        if(ListUtil.isNotEmpty(ageClass)){
-            ageClass.parallelStream().forEach(x ->{
+        if (ListUtil.isNotEmpty(ageClass)) {
+            ageClass.parallelStream().forEach(x -> {
                 String[] splits = x.split("&");
-                disAgeClass.put(splits[0],splits[1]);
+                disAgeClass.put(splits[0], splits[1]);
             });
         }
         return disAgeClass;
     }
+
     /**
      * 返回图谱中所有疾病和发病率信息
      *
      * @return
      */
     @Cacheable(value = "cache", key = "'disdistributionCache'")
-    public Map<String,Double> getDisdistributionCache() {
+    public Map<String, Double> getDisdistributionCache() {
         DecimalFormat df = new DecimalFormat("0.######");
-        Map<String,Double> disdistribution = new HashMap<>();
+        Map<String, Double> disdistribution = new HashMap<>();
         List<String> disdistributionClass = nodeRepository.getDisdistributionClass();
-        if(ListUtil.isNotEmpty(disdistributionClass)){
-            disdistributionClass.parallelStream().forEach(x ->{
+        if (ListUtil.isNotEmpty(disdistributionClass)) {
+            disdistributionClass.parallelStream().forEach(x -> {
                 String[] splits = x.split("&");
-                disdistribution.put(splits[0],Double.parseDouble(splits[1]));
+                disdistribution.put(splits[0], Double.parseDouble(splits[1]));
             });
         }
         return disdistribution;
 
     }
+
+
+
     /**
      * 图谱反推的数据
      *
@@ -230,16 +257,18 @@ public class NeoFacade {
         //如果化验有特异性就直接推送疾病
         List<Lis> lises = null;
         LisPushVo lisPushVo = pushVO.getLisPushVo();
-        if(lisPushVo != null){
+        if (lisPushVo != null) {
             lises = lisPushVo.getLises();
         }
-        if(ListUtil.isNotEmpty(lises)){
+        if (ListUtil.isNotEmpty(lises)) {
             List<String> lis_dis = lises.parallelStream()
-                    .map(x -> nodeRepository.getDisByLis_Special(x.getUniqueName(), x.getDetailName()))
+                    .map(x -> nodeRepository.getDisByLis_Special(x.getName(), x.getUniqueName() + x.getResult()))
                     .flatMap(List::stream).collect(Collectors.toList());
-            filterAndSort(neoPushDTOS,lis_dis);
-            if(ListUtil.isNotEmpty(neoPushDTOS)){
-                return neoPushDTOS;
+            if (ListUtil.isNotEmpty(lis_dis)) {
+                filterAndSort(neoPushDTOS, lis_dis, sex, age);
+                if (ListUtil.isNotEmpty(neoPushDTOS)) {
+                    return neoPushDTOS;
+                }
             }
         }
 
@@ -249,65 +278,69 @@ public class NeoFacade {
         List<String> symptoms = new ArrayList<>();
         List<String> symptom_chief = new ArrayList<>();
         List<String> symptom_present = new ArrayList<>();
-        if(chiefPushVo != null){
-            if (ListUtil.isNotEmpty(chiefPushVo.getSymptoms())){
+        if (chiefPushVo != null) {
+            if (ListUtil.isNotEmpty(chiefPushVo.getSymptoms())) {
                 symptom_chief = chiefPushVo.getSymptoms().stream().map(x -> x.getName()).collect(Collectors.toList());
             }
         }
-        if(presentPushVo != null){
-            if (ListUtil.isNotEmpty(presentPushVo.getSymptoms())){
+        if (presentPushVo != null) {
+            if (ListUtil.isNotEmpty(presentPushVo.getSymptoms())) {
                 symptom_present = presentPushVo.getSymptoms().stream().map(x -> x.getName()).collect(Collectors.toList());
             }
         }
-        symptoms = Stream.of(symptom_chief,symptom_present).flatMap(Collection::stream).distinct().collect(Collectors.toList());
+        symptoms = Stream.of(symptom_chief, symptom_present).flatMap(Collection::stream).distinct().collect(Collectors.toList());
         //症状、体征推疾病
-        List<String> allDis_bySymptom = getDisBySymptom(symptoms,age,sex);
+        List<String> allDis_bySymptom = getDisBySymptom(symptoms, age, sex);
         allDis.addAll(allDis_bySymptom);
         //化验推出的疾病
-
-            if(ListUtil.isNotEmpty(lises)){
-                /*List<String> lis_dis = lises.parallelStream()
-                        .map(x -> nodeRepository.getDisByLis(x.getUniqueName(), x.getDetailName()))
-                        .filter(z->z!=null && NeoUtil.matchBasic(z,sex,age)).map(z->z.getName())
-                        .collect(Collectors.toList());*/
-                List<String> lis_dis = lises.parallelStream()
-                        .map(x -> nodeRepository.getDisByLis(x.getUniqueName(), x.getDetailName()))
-                        .flatMap(List::stream).collect(Collectors.toList());
-                allDis.addAll(lis_dis);
-            }
+        if (ListUtil.isNotEmpty(lises)) {
+            List<String> lis_dis = lises.parallelStream()
+                    .map(x -> nodeRepository.getDisByLis(x.getName(), x.getUniqueName() + x.getResult()))
+                    .flatMap(List::stream).collect(Collectors.toList());
+            allDis.addAll(lis_dis);
+        }
 
         //辅检推出的疾病
         PacsPushVo pacsPushVo = pushVO.getPacsPushVo();
-        if(pacsPushVo !=null){
+        if (pacsPushVo != null) {
             List<Item> pacs = pacsPushVo.getPacs();
-            if(ListUtil.isNotEmpty(pacs)){
+            if (ListUtil.isNotEmpty(pacs)) {
                 List<String> pacsNames = pacs.stream().map(x -> x.getUniqueName()).collect(Collectors.toList());
                 List<String> allDis_byPacsResult = getDisByPacsResult(pacsNames, age, sex);
                 allDis.addAll(allDis_byPacsResult);
             }
         }
-        filterAndSort(neoPushDTOS, allDis);
+        filterAndSort(neoPushDTOS, allDis, sex, age);
 
         return neoPushDTOS;
     }
 
-    private void filterAndSort(List<NeoPushDTO> neoPushDTOS, List<String> allDis) {
+    private void filterAndSort(List<NeoPushDTO> neoPushDTOS, List<String> allDis, int gender_code, double age) {
         //推送出的所有疾病进行性别和年龄的过滤
-        Map<Long,List<String>> numberDiseasesMap = disCountSort(allDis);
+        List<Map<String, String>> diseases = null;
+        Map<String, Double> dis_fbl = new HashMap<>();
+        if (ListUtil.isNotEmpty(allDis)) {
+//            diseases = redisUtil.get(allDis);
+            diseases = redisUtil.geth(allDis);
+            allDis = diseases.stream().filter(x -> NeoUtil.matchBasic(x, gender_code, age)).map(x -> x.get("name")).collect(Collectors.toList());
+            diseases.forEach(x -> dis_fbl.put(x.get("name"), Double.parseDouble(x.get("fbl"))));
+        }
+
+        Map<Long, List<String>> numberDiseasesMap = disCountSort(allDis);
         //根据发病率排序
-        Map<String, Double> disdistributionCache = self.getDisdistributionCache();
-        Map<Long,Map<String,Double>> disPack = new LinkedHashMap<>();
-        numberDiseasesMap.forEach((x,y)->{
+//        Map<String, Double> disdistributionCache = self.getDisdistributionCache();
+        Map<Long, Map<String, Double>> disPack = new LinkedHashMap<>();
+        numberDiseasesMap.forEach((x, y) -> {
             Map<String, Double> collect = y.stream()
-                    .collect(Collectors.toMap(v -> v, v -> disdistributionCache.get(v) != null?disdistributionCache.get(v):0.0, (e1, e2) -> e2));
-            disPack.put(x,collect);
+                    .collect(Collectors.toMap(v -> v, v -> dis_fbl.get(v), (e1, e2) -> e2));
+            disPack.put(x, collect);
         });
-        disPack.forEach((x,y)->{
+        disPack.forEach((x, y) -> {
             Map<String, Double> collect = y.entrySet().stream()
                     .sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
-                    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2,LinkedHashMap::new));
-            disPack.put(x,collect);
-            collect.forEach((k,n)->{
+                    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new));
+            disPack.put(x, collect);
+            collect.forEach((k, n) -> {
                 NeoPushDTO neoPushDTO = new NeoPushDTO();
                 PushBaseDTO pushBaseDTO = new PushBaseDTO();
                 pushBaseDTO.setName(k);
@@ -317,34 +350,35 @@ public class NeoFacade {
         });
     }
 
-    public List<String> getDisBySymptom(List<String> symptoms,Double age,Integer sex){
+    public List<String> getDisBySymptom(List<String> symptoms, Double age, Integer sex) {
         List<String> symptomCache = getSymptomCache();
         //取交集
         symptoms.retainAll(symptomCache);
         long start = System.currentTimeMillis();
-        List<String> allDis_bySymptom = pushDisBySymptom(symptomNameRepository, symptoms,age,sex);
+        List<String> allDis_bySymptom = pushDisBySymptom(symptomNameRepository, symptoms, age, sex);
         long end = System.currentTimeMillis();
         return allDis_bySymptom;
-        }
+    }
 
-    public List<String> getDisByPacsResult(List<String> pacsResult,Double age,Integer sex){
+    public List<String> getDisByPacsResult(List<String> pacsResult, Double age, Integer sex) {
 
-        List<PacsResult> byNameIn = pacsResultRepository.findByNameIn(pacsResult);
+        /*List<PacsResult> byNameIn = pacsResultRepository.findByNameIn(pacsResult);
         List<String> 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());
+                .collect(Collectors.toList());*/
+        List<String> allDis = pacsResultRepository.getDisByPacsResults(pacsResult);
         return allDis;
     }
 
 
-
     /**
      * 症状、体征、化验、辅检等其他推送疾病
+     *
      * @param symptomNameRepository
      * @param symptoms
      * @return
      */
-    public List<String> pushDisBySymptom(SymptomNameRepository symptomNameRepository,List<String> symptoms,Double age,Integer sex){
+    public List<String> pushDisBySymptom(SymptomNameRepository symptomNameRepository, List<String> symptoms, Double age, Integer sex) {
         List<String> allDis = Lists.newArrayList();
         /*List<Symptom> byNameIn = symptomNameRepository.findByNameIn(symptoms);
         allDis = byNameIn.parallelStream()
@@ -357,10 +391,11 @@ public class NeoFacade {
 
     /**
      * 推送的疾病计数排序
+     *
      * @param allDis
      * @return
      */
-    public Map<Long,List<String>> disCountSort(List<String> allDis) {
+    public Map<Long, List<String>> disCountSort(List<String> allDis) {
         Map<String, Long> dis_count = allDis.stream().collect(
 
                 Collectors.groupingBy(Function.identity(), Collectors.counting())
@@ -377,16 +412,16 @@ public class NeoFacade {
                     }).get();
 
         }
-        Map<Long,List<String>> number_diseases = new LinkedHashMap<>();
-        dis_count.forEach((x,y)->{
-            if(number_diseases.containsKey(y)){
+        Map<Long, List<String>> number_diseases = new LinkedHashMap<>();
+        dis_count.forEach((x, y) -> {
+            if (number_diseases.containsKey(y)) {
                 List<String> diseases = number_diseases.get(y);
                 diseases.add(x);
-                number_diseases.put(y,diseases);
-            }else {
+                number_diseases.put(y, diseases);
+            } else {
                 List<String> diseases = Lists.newArrayList();
                 diseases.add(x);
-                number_diseases.put(y,diseases);
+                number_diseases.put(y, diseases);
             }
         });
         return number_diseases;
@@ -410,8 +445,7 @@ public class NeoFacade {
             billNeoDTOs.addAll(getOperationBill(billNeoVO.getOperationList()));
             billNeoDTOs.addAll(getCombiOpBill(billNeoVO.getCombiopList()));
             billNeoDTOs.addAll(getTransfusionBill(billNeoVO.getTransfusionList()));
-        }
-        catch (Exception ex) {
+        } catch (Exception ex) {
             ex.printStackTrace();
         }
 
@@ -480,21 +514,18 @@ public class NeoFacade {
                         unit = lis.getUnits();
                         for (LisRemind lisRemind : lrlist) {
                             if (lisRemind.getRange() == 0) { /*&& lisRemind.getUnit().equals(unit) &&*/
-                                if (null==lisRemind.getMinval() && val <= lisRemind.getMaxval()) {
+                                if (null == lisRemind.getMinval() && val <= lisRemind.getMaxval()) {
                                     otherTipNeoDTOS = updateTipNeoDTO(otherTipNeoDTOS, lis, lisRemind);
-                                }
-                                else if(null==lisRemind.getMaxval() && val >= lisRemind.getMinval()) {
+                                } else if (null == lisRemind.getMaxval() && val >= lisRemind.getMinval()) {
                                     otherTipNeoDTOS = updateTipNeoDTO(otherTipNeoDTOS, lis, lisRemind);
-                                }
-                                else if (null!=lisRemind.getMinval() && null!=lisRemind.getMaxval() &&
-                                  val <= lisRemind.getMaxval() && val >= lisRemind.getMinval()) {
+                                } else if (null != lisRemind.getMinval() && null != lisRemind.getMaxval() &&
+                                        val <= lisRemind.getMaxval() && val >= lisRemind.getMinval()) {
                                     otherTipNeoDTOS = updateTipNeoDTO(otherTipNeoDTOS, lis, lisRemind);
                                 }
                             } else if (lisRemind.getRange() == 1) { /*&& lisRemind.getUnit().equals(unit) &&*/
-                                if (null!=lisRemind.getMaxval() && val > lisRemind.getMaxval()) {
+                                if (null != lisRemind.getMaxval() && val > lisRemind.getMaxval()) {
                                     otherTipNeoDTOS = updateTipNeoDTO(otherTipNeoDTOS, lis, lisRemind);
-                                }
-                                else if (null!=lisRemind.getMinval() && val < lisRemind.getMinval()){
+                                } else if (null != lisRemind.getMinval() && val < lisRemind.getMinval()) {
                                     otherTipNeoDTOS = updateTipNeoDTO(otherTipNeoDTOS, lis, lisRemind);
                                 }
                             }
@@ -513,8 +544,7 @@ public class NeoFacade {
 
                 }
             }
-        }
-        catch (Exception ex) {
+        } catch (Exception ex) {
             ex.printStackTrace();
         }
 
@@ -628,7 +658,6 @@ public class NeoFacade {
     }
 
 
-
     /**
      * 处理手术开单合理性
      */
@@ -675,14 +704,14 @@ public class NeoFacade {
         YiBaoDiseaseNode icdDiseaseNode = new YiBaoDiseaseNode();
         String term;
         term = neoPushVO.getDiagVo().getDiags().get(0).getName();
-            List<YiBaoDiseaseName> yiBaoName = yiBaoDiseaseRepository.findByNameIs(term);
-            YiBaoDiseaseName icdDisease = null;
-            if(ListUtil.isNotEmpty(yiBaoName)){
-                icdDisease = yiBaoName.get(0);
-            }
-            if (icdDisease != null) {
-                pushDTO = icdDiseaseNode.YiBaoDiseasetoDiseaseDTO(icdDisease, neoPushVO);
-            }
+        List<YiBaoDiseaseName> yiBaoName = yiBaoDiseaseRepository.findByNameIs(term);
+        YiBaoDiseaseName icdDisease = null;
+        if (ListUtil.isNotEmpty(yiBaoName)) {
+            icdDisease = yiBaoName.get(0);
+        }
+        if (icdDisease != null) {
+            pushDTO = icdDiseaseNode.YiBaoDiseasetoDiseaseDTO(icdDisease, neoPushVO);
+        }
 
         return pushDTO;
     }
@@ -769,7 +798,7 @@ public class NeoFacade {
      * 类型,疾病: disease,症状: symptom,手术和操作:operation,药品: drug,实验室检查:lis,辅助检查:pacs, 辅助检查:vital"
      *
      * @param standConvert
-     * @return Map<String   ,       Map   <   String   ,       String>> -->Map<类型, Map<原始词, 标准词>>
+     * @return Map<String, Map < String, String>> -->Map<类型, Map<原始词, 标准词>>
      */
     public Map<String, Map<String, String>> standConvertCrf(StandConvert standConvert) {
         Map<String, Map<String, String>> map = new LinkedHashMap<>();
@@ -823,7 +852,7 @@ public class NeoFacade {
 
         if (ListUtil.isNotEmpty(wordList)) {
             for (String s : wordList) {
-                String value = redisUtil.getWithString(type +  "Conv:" + s);
+                String value = redisUtil.getWithString(type + "Conv:" + s);
                 if (StringUtil.isBlank(value)) {
                     StandConvertCrfVO standConvertCrfVO = new StandConvertCrfVO();
                     standConvertCrfVO.setWord_type(type);

+ 2 - 0
src/main/java/com/diagbot/facade/PushFacade.java

@@ -5,6 +5,7 @@ import com.diagbot.dto.PushPlanDTO;
 import com.diagbot.dto.WordCrfDTO;
 import com.diagbot.process.PushProcess;
 import com.diagbot.util.CoreUtil;
+import com.diagbot.util.ParamUtil;
 import com.diagbot.vo.PushPlanVO;
 import com.diagbot.vo.PushVO;
 import com.diagbot.vo.StandConvert;
@@ -53,6 +54,7 @@ public class PushFacade {
         Map<String, Map<String, String>> standConvertMap = neoFacade.standConvertCrf(standConvert);
         commonFacade.dataTypeSet(wordCrfDTO, standConvertMap);
         CoreUtil.getDebugStr(standStart, "标准词转换耗时", debug);
+        ParamUtil.dealLis(wordCrfDTO.getLis());
 
         // 推送
         long pushStart = System.currentTimeMillis();

+ 8 - 3
src/main/java/com/diagbot/facade/RetrievalFacade.java

@@ -248,7 +248,7 @@ public class RetrievalFacade {
                 size -= lisList.size();
             }
             if (size > 0) {
-                pacsList = pacsRepository.staticKnowledgeIndexIgnoreLabel(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, size);
+                pacsList = pacsRepository.staticKnowledgeIndexMultipleLabel(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, size);
                 size -= pacsList.size();
             }
             if (size > 0) {
@@ -267,7 +267,7 @@ public class RetrievalFacade {
                 lisList = lisRepository.staticKnowledgeIndex(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, size);
             }
             if (types.contains(5)) {
-                pacsList = pacsRepository.staticKnowledgeIndexIgnoreLabel(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, size);
+                pacsList = pacsRepository.staticKnowledgeIndexMultipleLabel(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, size);
             }
             if (types.contains(6)) {
                 operationList = operationRepository.staticKnowledgeIndex(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, size);
@@ -308,13 +308,14 @@ public class RetrievalFacade {
         //TODO 检验明细关联出检验套餐
         List<StaticKnowledgeIndexDTO> lisSetRelatecLisRetList = Lists.newLinkedList();
         //TODO 检验明细
+        List<StaticKnowledgeIndexDTO> lisRetList = Lists.newLinkedList();
         if (ListUtil.isNotEmpty(lisList)) {
             for (LisName lis : lisList) {
                 StaticKnowledgeIndexDTO staticDTO = new StaticKnowledgeIndexDTO();
                 staticDTO.setName(lis.getName());
                 staticDTO.setType(StaticTypeEnum.LIS.getKey());
                 staticDTO.setTypeName(StaticTypeEnum.LIS.getName());
-                retList.add(staticDTO);
+                lisRetList.add(staticDTO);
                 if (lis.getLissets().size() > 0) {
                     for (LisSet lisSet : lis.getLissets()) {
                         StaticKnowledgeIndexDTO staticLisSetDTO = new StaticKnowledgeIndexDTO();
@@ -343,6 +344,10 @@ public class RetrievalFacade {
         if (ListUtil.isNotEmpty(lisSetRetList)) {
             retList.addAll(lisSetRetList);
         }
+        //检验细项加在套餐之后
+        if (ListUtil.isNotEmpty(lisRetList)) {
+            retList.addAll(lisRetList);
+        }
 
         //TODO 检查
         if (ListUtil.isNotEmpty(pacsList)) {

+ 18 - 1
src/main/java/com/diagbot/repository/BaseNodeRepository.java

@@ -1,6 +1,7 @@
 package com.diagbot.repository;
 
 
+import com.diagbot.entity.DiseaseProperty;
 import com.diagbot.entity.node.*;
 import com.diagbot.entity.node.base.BaseNode;
 import org.springframework.data.neo4j.annotation.Query;
@@ -46,7 +47,7 @@ public interface BaseNodeRepository extends Neo4jRepository<BaseNode, Long> {
     List<String> getDisByLis(@Param("lisBig") String lisBig,@Param("subres") String subres);
 
     //化验查疾病(有特异性)
-    @Query("match(d:医保疾病名称)-[r1]->(l:化验套餐名称{name:{lisBig}})-[r:化验套餐名称相关化验细项及结果]->(lr:化验细项及结果{name:{subres}}),(d)-[r2]->(lr) where lr.特异性=1 return d.name")
+    @Query("match(d:医保疾病名称)-[r1]->(l:化验套餐名称{name:{lisBig}})-[r:化验套餐名称相关化验细项及结果]->(lr:化验细项及结果{name:{subres}}),(d)-[r2]->(lr) where lr.special='是' return d.name")
     List<String> getDisByLis_Special(@Param("lisBig") String lisBig,@Param("subres") String subres);
 
     @Query("match(d:医保疾病名称)-[r:医保疾病名称相关性别]->(h) return DISTINCT d.name+'&'+h.name")
@@ -82,4 +83,20 @@ public interface BaseNodeRepository extends Neo4jRepository<BaseNode, Long> {
     @Query("MATCH (n) WHERE labels(n)[0]={lab} and n.name={nm} set n.静态知识标识={sign}")
     void updateStaticKnowledgeSign(@Param("lab") String lab,@Param("nm") String nm,@Param("sign") Integer sign);
 
+    @Query("match(d:医保疾病名称)\n" +
+            "return d.name as name, case \n" +
+            "when d.sex is not null then d.sex\n" +
+            "else '3'\n" +
+            "end as sex,\n" +
+            "case\n" +
+            "when d.age is not null then d.age\n" +
+            "else '0-200'\n" +
+            "end as age,\n" +
+            "case\n" +
+            "when d.fbl is not null then d.fbl\n" +
+            "else '0'\n" +
+            "end as fbl")
+    List<DiseaseProperty> getDiseaseProperty();
+
+
 }

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

@@ -223,7 +223,7 @@ public class PacsNameNode {
     public List<String> getPACSNameAndPACSSubNameList(String name, PacsNameRepository pacsRepository) {
 
         List<String> pacslist = new ArrayList<>();
-        List<BaseNodeInfo> pacslt = pacsRepository.indexIgnoreLabel(name, name, 100);
+        List<BaseNodeInfo> pacslt = pacsRepository.indexMultipleLabel(name, name, 100);
 
         if (ListUtil.isNotEmpty(pacslt) && pacslt.size() > 100) {
             pacslt = pacslt.subList(0, 100);

+ 13 - 16
src/main/java/com/diagbot/repository/PacsNameRepository.java

@@ -52,44 +52,41 @@ public interface PacsNameRepository extends Neo4jRepository<PacsName, Long> {
     List<PacsName> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
 
     //检索不区分辅助检查名称和辅助检查子项目名称
-    @Query("MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
-            "AND toLower(n.`name`) = toLower($name) \n" +
-            "OR toLower(n.`拼音编码`) = toLower($pycode)  \n" +
+    @Query("MATCH (n) WHERE (n :辅助检查名称 OR n :辅助检查子项目名称) \n" +
+            "AND (toLower(n.`name`) = toLower($name) OR toLower(n.`拼音编码`) = toLower($pycode))  \n" +
             "RETURN labels(n) as labels,n.name as name\n" +
             "union\n" +
-            "MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
-            "AND toLower(n.`name`) starts with toLower($name) \n" +
-            "OR toLower(n.`拼音编码`) starts with toLower($pycode)  \n" +
+            "MATCH (n) WHERE (n :辅助检查名称 OR n :辅助检查子项目名称)\n" +
+            "AND (toLower(n.`name`) starts with toLower($name) OR toLower(n.`拼音编码`) starts with toLower($pycode))  \n" +
             "WITH n SKIP 0 LIMIT $size\n" +
             "RETURN labels(n) as labels,n.name as name\n" +
             "union\n" +
-            "MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
-            "AND toLower(n.`name`) CONTAINS toLower($name) \n" +
-            "OR toLower(n.`拼音编码`) CONTAINS toLower($pycode)  \n" +
+            "MATCH (n) WHERE (n :辅助检查名称 OR n :辅助检查子项目名称)\n" +
+            "AND (toLower(n.`name`) CONTAINS toLower($name) OR toLower(n.`拼音编码`) CONTAINS toLower($pycode))  \n" +
             "WITH n SKIP 0 LIMIT $size\n" +
             "RETURN labels(n) as labels,n.name as name\n")
-    List<BaseNodeInfo> indexIgnoreLabel(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+    List<BaseNodeInfo> indexMultipleLabel(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
 
-    @Query("MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
+    @Query("MATCH (n) WHERE (n :辅助检查名称 OR n :辅助检查子项目名称)\n" +
             "AND n.`静态知识标识` = $isKL \n" +
             "AND (toLower(n.`name`) = toLower($name)  OR  toLower(n.`拼音编码`) = toLower($pycode))\n" +
             "RETURN labels(n) as labels,n.name as name\n" +
             "UNION\n" +
-            "MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
+            "MATCH (n) WHERE (n :辅助检查名称 OR n :辅助检查子项目名称)\n" +
             "AND n.`静态知识标识` = $isKL \n" +
             "AND (toLower(n.`name`) STARTS WITH toLower($name) OR toLower(n.`拼音编码`) STARTS WITH toLower($pycode))\n" +
             "WITH n SKIP 0 LIMIT $size\n" +
             "RETURN labels(n) as labels,n.name as name\n" +
             "UNION \n" +
-            "MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
+            "MATCH (n) WHERE (n :辅助检查名称 OR n :辅助检查子项目名称)\n" +
             "AND n.`静态知识标识` = $isKL  \n" +
             "AND (toLower(n.`name`) CONTAINS toLower($name) OR toLower(n.`拼音编码`) CONTAINS toLower($pycode))  \n" +
             "WITH n SKIP 0 LIMIT $size\n" +
             "RETURN labels(n) as labels,n.name as name\n")
-    List<BaseNodeInfo> staticKnowledgeIndexIgnoreLabel(@Param("isKL") Integer isKL, @Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+    List<BaseNodeInfo> staticKnowledgeIndexMultipleLabel(@Param("isKL") Integer isKL, @Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
 
-    @Query("MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
+    @Query("MATCH (n) WHERE (n :辅助检查名称 OR n :辅助检查子项目名称)\n" +
             "and n.`name` IN  $names  \n" +
             "RETURN labels(n) as labels,n.name as name\n")
-    List<BaseNodeInfo> findByNameInIgnoreLabel(@Param("names") List<String> names);
+    List<BaseNodeInfo> findByNameInMultipleLabel(@Param("names") List<String> names);
 }

+ 2 - 0
src/main/java/com/diagbot/repository/PacsResultRepository.java

@@ -17,6 +17,8 @@ public interface PacsResultRepository extends Neo4jRepository<PacsResult, Long>
     List<PacsResult> findByNameContaining(String name);
 
     List<PacsResult> findByNameIn(List<String> names);
+    @Query("match(f:辅助检查名称结果)-[r]->(d:医保疾病名称) where f.name in $pycode return d.name")
+    List<String> getDisByPacsResults(@Param("pycode")List<String> names);
 
     Page<PacsResult> findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(String name, String pycode, Pageable pageable);
 

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

@@ -16,7 +16,7 @@ public interface SymptomNameRepository extends Neo4jRepository<Symptom, Long> {
 
     List<Symptom> findByNameContaining(String name);
 
-    @Query("match(d:医保疾病名称)-[r:医保疾病名称相关症状]->(s:症状) where s.name in {py} return d.name")
+    @Query("match(d:医保疾病名称)-[r]->(s) where any(label in labels(s) WHERE label in ['症状', '体征']) and s.name in {py} return d.name")
     List<String> getDisBySymptoms(@Param("py")List<String> symptoms);
 }
 

+ 2 - 1
src/main/java/com/diagbot/util/CoreUtil.java

@@ -227,7 +227,8 @@ public class CoreUtil {
             //将 object 中 field 所代表的值 设置为 value
             String key = (String)field.get(object);
             String key1 = (String)field1.get(object);
-            String lis_c = key+key1;
+//            String lis_c = key+key1;
+            String lis_c = key1;
             if (value != null && value.get(lis_c) != null) {
                 Field standField = getDeclaredField(object, unique) ;
                 standField.setAccessible(true) ;

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

@@ -11,6 +11,7 @@ import com.diagbot.repository.datautil;
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 public class NeoUtil {
 
@@ -144,6 +145,25 @@ public class NeoUtil {
         return match;
     }
 
+    public static boolean matchBasic(Map<String,String> disease, int gender_code, double age){
+        boolean match = true;
+        if(disease != null){
+            String gender_neo4j = disease.get("sex");
+            String age_neo4j = disease.get("age");
+            if((gender_neo4j != null && gender_neo4j.equals("1") && gender_code != 1) ||
+                    (gender_neo4j != null && gender_neo4j.equals("2") && gender_code != 2)){
+                match = false;
+            }else if(age_neo4j != null ){
+                String[] betweenAge = age_neo4j.split("-");
+                if(betweenAge.length == 2 && (age < Double.parseDouble(betweenAge[0])
+                        || age > Double.parseDouble(betweenAge[1]))){
+                    match = false;
+                }
+            }
+        }
+        return match;
+    }
+
 
     public static NodeNeoDTO fillNodeNeoDTO(Vital vital) {
         NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();

+ 24 - 5
src/main/java/com/diagbot/util/RedisUtil.java

@@ -1,17 +1,18 @@
 package com.diagbot.util;
 
+import com.diagbot.enums.RedisEnum;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.dao.DataAccessException;
+import org.springframework.data.redis.core.RedisOperations;
 import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.SessionCallback;
 import org.springframework.stereotype.Component;
 
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * @description:
@@ -89,6 +90,24 @@ public class RedisUtil {
         return redisTemplate.opsForValue().get(key);
     }
 
+    public List<Map<String,String>> get(List<String> keys) {
+        return redisTemplate.executePipelined(new SessionCallback<Object>() {
+            @Override
+            public Map<String,String> execute(RedisOperations redisOperations) throws DataAccessException {
+                for (String dis:keys) {
+                    redisOperations.opsForValue().get(RedisEnum.diseaseType.getName()+dis);
+                }
+                return null;
+            }
+        });
+    }
+
+    public List<Map<String,String>> geth(List<String> keys) {
+        keys = keys.stream().map(x ->RedisEnum.diseaseType.getName()+x).collect(Collectors.toList());
+        List<Map<String,String>> list = redisTemplate.opsForValue().multiGet(keys);
+        return list;
+    }
+
     /**
      * 根据指定key获取value
      *

+ 1 - 0
src/main/java/com/diagbot/web/CacheController.java

@@ -34,6 +34,7 @@ public class CacheController {
     public RespDTO<Boolean> clear() {
         cacheFacade.clear();
         cacheFacade.loadDrugTypeCache();
+        cacheFacade.loadDiseaseTypeCache();
         return RespDTO.onSuc(true);
     }