zhoutg vor 4 Jahren
Ursprung
Commit
c694356ce3
1 geänderte Dateien mit 86 neuen und 27 gelöschten Zeilen
  1. 86 27
      src/main/java/com/diagbot/facade/TestwordInfoFacade.java

+ 86 - 27
src/main/java/com/diagbot/facade/TestwordInfoFacade.java

@@ -62,14 +62,16 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
 
         AIAnalyze aiAnalyze = new AIAnalyze(crfServiceClient);
 
-        RetrievalVO retrievalVO = new RetrievalVO();
-        retrievalVO.setType(9);
-        retrievalVO.setInputStr("");
-        retrievalVO.setSize(10000);
-        RetrievalDTO data = retrievalFacade.index(retrievalVO);
-        List<String> symptomStand = data.getSymptomNames();
+        // 症状标准词
+        List<String> symptomStand = getStandWord(9, 10000).getSymptomNames();
+        // 诊断标准词
+        List<String> diseaseStand = getStandWord(4, 100000).getDiseaseNames().stream().map(r -> r.getName()).collect(Collectors.toList());
+        // 药品标准词
+        List<String> drugStand = getStandWord(5, 100000).getDrugNames().stream().map(r -> r.getName()).collect(Collectors.toList());
+        // 手术标准词
+        List<String> operateStand = getStandWord(6, 100000).getOperationNames().stream().map(r -> r.getName()).collect(Collectors.toList());
 
-        //模型处理数据
+        // 模型处理数据
         WordCrfDTO wordCrfDTO = new WordCrfDTO();
         List<TestwordInfo> testwordInfoList = this.page(new Page<>(1, 100), new QueryWrapper<TestwordInfo>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
@@ -77,6 +79,8 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
                 .orderByAsc("id")).getRecords();
 
         while (ListUtil.isNotEmpty(testwordInfoList)) {
+            List<TestwordRes> insertRes = new ArrayList<>(); // 结果集
+
             Set<String> symptomList = new LinkedHashSet<>();
             Set<String> diseaseList = new LinkedHashSet<>();
             Set<String> drugList = new LinkedHashSet<>();
@@ -88,34 +92,43 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
                 String type = bean.getType();
                 if ("主诉".equals(type) || "现病史".equals(type)) {
                     SearchData searchData = new SearchData();
-                    searchData.setChief(text);
+                    searchData.setSymptom(text);
                     aiAnalyze.aiProcess(searchData, wordCrfDTO);
-                    CoreUtil.addSet(symptomList, CoreUtil.getName(wordCrfDTO.getChiefLabel().getClinicals()));
+                    // 临床表现
+                    CoreUtil.addSet(symptomList, CoreUtil.getName(wordCrfDTO.getPresentLabel().getClinicals()));
+                    // 诊断
+                    CoreUtil.addSet(diseaseList, CoreUtil.getName(wordCrfDTO.getPresentLabel().getDiags()));
+                    // 药品
+                    CoreUtil.addSet(drugList, CoreUtil.getName(wordCrfDTO.getPresentLabel().getMedicines()));
+                    // 手术
+                    CoreUtil.addSet(operateList, CoreUtil.getName(wordCrfDTO.getPresentLabel().getOperations()));
+                    // // 化验
+                    // CoreUtil.addSet(drugList, CoreUtil.getName(wordCrfDTO.getPresentLabel().getDiags()));
+                    // // 辅检
+                    // CoreUtil.addSet(diseaseList, CoreUtil.getName(wordCrfDTO.getPresentLabel().getDiags()));
                 }
             }
 
-            if (symptomList != null && symptomList.size() > 0) {
-                List<TestwordRes> testwordResList = testwordResFacade.list(new QueryWrapper<TestwordRes>()
-                        .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .in("word", symptomList)
-                        .eq("type", "症状")
-                );
-                // 剔除已存在
-                removeWord(symptomList, testwordResList);
-                // 剔除标准
-                symptomList.removeAll(symptomStand);
-                List<TestwordRes> insertSypmotom = stringConvertRes(symptomList, "症状");
-                // 保存
-                if (ListUtil.isNotEmpty(insertSypmotom)) {
-                    testwordResService.saveBatch(insertSypmotom);
-                }
+            // 处理症状
+            dealBusiness(symptomList, "症状", symptomStand, insertRes);
+            // 处理诊断
+            dealBusiness(diseaseList, "诊断", diseaseStand, insertRes);
+            // 处理药品
+            dealBusiness(drugList, "药品", drugStand, insertRes);
+            // 处理手术
+            dealBusiness(operateList, "手术", operateStand, insertRes);
 
-                for (TestwordInfo testwordInfo : testwordInfoList) {
-                    testwordInfo.setIsDeal(1);
-                }
+            // 保存结果
+            if (ListUtil.isNotEmpty(insertRes)) {
+                testwordResService.saveBatch(insertRes);
+            }
+            // 更新处理标记
+            for (TestwordInfo testwordInfo : testwordInfoList) {
+                testwordInfo.setIsDeal(1);
             }
             testwordInfoService.saveOrUpdateBatch(testwordInfoList);
 
+            // 获取下一批数据
             testwordInfoList = this.page(new Page<>(1, 100), new QueryWrapper<TestwordInfo>()
                     .eq("is_deleted", IsDeleteEnum.N.getKey())
                     .eq("is_deal", 0)
@@ -127,6 +140,47 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
         return res;
     }
 
+
+    public RetrievalDTO getStandWord(Integer type, Integer size) {
+        RetrievalVO retrievalVO = new RetrievalVO();
+        retrievalVO.setType(type);
+        retrievalVO.setInputStr("");
+        retrievalVO.setSize(size);
+        return retrievalFacade.index(retrievalVO);
+    }
+
+    /**
+     * 处理业务
+     * @param list
+     * @param type
+     * @param standList
+     */
+    public void dealBusiness(Set<String> list, String type, List<String> standList, List<TestwordRes> insertRes) {
+         if (list != null && list.size() > 0) {
+            List<TestwordRes> testwordResList = testwordResFacade.list(new QueryWrapper<TestwordRes>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .in("word", list)
+                    .eq("type", type)
+            );
+            // 剔除数据库已存在
+            removeWord(list, testwordResList);
+            // 剔除标准
+            list.removeAll(standList);
+            // 转换成实体类
+            List<TestwordRes> insert = stringConvertRes(list, type);
+            // 保存
+            if (ListUtil.isNotEmpty(insert)) {
+                insertRes.addAll(insert);
+            }
+        }
+    }
+
+    /**
+     * string转实体类
+     * @param stringList
+     * @param type
+     * @return
+     */
     public List<TestwordRes> stringConvertRes(Set<String> stringList, String type) {
         List<TestwordRes> res = new ArrayList<>();
         for (String s : stringList) {
@@ -138,6 +192,11 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
         return res;
     }
 
+    /**
+     * 剔除数据库已存在的数据
+     * @param stringList
+     * @param testwordResList
+     */
     public void removeWord(Set<String> stringList, List<TestwordRes> testwordResList) {
         if (ListUtil.isEmpty(testwordResList)) {
             return ;