Browse Source

Merge remote-tracking branch 'origin/master'

MarkHuang 4 years ago
parent
commit
0e6a8e8941

+ 47 - 37
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -813,21 +813,26 @@ public class NeoFacade {
         List<String> lisConList = getConvertList(standConvert.getLisList(), StandConvertEnum.lis.toString(), standConvertCrfVOList);
         List<String> transfusionConList = getConvertList(standConvert.getTransfusionList(), StandConvertEnum.transfusion.toString(), standConvertCrfVOList);
 
-        StandConvertCrfBatchDTO standConvertCrfBatchDTO = null;
-        try {
-            standConvertCrfBatchDTO = standConvertServiceClient.similarityBatch(standConvertCrfVOList);
-        } catch (Exception e) {
-            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "标准词转换【服务器】挂了!" + e.getMessage());
+        StandConvertCrfBatchDTO standConvertCrfBatchDTO = new StandConvertCrfBatchDTO();
+        if (!(ListUtil.isEmpty(clinicalConList) && ListUtil.isEmpty(operationConList) && ListUtil.isEmpty(drugConList)
+                && ListUtil.isEmpty(vitallConList) && ListUtil.isEmpty(diseaseConList) && ListUtil.isEmpty(pacsConList)
+                && ListUtil.isEmpty(lisConList) && ListUtil.isEmpty(transfusionConList))) {
+            try {
+                standConvertCrfBatchDTO = standConvertServiceClient.similarityBatch(standConvertCrfVOList);
+            } catch (Exception e) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "标准词转换【服务器】挂了!" + e.getMessage());
+            }
         }
+
         Map<String, Map<String, StandConvertCrfDTO>> crfMap = standConvertCrfBatchDTO.getData();
-        getConvertMap(crfMap, StandConvertEnum.symptom.toString(), clinicalConList, map);
-        getConvertMap(crfMap, StandConvertEnum.operation.toString(), operationConList, map);
-        getConvertMap(crfMap, StandConvertEnum.drug.toString(), drugConList, map);
-        getConvertMap(crfMap, StandConvertEnum.vital.toString(), vitallConList, map);
-        getConvertMap(crfMap, StandConvertEnum.disease.toString(), diseaseConList, map);
-        getConvertMap(crfMap, StandConvertEnum.pacs.toString(), pacsConList, map);
-        getConvertMap(crfMap, StandConvertEnum.lis.toString(), lisConList, map);
-        getConvertMap(crfMap, StandConvertEnum.transfusion.toString(), transfusionConList, map);
+        getConvertMap(crfMap, StandConvertEnum.symptom.toString(), clinicalConList, standConvert.getClinicalList(), map);
+        getConvertMap(crfMap, StandConvertEnum.operation.toString(), operationConList, standConvert.getOperationList(), map);
+        getConvertMap(crfMap, StandConvertEnum.drug.toString(), drugConList, standConvert.getDrugList(), map);
+        getConvertMap(crfMap, StandConvertEnum.vital.toString(), vitallConList, standConvert.getVitalList(), map);
+        getConvertMap(crfMap, StandConvertEnum.disease.toString(), diseaseConList, standConvert.getDiaglList(), map);
+        getConvertMap(crfMap, StandConvertEnum.pacs.toString(), pacsConList, standConvert.getPacsList(), map);
+        getConvertMap(crfMap, StandConvertEnum.lis.toString(), lisConList, standConvert.getLisList(), map);
+        getConvertMap(crfMap, StandConvertEnum.transfusion.toString(), transfusionConList, standConvert.getTransfusionList(), map);
 
         return map;
     }
@@ -871,41 +876,46 @@ public class NeoFacade {
      * @param map
      */
     public void getConvertMap(Map<String, Map<String, StandConvertCrfDTO>> crfDTO, String type, List<String> convertList,
-                              Map<String, Map<String, String>> map) {
-        if (ListUtil.isEmpty(convertList)) {
-            return ;
-        }
-        Map<String, StandConvertCrfDTO> crfMap = crfDTO.get(type);
+                              List<String> originList, Map<String, Map<String, String>> map) {
         Map<String, String> typeMap = new LinkedHashMap<>();
 
-        for (String s : convertList) {
-            String lastS = s;
-            if (crfMap != null) {
-                StandConvertCrfDTO standConvertCrfDTO = crfMap.get(s);
-                if (standConvertCrfDTO != null) {
-                    List<Map<String, String>> list = standConvertCrfDTO.getStandard_words();
-                    if (ListUtil.isEmpty(list)) {
-                        redisUtil.updateValue(type + "Conv:" + s, s);
-                    } else {
-                        String rateStr = standConvertCrfDTO.getStandard_words().get(0).get("rate");
-                        if (StringUtil.isBlank(rateStr)) {
+        if (ListUtil.isNotEmpty(convertList)) {
+            Map<String, StandConvertCrfDTO> crfMap = crfDTO.get(type);
+            for (String s : convertList) {
+                String lastS = s;
+                if (crfMap != null) {
+                    StandConvertCrfDTO standConvertCrfDTO = crfMap.get(s);
+                    if (standConvertCrfDTO != null) {
+                        List<Map<String, String>> list = standConvertCrfDTO.getStandard_words();
+                        if (ListUtil.isEmpty(list)) {
                             redisUtil.updateValue(type + "Conv:" + s, s);
                         } else {
-                            BigDecimal rate = new BigDecimal(rateStr);
-                            int flag = rate.compareTo(new BigDecimal(standConvertRate));
-                            if (flag < 0) {
+                            String rateStr = standConvertCrfDTO.getStandard_words().get(0).get("rate");
+                            if (StringUtil.isBlank(rateStr)) {
                                 redisUtil.updateValue(type + "Conv:" + s, s);
                             } else {
-                                redisUtil.updateValue(type + "Conv:" + s, standConvertCrfDTO.getStandard_words().get(0).get("standard_word"));
-                                lastS = standConvertCrfDTO.getStandard_words().get(0).get("standard_word");
+                                BigDecimal rate = new BigDecimal(rateStr);
+                                int flag = rate.compareTo(new BigDecimal(standConvertRate));
+                                if (flag < 0) {
+                                    redisUtil.updateValue(type + "Conv:" + s, s);
+                                } else {
+                                    redisUtil.updateValue(type + "Conv:" + s, standConvertCrfDTO.getStandard_words().get(0).get("standard_word"));
+                                    lastS = standConvertCrfDTO.getStandard_words().get(0).get("standard_word");
+                                }
                             }
                         }
+                    } else {
+                        redisUtil.updateValue(type + "Conv:" + s, s);
                     }
-                } else {
-                    redisUtil.updateValue(type + "Conv:" + s, s);
                 }
+                typeMap.put(s, lastS);
+            }
+        }
+        // 将所有的词放入typeMap中
+        for (String s : originList) {
+            if (!typeMap.containsKey(s)) {
+                typeMap.put(s, s);
             }
-            typeMap.put(s, lastS);
         }
         map.put(type, typeMap);
     }

+ 52 - 43
src/main/java/com/diagbot/facade/TestFacade.java

@@ -82,39 +82,39 @@ public class TestFacade {
             }
             if (StringUtil.isNotBlank(bean.getOrderType())) {
                 switch (bean.getOrderType()) {
-                    // case "实验室检查名称": // 细项
-                    //     List<Lis> lisDetailOrder = new ArrayList<>();
-                    //     Lis lisDetailBean = new Lis();
-                    //     lisDetailBean.setName(bean.getStandName());
-                    //     lisDetailBean.setDetailName(bean.getStandName());
-                    //     lisDetailBean.setUniqueName(bean.getStandName());
-                    //     lisDetailOrder.add(lisDetailBean);
-                    //     indicationPushVO.setLisOrder(lisDetailOrder);
-                    //     break;
-                    // case "辅助检查名称":
-                    //     List<Pacs> pacsOrder = new ArrayList<>();
-                    //     Pacs pacsBean = new Pacs();
-                    //     pacsBean.setName(bean.getStandName());
-                    //     pacsBean.setUniqueName(bean.getStandName());
-                    //     pacsOrder.add(pacsBean);
-                    //     indicationPushVO.setPacsOrder(pacsOrder);
-                    //     break;
-                    // case "实验室检查套餐名":
-                    //     List<Lis> lisOrder = new ArrayList<>();
-                    //     Lis lisBean = new Lis();
-                    //     lisBean.setName(bean.getStandName());
-                    //     lisBean.setUniqueName(bean.getStandName());
-                    //     lisOrder.add(lisBean);
-                    //     indicationPushVO.setLisOrder(lisOrder);
-                    //     break;
-                    // case "医保手术和操作名称":
-                    //     List<Item> operationOrder = new ArrayList<>();
-                    //     Item operationItem = new Item();
-                    //     operationItem.setName(bean.getStandName());
-                    //     operationItem.setUniqueName(bean.getStandName());
-                    //     operationOrder.add(operationItem);
-                    //     indicationPushVO.setOperationOrder(operationOrder);
-                    //     break;
+                    case "实验室检查名称": // 细项
+                        List<Lis> lisDetailOrder = new ArrayList<>();
+                        Lis lisDetailBean = new Lis();
+                        lisDetailBean.setName(bean.getStandName());
+                        lisDetailBean.setDetailName(bean.getStandName());
+                        lisDetailBean.setUniqueName(bean.getStandName());
+                        lisDetailOrder.add(lisDetailBean);
+                        indicationPushVO.setLisOrder(lisDetailOrder);
+                        break;
+                    case "辅助检查名称":
+                        List<Pacs> pacsOrder = new ArrayList<>();
+                        Pacs pacsBean = new Pacs();
+                        pacsBean.setName(bean.getStandName());
+                        pacsBean.setUniqueName(bean.getStandName());
+                        pacsOrder.add(pacsBean);
+                        indicationPushVO.setPacsOrder(pacsOrder);
+                        break;
+                    case "实验室检查套餐名":
+                        List<Lis> lisOrder = new ArrayList<>();
+                        Lis lisBean = new Lis();
+                        lisBean.setName(bean.getStandName());
+                        lisBean.setUniqueName(bean.getStandName());
+                        lisOrder.add(lisBean);
+                        indicationPushVO.setLisOrder(lisOrder);
+                        break;
+                    case "医保手术和操作名称":
+                        List<Item> operationOrder = new ArrayList<>();
+                        Item operationItem = new Item();
+                        operationItem.setName(bean.getStandName());
+                        operationItem.setUniqueName(bean.getStandName());
+                        operationOrder.add(operationItem);
+                        indicationPushVO.setOperationOrder(operationOrder);
+                        break;
                     case "药品通用名称":
                         List<Drug> drugOrder = new ArrayList<>();
                         Drug drug = new Drug();
@@ -172,16 +172,22 @@ public class TestFacade {
                         indicationPushVO.setSymptom(symptom.toString());
                         break;
                     case "10": // 禁忌人群
-                        if ("妊娠".equals(bean.getNeoName())) {
-                            List<Item> groupList = new ArrayList<>();
-                            Item group = new Item();
-                            group.setName(bean.getNeoName());
-                            group.setUniqueName(bean.getNeoName());
-                            groupList.add(group);
-                            indicationPushVO.setDiag(groupList);
-                        } else {
-                            continue;
+                        switch (bean.getNeoName()) {
+                            case "妊娠":
+                                List<Item> groupList = new ArrayList<>();
+                                Item group = new Item();
+                                group.setName(bean.getNeoName());
+                                group.setUniqueName(bean.getNeoName());
+                                groupList.add(group);
+                                indicationPushVO.setDiag(groupList);
+                                break;
+                            case "月经期":
+                                indicationPushVO.setSymptom("月经第" +(int)(Math.random() * 30) + "天");
+                                break;
+                            default:
+                                continue;
                         }
+                        break;
                     case "7" : // 药品过敏原
                         StringBuffer pastStr = new StringBuffer("");
                         if ("药品通用名称".equals(bean.getDrugType())) {
@@ -983,6 +989,9 @@ public class TestFacade {
     public Map getDebugMapMulti(List<IndicationPushVO> indicationPushVOList, String ruleType, long start) {
         Map<String, Object> map = new LinkedHashMap<>();
         List<String> errMsg = new ArrayList<>();
+        if (ListUtil.isEmpty(indicationPushVOList)) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "无测试数据");
+        }
         try {
             int threadNum = 8; // 推荐的总线程数 = cpu个数 * 每个cpu的核数
             List<List<IndicationPushVO>> threadData = divideByCopies(indicationPushVOList, threadNum);
@@ -1018,7 +1027,7 @@ public class TestFacade {
             Long t2 = System.currentTimeMillis();
             map.put("执行时间", (t2 - start) / 1000.0 + "秒");
         } catch (Exception e) {
-            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "多线程执行高风险手术复杂情况失败:" + e.getMessage());
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "多线程执行失败:" + e.getMessage());
         }
         return map;
     }

+ 9 - 1
src/main/java/com/diagbot/rule/GroupRule.java

@@ -31,8 +31,17 @@ public class GroupRule {
         List<NodeNeoDTO> group = billNeoMaxDTO.getGroup();
         for (NodeNeoDTO node : group) {
             // 妊娠目前从诊断里判断,包含“妊娠”
+            String symptom = wordCrfDTO.getSymptom(); // 现病史内容
             switch (node.getName()) {
                 case "妊娠":
+                    // 现病史包含“孕妇”
+                    if (symptom.contains("孕妇")) {
+                        BillMsg commonBillMsg = MsgUtil.getCommonBillMsg(
+                                billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
+                                "妊娠", type, billNeoMaxDTO.getType());
+                        billMsgList.add(commonBillMsg);
+                    }
+                    // 诊断里包含“妊娠”
                     List<Item> diag = wordCrfDTO.getDiag();
                     for (Item item : diag) {
                         if (item.getUniqueName().contains("妊娠")) {
@@ -44,7 +53,6 @@ public class GroupRule {
                     }
                     break;
                 case "月经期":
-                    String symptom = wordCrfDTO.getSymptom(); // 现病史内容
                     String regex = "月经第(([零一二三四五六七八九十]{0,3})||([0-9]{0,2}))天";
                     Pattern pattern = Pattern.compile(regex);
                     Matcher matcher = pattern.matcher(symptom);