浏览代码

新增儿童,幼儿规则

zhoutg 4 年之前
父节点
当前提交
fc21e3bd20

+ 5 - 0
src/main/java/com/diagbot/process/BillProcess.java

@@ -94,6 +94,11 @@ public class BillProcess {
             // // TODO 测试数据开始
             // // TODO 测试数据开始
             // if (billNeoDTO.getStandname().equals("胸部CT")) {
             // if (billNeoDTO.getStandname().equals("胸部CT")) {
             //     NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
             //     NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+            //     nodeNeoDTO.setName("幼儿");
+            //     billNeoMaxDTO.getGroup().add(nodeNeoDTO);
+            // }
+            // if (billNeoDTO.getStandname().equals("胸部CT")) {
+            //     NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
             //     nodeNeoDTO.setName("心电图");
             //     nodeNeoDTO.setName("心电图");
             //     billNeoMaxDTO.getPacsOrder().add(nodeNeoDTO);
             //     billNeoMaxDTO.getPacsOrder().add(nodeNeoDTO);
             // }
             // }

+ 93 - 92
src/main/java/com/diagbot/process/PushProcess.java

@@ -25,11 +25,13 @@ import java.util.stream.Collectors;
  */
  */
 @Component
 @Component
 public class PushProcess {
 public class PushProcess {
+
     @Autowired
     @Autowired
     NeoFacade neoFacade;
     NeoFacade neoFacade;
     @Autowired
     @Autowired
     CommonFacade commonFacade;
     CommonFacade commonFacade;
-    public PushDTO process(PushVO pushVo,Map<String, Map<String, String>> standConvertMap,WordCrfDTO wordCrfDTO) {
+
+    public PushDTO process(PushVO pushVo, Map<String, Map<String, String>> standConvertMap, WordCrfDTO wordCrfDTO) {
         int length = pushVo.getLength();
         int length = pushVo.getLength();
         PushDTO pushDTO = new PushDTO();
         PushDTO pushDTO = new PushDTO();
 
 
@@ -39,23 +41,23 @@ public class PushProcess {
         NeoPushVO pushVO = commonFacade.generatePushInput(wordCrfDTO);
         NeoPushVO pushVO = commonFacade.generatePushInput(wordCrfDTO);
         Map<String, List<PushBaseDTO>> dis = new HashMap<>();
         Map<String, List<PushBaseDTO>> dis = new HashMap<>();
         //如果下的诊断有数据就反推
         //如果下的诊断有数据就反推
-        if(pushVO.getDiagVo() != null && pushVO.getDiagVo().getDiags().size() > 0){
-            reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO,dis);
-        }else {
+        if (pushVO.getDiagVo() != null && pushVO.getDiagVo().getDiags().size() > 0) {
+            reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO, dis);
+        } else {
             //正推
             //正推
             List<NeoPushDTO> push = neoFacade.getPush(pushVO);
             List<NeoPushDTO> push = neoFacade.getPush(pushVO);
-            if(ListUtil.isNotEmpty(push) && push.size() >0){
+            if (ListUtil.isNotEmpty(push) && push.size() > 0) {
                 //先把所有疾病推出来
                 //先把所有疾病推出来
-                if(ruleTypeList.contains("7")){
+                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());
                     diseeases = diseeases.subList(0, diseeases.size() >= length ? length : diseeases.size());
                     diseeases = diseeases.subList(0, diseeases.size() >= length ? length : diseeases.size());
-                    dis.put(DiseaseTypeEnum.possibleDis.getName(),diseeases);
+                    dis.put(DiseaseTypeEnum.possibleDis.getName(), diseeases);
                     pushDTO.setDis(dis);
                     pushDTO.setDis(dis);
                 }
                 }
                 //把第一个推送出来的诊断set到diagOrder中,再反推
                 //把第一个推送出来的诊断set到diagOrder中,再反推
                 setPushVo(pushVO, push);
                 setPushVo(pushVO, push);
                 //调用反推
                 //调用反推
-                reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO,dis);
+                reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO, dis);
             }
             }
         }
         }
         return pushDTO;
         return pushDTO;
@@ -72,17 +74,17 @@ public class PushProcess {
         pushVO.setDiagVo(diagVo);
         pushVO.setDiagVo(diagVo);
     }
     }
 
 
-    public Map<String,List<String>> typeWords( Map<String, Map<String, String>> standConvertMap){
-        Map<String,List<String>> typeWordsMap = new HashMap<>();
-        for (Map.Entry<String, Map<String, String>> s:standConvertMap.entrySet()) {
+    public Map<String, List<String>> typeWords(Map<String, Map<String, String>> standConvertMap) {
+        Map<String, List<String>> typeWordsMap = new HashMap<>();
+        for (Map.Entry<String, Map<String, String>> s : standConvertMap.entrySet()) {
             List<String> words = new ArrayList<>();
             List<String> words = new ArrayList<>();
             String type = s.getKey();
             String type = s.getKey();
             Map<String, String> value = s.getValue();
             Map<String, String> value = s.getValue();
-            value.forEach((name,standName)->{
+            value.forEach((name, standName) -> {
                 words.add(name);
                 words.add(name);
                 words.add(standName);
                 words.add(standName);
             });
             });
-            typeWordsMap.put(type,new ArrayList<>(new HashSet<>(words)));
+            typeWordsMap.put(type, new ArrayList<>(new HashSet<>(words)));
         }
         }
 
 
         return typeWordsMap;
         return typeWordsMap;
@@ -90,61 +92,61 @@ public class PushProcess {
 
 
     private void reversePushPackage(int length, PushDTO pushDTO, List<String> ruleTypeList, Map<String, List<String>> typeWords, NeoPushVO pushVO, Map<String, List<PushBaseDTO>> dis) {
     private void reversePushPackage(int length, PushDTO pushDTO, List<String> ruleTypeList, Map<String, List<String>> typeWords, NeoPushVO pushVO, Map<String, List<PushBaseDTO>> dis) {
         NeoPushDTO reversePush = neoFacade.getReversePush(pushVO);
         NeoPushDTO reversePush = neoFacade.getReversePush(pushVO);
-//        if(ListUtil.isNotEmpty(reversePush)){
-            // 症状
-            if (ruleTypeList.contains("1")) {
-                if(ListUtil.isNotEmpty(reversePush.getSymptoms())){
-                    List<String> symptoms = reversePush.getSymptoms().stream().map(x->x.getName()).collect(Collectors.toList());
+        //        if(ListUtil.isNotEmpty(reversePush)){
+        // 症状
+        if (ruleTypeList.contains("1")) {
+            if (ListUtil.isNotEmpty(reversePush.getSymptoms())) {
+                List<String> symptoms = reversePush.getSymptoms().stream().map(x -> x.getName()).collect(Collectors.toList());
                 /*reversePush.stream().filter(x -> ListUtil.isNotEmpty(x.getSymptoms())).forEach(x -> {
                 /*reversePush.stream().filter(x -> ListUtil.isNotEmpty(x.getSymptoms())).forEach(x -> {
                     List<String> symptomList = x.getSymptoms().stream().map(y -> y.getName()).collect(Collectors.toList());
                     List<String> symptomList = x.getSymptoms().stream().map(y -> y.getName()).collect(Collectors.toList());
                     symptoms.removeAll(symptomList);
                     symptoms.removeAll(symptomList);
                     symptoms.addAll(symptomList);
                     symptoms.addAll(symptomList);
                 });*/
                 });*/
-                    if (symptoms.size() > 0) {
-                        List<PushBaseDTO> filtervitals = getPackagePushBaseDTO(typeWords, symptoms, StandConvertEnum.symptom);
-                        pushDTO.setSymptom(filtervitals.subList(0, filtervitals.size() >= length ? length : filtervitals.size()));
-                    }
+                if (symptoms.size() > 0) {
+                    List<PushBaseDTO> filtervitals = getPackagePushBaseDTO(typeWords, symptoms, StandConvertEnum.symptom);
+                    pushDTO.setSymptom(filtervitals.subList(0, filtervitals.size() >= length ? length : filtervitals.size()));
                 }
                 }
-
             }
             }
-            // 查体
-            if (ruleTypeList.contains("4")) {
-                if(ListUtil.isNotEmpty(reversePush.getVitals())){
-                    List<String> vitals = reversePush.getVitals().stream().map(x->x.getName()).collect(Collectors.toList());
-                    if (vitals.size() > 0) {
-                        List<PushBaseDTO> filtervitals = getPackagePushBaseDTO(typeWords, vitals, StandConvertEnum.vital);
-                        pushDTO.setVital(filtervitals.subList(0, filtervitals.size() >= length ? length : filtervitals.size()));
-                    }
-                }
 
 
-            }
-            // 化验
-            if (ruleTypeList.contains("5")) {
-                if(ListUtil.isNotEmpty(reversePush.getLis())){
-                    List<String> lises = reversePush.getLis().stream().map(x->x.getName()).collect(Collectors.toList());
-                    if (lises.size() > 0) {
-                        List<PushBaseDTO> filterlis = getPackagePushBaseDTO(typeWords, lises, StandConvertEnum.lis);
-                        pushDTO.setLis(filterlis.subList(0, filterlis.size() >= length ? length : filterlis.size()));
-                    }
+        }
+        // 查体
+        if (ruleTypeList.contains("4")) {
+            if (ListUtil.isNotEmpty(reversePush.getVitals())) {
+                List<String> vitals = reversePush.getVitals().stream().map(x -> x.getName()).collect(Collectors.toList());
+                if (vitals.size() > 0) {
+                    List<PushBaseDTO> filtervitals = getPackagePushBaseDTO(typeWords, vitals, StandConvertEnum.vital);
+                    pushDTO.setVital(filtervitals.subList(0, filtervitals.size() >= length ? length : filtervitals.size()));
                 }
                 }
-
             }
             }
-            // 辅检
-            if (ruleTypeList.contains("6")) {
-                if(ListUtil.isNotEmpty(reversePush.getPacs())){
-                    List<String> pacses = reversePush.getPacs().stream().map(x->x.getName()).collect(Collectors.toList());
-                    if (pacses.size() > 0) {
-                        List<PushBaseDTO> filterpacs = getPackagePushBaseDTO(typeWords, pacses, StandConvertEnum.pacs);
-                        pushDTO.setPacs(filterpacs.subList(0, filterpacs.size() >= length ? length : filterpacs.size()));
-                    }
+
+        }
+        // 化验
+        if (ruleTypeList.contains("5")) {
+            if (ListUtil.isNotEmpty(reversePush.getLis())) {
+                List<String> lises = reversePush.getLis().stream().map(x -> x.getName()).collect(Collectors.toList());
+                if (lises.size() > 0) {
+                    List<PushBaseDTO> filterlis = getPackagePushBaseDTO(typeWords, lises, StandConvertEnum.lis);
+                    pushDTO.setLis(filterlis.subList(0, filterlis.size() >= length ? length : filterlis.size()));
                 }
                 }
+            }
 
 
+        }
+        // 辅检
+        if (ruleTypeList.contains("6")) {
+            if (ListUtil.isNotEmpty(reversePush.getPacs())) {
+                List<String> pacses = reversePush.getPacs().stream().map(x -> x.getName()).collect(Collectors.toList());
+                if (pacses.size() > 0) {
+                    List<PushBaseDTO> filterpacs = getPackagePushBaseDTO(typeWords, pacses, StandConvertEnum.pacs);
+                    pushDTO.setPacs(filterpacs.subList(0, filterpacs.size() >= length ? length : filterpacs.size()));
+                }
             }
             }
-            // 药品
-            if (ruleTypeList.contains("8")) {
-                if(reversePush.getTreat() != null && ListUtil.isNotEmpty(reversePush.getTreat().get(MedicalAdviceEnum.drug.getName()))){
 
 
-                List<String> drugs = reversePush.getTreat().get(MedicalAdviceEnum.drug.getName()).stream().map(x->x.getName()).collect(Collectors.toList());
+        }
+        // 药品
+        if (ruleTypeList.contains("8")) {
+            if (reversePush.getTreat() != null && ListUtil.isNotEmpty(reversePush.getTreat().get(MedicalAdviceEnum.drug.getName()))) {
+
+                List<String> drugs = reversePush.getTreat().get(MedicalAdviceEnum.drug.getName()).stream().map(x -> x.getName()).collect(Collectors.toList());
                 /*reversePush.stream().filter(x ->x.getTreat() != null && ListUtil.isNotEmpty(x.getTreat().get(MedicalAdviceEnum.drug.getName())))
                 /*reversePush.stream().filter(x ->x.getTreat() != null && ListUtil.isNotEmpty(x.getTreat().get(MedicalAdviceEnum.drug.getName())))
                         .forEach(x -> {
                         .forEach(x -> {
                             List<String> drugList = x.getTreat().get(MedicalAdviceEnum.drug.getName()).stream().map(y -> y.getName()).collect(Collectors.toList());
                             List<String> drugList = x.getTreat().get(MedicalAdviceEnum.drug.getName()).stream().map(y -> y.getName()).collect(Collectors.toList());
@@ -155,55 +157,54 @@ public class PushProcess {
                     List<PushBaseDTO> filterdrugs = getPackagePushBaseDTO(typeWords, drugs, StandConvertEnum.drug);
                     List<PushBaseDTO> filterdrugs = getPackagePushBaseDTO(typeWords, drugs, StandConvertEnum.drug);
                     pushDTO.setMedicines(filterdrugs.subList(0, filterdrugs.size() >= length ? length : filterdrugs.size()));
                     pushDTO.setMedicines(filterdrugs.subList(0, filterdrugs.size() >= length ? length : filterdrugs.size()));
                 }
                 }
-                }
-
             }
             }
-            // 手术
-            if (ruleTypeList.contains("9")) {
-                if(reversePush.getTreat() != null && ListUtil.isNotEmpty(reversePush.getTreat().get(MedicalAdviceEnum.operation.getName())))
-                {
-
-                    List<String> operations = reversePush.getTreat().get(MedicalAdviceEnum.operation.getName()).stream().map(x -> x.getName()).collect(Collectors.toList());
-                    if (operations.size() > 0) {
-                        List<PushBaseDTO> filteroperations = getPackagePushBaseDTO(typeWords, operations, StandConvertEnum.operation);
-                        pushDTO.setOperations(filteroperations.subList(0, filteroperations.size() >= length ? length : filteroperations.size()));
-                    }
+
+        }
+        // 手术
+        if (ruleTypeList.contains("9")) {
+            if (reversePush.getTreat() != null && ListUtil.isNotEmpty(reversePush.getTreat().get(MedicalAdviceEnum.operation.getName()))) {
+
+                List<String> operations = reversePush.getTreat().get(MedicalAdviceEnum.operation.getName()).stream().map(x -> x.getName()).collect(Collectors.toList());
+                if (operations.size() > 0) {
+                    List<PushBaseDTO> filteroperations = getPackagePushBaseDTO(typeWords, operations, StandConvertEnum.operation);
+                    pushDTO.setOperations(filteroperations.subList(0, filteroperations.size() >= length ? length : filteroperations.size()));
                 }
                 }
             }
             }
-            //反推,推鉴别诊断
-            if (ruleTypeList.contains("7")) {
-                if(ListUtil.isNotEmpty(reversePush.getDifferentialDis())){
-                    List<String> differentDis = reversePush.getDifferentialDis().stream().map(x->x.getName()).collect(Collectors.toList());
-                    if (differentDis.size() > 0) {
-                        List<PushBaseDTO> filterpacs = getPackagePushBaseDTO(typeWords, differentDis, StandConvertEnum.disease);
-                        List<PushBaseDTO> pushDiffBaseDTOS = filterpacs.subList(0, filterpacs.size() >= length ? length : filterpacs.size());
-                        dis.put(DiseaseTypeEnum.identify.getName(),pushDiffBaseDTOS);
-                        pushDTO.setDis(dis);
-                    }
+        }
+        //反推,推鉴别诊断
+        if (ruleTypeList.contains("7")) {
+            if (ListUtil.isNotEmpty(reversePush.getDifferentialDis())) {
+                List<String> differentDis = reversePush.getDifferentialDis().stream().map(x -> x.getName()).collect(Collectors.toList());
+                if (differentDis.size() > 0) {
+                    List<PushBaseDTO> filterpacs = getPackagePushBaseDTO(typeWords, differentDis, StandConvertEnum.disease);
+                    List<PushBaseDTO> pushDiffBaseDTOS = filterpacs.subList(0, filterpacs.size() >= length ? length : filterpacs.size());
+                    dis.put(DiseaseTypeEnum.identify.getName(), pushDiffBaseDTOS);
+                    pushDTO.setDis(dis);
                 }
                 }
-
-            }
-            if (ruleTypeList.contains("10") && pushVO.getDiaeaseName() != null) {
-                List<TreatDTO> collect = new ArrayList<>();
-                Item diaeaseName = pushVO.getDiaeaseName();
-                TreatDTO treatDTO = new TreatDTO();
-                treatDTO.setName(diaeaseName.getName());
-                treatDTO.setUniqueName(diaeaseName.getUniqueName());
-                collect.add(treatDTO);
-                pushDTO.setTreat(collect);
             }
             }
-//        }
-//            return pushDTO;
+
+        }
+        if (ruleTypeList.contains("10") && pushVO.getDiaeaseName() != null) {
+            List<TreatDTO> collect = new ArrayList<>();
+            Item diaeaseName = pushVO.getDiaeaseName();
+            TreatDTO treatDTO = new TreatDTO();
+            treatDTO.setName(diaeaseName.getName());
+            treatDTO.setUniqueName(diaeaseName.getUniqueName());
+            collect.add(treatDTO);
+            pushDTO.setTreat(collect);
+        }
+        //        }
+        //            return pushDTO;
     }
     }
 
 
     private List<PushBaseDTO> getPackagePushBaseDTO(Map<String, List<String>> typeWords, List<String> symptoms, StandConvertEnum symptom) {
     private List<PushBaseDTO> getPackagePushBaseDTO(Map<String, List<String>> typeWords, List<String> symptoms, StandConvertEnum symptom) {
         List<PushBaseDTO> symptomPush = symptoms.stream()
         List<PushBaseDTO> symptomPush = symptoms.stream()
                 .filter(x -> !typeWords.get(symptom.toString()).contains(x))
                 .filter(x -> !typeWords.get(symptom.toString()).contains(x))
                 .map(x -> {
                 .map(x -> {
-            PushBaseDTO pushBaseDTO = new PushBaseDTO();
-            pushBaseDTO.setName(x);
-            return pushBaseDTO;
-        }).collect(Collectors.toList());
+                    PushBaseDTO pushBaseDTO = new PushBaseDTO();
+                    pushBaseDTO.setName(x);
+                    return pushBaseDTO;
+                }).collect(Collectors.toList());
         return symptomPush;
         return symptomPush;
     }
     }
 }
 }

+ 21 - 0
src/main/java/com/diagbot/rule/GroupRule.java

@@ -29,6 +29,7 @@ public class GroupRule {
      */
      */
     public void bill(WordCrfDTO wordCrfDTO, BillNeoMaxDTO billNeoMaxDTO, List<BillMsg> billMsgList, String type) {
     public void bill(WordCrfDTO wordCrfDTO, BillNeoMaxDTO billNeoMaxDTO, List<BillMsg> billMsgList, String type) {
         List<NodeNeoDTO> group = billNeoMaxDTO.getGroup();
         List<NodeNeoDTO> group = billNeoMaxDTO.getGroup();
+        Double age = wordCrfDTO.getAgeNum();
         for (NodeNeoDTO node : group) {
         for (NodeNeoDTO node : group) {
             // 妊娠目前从诊断里判断,包含“妊娠”
             // 妊娠目前从诊断里判断,包含“妊娠”
             String symptom = wordCrfDTO.getSymptom(); // 现病史内容
             String symptom = wordCrfDTO.getSymptom(); // 现病史内容
@@ -64,6 +65,26 @@ public class GroupRule {
                         billMsgList.add(commonBillMsg);
                         billMsgList.add(commonBillMsg);
                     }
                     }
                     break;
                     break;
+                case "幼儿":
+                    if (age != null) {
+                        if (age <= 2.5D) {
+                            BillMsg commonBillMsg = MsgUtil.getCommonBillMsg(
+                                    billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
+                                    "幼儿", type, billNeoMaxDTO.getType());
+                            billMsgList.add(commonBillMsg);
+                        }
+                    }
+                    break;
+                case "儿童":
+                    if (age != null) {
+                        if (age <= 12.0D && age >= 4.0D) {
+                            BillMsg commonBillMsg = MsgUtil.getCommonBillMsg(
+                                    billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
+                                    "儿童", type, billNeoMaxDTO.getType());
+                            billMsgList.add(commonBillMsg);
+                        }
+                    }
+                    break;
             }
             }
         }
         }
     }
     }