Browse Source

加载图谱部分数据缓存

kongwz 4 years ago
parent
commit
67dc6dab52

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

@@ -28,8 +28,17 @@ public class CacheDeleteInit implements CommandLineRunner {
         // 服务启动清除redis缓存
         cacheFacade.clearLoadCache();
         log.info("CDSS-CORE服务启动清除redis缓存成功!");
-
+        //
         neoFacade.getDrugCache();
         log.info("CDSS-CORE服务启动加载药品缓存成功!");
+
+        neoFacade.getSymptomCache();
+        log.info("CDSS-CORE服务启动加载图谱症状缓存成功!");
+
+        neoFacade.getDisSexCache();
+        log.info("CDSS-CORE服务启动加载图谱疾病对应性别信息缓存成功!");
+
+        neoFacade.getDisAgeCache();
+        log.info("CDSS-CORE服务启动加载图谱疾病对应年龄缓存成功!");
     }
 }

+ 39 - 22
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -4,14 +4,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.diagbot.biz.push.entity.Lis;
 import com.diagbot.client.ChiefPresentSimilarityServiceClient;
 import com.diagbot.client.StandConvertServiceClient;
-import com.diagbot.dto.BillNeoDTO;
-import com.diagbot.dto.CriticalNeoDTO;
-import com.diagbot.dto.HighRiskNeoDTO;
-import com.diagbot.dto.NeoPushDTO;
-import com.diagbot.dto.NodeNeoDTO;
-import com.diagbot.dto.OtherTipNeoDTO;
-import com.diagbot.dto.StandConvertCrfBatchDTO;
-import com.diagbot.dto.StandConvertCrfDTO;
+import com.diagbot.dto.*;
 import com.diagbot.entity.node.LisRemind;
 import com.diagbot.entity.node.Medicine;
 import com.diagbot.entity.node.Symptom;
@@ -23,13 +16,7 @@ import com.diagbot.repository.*;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RedisUtil;
 import com.diagbot.util.StringUtil;
-import com.diagbot.vo.BillNeoVO;
-import com.diagbot.vo.CriticalNeoVO;
-import com.diagbot.vo.Drug;
-import com.diagbot.vo.HighRiskNeoVO;
-import com.diagbot.vo.NeoPushVO;
-import com.diagbot.vo.StandConvert;
-import com.diagbot.vo.StandConvertCrfVO;
+import com.diagbot.vo.*;
 import com.diagbot.vo.neoPushEntity.ChiefPushVo;
 import com.diagbot.vo.neoPushEntity.Diag;
 import com.diagbot.vo.neoPushEntity.PresentPushVo;
@@ -37,16 +24,12 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -133,7 +116,36 @@ public class NeoFacade {
         }
         return res;
     }
-
+    /**
+     * 返回图谱中所有症状缓存信息
+     *
+     * @return
+     */
+    @Cacheable(value = "cache", key = "'symptomCache'")
+    public List<String> getSymptomCache() {
+        List<String> symptomClass = nodeRepository.getSymptomClass();
+        return symptomClass;
+    }
+    /**
+     * 返回图谱中所有疾病和性别信息
+     *
+     * @return
+     */
+    @Cacheable(value = "cache", key = "'disSexCache'")
+    public Map<String,String> getDisSexCache() {
+        Map<String, String> disSexClass = nodeRepository.getDisSexClass();
+        return disSexClass;
+    }
+    /**
+     * 返回图谱中所有疾病和年龄信息
+     *
+     * @return
+     */
+    @Cacheable(value = "cache", key = "'disAgeCache'")
+    public Map<String,String> getDisAgeCache() {
+        Map<String, String> disAgeClass = nodeRepository.getDisAgeClass();
+        return disAgeClass;
+    }
     /**
      * 图谱反推的数据
      *
@@ -178,12 +190,17 @@ public class NeoFacade {
             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());
+        //症状推疾病
+        getDisBySymptom(symptoms);
 
 
         return neoPushDTOS;
     }
 
     public void getDisBySymptom(List<String> symptoms){
+        List<String> symptomCache = getSymptomCache();
+        //取交集
+        symptoms.retainAll(symptomCache);
         List<String> allDis = new ArrayList<>();
         if(ListUtil.isNotEmpty(symptoms)){
             symptoms.forEach(x ->{

+ 10 - 0
src/main/java/com/diagbot/repository/BaseNodeRepository.java

@@ -6,6 +6,7 @@ import org.springframework.data.neo4j.annotation.Query;
 import org.springframework.data.neo4j.repository.Neo4jRepository;
 
 import java.util.List;
+import java.util.Map;
 
 public interface BaseNodeRepository extends Neo4jRepository<BaseNode, Long> {
 
@@ -17,4 +18,13 @@ public interface BaseNodeRepository extends Neo4jRepository<BaseNode, Long> {
     @Query("MATCH (c:药品解剖学类别)<-[r:药品相关药品解剖学类别]-(y:药品代码通用名)-[r1:药品相关药品通用名称]->(m:药品通用名称) " +
             " RETURN DISTINCT(m.name)+'::'+c.name")
     List<String> getMedClass();
+
+    @Query("match(s:症状) return distinct s.name")
+    List<String> getSymptomClass();
+
+    @Query("match(d:疾病)-[r:疾病相关性别]->(h) return d.name,h.name")
+    Map<String,String> getDisSexClass();
+
+    @Query("match(d:疾病)-[r:疾病相关年龄]->(h) return d.name,h.name")
+    Map<String,String> getDisAgeClass();
 }