Browse Source

Merge branch 'dev/otherLis20210929' into develop

zhoutg 3 years ago
parent
commit
cae218fc1e

+ 1 - 0
src/main/java/com/diagbot/dto/LisOtherDTO.java

@@ -13,6 +13,7 @@ import java.util.List;
 @Data
 public class LisOtherDTO {
     private String name; // 化验拼接提示语
+    private String lisNameDetail;  // 化验套餐和明细拼接,如果套餐和明细名称一样,取明细
     private String msg; // 输血名称
     private List<String> drugMsg = new ArrayList<>(); // 药品拼接提示语
     private List<String> diseaseMsg = new ArrayList<>(); // 诊断拼接提示语

+ 14 - 0
src/main/java/com/diagbot/dto/MatchDTO.java

@@ -0,0 +1,14 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+/**
+ * @description: 规则匹配内容
+ * @author: zhoutg
+ * @time: 2020/7/29 9:57
+ */
+@Data
+public class MatchDTO {
+    private String content; // 匹配内容
+    private String lisNameDetail; // 化验套餐和明细拼接,如果套餐和明细名称一样,取明细
+}

+ 4 - 3
src/main/java/com/diagbot/rule/CommonRule.java

@@ -5,6 +5,7 @@ import com.diagbot.biz.push.entity.Pacs;
 import com.diagbot.dto.BaseDiagnoseDTO;
 import com.diagbot.dto.BillMsg;
 import com.diagbot.dto.DictionaryInfoDTO;
+import com.diagbot.dto.MatchDTO;
 import com.diagbot.dto.RuleBaseDTO;
 import com.diagbot.dto.RuleSimpleDTO;
 import com.diagbot.dto.WordCrfDTO;
@@ -284,13 +285,13 @@ public class CommonRule {
         if (ListUtil.isNotEmpty(lisList)) {
             sortByProperty(lisList, "dateValue");
             Lis lis = lisList.get(lisList.size() - 1); // 按时间排序,取最后一条
-            Map<String, Object> lisMap = CoreUtil.compareLis(ruleBaseDTO, lis);
-            if (CoreUtil.getMapFlag(lisMap)) {
+            MatchDTO matchDTO = CoreUtil.compareLis(ruleBaseDTO, lis);
+            if (matchDTO != null) {
                 String dateValue = lis.getDateValue(); // 结果日期
                 String orderDateValue = ruleSimpleDTO.getDateValue(); // 开单项日期
                 int flag = CoreUtil.compareTime(dateValue, orderDateValue, 60L * 24 * 7, false, false);
                 if (flag == 1) { // 有效期范围内
-                    ruleSimpleDTO.setContent(CoreUtil.getMapMsg(lisMap));
+                    ruleSimpleDTO.setContent(matchDTO.getContent());
                     ruleSimpleDTO.setConType(conType);
                     BillMsg billMsg = msgNewUtil.getCommonBillMsg(ruleSimpleDTO);
                     CoreUtil.addBeanToList(billMsgList, billMsg);

+ 37 - 30
src/main/java/com/diagbot/rule/LisRule.java

@@ -3,6 +3,7 @@ package com.diagbot.rule;
 import com.diagbot.biz.push.entity.Lis;
 import com.diagbot.dto.BillMsg;
 import com.diagbot.dto.LisOtherDTO;
+import com.diagbot.dto.MatchDTO;
 import com.diagbot.dto.RuleBaseDTO;
 import com.diagbot.dto.RuleSimpleDTO;
 import com.diagbot.dto.WordCrfDTO;
@@ -18,6 +19,7 @@ import org.springframework.stereotype.Component;
 
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @description: 化验规则
@@ -46,9 +48,9 @@ public class LisRule {
     public void bill(List<Lis> inputLis, RuleBaseDTO ruleBaseDTO, List<BillMsg> billMsgList, String conType, RuleSimpleDTO ruleSimpleDTO) {
         if (ListUtil.isNotEmpty(inputLis) && StringUtil.isNotBlank(ruleBaseDTO.getBaseLibName())) {
             for (Lis lis : inputLis) {
-                Map<String, Object> map = CoreUtil.compareLis(ruleBaseDTO, lis);
-                if (CoreUtil.getMapFlag(map)) {
-                    ruleSimpleDTO.setContent((String) map.get("msg"));
+                MatchDTO matchDTO = CoreUtil.compareLis(ruleBaseDTO, lis);
+                if (matchDTO != null) {
+                    ruleSimpleDTO.setContent(matchDTO.getContent());
                     ruleSimpleDTO.setConType(conType);
                     BillMsg billMsg = msgNewUtil.getCommonBillMsg(ruleSimpleDTO);
                     CoreUtil.addBeanToList(billMsgList, billMsg);
@@ -68,9 +70,9 @@ public class LisRule {
     public void highOperation(List<Lis> inputLis, RuleBaseDTO ruleBaseDTO, List<BillMsg> highRiskList, RuleSimpleDTO ruleSimpleDTO) {
         if (ListUtil.isNotEmpty(inputLis) && StringUtil.isNotBlank(ruleBaseDTO.getBaseLibName())) {
             for (Lis lis : inputLis) {
-                Map<String, Object> map = CoreUtil.compareLis(ruleBaseDTO, lis);
-                if (CoreUtil.getMapFlag(map)) {
-                    BillMsg billMsg = MsgUtil.getCommonHighRiskMsg((String) map.get("msg"), ruleSimpleDTO.getInputName(), ruleSimpleDTO.getLibTypeName());
+                MatchDTO matchDTO = CoreUtil.compareLis(ruleBaseDTO, lis);
+                if (matchDTO != null) {
+                    BillMsg billMsg = MsgUtil.getCommonHighRiskMsg(matchDTO.getContent(), ruleSimpleDTO.getInputName(), ruleSimpleDTO.getLibTypeName());
                     highRiskList.add(billMsg);
                 }
             }
@@ -99,19 +101,21 @@ public class LisRule {
                     case LisSubName: // 化验细项
                         if (ruleBaseDTO.getBaseLibName().equals(lisBean.getUniqueName())) {
                             // 化验自身
-                            map = CoreUtil.compareLis(ruleBaseDTO, lisBean);
-                            if (CoreUtil.getMapFlag(map)) {
+                            MatchDTO matchDTO = CoreUtil.compareLis(ruleBaseDTO, lisBean);
+                            if (matchDTO != null) {
                                 i++;
-                                lisOtherDTO.setName((String) map.get("msg"));
+                                lisOtherDTO.setName(matchDTO.getContent());
+                                lisOtherDTO.setLisNameDetail(matchDTO.getLisNameDetail());
                             } else {
                                 break;
                             }
                         } else {
                             // 其他化验——暂无数据
-                            map = CoreUtil.compareLis(ruleBaseDTO, wordCrfDTO.getLis());
-                            if (CoreUtil.getMapFlag(map)) {
+                            List<MatchDTO> matchDTOList = CoreUtil.compareLis(ruleBaseDTO, wordCrfDTO.getLis());
+                            if (ListUtil.isNotEmpty(matchDTOList)) {
                                 i++;
-                                lisOtherDTO.setLisMsg((List<String>) map.get("msgList"));
+                                List<String> msgLis = matchDTOList.stream().map(r -> r.getContent()).collect(Collectors.toList());
+                                lisOtherDTO.setLisMsg(msgLis);
                             } else {
                                 break;
                             }
@@ -146,17 +150,18 @@ public class LisRule {
         // 条件全部符合
         if (i == ruleBaseDTOList.size()) {
             if (StringUtil.isNotBlank(lisOtherDTO.getName())) {
+                String lisNameDetail = lisOtherDTO.getLisNameDetail(); // 化验套餐和明细
                 // 就化验本身一个条件符合
                 if (i == 1) {
                     BillMsg billMsg = msgNewUtil.getCommonOtherMsg(TypeEnum.lis.getName(),
-                            lisOtherDTO.getName(), "", TypeEnum.lisSelf.getName(), lisBean, msg);
+                            lisOtherDTO.getName(), "", TypeEnum.lisSelf.getName(), lisBean, msg, lisNameDetail);
                     CoreUtil.addBeanToList(otherList, billMsg);
                 } else { // 有其他条件符合
                     // 诊断
                     if (ListUtil.isNotEmpty(lisOtherDTO.getDiseaseMsg())) {
                         for (String str : lisOtherDTO.getDiseaseMsg()) {
                             BillMsg billMsg = msgNewUtil.getCommonOtherMsg(TypeEnum.lis.getName(), lisOtherDTO.getName(),
-                                    str, TypeEnum.disease.getName(), lisBean, msg);
+                                    str, TypeEnum.disease.getName(), lisBean, msg, lisNameDetail);
                             CoreUtil.addBeanToList(otherList, billMsg);
                         }
                     }
@@ -164,7 +169,7 @@ public class LisRule {
                     if (ListUtil.isNotEmpty(lisOtherDTO.getDrugMsg())) {
                         for (String str : lisOtherDTO.getDrugMsg()) {
                             BillMsg billMsg = msgNewUtil.getCommonOtherMsg(TypeEnum.lis.getName(), lisOtherDTO.getName(),
-                                    str, TypeEnum.drug.getName(), lisBean, msg);
+                                    str, TypeEnum.drug.getName(), lisBean, msg, lisNameDetail);
                             CoreUtil.addBeanToList(otherList, billMsg);
                         }
                     }
@@ -172,7 +177,7 @@ public class LisRule {
                     if (ListUtil.isNotEmpty(lisOtherDTO.getGroupMsg())) {
                         for (String str : lisOtherDTO.getGroupMsg()) {
                             BillMsg billMsg = msgNewUtil.getCommonOtherMsg(TypeEnum.lis.getName(), lisOtherDTO.getName(),
-                                    str, TypeEnum.group.getName(), lisBean, msg);
+                                    str, TypeEnum.group.getName(), lisBean, msg, lisNameDetail);
                             CoreUtil.addBeanToList(otherList, billMsg);
                         }
                     }
@@ -180,7 +185,7 @@ public class LisRule {
                     if (ListUtil.isNotEmpty(lisOtherDTO.getLisMsg())) {
                         for (String str : lisOtherDTO.getLisMsg()) {
                             BillMsg billMsg = msgNewUtil.getCommonOtherMsg(TypeEnum.lis.getName(), lisOtherDTO.getName(),
-                                    str, TypeEnum.lis.getName(), lisBean, msg);
+                                    str, TypeEnum.lis.getName(), lisBean, msg, lisNameDetail);
                             CoreUtil.addBeanToList(otherList, billMsg);
                         }
                     }
@@ -211,19 +216,21 @@ public class LisRule {
                     case LisSubName: // 化验细项
                         if (ruleBaseDTO.getBaseLibName().equals(lisBean.getUniqueName())) {
                             // 化验自身
-                            map = CoreUtil.compareLis(ruleBaseDTO, lisBean);
-                            if (CoreUtil.getMapFlag(map)) {
+                            MatchDTO matchDTO = CoreUtil.compareLis(ruleBaseDTO, lisBean);
+                            if (matchDTO != null) {
                                 i++;
-                                lisOtherDTO.setName((String) map.get("msg"));
+                                lisOtherDTO.setName(matchDTO.getContent());
+                                lisOtherDTO.setLisNameDetail(matchDTO.getLisNameDetail());
                             } else {
                                 break;
                             }
                         } else {
                             // 其他化验——暂无数据
-                            map = CoreUtil.compareLis(ruleBaseDTO, wordCrfDTO.getLis());
-                            if (CoreUtil.getMapFlag(map)) {
+                            List<MatchDTO> matchDTOList = CoreUtil.compareLis(ruleBaseDTO, wordCrfDTO.getLis());
+                            if (ListUtil.isNotEmpty(matchDTOList)) {
                                 i++;
-                                lisOtherDTO.setLisMsg((List<String>) map.get("msgList"));
+                                List<String> msgLis = matchDTOList.stream().map(r -> r.getContent()).collect(Collectors.toList());
+                                lisOtherDTO.setLisMsg(msgLis);
                             } else {
                                 break;
                             }
@@ -322,17 +329,17 @@ public class LisRule {
                     case LisSubName: // 化验细项
                         if (ruleBaseDTO.getBaseLibName().equals(lisBean.getUniqueName())) {
                             // 化验自身 【第一个】
-                            map = CoreUtil.compareLis(ruleBaseDTO, lisBean);
-                            if (CoreUtil.getMapFlag(map)) {
+                            MatchDTO matchDTO = CoreUtil.compareLis(ruleBaseDTO, lisBean);
+                            if (matchDTO != null) {
                                 i++;
-                                msg = (String) map.get("msg");
+                                msg = matchDTO.getContent();
                             } else {
                                 break;
                             }
                         } else {
                             // 其他化验
-                            map = CoreUtil.compareLis(ruleBaseDTO, wordCrfDTO.getLis());
-                            if (CoreUtil.getMapFlag(map)) {
+                            List<MatchDTO> matchDTOList = CoreUtil.compareLis(ruleBaseDTO, wordCrfDTO.getLis());
+                            if (ListUtil.isNotEmpty(matchDTOList)) {
                                 i++;
                             } else {
                                 break;
@@ -366,8 +373,8 @@ public class LisRule {
     public void push(List<Lis> inputLis, RuleBaseDTO ruleBaseDTO, List<Long> baseIdList, String ids) {
         if (ListUtil.isNotEmpty(inputLis) && StringUtil.isNotBlank(ruleBaseDTO.getBaseLibName())) {
             for (Lis lis : inputLis) {
-                Map<String, Object> map = CoreUtil.compareLis(ruleBaseDTO, lis);
-                if (CoreUtil.getMapFlag(map)) {
+                MatchDTO matchDTO = CoreUtil.compareLis(ruleBaseDTO, lis);
+                if (matchDTO != null) {
                     CoreUtil.addSplitString(baseIdList, ids);
                 }
             }

+ 3 - 2
src/main/java/com/diagbot/rule/PacsRule.java

@@ -1,6 +1,7 @@
 package com.diagbot.rule;
 
 import com.diagbot.dto.BillMsg;
+import com.diagbot.dto.MatchDTO;
 import com.diagbot.dto.RuleBaseDTO;
 import com.diagbot.dto.RuleSimpleDTO;
 import com.diagbot.dto.WordCrfDTO;
@@ -130,8 +131,8 @@ public class PacsRule {
                         }
                         break;
                     case LisSubName: // 检验结果
-                        map = CoreUtil.compareLis(ruleBaseDTO, wordCrfDTO.getLis());
-                        if (CoreUtil.getMapFlag(map)) {
+                        List<MatchDTO> matchDTOList = CoreUtil.compareLis(ruleBaseDTO, wordCrfDTO.getLis());
+                        if (ListUtil.isNotEmpty(matchDTOList)) {
                             i++;
                         }
                         break;

+ 43 - 47
src/main/java/com/diagbot/util/CoreUtil.java

@@ -2,6 +2,7 @@ package com.diagbot.util;
 
 import com.diagbot.biz.push.entity.Item;
 import com.diagbot.biz.push.entity.Lis;
+import com.diagbot.dto.MatchDTO;
 import com.diagbot.dto.RuleBaseDTO;
 import com.diagbot.enums.CommonEnum;
 import com.diagbot.enums.LexiconEnum;
@@ -294,24 +295,23 @@ public class CoreUtil {
      * @param lisList
      * @return
      */
-    public static Map<String, Object> compareLis(RuleBaseDTO ruleBaseDTO, List<Lis> lisList) {
-        Map<String, Object> map = new LinkedHashMap<>();
-        boolean flag = false;
+    public static List<MatchDTO> compareLis(RuleBaseDTO ruleBaseDTO, List<Lis> lisList) {
         if (ruleBaseDTO == null || ListUtil.isEmpty(lisList)) {
-            map.put("flag", flag);
-            return map;
+            return null;
         }
-        List<String> msgList = new ArrayList<>();
+        boolean flag = false;
+        List<MatchDTO> matchDTOList = new ArrayList<>();
         for (Lis lis : lisList) {
-            Map mapLis = CoreUtil.compareLis(ruleBaseDTO, lis);
-            if (CoreUtil.getMapFlag(mapLis)) {
+            MatchDTO matchDTO = CoreUtil.compareLis(ruleBaseDTO, lis);
+            if (matchDTO != null) {
+                matchDTOList.add(matchDTO);
                 flag = true;
-                msgList.add((String) mapLis.get("msg"));
             }
         }
-        map.put("flag", flag);
-        map.put("msgList", msgList);
-        return map;
+        if (flag) {
+            return matchDTOList;
+        }
+        return null;
     }
 
     /**
@@ -321,62 +321,57 @@ public class CoreUtil {
      * @param lis
      * @return
      */
-    public static Map<String, Object> compareLis(RuleBaseDTO ruleBaseDTO, Lis lis) {
-        Map<String, Object> map = new LinkedHashMap<>();
-        boolean flag = false;
+    public static MatchDTO compareLis(RuleBaseDTO ruleBaseDTO, Lis lis) {
+        boolean flag = false; // 规则是否匹配
         if (ruleBaseDTO == null || lis == null) {
-            map.put("flag", flag);
-            return map;
+            return null;
         }
+        String unionName = ""; // 化验拼接名称,套餐+细项,细项
+        String content = ""; // 最终提示语
         String uniqueName = lis.getUniqueName();
         // 标准名称相同
         if (StringUtil.isNotBlank(uniqueName) && uniqueName.equals(ruleBaseDTO.getBaseLibName())) {
+            // 套餐和明细名称一样,优化提示语只取细项
+            if (StringUtil.isNotBlank(lis.getName()) && lis.getName().equals(lis.getDetailName())) {
+                unionName = lis.getDetailName(); // 取细项
+            } else {
+                unionName = lis.getName() + lis.getDetailName(); // 套餐+细项
+            }
             if (StringUtil.isNotBlank(lis.getOtherValue())) {
+                // 文本比较
                 if (lis.getOtherValue().equals(ruleBaseDTO.getBaseEqValue())) {
-                    // 套餐和明细名称一样,提示语只取其中一个
-                    if (StringUtil.isNotBlank(lis.getName()) && lis.getName().equals(lis.getDetailName())) {
-                        // 有医院原值就提示医院值
-                        if (StringUtil.isNotBlank(lis.getResult())) {
-                            map.put("msg", lis.getDetailName() + "结果" + lis.getResult());
-                        } else {
-                            map.put("msg", lis.getDetailName() + "结果" + lis.getOtherValue());
-                        }
+                    // 有医院原值就提示医院值
+                    if (StringUtil.isNotBlank(lis.getResult())) {
+                        content = unionName + "结果" + lis.getResult();
                     } else {
-                        // 有医院原值就提示医院值
-                        if (StringUtil.isNotBlank(lis.getResult())) {
-                            map.put("msg", lis.getName() + lis.getDetailName() + "结果" + lis.getResult());
-                        } else {
-                            map.put("msg", lis.getName() + lis.getDetailName() + "结果" + lis.getOtherValue());
-                        }
+                        content = unionName + "结果" + lis.getOtherValue();
                     }
                     flag = true;
                 }
             } else if (lis.getValue() != null) {
+                // 数值比较
                 double value = lis.getValue();
                 flag = compareNum(ruleBaseDTO, value);
                 if (flag) {
-                    // 获取化验单位拼接
+                    // 获取化验单位拼接,默认会返回空字符串
                     String unitsJoint = getJointUnits(lis);
-                    if (StringUtil.isNotBlank(lis.getName()) && lis.getName().equals(lis.getDetailName())) {
-                        if (StringUtil.isNotBlank(lis.getResult())) {
-                            map.put("msg", lis.getDetailName() + "结果" + lis.getResult() + unitsJoint);
-                        } else {
-                            map.put("msg", lis.getDetailName() + "结果" + subZeroAndDot(String.valueOf(lis.getValue())) + unitsJoint);
-                        }
+                    // 有医院原值就提示医院值,例如: 医院result字段: >10,技术服务部会将value设置成10.1,但提示语还是>10
+                    if (StringUtil.isNotBlank(lis.getResult())) {
+                        content = unionName + "结果" + lis.getResult() + unitsJoint;
                     } else {
-                        if (StringUtil.isNotBlank(lis.getResult())) {
-                            map.put("msg", lis.getName() + lis.getDetailName() + "结果" + lis.getResult() + unitsJoint);
-                        } else {
-                            // 获取化验单位拼接
-                            unitsJoint = getJointUnits(lis);
-                            map.put("msg", lis.getName() + lis.getDetailName() + "结果" + subZeroAndDot(String.valueOf(lis.getValue())) + unitsJoint);
-                        }
+                        content = unionName + "结果" + subZeroAndDot(String.valueOf(lis.getValue())) + unitsJoint;
                     }
                 }
             }
         }
-        map.put("flag", flag);
-        return map;
+        // 如果匹配返回对象
+        if (flag) {
+            MatchDTO matchDTO = new MatchDTO();
+            matchDTO.setContent(content);
+            matchDTO.setLisNameDetail(unionName);
+            return matchDTO;
+        }
+        return null;
     }
 
     /**
@@ -390,6 +385,7 @@ public class CoreUtil {
         if (lis == null || StringUtil.isBlank(lis.getUnits())) {
             return unitsJoint;
         }
+        // 单位以数字开头,拼接“×”
         boolean flag = RegexUtil.getRegexRes(lis.getUnits(), "^\\d");
         if (flag) {
             unitsJoint = "×" + lis.getUnits();

+ 4 - 1
src/main/java/com/diagbot/util/MsgNewUtil.java

@@ -82,7 +82,7 @@ public class MsgNewUtil {
      * @param suggestMsg
      * @return
      */
-    public BillMsg getCommonOtherMsg(String otherType, String content, String name, String type, Lis lis, String suggestMsg) {
+    public BillMsg getCommonOtherMsg(String otherType, String content, String name, String type, Lis lis, String suggestMsg, String lisNameDetail) {
         BillMsg billMsg = new BillMsg();
         String msg = "";
         switch (TypeEnum.getEnum(otherType)) {
@@ -99,6 +99,9 @@ public class MsgNewUtil {
                 // 放到最后统一替换【多处匹配】
                 msg = msg.replaceAll("\\[化验结果]", content);
                 msg = msg.replaceAll("\\[匹配内容]", name);
+                if (msg.contains("[化验套餐和明细]")) {
+                    msg = msg.replaceAll("\\[化验套餐和明细]", lisNameDetail);
+                }
                 billMsg.setType(type);
                 billMsg.setOrderName(lis.getName());
                 billMsg.setOrderDetailName(lis.getDetailName());