Browse Source

Merge remote-tracking branch 'origin/master'

MarkHuang 4 năm trước cách đây
mục cha
commit
af7f00306e

+ 8 - 3
src/main/java/com/diagbot/dto/BillNeoMaxDTO.java

@@ -13,8 +13,13 @@ import java.util.List;
 @Data
 public class BillNeoMaxDTO {
 
-    // 开单项目名称
-    private String name;
+    /****************扩展数据开始******************/
+    // 开单名称
+    private String orderName;
+
+    // 开单标准名称
+    private String orderStandName;
+    /****************扩展数据结束******************/
 
     // 禁忌性别
     private String gender;
@@ -41,7 +46,7 @@ public class BillNeoMaxDTO {
     private List<NodeNeoDTO> pacs = new ArrayList<>();
 
     // 禁忌疾病
-    private List<String> disease = new ArrayList<>();
+    private List<NodeNeoDTO> disease = new ArrayList<>();
 
     // 禁用人群
     private List<String> group = new ArrayList<>();

+ 20 - 5
src/main/java/com/diagbot/dto/WordCrfDTO.java

@@ -1,14 +1,21 @@
 package com.diagbot.dto;
 
+import com.diagbot.biz.push.entity.Item;
 import com.diagbot.biz.push.entity.Lis;
 import com.diagbot.biz.push.entity.Pacs;
-import com.diagbot.model.label.*;
+import com.diagbot.model.label.ChiefLabel;
+import com.diagbot.model.label.DiagLabel;
+import com.diagbot.model.label.FamilyLabel;
+import com.diagbot.model.label.MaritalLabel;
+import com.diagbot.model.label.MenstrualLabel;
+import com.diagbot.model.label.PastLabel;
+import com.diagbot.model.label.PersonalLabel;
+import com.diagbot.model.label.PresentLabel;
+import com.diagbot.model.label.VitalLabel;
 import lombok.Data;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * crf 解析后各個模塊出參
@@ -24,8 +31,6 @@ public class WordCrfDTO {
     private Integer age;
     // 性别(1:男,2:女)
     private Integer sex;
-    // 标准词转换
-    Map<String, Map<String, String>> standConvertMap = new HashMap<>();
     // 化验项目和结果
     private List<Lis> lis = new ArrayList<>();
     // 辅检项目和结果
@@ -49,6 +54,16 @@ public class WordCrfDTO {
     // 诊断
     private DiagLabel diagLabel;
 
+    /*******************************************入参数据拷贝开始******************************/
+    // 当前化验开单项
+    private List<Lis> lisOrder = new ArrayList<>();
+    // 当前辅检开单项
+    private List<Pacs> pacsOrder = new ArrayList<>();
+    // 当前诊断开单项
+    private List<Item> diagOrder = new ArrayList<>();
+    // 当前药品开单项
+    private List<Item> drugOrder = new ArrayList<>();
+    /*******************************************入参数据拷贝结束******************************/
     // 化验
     // private LisLabel lisLabel;
     // 辅检

+ 0 - 27
src/main/java/com/diagbot/entity/relationship/Medicine_AgeMin.java

@@ -1,27 +0,0 @@
-package com.diagbot.entity.relationship;
-
-import com.diagbot.entity.node.Medicine;
-import com.diagbot.entity.node.AgeMin;
-import lombok.Getter;
-import lombok.Setter;
-import org.neo4j.ogm.annotation.EndNode;
-import org.neo4j.ogm.annotation.RelationshipEntity;
-import org.neo4j.ogm.annotation.StartNode;
-
-/**
- * 关系-鉴别诊断
- *
- * @author Mark Huang
- */
-@Getter
-@Setter
-@RelationshipEntity(type="药品通用名禁忌年龄最小值")
-public class Medicine_AgeMin {
-
-    @StartNode
-    private Medicine medicine;
-
-    @EndNode
-    private AgeMin agemin;
-
-}

+ 0 - 27
src/main/java/com/diagbot/entity/relationship/Medicine_Gender.java

@@ -1,27 +0,0 @@
-package com.diagbot.entity.relationship;
-
-import com.diagbot.entity.node.Medicine;
-import com.diagbot.entity.node.Gender;
-import lombok.Getter;
-import lombok.Setter;
-import org.neo4j.ogm.annotation.EndNode;
-import org.neo4j.ogm.annotation.RelationshipEntity;
-import org.neo4j.ogm.annotation.StartNode;
-
-/**
- * 关系-鉴别诊断
- *
- * @author Mark Huang
- */
-@Getter
-@Setter
-@RelationshipEntity(type="药品通用名禁忌性别")
-public class Medicine_Gender {
-
-    @StartNode
-    private Medicine medicine;
-
-    @EndNode
-    private Gender gender;
-
-}

+ 57 - 0
src/main/java/com/diagbot/enums/StandConvertEnum.java

@@ -0,0 +1,57 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @author zhoutg
+ * @Description: 标准词转换
+ * @date 2018年10月11日 下午3:33:22
+ */
+
+public enum StandConvertEnum implements KeyedNamed {
+
+    lis(1, "化验"),
+    pacs(2, "辅检"),
+    disease(3, "诊断"),
+    drug(4, "药品"),
+    clinical(5, "临床表现"),
+    operation(6, "手术");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    StandConvertEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static StandConvertEnum getEnum(int key) {
+        for (StandConvertEnum item : StandConvertEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        StandConvertEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+
+}

+ 6 - 8
src/main/java/com/diagbot/facade/BillFacade.java

@@ -12,9 +12,7 @@ import com.diagbot.vo.IndicationPushVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * @Description: 开单合理性facade
@@ -38,7 +36,7 @@ public class BillFacade {
      */
     public void billFac(IndicationPushVO indicationPushVO, WordCrfDTO wordCrfDTO, IndicationDTO res) {
         // 开单合理性图谱接口调用
-        BillNeoVO billNeoVO = fillBillNeo(indicationPushVO);
+        BillNeoVO billNeoVO = fillBillNeo(wordCrfDTO);
 
         List<BillNeoDTO> billNeoDTOList = neoFacade.getBillNeo(billNeoVO);
 
@@ -50,26 +48,26 @@ public class BillFacade {
     }
 
 
-    public BillNeoVO fillBillNeo(IndicationPushVO indicationPushVO) {
+    public BillNeoVO fillBillNeo(WordCrfDTO wordCrfDTO) {
         BillNeoVO billNeoVO = new BillNeoVO();
 
-        List<Item> items = indicationPushVO.getDrugOrder();
+        List<Item> items = wordCrfDTO.getDrugOrder();
 
         for (Item item : items) {
             billNeoVO.getDrugList().put(item.getName(), item.getUniqueName());
         }
 
-        List<Pacs> pacslist = indicationPushVO.getPacs();
+        List<Pacs> pacslist = wordCrfDTO.getPacsOrder();
         for (Pacs pacs : pacslist) {
             billNeoVO.getPacsList().put(pacs.getName(), pacs.getUniqueName());
         }
 
-        List<Lis> lislist = indicationPushVO.getLis();
+        List<Lis> lislist = wordCrfDTO.getLisOrder();
         for (Lis lis : lislist) {
             billNeoVO.getLisList().put(lis.getName(), lis.getUniqueName());
         }
 
-        List<Item> diags = indicationPushVO.getDiag();
+        List<Item> diags = wordCrfDTO.getDiagOrder();
         for (Item item : diags) {
             billNeoVO.getDiagList().put(item.getName(), item.getUniqueName());
         }

+ 6 - 3
src/main/java/com/diagbot/facade/CommonFacade.java

@@ -2,6 +2,7 @@ package com.diagbot.facade;
 
 import com.diagbot.client.CRFServiceClient;
 import com.diagbot.dto.WordCrfDTO;
+import com.diagbot.enums.StandConvertEnum;
 import com.diagbot.model.ai.AIAnalyze;
 import com.diagbot.model.label.ChiefLabel;
 import com.diagbot.model.label.DiagLabel;
@@ -36,6 +37,9 @@ public class CommonFacade {
         wordCrfDTO.setSex(searchData.getSex());
         wordCrfDTO.setLis(searchData.getLis());
         wordCrfDTO.setPacs(searchData.getPacs());
+        wordCrfDTO.setLisOrder(searchData.getLisOrder());
+        wordCrfDTO.setPacsOrder(searchData.getPacsOrder());
+        wordCrfDTO.setDrugOrder(searchData.getDrugOrder());
         aiAnalyze.aiProcess(searchData, wordCrfDTO);
         return wordCrfDTO;
     }
@@ -66,10 +70,9 @@ public class CommonFacade {
     }
 
     //把图谱返回的标准词set到label中
-    public WordCrfDTO dataTypeSet(WordCrfDTO wordCrfDTO, Map<String, Map<String, String>> map){
+    public void dataTypeSet(WordCrfDTO wordCrfDTO, Map<Integer, Map<String, String>> map){
         ChiefLabel chiefLabel = wordCrfDTO.getChiefLabel();
-        CoreUtil.setPropertyList(chiefLabel.getClinicals(),map.get("clinicalList"));
-        return wordCrfDTO;
+        CoreUtil.setPropertyList(chiefLabel.getClinicals(),map.get(StandConvertEnum.clinical.getKey()));
     }
 
 }

+ 2 - 3
src/main/java/com/diagbot/facade/IndicationFacade.java

@@ -39,9 +39,8 @@ public class IndicationFacade {
 
         // 标准词转换
         StandConvert standConvert = commonFacade.dataTypeGet(wordCrfDTO);
-        Map<String, Map<String, String>> standConvertMap = neoFacade.standConvert(standConvert);
-        wordCrfDTO = commonFacade.dataTypeSet(wordCrfDTO, standConvertMap);
-        wordCrfDTO.setStandConvertMap(standConvertMap);
+        Map<Integer, Map<String, String>> standConvertMap = neoFacade.standConvert(standConvert);
+        commonFacade.dataTypeSet(wordCrfDTO, standConvertMap);
 
         List<String> ruleTypeList = Arrays.asList(indicationPushVO.getRuleType().split(","));
 

+ 2 - 2
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -209,9 +209,9 @@ public class NeoFacade {
      *
      * @return  Map<String, Map<String, String>> -->Map<类型, Map<原始词, 标准词>>
      */
-    public Map<String, Map<String, String>> standConvert(StandConvert standConvert) {
+    public Map<Integer, Map<String, String>> standConvert(StandConvert standConvert) {
         // TODO 待处理业务
-        return null;
+        return new HashMap<>();
     }
 
 }

+ 79 - 88
src/main/java/com/diagbot/facade/PushFacade.java

@@ -1,88 +1,79 @@
-package com.diagbot.facade;
-
-import com.diagbot.biz.push.entity.Item;
-import com.diagbot.dto.IndicationDTO;
-import com.diagbot.dto.BillNeoDTO;
-import com.diagbot.dto.WordCrfDTO;
-import com.diagbot.process.BillProcess;
-import com.diagbot.vo.BillNeoVO;
-import com.diagbot.vo.IndicationPushVO;
-import com.diagbot.vo.PushVO;
-import com.diagbot.vo.StandConvert;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * @Description: 推送facade
- * @author: zhoutg
- * @time: 2018/8/6 9:11
- */
-@Component
-public class PushFacade {
-
-    @Autowired
-    NeoFacade neoFacade;
-    @Autowired
-    BillProcess billProcess;
-    @Autowired
-    CommonFacade commonFacade;
-
-    /**
-     * 开单合理性业务
-     * @param
-     * @return
-     */
-    public IndicationDTO billFac(IndicationPushVO indicationPushVO) {
-        // 模型处理数据 TODO
-        WordCrfDTO wordCrfDTO = commonFacade.crf_process(indicationPushVO);
-        StandConvert standConvert = commonFacade.dataTypeGet(wordCrfDTO);
-
-        // 标准词转换 TODO
-        Map<String, Map<String, String>> typeStand = neoFacade.standConvert(standConvert);
-        wordCrfDTO = commonFacade.dataTypeSet(wordCrfDTO, typeStand);
-
-        // 图谱接口调用
-        BillNeoVO billNeoVO = fillBillNeo(indicationPushVO);
-
-        List<BillNeoDTO> billNeoDTOs = neoFacade.getBillNeo(billNeoVO);
-
-        // 规则开发 TODO
-        neoFacade.getDrugCache();
-
-        // TODO
-        return null;
-    }
-
-    /**
-     * 推送业务
-     * @param
-     * @return
-     */
-    public IndicationDTO pushFac(PushVO pushVo) {
-        // 模型处理数据 TODO
-        WordCrfDTO wordCrfDTO = commonFacade.crf_process(pushVo);
-        StandConvert standConvert = commonFacade.dataTypeGet(wordCrfDTO);
-
-        // 标准词转换 TODO
-        Map<String, Map<String, String>> typeStand = neoFacade.standConvert(standConvert);
-        wordCrfDTO = commonFacade.dataTypeSet(wordCrfDTO, typeStand);
-
-        // TODO
-        return null;
-    }
-
-
-    public BillNeoVO fillBillNeo(IndicationPushVO indicationPushVO) {
-        BillNeoVO billNeoVO = new BillNeoVO();
-
-        List<Item> items = indicationPushVO.getDrug();
-        for (Item item : items) {
-            billNeoVO.getDrugList().put(item.getName(), item.getUniqueName());
-        }
-
-        return billNeoVO;
-    }
-}
+// package com.diagbot.facade;
+//
+// import com.diagbot.biz.push.entity.Item;
+// import com.diagbot.dto.IndicationDTO;
+// import com.diagbot.dto.BillNeoDTO;
+// import com.diagbot.dto.WordCrfDTO;
+// import com.diagbot.process.BillProcess;
+// import com.diagbot.vo.BillNeoVO;
+// import com.diagbot.vo.IndicationPushVO;
+// import com.diagbot.vo.PushVO;
+// import com.diagbot.vo.StandConvert;
+// import org.springframework.beans.factory.annotation.Autowired;
+// import org.springframework.stereotype.Component;
+//
+// import java.util.List;
+// import java.util.Map;
+//
+// /**
+//  * @Description: 推送facade
+//  * @author: zhoutg
+//  * @time: 2018/8/6 9:11
+//  */
+// @Component
+// public class PushFacade {
+//
+//     @Autowired
+//     NeoFacade neoFacade;
+//     @Autowired
+//     BillProcess billProcess;
+//     @Autowired
+//     CommonFacade commonFacade;
+//
+//     /**
+//      * 开单合理性业务
+//      * @param
+//      * @return
+//      */
+//     public IndicationDTO billFac(IndicationPushVO indicationPushVO) {
+//         // 模型处理数据 TODO
+//         WordCrfDTO wordCrfDTO = commonFacade.crf_process(indicationPushVO);
+//         StandConvert standConvert = commonFacade.dataTypeGet(wordCrfDTO);
+//
+//         // 标准词转换 TODO
+//         Map<Integer, Map<String, String>> typeStand = neoFacade.standConvert(standConvert);
+//         commonFacade.dataTypeSet(wordCrfDTO, typeStand);
+//
+//         // 图谱接口调用
+//         BillNeoVO billNeoVO = fillBillNeo(indicationPushVO);
+//
+//         List<BillNeoDTO> billNeoDTOs = neoFacade.getBillNeo(billNeoVO);
+//
+//         // 规则开发 TODO
+//         neoFacade.getDrugCache();
+//
+//         // TODO
+//         return null;
+//     }
+//
+//     /**
+//      * 推送业务
+//      * @param
+//      * @return
+//      */
+//     public IndicationDTO pushFac(PushVO pushVo) {
+//         return null;
+//     }
+//
+//
+//     public BillNeoVO fillBillNeo(IndicationPushVO indicationPushVO) {
+//         BillNeoVO billNeoVO = new BillNeoVO();
+//
+//         List<Item> items = indicationPushVO.getDrug();
+//         for (Item item : items) {
+//             billNeoVO.getDrugList().put(item.getName(), item.getUniqueName());
+//         }
+//
+//         return billNeoVO;
+//     }
+// }

+ 18 - 20
src/main/java/com/diagbot/process/BillProcess.java

@@ -12,9 +12,7 @@ import com.diagbot.model.entity.Diag;
 import com.diagbot.model.label.ChiefLabel;
 import com.diagbot.model.label.DiagLabel;
 import com.diagbot.model.label.PresentLabel;
-import com.diagbot.rule.AgeRule;
-import com.diagbot.rule.DiagRule;
-import com.diagbot.rule.SexRule;
+import com.diagbot.rule.*;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.CoreUtil;
 import com.diagbot.util.ListUtil;
@@ -23,8 +21,6 @@ import org.springframework.stereotype.Component;
 import java.util.ArrayList;
 import java.util.List;
 
-// import java.math.BigDecimal;
-
 /**
  * @Description: 开单总入口
  * @author: zhoutg
@@ -45,13 +41,15 @@ public class BillProcess {
             } else if (billNeoDTO.getPacsBillNeoDTO() != null) {
                 BeanUtil.copyProperties(billNeoDTO.getPacsBillNeoDTO(), billNeoMaxDTO);
             }
-            billNeoMaxDTO.setName(billNeoDTO.getName());
+            billNeoMaxDTO.setOrderName(billNeoDTO.getName()); // 开单名称
+            billNeoMaxDTO.setOrderStandName(billNeoDTO.getStandname()); // 开单标准名称
             // 测试数据开始
             // billNeoMaxDTO.setGender("男");
             // billNeoMaxDTO.getAgeNeoDTO().setMax(new BigDecimal(30));
             // billNeoMaxDTO.getAgeNeoDTO().setMin(new BigDecimal(25));
             // 测试数据结束
 
+            System.out.println(billNeoMaxDTO);
             billNeoMaxDTOList.add(billNeoMaxDTO);
         }
         processRule(billNeoMaxDTOList, wordCrfDTO, res);
@@ -80,27 +78,27 @@ public class BillProcess {
         List<BillMsg> billMsgList = new ArrayList<>();
         for (BillNeoMaxDTO bill : billNeoMaxDTOList) {
             // 性别
-            BillMsg sexMsg = SexRule.compareSexWithBill(bill.getGender(), wordCrfDTO, bill.getName());
+            BillMsg sexMsg = SexRule.compareSexWithBill(bill.getGender(), wordCrfDTO, bill);
             CoreUtil.addBeanToList(billMsgList, sexMsg);
 
             // 诊断
-            BillMsg billMsg_disease = DiagRule.compareDiseaseWithBill(bill.getDisease(), diags, bill.getName());
+            BillMsg billMsg_disease = DiagRule.compareDiseaseWithBill(bill.getDisease(), diags, bill);
             CoreUtil.addBeanToList(billMsgList, billMsg_disease);
 
-            // //化验
-            // BillMsg lisMsg = LisPacsRule.compareLisPacsWithBill(drug.getLis(), lis, bill.getName());
-            // CoreUtil.addBeanToList(drugBill, lisMsg);
-            //
-            // //辅检
-            // BillMsg pacsMsg = LisPacsRule.compareLisPacsWithBill(drug.getPacs(), pacs, bill.getName());
-            // CoreUtil.addBeanToList(drugBill, pacsMsg);
-            //
-            // //临床表现
-            // BillMsg clinicalMsg = DiagRule.compareDiseaseWithBill(drug.getClinicfindings(), clinicals, bill.getName());
-            // CoreUtil.addBeanToList(drugBill, clinicalMsg);
+             //化验
+             BillMsg lisMsg = LisRule.compareLisWithBill(bill.getLis(), lis, bill);
+             CoreUtil.addBeanToList(billMsgList, lisMsg);
+
+             //辅检
+            BillMsg pacsMsg = PacsRule.comparePacsWithBill(bill.getPacs(), pacs, bill);
+            CoreUtil.addBeanToList(billMsgList, pacsMsg);
+
+            //临床表现
+            BillMsg clinicalMsg = DiagRule.compareDiseaseWithBill(bill.getClinicfindings(), clinicals, bill);
+            CoreUtil.addBeanToList(billMsgList, clinicalMsg);
 
             // 年龄
-            BillMsg ageMsg = AgeRule.compareAgeWithBill(bill.getAgeNeoDTO(), wordCrfDTO, bill.getName());
+            BillMsg ageMsg = AgeRule.compareAgeWithBill(bill.getAgeNeoDTO(), wordCrfDTO, bill);
             CoreUtil.addBeanToList(billMsgList, ageMsg);
 
         }

+ 21 - 11
src/main/java/com/diagbot/rule/AgeRule.java

@@ -1,7 +1,8 @@
 package com.diagbot.rule;
 
-import com.diagbot.dto.NodeNeoDTO;
 import com.diagbot.dto.BillMsg;
+import com.diagbot.dto.BillNeoMaxDTO;
+import com.diagbot.dto.NodeNeoDTO;
 import com.diagbot.dto.WordCrfDTO;
 import com.diagbot.util.CoreUtil;
 
@@ -19,28 +20,37 @@ public class AgeRule {
      *
      * @param ageNeoDTO
      * @param wordCrfDTO
-     * @param name
+     * @param billNeoMaxDTO
      * @return
      */
-    public static BillMsg compareAgeWithBill(NodeNeoDTO ageNeoDTO, WordCrfDTO wordCrfDTO, String name) {
+    public static BillMsg compareAgeWithBill(NodeNeoDTO ageNeoDTO, WordCrfDTO wordCrfDTO, BillNeoMaxDTO billNeoMaxDTO) {
         Boolean flag = false;
         if (ageNeoDTO != null && wordCrfDTO.getAge() != null) {
             Integer age = wordCrfDTO.getAge();
-            Integer minAge = ageNeoDTO.getMin().intValue();
-            if (minAge != null) {
-                if (age < minAge) {
+            BigDecimal min = ageNeoDTO.getMin();
+            BigDecimal max = ageNeoDTO.getMax();
+
+            if (min != null && max != null) {
+                int minAge = min.intValue();
+                int maxAge = max.intValue();
+                if (minAge <= age && age <= maxAge) {
                     flag = true;
                 }
-            }
-            Integer maxAge = ageNeoDTO.getMax().intValue();
-            if (maxAge != null) {
-                if (age > minAge) {
+            } else if (min != null && max == null) {
+                int minAge = min.intValue();
+                if (minAge <= age) {
+                    flag = true;
+                }
+            } else if (min == null && max != null) {
+                int maxAge = max.intValue();
+                if (age <= maxAge) {
                     flag = true;
                 }
             }
         }
         if (flag) {
-            return CoreUtil.getCommonBillMsg(String.valueOf(wordCrfDTO.getAge() + "岁"), name);
+            return CoreUtil.getCommonBillMsg(billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
+                    String.valueOf(wordCrfDTO.getAge() + "岁"), String.valueOf(wordCrfDTO.getAge() + "岁"));
         }
         return null;
     }

+ 17 - 8
src/main/java/com/diagbot/rule/DiagRule.java

@@ -1,13 +1,20 @@
 package com.diagbot.rule;
 
 import com.diagbot.dto.BillMsg;
+import com.diagbot.dto.BillNeoMaxDTO;
+import com.diagbot.dto.NodeNeoDTO;
 import com.diagbot.model.entity.Negative;
 import com.diagbot.util.CoreUtil;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.neo4j.ogm.annotation.NodeEntity;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @description: 实验室检查和辅助检查规则
@@ -22,22 +29,24 @@ public class DiagRule {
      * @param inputLises
      * @return
      */
-    public static <T> BillMsg compareDiseaseWithBill(List<String> drugLises, List<T> inputLises, String name) {
-        List<String> reports = new ArrayList<>();
-        if(inputLises != null && ListUtil.isNotEmpty(inputLises)){
+    public static <T> BillMsg compareDiseaseWithBill(List<NodeNeoDTO> drugLises, List<T> inputLises, BillNeoMaxDTO billNeoMaxDTO) {
+        Map<String,String> old_stand = new HashMap<>();
+        if(ListUtil.isNotEmpty(drugLises) && ListUtil.isNotEmpty(inputLises)){
+            List<String> dl = drugLises.stream().map(x -> x.getName()).collect(Collectors.toList());
             for (T d:inputLises) {
                 Negative val = (Negative)CoreUtil.getFieldValue(d, "negative");
                 if(val == null){
                     String c = (String) CoreUtil.getFieldValue(d, "standName");
                     String c_name = (String) CoreUtil.getFieldValue(d, "name");
-                    if(StringUtils.isNotBlank(c) && drugLises.contains(c)){
-                        reports.add(c_name);
+                    if(StringUtils.isNotBlank(c) && dl.contains(c)){
+                        old_stand.put(c_name,c);
                     }
                 }
             }
-            if(ListUtil.isNotEmpty(reports)){
-                String message = CoreUtil.listConvertString(reports);
-                BillMsg commonBillMsg = CoreUtil.getCommonBillMsg(message, name);
+            if(old_stand.size() > 0){
+                String message = StringUtils.join(old_stand.keySet(), ",");
+                String standNames = StringUtils.join(old_stand.values().stream().collect(Collectors.toList()),",");
+                BillMsg commonBillMsg = CoreUtil.getCommonBillMsg(billNeoMaxDTO.getOrderName(),billNeoMaxDTO.getOrderStandName(),message,standNames);
                 return commonBillMsg;
             }
         }

+ 0 - 49
src/main/java/com/diagbot/rule/LisPacsRule.java

@@ -1,49 +0,0 @@
-package com.diagbot.rule;
-
-import com.diagbot.biz.push.entity.Lis;
-import com.diagbot.dto.BillMsg;
-import com.diagbot.dto.WordCrfDTO;
-import com.diagbot.model.entity.Diag;
-import com.diagbot.model.entity.Negative;
-import com.diagbot.model.label.DiagLabel;
-import com.diagbot.util.CoreUtil;
-import com.diagbot.util.ListUtil;
-import com.diagbot.util.StringUtil;
-import org.apache.commons.lang3.StringUtils;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @description: 疾病规则
- * @author: kwz
- * @time: 2020/8/3 14:47
- */
-public class LisPacsRule {
-    /**
-     * 比较化验和辅检
-     *
-     * @param drugLis
-     * @param inputLis
-     * @return
-     */
-    public static <T> BillMsg compareLisPacsWithBill(List<String> drugLis, List<T> inputLis, String name) {
-        List<String> tipDiseases = new ArrayList<>();
-        if(ListUtil.isNotEmpty(drugLis) && ListUtil.isNotEmpty(inputLis)){
-            for (T lis:inputLis) {
-                String val = (String)CoreUtil.getFieldValue(lis, "uniqueName");
-                String val_name = (String)CoreUtil.getFieldValue(lis, "name");
-                if(StringUtils.isNotBlank(val) && drugLis.contains(val)){
-                    tipDiseases.add(val_name);
-                }
-            }
-        }
-        if(ListUtil.isNotEmpty(tipDiseases)){
-            String message = CoreUtil.listConvertString(tipDiseases);
-            BillMsg commonBillMsg = CoreUtil.getCommonBillMsg(message, name);
-            return commonBillMsg;
-        }
-        return null;
-    }
-}

+ 64 - 0
src/main/java/com/diagbot/rule/LisRule.java

@@ -0,0 +1,64 @@
+package com.diagbot.rule;
+
+import com.diagbot.biz.push.entity.Lis;
+import com.diagbot.dto.BillMsg;
+import com.diagbot.dto.BillNeoMaxDTO;
+import com.diagbot.dto.NodeNeoDTO;
+import com.diagbot.util.CoreUtil;
+import com.diagbot.util.ListUtil;
+import org.apache.commons.lang3.StringUtils;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @description: 化验规则
+ * @author: kwz
+ * @time: 2020/8/3 14:47
+ */
+public class LisRule {
+    /**
+     * 比较辅检
+     *
+     * @param drugLis
+     * @param inputLis
+     * @return
+     */
+    public static BillMsg compareLisWithBill(List<NodeNeoDTO> drugLis, List<Lis> inputLis, BillNeoMaxDTO billNeoMaxDTO) {
+
+        Map<String,String> old_stand = new HashMap<>();
+        if(ListUtil.isNotEmpty(drugLis) && ListUtil.isNotEmpty(inputLis)){
+            Map<String, BigDecimal> nameMax = drugLis.stream().collect(Collectors.toMap(NodeNeoDTO::getName, NodeNeoDTO::getMax));
+            Map<String, BigDecimal> nameMin = drugLis.stream().collect(Collectors.toMap(NodeNeoDTO::getName, NodeNeoDTO::getMin));
+
+            for (Lis lis:inputLis) {
+                String val =lis.getUniqueName();
+                String val_name = lis.getDetailName();
+
+                if(StringUtils.isNotBlank(val)){
+                    if(nameMax.containsKey(val) && lis.getValue() > nameMax.get(val).doubleValue()){
+                        old_stand.put(val_name,"大于"+lis.getValue().toString());
+                    }
+                    if(nameMin.containsKey(val) && lis.getValue() < nameMin.get(val).doubleValue()){
+                        old_stand.put(val_name,"小于"+lis.getValue().toString());
+                    }
+
+                }
+            }
+        }
+        if(old_stand.size() > 0){
+            String message =null;
+            for (Map.Entry<String,String> ds:old_stand.entrySet()) {
+                message +=ds.getKey()+ds.getValue()+",";
+            }
+//            String message = StringUtils.join(old_stand.keySet(), ",");
+//            String standNames = StringUtils.join(old_stand.values().stream().collect(Collectors.toList()),",");
+            BillMsg commonBillMsg = CoreUtil.getCommonBillMsg(billNeoMaxDTO.getOrderName(),billNeoMaxDTO.getOrderStandName(),message,null);
+            return commonBillMsg;
+        }
+        return null;
+    }
+}

+ 49 - 0
src/main/java/com/diagbot/rule/PacsRule.java

@@ -0,0 +1,49 @@
+package com.diagbot.rule;
+
+import com.diagbot.dto.BillMsg;
+import com.diagbot.dto.BillNeoMaxDTO;
+import com.diagbot.dto.NodeNeoDTO;
+import com.diagbot.util.CoreUtil;
+import com.diagbot.util.ListUtil;
+import org.apache.commons.lang3.StringUtils;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @description: 疾病规则
+ * @author: kwz
+ * @time: 2020/8/3 14:47
+ */
+public class PacsRule {
+    /**
+     * 比较辅检
+     *
+     * @param drugLis
+     * @param inputLis
+     * @return
+     */
+    public static <T> BillMsg comparePacsWithBill(List<NodeNeoDTO> drugLis, List<T> inputLis, BillNeoMaxDTO billNeoMaxDTO) {
+
+        Map<String,String> old_stand = new HashMap<>();
+        if(ListUtil.isNotEmpty(drugLis) && ListUtil.isNotEmpty(inputLis)){
+            List<String> dl = drugLis.stream().map(x -> x.getName()).collect(Collectors.toList());
+            for (T lis:inputLis) {
+                String val = (String)CoreUtil.getFieldValue(lis, "uniqueName");
+                String val_name = (String)CoreUtil.getFieldValue(lis, "name");
+                if(StringUtils.isNotBlank(val) && dl.contains(val)){
+                    old_stand.put(val_name,val);
+                }
+            }
+        }
+        if(old_stand.size() > 0){
+            String message = StringUtils.join(old_stand.keySet(), ",");
+            String standNames = StringUtils.join(old_stand.values().stream().collect(Collectors.toList()),",");
+            BillMsg commonBillMsg = CoreUtil.getCommonBillMsg(billNeoMaxDTO.getOrderName(),billNeoMaxDTO.getOrderStandName(),message,standNames);
+            return commonBillMsg;
+        }
+        return null;
+    }
+}

+ 6 - 3
src/main/java/com/diagbot/rule/SexRule.java

@@ -1,6 +1,7 @@
 package com.diagbot.rule;
 
 import com.diagbot.dto.BillMsg;
+import com.diagbot.dto.BillNeoMaxDTO;
 import com.diagbot.dto.WordCrfDTO;
 import com.diagbot.util.CoreUtil;
 import com.diagbot.util.StringUtil;
@@ -18,7 +19,7 @@ public class SexRule {
      * @param wordCrfDTO
      * @return
      */
-    public static BillMsg compareSexWithBill(String sex, WordCrfDTO wordCrfDTO, String name) {
+    public static BillMsg compareSexWithBill(String sex, WordCrfDTO wordCrfDTO, BillNeoMaxDTO billNeoMaxDTO) {
         if (StringUtil.isNotBlank(sex) && wordCrfDTO.getSex() != null) {
             String sexStr = "";
             if (1 == wordCrfDTO.getSex()) {
@@ -28,9 +29,11 @@ public class SexRule {
             }
             if (sex.equals(sexStr)) {
                 if ("男".equals(sexStr)) {
-                    return CoreUtil.getCommonBillMsg("男性", name);
+                    return CoreUtil.getCommonBillMsg(billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
+                            "男性", "男性");
                 } else if ("女".equals(sexStr)) {
-                    return CoreUtil.getCommonBillMsg("女性", name);
+                    return CoreUtil.getCommonBillMsg(billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
+                            "女性", "女性");
                 }
             }
         }

+ 24 - 3
src/main/java/com/diagbot/util/CoreUtil.java

@@ -169,7 +169,6 @@ public class CoreUtil {
 
     }
 
-
     /**
      * 开单合理性通用提示信息
      *
@@ -177,10 +176,32 @@ public class CoreUtil {
      * @param name 项目名称
      * @return
      */
-    public static BillMsg getCommonBillMsg(String errMsg, String name) {
+    public static BillMsg getCommonBillMsg(String errMsg, String name,String standName) {
         BillMsg billMsg = new BillMsg();
         String msg = String.format(errMsg + ",不宜开%s", name);
         billMsg.setMsg(msg);
+        billMsg.setCompareName(errMsg);
+        billMsg.setCompareStandName(standName);
+        return billMsg;
+    }
+
+    /**
+     * 开单合理性通用提示信息
+     *
+     * @param orderName 原开单项
+     * @param orderStandName 标准开单项
+     * @param compareName 匹配名称
+     * @param compareStandName 匹配标准名称
+     * @return
+     */
+    public static BillMsg getCommonBillMsg(String orderName, String orderStandName, String compareName, String compareStandName) {
+        BillMsg billMsg = new BillMsg();
+        String msg = String.format(compareName + ",不宜开%s", orderName);
+        billMsg.setMsg(msg);
+        billMsg.setCompareName(compareName);
+        billMsg.setCompareStandName(compareStandName);
+        billMsg.setOrderName(orderName);
+        billMsg.setOrderStandName(orderStandName);
         return billMsg;
     }
 
@@ -233,7 +254,7 @@ public class CoreUtil {
 
     public static void main(String[] args) {
 
-        System.out.println(getCommonBillMsg("男性", "尿常规"));
+        System.out.println(getCommonBillMsg("男性", "尿常规",""));
 
         List<Clinical> clinicals = new ArrayList<>();
         Clinical c1 = new Clinical();

+ 2 - 3
src/main/java/com/diagbot/web/CoreController.java

@@ -3,7 +3,6 @@ package com.diagbot.web;
 import com.diagbot.dto.IndicationDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.IndicationFacade;
-import com.diagbot.facade.PushFacade;
 import com.diagbot.vo.IndicationPushVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -28,8 +27,8 @@ public class CoreController {
 
     @Autowired
     private IndicationFacade indicationFacade;
-    @Autowired
-    private PushFacade pushFacade;
+    // @Autowired
+    // private PushFacade pushFacade;
 
     @ApiOperation(value = "开单合理性API[zhoutg]", notes = "ruleType(1:危急值提醒,2:开单合理项,3:管理评估,4:不良反应,5:药物推荐,6:异常值)")
     @PostMapping("/indication")