浏览代码

诊断依据规则

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

+ 3 - 0
src/main/java/com/diagbot/config/CacheDeleteInit.java

@@ -32,6 +32,9 @@ public class CacheDeleteInit implements CommandLineRunner {
         cacheFacade.loadDrugTypeCache();
         log.info("CDSS-CORE服务启动加载药品类型对应关系缓存成功!");
 
+        cacheFacade.loadAllBaseDiagnoseCache();
+        log.info("CDSS-CORE服务启动加载诊断依据缓存成功!");
+
 //        cacheFacade.getDiseaseCorrespondCache();
 //        log.info("CDSS-CORE服务启动加载疾病对应ICD10缓存成功!");
 //

+ 6 - 0
src/main/java/com/diagbot/dto/WordCrfDTO.java

@@ -102,6 +102,12 @@ public class WordCrfDTO {
     private String pasts = "";
     // 月经史
     private String menstrual = "";
+    // 个人史
+    private String personal = "";
+    // 婚育史
+    private String marital = "";
+    // 家族史
+    private String family = "";
 
     // 【诊断数据来源】
     private List<Item> diagSource = new ArrayList<>();

+ 9 - 0
src/main/java/com/diagbot/facade/CommonFacade.java

@@ -135,6 +135,15 @@ public class CommonFacade {
         if (StringUtil.isNotBlank(searchData.getMenstrual())) {
             wordCrfDTO.setMenstrual(searchData.getMenstrual());
         }
+        if (StringUtil.isNotBlank(searchData.getFamily())) {
+            wordCrfDTO.setFamily(searchData.getFamily());
+        }
+        if (StringUtil.isNotBlank(searchData.getMarital())) {
+            wordCrfDTO.setMarital(searchData.getMarital());
+        }
+        if (StringUtil.isNotBlank(searchData.getPersonal())) {
+            wordCrfDTO.setPersonal(searchData.getPersonal());
+        }
 
         //模型处理数据
         aiAnalyze.aiProcess(searchData, wordCrfDTO);

+ 19 - 6
src/main/java/com/diagbot/process/PushProcess.java

@@ -32,11 +32,13 @@ import com.diagbot.facade.TranLisConfigIcssFacade;
 import com.diagbot.model.entity.Clinical;
 import com.diagbot.model.entity.Operation;
 import com.diagbot.model.label.ChiefLabel;
-import com.diagbot.model.label.PacsLabel;
 import com.diagbot.model.label.PastLabel;
 import com.diagbot.model.label.PresentLabel;
+import com.diagbot.rule.AgeRule;
 import com.diagbot.rule.CommonRule;
+import com.diagbot.rule.GroupRule;
 import com.diagbot.rule.LisRule;
+import com.diagbot.rule.VitalRule;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.CoreUtil;
 import com.diagbot.util.ListUtil;
@@ -59,6 +61,7 @@ import org.springframework.stereotype.Component;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
@@ -92,6 +95,12 @@ public class PushProcess {
     LisRule lisRule;
     @Autowired
     KlDiagnoseFacade klDiagnoseFacade;
+    @Autowired
+    AgeRule ageRule;
+    @Autowired
+    VitalRule vitalRule;
+    @Autowired
+    GroupRule groupRule;
 
 
     public PushDTO processIcss(PushVO pushVo) {
@@ -381,7 +390,7 @@ public class PushProcess {
      * @param wordCrfDTO
      */
     public void pushDiagnose(WordCrfDTO wordCrfDTO, PushDTO pushDTO) {
-        // 读取所有的诊断依据规则——已去重处理
+        // 读取所有的诊断依据规则——已去重
         List<BaseDiagnoseDTO> diagnoselist = redisUtil.get(RedisEnum.allBaseDiagnose.getName());
         // 匹配的诊断依据规则
         List<Long> baseIdList = new ArrayList<>();
@@ -396,9 +405,6 @@ public class PushProcess {
         List<Item> medicineAll = wordCrfDTO.getDrugSource();
         // 【诊断数据来源】
         List<Item> diags = wordCrfDTO.getDiagSource();
-        // 【辅检结果数据来源】
-        PacsLabel pacsLabel = wordCrfDTO.getPacsLabel();
-        List<Item> pacsDescList = pacsLabel.getRes();
         // 【手术数据来源】
         List<Operation> operations_all = new ArrayList<>();
         List<Item> operation = wordCrfDTO.getOperation();
@@ -437,6 +443,7 @@ public class PushProcess {
                         case Group: // 人群
                             break;
                         case PacsResult: // 辅助检查结果
+                            commonRule.compareItemWithPush(wordCrfDTO.getPacsLabel().getRes(), ruleBaseDTO, baseIdList, baseIds);
                             break;
                     }
                     break;
@@ -446,18 +453,24 @@ public class PushProcess {
                             lisRule.push(wordCrfDTO.getLis(), ruleBaseDTO, baseIdList, baseIds);
                             break;
                         case Age: // 年龄
+                            ageRule.push(wordCrfDTO, ruleBaseDTO, baseIdList, baseIds);
                             break;
-                        case VitalResult: // 体格检查结果
+                        case Vital: // 体格检查项目
                             break;
                     }
                     break;
                 case B3: // 主诉现病史正则
+                    commonRule.getRegexResPush(wordCrfDTO.getChief() + wordCrfDTO.getSymptom(),
+                            base.getBaseEqValue(), baseIdList, baseIds);
                     break;
                 case B4: // 既往史正则
+                    commonRule.getRegexResPush(wordCrfDTO.getPasts() + wordCrfDTO.getPersonal() + wordCrfDTO.getMenstrual() + wordCrfDTO.getMarital() + wordCrfDTO.getFamily(),
+                            base.getBaseEqValue(), baseIdList, baseIds);
                     break;
             }
         }
         // 根据诊断依据推送诊断
+        Collections.sort(baseIdList); // id排序,方便调试查看
         pushDTO.getDebug().put("诊断依据ID列表", StringUtils.join(baseIdList, ","));
         Map<String, List<PushBaseDTO>> pushDiagnoseDTO = setPushDiagnose(wordCrfDTO, baseIdList);
         pushDTO.setDis(pushDiagnoseDTO);

+ 15 - 0
src/main/java/com/diagbot/rule/AgeRule.java

@@ -37,6 +37,21 @@ public class AgeRule {
         }
     }
 
+    /**
+     * 比较年龄——推送
+     *
+     * @param wordCrfDTO
+     * @param ruleBaseDTO
+     * @param baseIdList
+     * @param ids
+     */
+    public void push(WordCrfDTO wordCrfDTO, RuleBaseDTO ruleBaseDTO, List<Long> baseIdList, String ids) {
+        Boolean flag = getFlag(wordCrfDTO, ruleBaseDTO);
+        if (flag) {
+            CoreUtil.addSplitString(baseIdList, ids);
+        }
+    }
+
     /**
      * 比较年龄——高危手术
      *

+ 37 - 1
src/main/java/com/diagbot/rule/CommonRule.java

@@ -139,7 +139,7 @@ public class CommonRule {
     }
 
     /**
-     * 比较名称是否匹配
+     * 比较名称是否匹配——开单
      *
      * @param input
      * @param ruleBaseDTO
@@ -164,6 +164,27 @@ public class CommonRule {
         }
     }
 
+    /**
+     * 比较名称是否匹配——推理
+     *
+     * @param input
+     * @param ruleBaseDTO
+     * @param baseIdList
+     * @param ids
+     * @param <T>
+     */
+    public <T> void compareItemWithPush(List<T> input, RuleBaseDTO ruleBaseDTO, List<Long> baseIdList, String ids) {
+        if (ListUtil.isNotEmpty(input)) {
+            for (T t : input) {
+                String c = (String) CoreUtil.getFieldValue(t, "uniqueName"); // 标准名称
+                String c_name = (String) CoreUtil.getFieldValue(t, "name"); // 界面名称
+                if (CoreUtil.compareName(ruleBaseDTO, c)) {
+                    CoreUtil.addSplitString(baseIdList, ids);
+                }
+            }
+        }
+    }
+
     /**
      * 比较名称是否匹配
      *
@@ -222,6 +243,21 @@ public class CommonRule {
         }
     }
 
+    /**
+     * 正则匹配——推送
+     *
+     * @param content 文本内容
+     * @param regex   表达式
+     * @return
+     */
+    public void getRegexResPush(String content, String regex, List<Long> baseIdList, String ids) {
+        // 是否有符合的数据
+        boolean flag = getRegexRes(content, regex);
+        if (flag) {
+            CoreUtil.addSplitString(baseIdList, ids);
+        }
+    }
+
     /**
      * 是否有符合的数据(公共方法)
      *