Преглед изворни кода

Merge remote-tracking branch 'origin/master'

MarkHuang пре 4 година
родитељ
комит
5f4c0846bb

+ 40 - 5
src/main/java/com/diagbot/facade/CommonFacade.java

@@ -6,6 +6,7 @@ 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.entity.Pacs;
 import com.diagbot.model.entity.PacsNew;
 import com.diagbot.model.label.*;
 import com.diagbot.util.CoreUtil;
@@ -34,6 +35,8 @@ public class CommonFacade {
     CRFServiceClient crfServiceClient;
     @Autowired
     LisConfigFacade lisConfigFacade;
+    @Autowired
+    PacsConfigFacade pacsConfigFacade;
 
     //组装好的label
     public WordCrfDTO crf_process(SearchData searchData) {
@@ -68,9 +71,8 @@ public class CommonFacade {
             wordCrfDTO.setDiag(searchData.getDiag());
         }
         aiAnalyze.aiProcess(searchData, wordCrfDTO);
-        List<Lis> lisList = processPresentLisPacs(wordCrfDTO);
-        wordCrfDTO.getLis().addAll(lisList);
-        wordCrfDTO.setLis(wordCrfDTO.getLis());
+
+        processPresentLisPacs(wordCrfDTO);
         return wordCrfDTO;
     }
 
@@ -274,7 +276,7 @@ public class CommonFacade {
         return pushVO;
     }
 
-    public List<Lis> processPresentLisPacs(WordCrfDTO wordCrfDTO){
+    public void processPresentLisPacs(WordCrfDTO wordCrfDTO){
         PresentLabel presentLabel = wordCrfDTO.getPresentLabel();
         List<com.diagbot.model.entity.Lis> lises = presentLabel.getLises();
         List<Lis> lisList = new ArrayList<>();
@@ -325,7 +327,40 @@ public class CommonFacade {
                 });
             }
         }
-        return lisList;
+        //处理辅检
+        List<PacsNew> packagePacs = new ArrayList<>();
+        List<PacsNew> pacsNewList = wordCrfDTO.getPresentLabel().getPacsNewList();
+        if(ListUtil.isNotEmpty(pacsNewList)){
+            List<String> pacsNames = pacsNewList.stream().map(x -> x.getName()).collect(Collectors.toList());
+            Map<String, Map<String, Long>> configMap = pacsConfigFacade.getConfigMap(wordCrfDTO.getHospitalId(), pacsNames, null);
+            if(configMap.size() > 0){
+                pacsNewList.stream().forEach(pacsNew ->{
+                    String name = pacsNew.getName();
+                    List<Pacs> disease = pacsNew.getDisease();
+                    List<Pacs> pacsResults = pacsNew.getPacsResults();
+                    if(configMap.containsKey(name)){
+                        Map<String, Long> uinqueNameMap = configMap.get(name);
+                        List<PacsNew> collect = uinqueNameMap.keySet().stream().map(x -> {
+                            PacsNew pan = new PacsNew();
+                            pan.setName(name);
+                            pan.setUniqueName(x);
+                            pan.setPacsResults(pacsResults);
+                            pan.setDisease(disease);
+                            return pan;
+                        }).collect(Collectors.toList());
+                        packagePacs.addAll(collect);
+                    }
+                });
+            }else {
+                packagePacs.addAll(pacsNewList);
+            }
+        }
+        wordCrfDTO.getLis().addAll(lisList);
+        wordCrfDTO.setLis(wordCrfDTO.getLis());
+
+        PacsLabel pacsLabel = wordCrfDTO.getPacsLabel();
+        pacsLabel.getPacsNewList().addAll(packagePacs);
+        wordCrfDTO.setPacsLabel(pacsLabel);
     }
 }
 

+ 12 - 7
src/main/java/com/diagbot/facade/TestFacade.java

@@ -93,13 +93,13 @@ public class TestFacade {
 
             if (StringUtil.isNotEmpty(bean.getNeoType())) {
                 switch (bean.getNeoType()) {
-                    case "1" : // 性别
-                        if ("男性".equals(bean.getNeoName())) {
-                            indicationPushVO.setSex(1);
-                        } else if ("女性".equals(bean.getNeoName())) {
-                            indicationPushVO.setSex(2);
-                        }
-                        break;
+                    // case "1" : // 性别
+                    //     if ("男性".equals(bean.getNeoName())) {
+                    //         indicationPushVO.setSex(1);
+                    //     } else if ("女性".equals(bean.getNeoName())) {
+                    //         indicationPushVO.setSex(2);
+                    //     }
+                    //     break;
                     // case "2" : // 化验, 示例:血小板计数,<,50,*10~9L
                     //     String lisStr = bean.getNeoName();
                     //     String[] lisArr = lisStr.split(",");
@@ -124,6 +124,11 @@ public class TestFacade {
                     //     diag.add(diagItem);
                     //     indicationPushVO.setDiag(diag);
                     //     break;
+                    case "6" : // 服用药品
+                        StringBuffer symptom = new StringBuffer("发病来,神志清,精神可,胃纳一般,睡眠可,二便无殊。一直服用");
+                        symptom.append(bean.getNeoName()).append("。");
+                        indicationPushVO.setSymptom(symptom.toString());
+                        break;
                     // case "12" : // 体征
                     //     String[] vitalArr = bean.getNeoName().split(",");
                     //     StringBuffer sbVital = new StringBuffer();

+ 12 - 1
src/main/java/com/diagbot/model/ai/BeHospitalizedAI.java

@@ -19,6 +19,7 @@ import org.springframework.stereotype.Component;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -306,6 +307,8 @@ public class BeHospitalizedAI extends ModelAI {
         presentLabel.setText(wordCrfDTO.getPresentLabel().getText());
         List<Lis> lis = loadLises(aiOut);
         presentLabel.setLises(lis);
+//        EntityProcessPacsNew entityProcessPacsNew = new EntityProcessPacsNew();
+//        entityProcessPacsNew.extractEntity(aiOut, wordCrfDTO.getPacsLabel());
         wordCrfDTO.setPresentLabel(presentLabel);
     }
 
@@ -664,6 +667,14 @@ public class BeHospitalizedAI extends ModelAI {
             return;
         }
         EntityProcessPacsNew entityProcessPacsNew = new EntityProcessPacsNew();
-        entityProcessPacsNew.extractEntity(aiOut, pacsLabel);
+        Map<String, PacsNew> map = entityProcessPacsNew.extractEntity(aiOut);
+
+        List<PacsNew> pacsNewList = pacsLabel.getPacsNewList();
+        for (PacsNew p : pacsNewList) {
+            if (map.get(p.getName()) != null) {
+                p.setPacsResults(map.get(p.getName()).getPacsResults());
+                p.setDisease(map.get(p.getName()).getDisease());
+            }
+        }
     }
 }

+ 12 - 0
src/main/java/com/diagbot/model/ai/process/EntityProcessClinic.java

@@ -12,6 +12,7 @@ import org.slf4j.LoggerFactory;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 现病史处理
@@ -97,6 +98,17 @@ public class EntityProcessClinic extends EntityProcess {
 //            EntityProcessPacs entityProcessLis = new EntityProcessPacs();
 //            List<Pacs> pacses = entityProcessLis.extractEntity(aiOut);
 //            presentLabel.setPacses(pacses);
+            EntityProcessPacsNew entityProcessPacsNew = new EntityProcessPacsNew();
+            Map<String, PacsNew> pacsNewMap = entityProcessPacsNew.extractEntity(aiOut);
+            List<PacsNew> collect = new ArrayList<>();
+            if(pacsNewMap.size() > 0){
+                pacsNewMap.forEach((item,pacsNew)->{
+                    pacsNew.setName(item);
+                    pacsNew.setResult(presentLabel.getText());
+                    collect.add(pacsNew);
+                });
+            }
+            presentLabel.setPacsNewList(collect);
 
             //治疗
             List<Lemma> cureLemmas = createEntityTree(aiOut, EntityEnum.CURE.toString());

+ 3 - 8
src/main/java/com/diagbot/model/ai/process/EntityProcessPacsNew.java

@@ -22,7 +22,7 @@ import java.util.Map;
  */
 public class EntityProcessPacsNew extends EntityProcess {
 
-    public void extractEntity(JSONObject aiOut, PacsLabel pacsLabel) {
+    public Map<String, PacsNew>  extractEntity(JSONObject aiOut) {
         // 获取描述和部位的关系
         Map<String, List<BodyPart>> bodyMap = new LinkedHashMap<>();
         List<Lemma> pacsLemmas = createEntityTree(aiOut, EntityEnum.AUXILIARY_DESCRIPT.toString());
@@ -71,13 +71,8 @@ public class EntityProcessPacsNew extends EntityProcess {
             }
             map.put(lemma.getText(), pacs);
         }
-        List<PacsNew> pacsNewList = pacsLabel.getPacsNewList();
-        for (PacsNew p : pacsNewList) {
-            if (map.get(p.getName()) != null) {
-                p.setPacsResults(map.get(p.getName()).getPacsResults());
-                p.setDisease(map.get(p.getName()).getDisease());
-            }
-        }
+        return map;
+
     }
 
     /**

+ 2 - 1
src/main/java/com/diagbot/model/label/PresentLabel.java

@@ -19,7 +19,8 @@ public class PresentLabel extends GeneralLabel {
     //临床表现
     private List<Clinical> clinicals = new ArrayList<>();
     //辅助检查
-    private List<Pacs> pacses;
+//    private List<Pacs> pacses;
+    List<PacsNew> pacsNewList = new ArrayList<>(); // 辅检信息
     //化验
     private List<Lis> lises;
     //治疗

+ 41 - 1
src/main/java/com/diagbot/rule/DrugRule.java

@@ -22,7 +22,7 @@ import java.util.stream.Collectors;
 public class DrugRule {
 
     /**
-     * 比较药品是否存在(图谱返回的是药品大类,需要从缓存中获取大类对应的药品名称)
+     * 比较药品是否存在(图谱返回的是药品通用名,直接比较)
      *
      * @param drugLises
      * @param inputLises
@@ -31,6 +31,46 @@ public class DrugRule {
     public static <T> void compareDrugWithBill(List<NodeNeoDTO> drugLises, List<T> inputLises, BillNeoMaxDTO billNeoMaxDTO,
                                                List<BillMsg> billMsgList, Map<String, List<String>> drugMap, String type) {
         Map<String, String> old_stand = new HashMap<>();
+        if (ListUtil.isNotEmpty(drugLises) && ListUtil.isNotEmpty(inputLises)) {
+            List<String> allDrug = 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) && allDrug.contains(c)) {
+                        old_stand.put(c_name, c);
+                    }
+                }
+            }
+            if (old_stand.size() > 0) {
+                for (Map.Entry<String, String> d : old_stand.entrySet()) {
+                    String message = "";
+                    if ("禁忌过敏药品".equals(type)) {
+                        message = d.getKey() + "过敏";
+                    } else {
+                        message = "已开" + d.getKey();
+                    }
+                    BillMsg commonBillMsg = CoreUtil.getCommonBillMsg(
+                            billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
+                            message, type);
+                    billMsgList.add(commonBillMsg);
+                }
+            }
+        }
+    }
+
+
+    /**
+     * 比较药品是否存在(图谱返回的是药品大类,需要从缓存中获取大类对应的药品名称)
+     *
+     * @param drugLises
+     * @param inputLises
+     * @return
+     */
+    public static <T> void compareDrugWithBillWithType(List<NodeNeoDTO> drugLises, List<T> inputLises, BillNeoMaxDTO billNeoMaxDTO,
+                                               List<BillMsg> billMsgList, Map<String, List<String>> drugMap, String type) {
+        Map<String, String> old_stand = new HashMap<>();
         if (ListUtil.isNotEmpty(drugLises) && ListUtil.isNotEmpty(inputLises)) {
             List<String> drugType = drugLises.stream().map(x -> x.getName()).collect(Collectors.toList());
             List<String> allDrug = new ArrayList<>(); // 所有的药品名称

+ 2 - 4
src/main/java/com/diagbot/vo/TestIndicationVO.java

@@ -170,15 +170,13 @@ public class TestIndicationVO implements Serializable {
 
 
     /************************************************扩展字段开始***********************/
-    @Excel(name="1.实验室检查," +
-            "2辅助检查," +
-            "3手术和操作")
+    @Excel(name="开单项类型")
     private String orderType;
     @Excel(name="标准名称")
     private String standName;
     @Excel(name="内容标准名称")
     private String neoName;
-    @Excel(name="1性别,2实验室检查,3临床表现,4辅助检查描述,5疾病,6服用药品,7药物过敏原,8食物过敏原,9手术,10人群,11过敏原,12体征,13医疗器械及物品")
+    @Excel(name="禁忌类型")
     private String neoType;
     @Excel(name="序号")
     private String idNum;