kongwz пре 4 година
родитељ
комит
ae29c63463

+ 1 - 1
src/main/java/com/diagbot/config/CacheDeleteInit.java

@@ -32,7 +32,7 @@ public class CacheDeleteInit implements CommandLineRunner {
         cacheFacade.loadDrugTypeCache();
         log.info("CDSS-CORE服务启动加载药品类型对应关系缓存成功!");
 
-        neoFacade.getSymptomCache();
+        cacheFacade.getSymptomCache();
         log.info("CDSS-CORE服务启动加载图谱症状缓存成功!");
 
         cacheFacade.loadDiseaseTypeCache();

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

@@ -12,6 +12,7 @@ import lombok.Setter;
 public enum RedisEnum implements KeyedNamed {
 
     drugType(1, "drugType:"),
+    symptomVitalType(3, "symptomVitalType:"),
     diseaseType(2, "diseaseType:");
 
     @Setter

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

@@ -77,6 +77,17 @@ public class CacheFacade {
 
     }
 
+    /**
+     * 加载图谱中的症状、体征缓存
+     *
+     * @return
+     */
+    public void getSymptomCache() {
+        redisUtil.deleteByPrex(RedisEnum.symptomVitalType.getName());
+        neoFacade.symptomVitalCache();
+
+    }
+
     public void clearLoadCache(String str) {
         redisUtil.deleteByPrex(str);
     }

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

@@ -163,6 +163,18 @@ public class NeoFacade {
         }
     }
 
+    public void symptomVitalCache() {
+        List<String> diseaseProperty = nodeRepository.getSymptomClass();
+        if (ListUtil.isNotEmpty(diseaseProperty)) {
+            Map map = diseaseProperty.stream().collect(Collectors.toMap(
+                    k -> RedisEnum.symptomVitalType.getName() + k,
+                    v -> v,
+                    (v1, v2) -> (v2)
+            ));
+            redisTemplate.opsForValue().multiSet(map);
+        }
+    }
+
     /**
      * 返回图谱中所有症状缓存信息
      *
@@ -476,12 +488,11 @@ public class NeoFacade {
     }
 
     public List<String> getDisBySymptom(List<String> symptoms) {
-        List<String> symptomCache = getSymptomCache();
-        //取交集
-        symptoms.retainAll(symptomCache);
-        long start = System.currentTimeMillis();
-        List<String> allDis_bySymptom = pushDisBySymptom(symptomRepository, symptoms);
-        long end = System.currentTimeMillis();
+        List<String> sv = redisUtil.getSv(symptoms);
+//        List<String> symptomCache = getSymptomCache();
+//        //取交集
+//        symptoms.retainAll(symptomCache);
+        List<String> allDis_bySymptom = pushDisBySymptom(symptomRepository, sv);
         return allDis_bySymptom;
     }
 
@@ -505,11 +516,8 @@ public class NeoFacade {
      */
     public List<String> pushDisBySymptom(SymptomNameRepository symptomNameRepository, List<String> symptoms) {
         List<String> allDis = Lists.newArrayList();
-        /*List<Symptom> byNameIn = symptomNameRepository.findByNameIn(symptoms);
-        allDis = byNameIn.parallelStream()
-                .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());*/
-        allDis = symptomNameRepository.getDisBySymptoms(symptoms);
+//        allDis = symptomNameRepository.getDisBySymptoms(symptoms);
+        allDis = symptomNameRepository.getDisBySymptoms_1(symptoms);
         return allDis;
     }
 

+ 5 - 0
src/main/java/com/diagbot/repository/SymptomNameRepository.java

@@ -19,5 +19,10 @@ public interface SymptomNameRepository extends Neo4jRepository<Symptom, Long> {
     @Query("match(d:医保疾病名称)-[r{典型:1}]->(s) where any(label in labels(s) WHERE label in ['症状', '体征']) and 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);
+
+    @Query("match(d:医保疾病名称)-[r{典型:1}]->(s:症状) where  s.name in {py} return d.name\n" +
+            "union all\n" +
+            "match(d:医保疾病名称)-[r{典型:1}]->(s:体征) where  s.name in {py} return d.name")
+    List<String> getDisBySymptoms_1(@Param("py")List<String> symptoms);
 }
 

+ 6 - 0
src/main/java/com/diagbot/util/RedisUtil.java

@@ -108,6 +108,12 @@ public class RedisUtil {
         return list;
     }
 
+    public List<String> getSv(List<String> keys) {
+        keys = keys.stream().map(x ->RedisEnum.symptomVitalType.getName()+x).collect(Collectors.toList());
+        List<String> list = redisTemplate.opsForValue().multiGet(keys);
+        return list;
+    }
+
     /**
      * 根据指定key获取value
      *