zhoutg před 4 roky
rodič
revize
640bd6f1dc

+ 85 - 34
src/main/java/com/diagbot/facade/TestwordInfoFacade.java

@@ -10,7 +10,6 @@ import com.diagbot.dto.WordCrfDTO;
 import com.diagbot.entity.TestwordInfo;
 import com.diagbot.entity.TestwordRes;
 import com.diagbot.enums.IsDeleteEnum;
-import com.diagbot.model.ai.AIAnalyze;
 import com.diagbot.service.TestwordInfoService;
 import com.diagbot.service.TestwordResService;
 import com.diagbot.service.impl.TestwordInfoServiceImpl;
@@ -55,38 +54,39 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
     TestFacade testFacade;
     @Autowired
     RetrievalFacade retrievalFacade;
-    int getWordSize = 100;
+    @Autowired
+    CommonFacade commonFacade;
+    int getWordBatch = 100; // 每批次读取的数据行数
+    int standConverSize = 100000; // 标准词返回的数量
 
     public Map getWord() {
         Map<String, String> res = new LinkedHashMap<>();
         Long start = System.currentTimeMillis();
 
-        AIAnalyze aiAnalyze = new AIAnalyze(crfServiceClient);
-
         // 症状标准词
-        List<String> symptomStand = getStandWord(9, 100000).getSymptomNames();
+        List<String> symptomStand = getStandWord(9, standConverSize).getSymptomNames();
         // 诊断标准词
-        List<String> diseaseStand = getStandWord(4, 100000).getDiseaseNames().stream().map(r -> r.getName()).collect(Collectors.toList());
+        List<String> diseaseStand = getStandWord(4, standConverSize).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> drugStand = getStandWord(5, standConverSize).getDrugNames().stream().map(r -> r.getName()).collect(Collectors.toList());
         // 手术标准词
-        List<String> operateStand = getStandWord(6, 100000).getOperationNames().stream().map(r -> r.getName()).collect(Collectors.toList());
+        List<String> operateStand = getStandWord(6, standConverSize).getOperationNames().stream().map(r -> r.getName()).collect(Collectors.toList());
         // 化验套餐标准词
-        List<String> lisItem = getStandWord(1, 100000).getLisNames();
+        List<String> lisItem = getStandWord(1, standConverSize).getLisNames();
         // 化验明细标准词
-        List<String> lisDetail = getStandWord(2, 100000).getLisDetailNames().stream().map(r -> r.getUniqueName()).collect(Collectors.toList());
+        List<String> lisDetail = getStandWord(2, standConverSize).getLisDetailNames().stream().map(r -> r.getUniqueName()).collect(Collectors.toList());
         // 化验标准词
         List<String> lisStand = new ArrayList<>();
         lisStand.addAll(lisItem);
         lisStand.addAll(lisDetail);
         // 查体标准词
-        List<String> vitalStand = getStandWord(10, 100000).getOperationNames().stream().map(r -> r.getName()).collect(Collectors.toList());
+        List<String> vitalStand = getStandWord(10, standConverSize).getVitalNames();
         // 辅检结果标准词
         List<String> pacsResStand = new ArrayList<>();
 
         // 模型处理数据
         WordCrfDTO wordCrfDTO = new WordCrfDTO();
-        List<TestwordInfo> testwordInfoList = this.page(new Page<>(1, getWordSize), new QueryWrapper<TestwordInfo>()
+        List<TestwordInfo> testwordInfoList = this.page(new Page<>(1, getWordBatch), new QueryWrapper<TestwordInfo>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("is_deal", 0)
                 .orderByAsc("id")).getRecords();
@@ -109,7 +109,7 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
                     case "主诉":
                     case "现病史":
                         searchData.setSymptom(text);
-                        aiAnalyze.aiProcess(searchData, wordCrfDTO);
+                        wordCrfDTO = commonFacade.crf_process(searchData);
                         // 临床表现
                         CoreUtil.addSet(symptomList, CoreUtil.getName(wordCrfDTO.getPresentLabel().getClinicals()));
                         // 诊断
@@ -126,7 +126,7 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
                         break;
                     case "既往史":
                         searchData.setPasts(text);
-                        aiAnalyze.aiProcess(searchData, wordCrfDTO);
+                        wordCrfDTO = commonFacade.crf_process(searchData);
                         // 诊断
                         CoreUtil.addSet(diseaseList, CoreUtil.getName(wordCrfDTO.getPastLabel().getDiags()));
                         // 药品
@@ -136,14 +136,14 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
                         break;
                     case "专科体格检查":
                         searchData.setVital(text);
-                        aiAnalyze.aiProcess(searchData, wordCrfDTO);
+                        wordCrfDTO = commonFacade.crf_process(searchData);
                         // 查体
                         CoreUtil.addSet(vitalList, CoreUtil.getName(wordCrfDTO.getVitalLabel().getVitals()));
                         CoreUtil.addSet(vitalList, CoreUtil.getName(wordCrfDTO.getVitalLabel().getClinicals()));
                         break;
                     case "辅助检查":
                         searchData.setSymptom(text);
-                        aiAnalyze.aiProcess(searchData, wordCrfDTO);
+                        wordCrfDTO = commonFacade.crf_process(searchData);
                         // 化验
                         CoreUtil.addSet(lisList, CoreUtil.getName(wordCrfDTO.getLis()));
                         CoreUtil.addSet(lisList, getDetail(wordCrfDTO.getLis()));
@@ -153,7 +153,7 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
                     case "初步诊断":
                     case "修正诊断":
                         searchData.setDiagString(text);
-                        aiAnalyze.aiProcess(searchData, wordCrfDTO);
+                        wordCrfDTO = commonFacade.crf_process(searchData);
                         // 诊断
                         CoreUtil.addSet(diseaseList, CoreUtil.getName(wordCrfDTO.getDiag()));
                         break;
@@ -186,15 +186,18 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
             testwordInfoService.saveOrUpdateBatch(testwordInfoList);
 
             // 获取下一批数据
-            testwordInfoList = this.page(new Page<>(1, getWordSize), new QueryWrapper<TestwordInfo>()
+            testwordInfoList = this.page(new Page<>(1, getWordBatch), new QueryWrapper<TestwordInfo>()
                     .eq("is_deleted", IsDeleteEnum.N.getKey())
                     .eq("is_deal", 0)
                     .orderByAsc("id")).getRecords();
-            break;
         }
 
+        long mid = System.currentTimeMillis();
+        res.put("提词耗时", (mid - start) / 1000.0 + "秒");
+
+        wordConvert();
         long end = System.currentTimeMillis();
-        res.put("执行时间", (end - start) / 1000.0 + "秒");
+        res.put("同义词转换耗时", (end - mid) / 1000.0 + "秒");
         return res;
     }
 
@@ -263,6 +266,9 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
         stringList.removeAll(setList);
     }
 
+    /**
+     * 同义词转换
+     */
     public void wordConvert() {
         List<TestwordRes> testwordInfoList = testwordResService.page(new Page<>(1, 20), new QueryWrapper<TestwordRes>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
@@ -274,10 +280,34 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
             for (TestwordRes testwordRes : testwordInfoList) {
                 StandConvertCrfVO standConvertCrfVO = new StandConvertCrfVO();
                 standConvertCrfVO.setWord(testwordRes.getWord());
+                standConvertCrfVO.setNumber(3);
                 switch (testwordRes.getType()) {
                     case "症状":
                         standConvertCrfVO.setWord_type("symptom");
-                        standConvertCrfVO.setNumber(3);
+                        convertCrfVOList.add(standConvertCrfVO);
+                        break;
+                    case "诊断":
+                        standConvertCrfVO.setWord_type("disease");
+                        convertCrfVOList.add(standConvertCrfVO);
+                        break;
+                    case "药品":
+                        standConvertCrfVO.setWord_type("drug");
+                        convertCrfVOList.add(standConvertCrfVO);
+                        break;
+                    case "手术":
+                        standConvertCrfVO.setWord_type("operation");
+                        convertCrfVOList.add(standConvertCrfVO);
+                        break;
+                    case "查体":
+                        standConvertCrfVO.setWord_type("vital");
+                        convertCrfVOList.add(standConvertCrfVO);
+                        break;
+                    // case "辅检结果":
+                    //     standConvertCrfVO.setWord_type("pacs");
+                    //     convertCrfVOList.add(standConvertCrfVO);
+                    //     break;
+                    case "化验":
+                        standConvertCrfVO.setWord_type("lis");
                         convertCrfVOList.add(standConvertCrfVO);
                         break;
                     default:
@@ -286,21 +316,27 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
             }
             StandConvertCrfBatchDTO standConvertCrfBatchDTO = testFacade.testStandConvertBatch(convertCrfVOList);
             for (TestwordRes testwordRes : testwordInfoList) {
-                Set<String> symptomType = new LinkedHashSet<>();
                 switch (testwordRes.getType()) {
                     case "症状":
-                        Map<String, StandConvertCrfDTO> convertCrfDTOMap = standConvertCrfBatchDTO.getData().get("symptom");
-                        if (convertCrfDTOMap != null && convertCrfDTOMap.get(testwordRes.getWord()) != null) {
-                            List<Map<String,String>> listMap = convertCrfDTOMap.get(testwordRes.getWord()).getStandard_words();
-                            int size = 0;
-                            for (Map<String,String> map : listMap) {
-                                if (size < 3 && StringUtil.isNotBlank(map.get("standard_word"))) {
-                                    symptomType.add(map.get("standard_word"));
-                                }
-                                size++;
-                            }
-                            testwordRes.setConvertWord(StringUtils.join(symptomType, ";"));
-                        }
+                        wordStandConvert(standConvertCrfBatchDTO, testwordRes, "symptom");
+                        break;
+                    case "诊断":
+                        wordStandConvert(standConvertCrfBatchDTO, testwordRes, "disease");
+                        break;
+                    case "药品":
+                        wordStandConvert(standConvertCrfBatchDTO, testwordRes, "drug");
+                        break;
+                    case "手术":
+                        wordStandConvert(standConvertCrfBatchDTO, testwordRes, "operation");
+                        break;
+                    case "查体":
+                        wordStandConvert(standConvertCrfBatchDTO, testwordRes, "vital");
+                        break;
+                    // case "辅检结果":
+                    //     wordStandConvert(standConvertCrfBatchDTO, testwordRes, "pacs");
+                    //     break;
+                    case "化验":
+                        wordStandConvert(standConvertCrfBatchDTO, testwordRes, "lis");
                         break;
                     default:
                         break;
@@ -316,6 +352,21 @@ public class TestwordInfoFacade extends TestwordInfoServiceImpl {
         }
     }
 
+    public void wordStandConvert(StandConvertCrfBatchDTO standConvertCrfBatchDTO, TestwordRes testwordRes, String type) {
+        Set<String> typeList = new LinkedHashSet<>();
+        Map<String, StandConvertCrfDTO> convertCrfDTOMap = standConvertCrfBatchDTO.getData().get(type);
+        if (convertCrfDTOMap != null && convertCrfDTOMap.get(testwordRes.getWord()) != null) {
+            List<Map<String,String>> listMap = convertCrfDTOMap.get(testwordRes.getWord()).getStandard_words();
+            int size = 0;
+            for (Map<String,String> map : listMap) {
+                if (size < 3 && StringUtil.isNotBlank(map.get("standard_word"))) {
+                    typeList.add(map.get("standard_word"));
+                }
+                size++;
+            }
+            testwordRes.setConvertWord(StringUtils.join(typeList, ";"));
+        }
+    }
 
     /**
      * 筛选对象列表中“uniqueName”字段为空的数据,返回targetProperty字段列表