diff --git a/virtual-patient-web/src/test/java/com/supervision/RedisVecTest.java b/virtual-patient-web/src/test/java/com/supervision/RedisVecTest.java new file mode 100644 index 00000000..d0155073 --- /dev/null +++ b/virtual-patient-web/src/test/java/com/supervision/RedisVecTest.java @@ -0,0 +1,91 @@ +package com.supervision; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.json.JSONUtil; +import cn.hutool.poi.excel.ExcelReader; +import cn.hutool.poi.excel.ExcelUtil; +import cn.hutool.poi.excel.ExcelWriter; +import com.supervision.domain.QaSimilarityQuestionAnswer; +import com.supervision.model.AskTemplateQuestionLibrary; +import com.supervision.model.CommonDic; +import com.supervision.service.AskPatientAnswerService; +import com.supervision.service.AskTemplateQuestionLibraryService; +import com.supervision.service.CommonDicService; +import com.supervision.util.SimilarityUtil; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +@Slf4j +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@RunWith(SpringJUnit4ClassRunner.class) +public class RedisVecTest { + + + @Autowired + private AskTemplateQuestionLibraryService askTemplateQuestionLibraryService; + @Autowired + private CommonDicService commonDicService; + @Autowired + private AskPatientAnswerService askPatientAnswerService; + + + @Test + public void questionCaseGenerateTest() { + + + List questionLibraries = askTemplateQuestionLibraryService.list(); + List commonDics = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").list(); + Map dicMap = commonDics.stream().collect(Collectors.toMap(CommonDic::getId, v -> v)); + Map libraryMap = questionLibraries.stream().collect(Collectors.toMap(AskTemplateQuestionLibrary::getId, library -> library)); + + String path = "F:\\tmp\\1\\门诊收集0524-redis.xlsx"; + + ExcelReader reader = ExcelUtil.getReader(path); + List> maps = reader.readAll(); + + for (Map map : maps) { + String question = MapUtil.getStr(map, "日常问诊"); + Optional optional = SimilarityUtil.talkRedisVectorWithScoreByFirst(question); + if (optional.isEmpty()) { + log.warn("questionMatch:问题:{}没有匹配到结果", question); + continue; + } + QaSimilarityQuestionAnswer answer = optional.get(); + String matchQuestion = answer.getMatchQuestion(); + Double matchScore = answer.getMatchScore(); + String targetId = answer.getMatchQuestionCode(); + map.put("targetId", targetId); + map.put("targetQuestion", matchQuestion); + AskTemplateQuestionLibrary targetLibrary = libraryMap.get(targetId); + map.put("targetDesc", targetLibrary.getDescription()); + Long dictId = targetLibrary.getDictId(); + if (!NumberUtil.equals(dictId,Double.parseDouble(answer.getDictId()))){ + log.error("字典id不匹配:{}", JSONUtil.toJsonStr(answer)); + } + map.put("targetDicPath", dicMap.get(dictId).getNameZhPath()); + map.put("matchScore", matchScore); + } + + ExcelWriter writer = ExcelUtil.getWriter(path, "问询结果-3"); + writer.addHeaderAlias("病例", "病例"); + writer.addHeaderAlias("日常问诊", "日常问诊"); + writer.addHeaderAlias("targetId", "目标问题"); + writer.addHeaderAlias("targetDesc", "目标问题描述"); + writer.addHeaderAlias("targetQuestion", "目标问题"); + writer.addHeaderAlias("matchScore", "相似度"); + writer.addHeaderAlias("targetDicPath", "目标分类"); + writer.write(maps, true); + writer.close(); + } +}