diff --git a/virtual-patient-manage/pom.xml b/virtual-patient-manage/pom.xml
index 037a417f..3ba34ae7 100644
--- a/virtual-patient-manage/pom.xml
+++ b/virtual-patient-manage/pom.xml
@@ -90,8 +90,6 @@
virtual-patient-common
${project.version}
-
-
org.projectlombok
lombok
diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/VirtualPatientManageApplication.java b/virtual-patient-manage/src/main/java/com/supervision/manage/VirtualPatientManageApplication.java
index fb09bda9..52510975 100644
--- a/virtual-patient-manage/src/main/java/com/supervision/manage/VirtualPatientManageApplication.java
+++ b/virtual-patient-manage/src/main/java/com/supervision/manage/VirtualPatientManageApplication.java
@@ -6,7 +6,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.ComponentScans;
@SpringBootApplication
@MapperScan(basePackages = {"com.supervision.**.mapper"})
diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/QaKnowledgeManageService.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/QaKnowledgeManageService.java
index f163e540..0550a5a5 100644
--- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/QaKnowledgeManageService.java
+++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/QaKnowledgeManageService.java
@@ -1,6 +1,34 @@
package com.supervision.manage.service;
+import com.supervision.model.AskTemplateQuestionLibrary;
+import com.supervision.model.AskTemplateQuestionSimilarity;
+
+import java.util.List;
+
public interface QaKnowledgeManageService {
void refreshQaKnowledge();
+
+ /**
+ * 保存或者更新问题库
+ * @param questionIds 问题id
+ * @return true:成功 false:失败
+ */
+ boolean saveOrUpdateQuestionLibrary(List questionIds);
+
+ /**
+ * 保存或者更新问题库
+ * @param askTemplateQuestionLibrarys 问题id
+ * @param askTemplateQuestionSimilaritys 相似问题id
+ * @return true:成功 false:失败
+ */
+ boolean saveOrUpdateQuestionLibrary(List askTemplateQuestionLibrarys,
+ List askTemplateQuestionSimilaritys);
+
+ /**
+ * 删除问题库
+ * @param questionIds 问题id
+ * @return true:成功 false:失败
+ */
+ boolean deleteQuestionLibrary(List questionIds);
}
diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java
index 923a578e..c6eb475b 100644
--- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java
+++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java
@@ -136,6 +136,7 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa
askTemplateQuestionLibrary.setCode(nextCode);
askTemplateQuestionLibraryService.save(askTemplateQuestionLibrary);
+ qaKnowledgeManageService.saveOrUpdateQuestionLibrary(CollUtil.newArrayList(askTemplateQuestionLibrary.getId()));
return askTemplateQuestionLibrary.getId();
}
}
@@ -173,8 +174,9 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa
Assert.notEmpty(id, "id不能为空");
askTemplateQuestionLibraryService.removeById(id);
+ askTemplateQuestionSimilarityService.lambdaUpdate().in(AskTemplateQuestionSimilarity::getLibraryId, id).remove();
// 对问题库进行更新操作
- qaKnowledgeManageService.refreshQaKnowledge();
+ qaKnowledgeManageService.deleteQuestionLibrary(CollUtil.newArrayList(id));
return true;
}
diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/QaKnowledgeManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/QaKnowledgeManageServiceImpl.java
index 290b8c60..15357115 100644
--- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/QaKnowledgeManageServiceImpl.java
+++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/QaKnowledgeManageServiceImpl.java
@@ -12,8 +12,10 @@ import org.springframework.ai.document.Document;
import org.springframework.ai.vectorstore.RedisVectorStore;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
@@ -26,28 +28,114 @@ public class QaKnowledgeManageServiceImpl implements QaKnowledgeManageService {
private final RedisVectorStore redisVectorStore;
-
+ public record QuestionMetadata(String type, String libraryQuestionId, String questionId, Long dictId) {
+ public Map toMap(){
+ return Map.of("type", type,
+ "libraryQuestionId", libraryQuestionId,
+ "questionId", questionId,
+ "dictId", String.valueOf(dictId));
+ }
+ }
public void refreshQaKnowledge() {
// 修改为手动刷新向量库
List list = askTemplateQuestionLibraryService.list();
+
+ // 清空向量库
+ log.info("refreshQaKnowledge:开始刷新redis向量库...");
+ redisVectorStore.getJedis().flushDB();
+ log.info("refreshQaKnowledge:向量库已清空...");
+
if (CollUtil.isEmpty(list)) {
return;
}
+
for (AskTemplateQuestionLibrary askTemplateQuestionLibrary : list) {
String description = askTemplateQuestionLibrary.getStandardQuestion();
- redisVectorStore.add(List.of(new Document(description,
- Map.of("type", "1",
- "libraryQuestionId", askTemplateQuestionLibrary.getId(),
- "questionId", askTemplateQuestionLibrary.getId(),
- "dictId", String.valueOf(askTemplateQuestionLibrary.getDictId())))));
+ Map questionVector = new QuestionMetadata("1",
+ askTemplateQuestionLibrary.getId(), askTemplateQuestionLibrary.getId(),
+ askTemplateQuestionLibrary.getDictId()).toMap();
+ redisVectorStore.add(List.of(new Document(askTemplateQuestionLibrary.getId(),description, questionVector)));
+
List similarityList = askTemplateQuestionSimilarityService.lambdaQuery().eq(AskTemplateQuestionSimilarity::getLibraryId, askTemplateQuestionLibrary.getId()).list();
for (AskTemplateQuestionSimilarity askTemplateQuestionSimilarity : similarityList) {
- redisVectorStore.add(List.of(new Document(askTemplateQuestionSimilarity.getSimilarityQuestion(),
- Map.of("type", "2",
- "libraryQuestionId", askTemplateQuestionSimilarity.getLibraryId(),
- "questionId", askTemplateQuestionSimilarity.getId(),
- "dictId", String.valueOf(askTemplateQuestionLibrary.getDictId())))));
+ Map questionVectorNest = new QuestionMetadata("2",
+ askTemplateQuestionSimilarity.getLibraryId(), askTemplateQuestionSimilarity.getId(),
+ askTemplateQuestionLibrary.getDictId()).toMap();
+ redisVectorStore.add(List.of(new Document(askTemplateQuestionLibrary.getId(),
+ askTemplateQuestionSimilarity.getSimilarityQuestion(),
+ questionVectorNest)));
}
}
}
+
+
+
+
+ @Override
+ public boolean saveOrUpdateQuestionLibrary(List questionIds) {
+
+ if (CollUtil.isEmpty(questionIds)){
+ log.info("saveOrUpdateQuestionLibrary:questionIds为空");
+ return false;
+ }
+ List questionLibraries = askTemplateQuestionLibraryService.lambdaQuery().in(AskTemplateQuestionLibrary::getId, questionIds).list();
+ if (CollUtil.isEmpty(questionLibraries)){
+ log.info("saveOrUpdateQuestionLibrary:questionIds={}数据不存在", questionIds);
+ return false;
+ }
+
+ List libraryIds = questionLibraries.stream().map(AskTemplateQuestionLibrary::getId).toList();
+ List similarityList = askTemplateQuestionSimilarityService.lambdaQuery()
+ .in(AskTemplateQuestionSimilarity::getLibraryId, libraryIds).list();
+
+ return this.saveOrUpdateQuestionLibrary(questionLibraries, similarityList);
+ }
+
+ @Override
+ public boolean saveOrUpdateQuestionLibrary(List askTemplateQuestionLibrary,
+ List askTemplateQuestionSimilarity) {
+
+ List documentList = new ArrayList<>();
+ // 组装问题库中标准问题的document
+ if (CollUtil.isNotEmpty(askTemplateQuestionLibrary)){
+ List documents = askTemplateQuestionLibrary.stream().map(question -> {
+ QuestionMetadata questionMetadata = new QuestionMetadata("1", question.getId(), question.getId(), question.getDictId());
+ return new Document(question.getId(), question.getStandardQuestion(), questionMetadata.toMap());
+ }).toList();
+ documentList.addAll(documents);
+ }
+
+ Map libraryIdDictIdMap = askTemplateQuestionLibrary.stream().collect(Collectors.toMap(AskTemplateQuestionLibrary::getId, AskTemplateQuestionLibrary::getDictId,(v1,v2)->v1));
+ // 组装相似问题的document
+ if (CollUtil.isNotEmpty(askTemplateQuestionSimilarity)){
+ List documents = askTemplateQuestionSimilarity.stream().map(similarity -> {
+ QuestionMetadata questionMetadata = new QuestionMetadata("2", similarity.getLibraryId(), similarity.getId(), libraryIdDictIdMap.get(similarity.getLibraryId()));
+ return new Document(similarity.getId(), similarity.getSimilarityQuestion(), questionMetadata.toMap());
+ }).toList();
+ documentList.addAll(documents);
+ }
+ redisVectorStore.add(documentList);
+ return true;
+ }
+
+ @Override
+ public boolean deleteQuestionLibrary(List questionIds) {
+
+ if (CollUtil.isEmpty(questionIds)){
+ log.info("deleteQuestionLibrary:questionIds为空");
+ return false;
+ }
+ // 没有办法直接根据questionIds找到数据对用的id,需要从mysql数据库中查找
+ List libraryQuestionIdList = askTemplateQuestionLibraryService.lambdaQuery()
+ .in(AskTemplateQuestionLibrary::getId, questionIds).list()
+ .stream().map(AskTemplateQuestionLibrary::getId).toList();
+
+ List similarityQuestionIdList = askTemplateQuestionSimilarityService.lambdaQuery()
+ .in(AskTemplateQuestionSimilarity::getLibraryId, libraryQuestionIdList).list()
+ .stream().map(AskTemplateQuestionSimilarity::getId).collect(Collectors.toList());
+ similarityQuestionIdList.addAll(libraryQuestionIdList);
+
+ return redisVectorStore.delete(similarityQuestionIdList).orElse(false);
+ }
+
}
diff --git a/virtual-patient-manage/src/test/java/com/supervision/manage/VirtualPatientManageApplicationTests.java b/virtual-patient-manage/src/test/java/com/supervision/manage/VirtualPatientManageApplicationTests.java
index 1eeaa65e..e78ca86f 100644
--- a/virtual-patient-manage/src/test/java/com/supervision/manage/VirtualPatientManageApplicationTests.java
+++ b/virtual-patient-manage/src/test/java/com/supervision/manage/VirtualPatientManageApplicationTests.java
@@ -12,6 +12,7 @@ import com.supervision.manage.pojo.vo.MedicalAnswerVideoResVo;
import com.supervision.manage.pojo.vo.UploadQuestionLibraryResVo;
import com.supervision.manage.service.AnswerVideoResourceService;
import com.supervision.manage.service.AskQuestionLibraryManageService;
+import com.supervision.manage.service.QaKnowledgeManageService;
import com.supervision.model.CommonDic;
import com.supervision.service.AskPatientAnswerService;
import com.supervision.service.AskTemplateQuestionLibraryService;
@@ -179,8 +180,14 @@ class VirtualPatientManageApplicationTests {
}
- public static void main(String[] args) {
- List