|
@@ -21,10 +21,8 @@ import com.diagbot.util.NeoUtil;
|
|
|
import com.diagbot.util.RedisUtil;
|
|
|
import com.diagbot.util.StringUtil;
|
|
|
import com.diagbot.vo.*;
|
|
|
-import com.diagbot.vo.neoPushEntity.ChiefPushVo;
|
|
|
-import com.diagbot.vo.neoPushEntity.LisPushVo;
|
|
|
-import com.diagbot.vo.neoPushEntity.PacsPushVo;
|
|
|
-import com.diagbot.vo.neoPushEntity.PresentPushVo;
|
|
|
+import com.diagbot.vo.Drug;
|
|
|
+import com.diagbot.vo.neoPushEntity.*;
|
|
|
import com.google.common.collect.Lists;
|
|
|
import com.google.common.collect.Maps;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
@@ -133,10 +131,11 @@ public class NeoFacade {
|
|
|
res.get(med_type).add(med_name);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- // 加载药品缓存
|
|
|
- for (String key : res.keySet()) {
|
|
|
- redisUtil.updateValue(RedisEnum.drugType.getName() + key, res.get(key));
|
|
|
+ Map redisMap = res.entrySet().stream().collect(
|
|
|
+ Collectors.toMap(k -> RedisEnum.drugType.getName() + k.getKey(),
|
|
|
+ v -> v.getValue(), (v1, v2) -> (v2)));
|
|
|
+ if (redisMap != null && redisMap.size() > 0) {
|
|
|
+ redisTemplate.opsForValue().multiSet(redisMap);
|
|
|
}
|
|
|
return res;
|
|
|
}
|
|
@@ -252,15 +251,23 @@ public class NeoFacade {
|
|
|
* @param pushVO
|
|
|
* @return
|
|
|
*/
|
|
|
- public List<NeoPushDTO> getPush(NeoPushVO pushVO) {
|
|
|
+ public List<String> getPush(NeoPushVO pushVO) {
|
|
|
Double age = pushVO.getAgeNum();
|
|
|
Integer sex = pushVO.getSex();
|
|
|
+ List<String> presentDiags = Lists.newArrayList();
|
|
|
+ PresentPushVo presentPushVo = pushVO.getPresentPushVo();
|
|
|
+ if(presentPushVo != null){
|
|
|
+ List<Diag> diags = presentPushVo.getDiags();
|
|
|
+ if(ListUtil.isNotEmpty(diags)){
|
|
|
+ presentDiags = diags.stream().map(x -> x.getName()).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ }
|
|
|
List<PD> pds = pushVO.getChiefPushVo().getPds();
|
|
|
PD pd = null;
|
|
|
if(ListUtil.isNotEmpty(pds)){
|
|
|
pd = pds.get(0);
|
|
|
}
|
|
|
- List<NeoPushDTO> neoPushDTOS = new ArrayList<>();
|
|
|
+ List<String> pushDis = new ArrayList<>();
|
|
|
List<String> allDis = Lists.newArrayList();
|
|
|
//如果化验有特异性就直接推送疾病
|
|
|
List<Lis> lises = null;
|
|
@@ -269,7 +276,11 @@ public class NeoFacade {
|
|
|
lises = lisPushVo.getLises();
|
|
|
}
|
|
|
|
|
|
- if (pushDisBySpecialLis(age, sex, pd, neoPushDTOS, lises)) return neoPushDTOS;
|
|
|
+ pushDis = pushDisBySpecialLis(age, sex, pd, lises,presentDiags);
|
|
|
+ if(ListUtil.isNotEmpty(pushDis)){
|
|
|
+ return pushDis;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
// 症状、体征推送出的疾病
|
|
|
pushDisBySymptomOrVital(pushVO, allDis);
|
|
@@ -277,9 +288,10 @@ public class NeoFacade {
|
|
|
pushDisByLis(allDis, lises);
|
|
|
//辅检推出的疾病
|
|
|
pushDisByPacs(pushVO, allDis);
|
|
|
- filterAndSort(neoPushDTOS, allDis, sex, age, pd);
|
|
|
+ filterAndSort(pushDis, allDis, sex, age, pd);
|
|
|
+ pushDis = addDiagFromPresent(pushDis,presentDiags);
|
|
|
|
|
|
- return neoPushDTOS;
|
|
|
+ return pushDis;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -290,19 +302,50 @@ public class NeoFacade {
|
|
|
* @param lises
|
|
|
* @return
|
|
|
*/
|
|
|
- private boolean pushDisBySpecialLis(Double age, Integer sex, PD pd, List<NeoPushDTO> neoPushDTOS, List<Lis> lises) {
|
|
|
+ private List<String> pushDisBySpecialLis(Double age, Integer sex, PD pd, List<Lis> lises,List<String> presentDiags) {
|
|
|
+ List<String> neoPushDTOS = new ArrayList<>();
|
|
|
if (ListUtil.isNotEmpty(lises)) {
|
|
|
List<String> lis_dis = lises.parallelStream()
|
|
|
.map(x -> nodeRepository.getDisByLis_Special(x.getName(), x.getUniqueName() + x.getResult()))
|
|
|
.flatMap(List::stream).collect(Collectors.toList());
|
|
|
if (ListUtil.isNotEmpty(lis_dis)) {
|
|
|
filterAndSort(neoPushDTOS, lis_dis, sex, age,pd);
|
|
|
- if (ListUtil.isNotEmpty(neoPushDTOS)) {
|
|
|
- return true;
|
|
|
+ neoPushDTOS = addDiagFromPresent(neoPushDTOS,presentDiags);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return neoPushDTOS;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 把现病史中的诊断添加到推送诊断中
|
|
|
+ * @param lis_dis
|
|
|
+ * @param presentDiags
|
|
|
+ */
|
|
|
+ private List<String> addDiagFromPresent(List<String> lis_dis,List<String> presentDiags){
|
|
|
+ List<String> lis_dis_new = Lists.newArrayList();
|
|
|
+ if(ListUtil.isNotEmpty(lis_dis) && ListUtil.isNotEmpty(presentDiags)){
|
|
|
+ if(lis_dis.size()>=10){
|
|
|
+ for(int i =0; i< lis_dis.size(); i++){
|
|
|
+ if(i == 10 - presentDiags.size()){
|
|
|
+ for (String dis: presentDiags) {
|
|
|
+ if(!lis_dis_new.contains(dis)){
|
|
|
+ lis_dis_new.add(dis);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ lis_dis_new.add(lis_dis.get(i));
|
|
|
+ }else {
|
|
|
+ lis_dis_new.add(lis_dis.get(i));
|
|
|
+ }
|
|
|
}
|
|
|
+ }else {
|
|
|
+ lis_dis_new.addAll(lis_dis);
|
|
|
+ lis_dis_new.addAll(presentDiags);
|
|
|
}
|
|
|
+ lis_dis_new = lis_dis_new.stream().distinct().collect(Collectors.toList());
|
|
|
+ }else {
|
|
|
+ lis_dis_new =lis_dis;
|
|
|
}
|
|
|
- return false;
|
|
|
+ return lis_dis_new;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -363,7 +406,7 @@ public class NeoFacade {
|
|
|
allDis.addAll(allDis_bySymptom);
|
|
|
}
|
|
|
|
|
|
- private void filterAndSort(List<NeoPushDTO> neoPushDTOS, List<String> allDis, int gender_code, double age, PD pd) {
|
|
|
+ private void filterAndSort(List<String> dises, List<String> allDis, int gender_code, double age, PD pd) {
|
|
|
//推送出的所有疾病进行性别和年龄的过滤
|
|
|
List<Map<String, String>> diseases = null;
|
|
|
Map<String, Double> dis_fbl = new HashMap<>();
|
|
@@ -391,11 +434,12 @@ public class NeoFacade {
|
|
|
.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();
|
|
|
+ /*NeoPushDTO neoPushDTO = new NeoPushDTO();
|
|
|
PushBaseDTO pushBaseDTO = new PushBaseDTO();
|
|
|
pushBaseDTO.setName(k);
|
|
|
neoPushDTO.setDisease(pushBaseDTO);
|
|
|
- neoPushDTOS.add(neoPushDTO);
|
|
|
+ neoPushDTOS.add(neoPushDTO);*/
|
|
|
+ dises.add(k);
|
|
|
});
|
|
|
});
|
|
|
}
|
|
@@ -937,6 +981,9 @@ public class NeoFacade {
|
|
|
Map<String, StandConvertCrfDTO> crfMap = crfDTO.get(type);
|
|
|
for (String s : convertList) {
|
|
|
String lastS = s;
|
|
|
+ if (StringUtil.isBlank(s)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
if (crfMap != null) {
|
|
|
StandConvertCrfDTO standConvertCrfDTO = crfMap.get(s);
|
|
|
if (standConvertCrfDTO != null) {
|