|
@@ -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;
|
|
@@ -136,6 +137,27 @@ public class NeoFacade {
|
|
|
}
|
|
|
return res;
|
|
|
}
|
|
|
+
|
|
|
+ public void diseasePropertyCache(){
|
|
|
+ List<DiseaseProperty> diseaseProperty = nodeRepository.getDiseaseProperty();
|
|
|
+ if(ListUtil.isNotEmpty(diseaseProperty)){
|
|
|
+ diseaseProperty.parallelStream().forEach(
|
|
|
+ x ->{
|
|
|
+ String name = x.getName();
|
|
|
+ String sex = x.getSex();
|
|
|
+ String age = x.getAge();
|
|
|
+ String fbl = x.getFbl();
|
|
|
+ Map<String,String> desc = new HashMap<>();
|
|
|
+ desc.put("name",name);
|
|
|
+ desc.put("sex",sex);
|
|
|
+ desc.put("age",age);
|
|
|
+ desc.put("fbl",fbl);
|
|
|
+ redisUtil.updateValue(desc,RedisEnum.diseaseType.getName() + name);
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
/**
|
|
|
* 返回图谱中所有症状缓存信息
|
|
|
*
|
|
@@ -198,6 +220,17 @@ public class NeoFacade {
|
|
|
}
|
|
|
return disdistribution;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 加载疾病类型缓存(疾病的年龄、性别、发病率)
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public void loadDiseaseTypeCache() {
|
|
|
+ redisUtil.deleteByPrex(RedisEnum.diseaseType.getName());
|
|
|
+ this.diseasePropertyCache();
|
|
|
+
|
|
|
}
|
|
|
/**
|
|
|
* 图谱反推的数据
|
|
@@ -235,11 +268,13 @@ public class NeoFacade {
|
|
|
}
|
|
|
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;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -286,20 +321,28 @@ public class NeoFacade {
|
|
|
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) {
|
|
|
//推送出的所有疾病进行性别和年龄的过滤
|
|
|
+ List<Map<String,String>> diseases = null;
|
|
|
+ Map<String,Double> dis_fbl = new HashMap<>();
|
|
|
+ if(ListUtil.isNotEmpty(allDis)){
|
|
|
+ diseases = redisUtil.get(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<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));
|
|
|
+ .collect(Collectors.toMap(v -> v, v -> dis_fbl.get(v), (e1, e2) -> e2));
|
|
|
disPack.put(x,collect);
|
|
|
});
|
|
|
disPack.forEach((x,y)->{
|