Ver código fonte

Merge remote-tracking branch 'origin/master'

MarkHuang 4 anos atrás
pai
commit
4b5fd5d014

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

@@ -46,5 +46,7 @@ public class CacheDeleteInit implements CommandLineRunner {
 
         neoFacade.getDisdistributionCache();
         log.info("CDSS-CORE服务启动加载图谱疾病对应发病率缓存成功!");*/
+
+        log.info("CDSS-CORE初始化完成!");
     }
 }

+ 21 - 11
src/main/java/com/diagbot/facade/CommonFacade.java

@@ -145,7 +145,7 @@ public class CommonFacade {
 
         //所有化验(结构化数据)
         List<String> allLis = new ArrayList<>();
-        //普通化验
+        //普通化验——取明细
         List<Lis> lis = wordCrfDTO.getLis();
         if (ListUtil.isNotEmpty(lis)) {
             List<String> lis_unique = lis.stream().filter(x -> StringUtils.isBlank(x.getUniqueName()))
@@ -153,11 +153,11 @@ public class CommonFacade {
                     .map(x ->x.getDetailName()).collect(Collectors.toList());
             allLis.addAll(lis_unique);
         }
-        //开单化验
+        //开单化验——取套餐
         List<Lis> lisOrder = wordCrfDTO.getLisOrder();
         if (ListUtil.isNotEmpty(lisOrder)) {
             List<String> lis_unique = lisOrder.stream().filter(x -> StringUtils.isBlank(x.getUniqueName()))
-                    .map(x -> x.getName() + x.getDetailName()).collect(Collectors.toList());
+                    .map(x -> x.getName()).collect(Collectors.toList());
             allLis.addAll(lis_unique);
         }
         standConvert.setLisList(allLis);
@@ -292,6 +292,7 @@ public class CommonFacade {
         pushVO.setAgeNum(wordCrfDTO.getAgeNum());
         pushVO.setDiaeaseName(diseaseName);
         if (chiefLabel != null) {
+            ChiefPushVo chiefPushVo = new ChiefPushVo();
             if(ListUtil.isNotEmpty(chiefLabel.getClinicals())){
                 List<Symptom> cjiefClinicals = chiefLabel.getClinicals().stream().filter(x -> x.getNegative() == null).map(z ->
                 {
@@ -300,15 +301,23 @@ public class CommonFacade {
                     return symptom;
                 }).collect(Collectors.toList());
                 if (ListUtil.isNotEmpty(cjiefClinicals)) {
-                    ChiefPushVo chiefPushVo = new ChiefPushVo();
                     chiefPushVo.setSymptoms(cjiefClinicals);
-                    if(ListUtil.isNotEmpty(chiefLabel.getPds())){
-                        chiefPushVo.setPds(chiefLabel.getPds());
-                    }
-                    pushVO.setChiefPushVo(chiefPushVo);
+
                 }
             }
-
+            if(ListUtil.isNotEmpty(chiefLabel.getDiags())){
+                List<Diag> chief_diags = chiefLabel.getDiags().stream().map(x ->
+                {
+                  Diag diag = new Diag();
+                  diag.setName(x.getStandName());
+                  return diag;
+                }).collect(Collectors.toList());
+                chiefPushVo.setDiags(chief_diags);
+            }
+            if(ListUtil.isNotEmpty(chiefLabel.getPds())){
+                chiefPushVo.setPds(chiefLabel.getPds());
+            }
+            pushVO.setChiefPushVo(chiefPushVo);
         }
         if(presentLabel != null){
             PresentPushVo presentPushVo = new PresentPushVo();
@@ -322,10 +331,11 @@ public class CommonFacade {
                 presentPushVo.setSymptoms(presentClinicals);
             }
             if(ListUtil.isNotEmpty(presentLabel.getDiags())){
-                List<Diag> presentdiags = presentLabel.getDiags().stream().filter(x -> x.getNegative() == null).map(z ->
+                List<Diag> presentdiags = presentLabel.getDiags().stream().filter(x -> x.getNegative() == null).map
+                        (x -> x.getStandName()).distinct().map(z ->
                 {
                     Diag diag = new Diag();
-                    diag.setName(z.getStandName());
+                    diag.setName(z);
                     return diag;
                 }).collect(Collectors.toList());
                 presentPushVo.setDiags(presentdiags);

+ 67 - 20
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -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) {

+ 9 - 4
src/main/java/com/diagbot/process/PushProcess.java

@@ -45,11 +45,16 @@ public class PushProcess {
             reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO, dis);
         } else {
             //正推
-            List<NeoPushDTO> push = neoFacade.getPush(pushVO);
+            List<String> push = neoFacade.getPush(pushVO);
             if (ListUtil.isNotEmpty(push)) {
                 //先把所有疾病推出来
                 if (ruleTypeList.contains("7")) {
-                    List<PushBaseDTO> diseeases = push.stream().filter(x -> x.getDisease() != null).map(x -> x.getDisease()).collect(Collectors.toList());
+//                    List<PushBaseDTO> diseeases = push.stream().filter(x -> x.getDisease() != null).map(x -> x.getDisease()).collect(Collectors.toList());
+                    List<PushBaseDTO> diseeases =  push.stream().map(x -> {
+                        PushBaseDTO pushBaseDTO = new PushBaseDTO();
+                        pushBaseDTO.setName(x);
+                        return pushBaseDTO;
+                    }).collect(Collectors.toList());
                     diseeases = diseeases.subList(0, diseeases.size() >= length ? length : diseeases.size());
                     dis.put(DiseaseTypeEnum.possibleDis.getName(), diseeases);
                     pushDTO.setDis(dis);
@@ -63,8 +68,8 @@ public class PushProcess {
         return pushDTO;
     }
 
-    private void setPushVo(NeoPushVO pushVO, List<NeoPushDTO> push) {
-        String firstDisease = push.get(0).getDisease().getName();
+    private void setPushVo(NeoPushVO pushVO, List<String> push) {
+        String firstDisease = push.get(0);
         List<Diag> diags = new ArrayList<>();
         Diag diag = new Diag();
         diag.setName(firstDisease);

+ 1 - 0
src/main/java/com/diagbot/vo/neoPushEntity/ChiefPushVo.java

@@ -14,5 +14,6 @@ import java.util.List;
 @Data
 public class ChiefPushVo {
     private List<Symptom> symptoms;
+    private List<Diag> diags;
     private List<PD> pds;
 }