diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/knowledgebase/KnowledgeBaseServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/knowledgebase/KnowledgeBaseServiceImpl.java index afbc4dd68..b144aa7f5 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/knowledgebase/KnowledgeBaseServiceImpl.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/knowledgebase/KnowledgeBaseServiceImpl.java @@ -63,67 +63,50 @@ public class KnowledgeBaseServiceImpl implements KnowledgeBaseService { @Override public void updateKnowledgeBase (KnowledgeBaseSaveReqVO updateReqVO) { - // 1. 校验知识库是否存在 + // 校验存在 validateKnowledgeBaseExists(updateReqVO.getId()); - // 2. 校验知识库名称是否重复 validateKnowledgeBaseNameExists(updateReqVO); - - // 3. 更新知识库主表 + // 更新 KnowledgeBaseDO updateObj = BeanUtils.toBean(updateReqVO, KnowledgeBaseDO.class); knowledgeBaseMapper.updateById(updateObj); - - Unirest.config().reset(); - Unirest.config() - .socketTimeout(86400000) - .connectTimeout(100000) - .concurrency(10, 5) - .setDefaultHeader("Accept", "application/json") - ; - - // 4. 处理附表(知识文档)数据 + List knowledgeDocumentsList = new ArrayList<>(); + // 附表增加数据 if (!CollectionUtils.isAnyEmpty(updateReqVO.getKnowledgeDocuments())) { - // 4.1 获取需要保留的文档 ID - List retainedIds = updateReqVO.getKnowledgeDocuments().stream() - .map(KnowledgeDocumentsSaveReqVO::getId) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - - // 4.2 删除不需要保留的文档 - LambdaQueryWrapperX deleteWrapper = new LambdaQueryWrapperX() - .eq(KnowledgeDocumentsDO::getKnowledgeBaseId, updateReqVO.getId()); - if (!CollectionUtils.isAnyEmpty(retainedIds)) { - deleteWrapper.notIn(KnowledgeDocumentsDO::getId, retainedIds); + List ids = updateReqVO.getKnowledgeDocuments().stream().filter( + knowledgeDocuments -> knowledgeDocuments.getId() != null + ).map(KnowledgeDocumentsSaveReqVO::getId).collect(Collectors.toList()); + if (!CollectionUtils.isAnyEmpty(ids)) { + knowledgeDocumentsMapper.delete(new LambdaQueryWrapperX() + .eq(KnowledgeDocumentsDO::getKnowledgeBaseId, updateReqVO.getId()) + .notIn(KnowledgeDocumentsDO::getId, ids)); + } else { + knowledgeDocumentsMapper.delete(new LambdaQueryWrapperX() + .eq(KnowledgeDocumentsDO::getKnowledgeBaseId, updateReqVO.getId())); } - knowledgeDocumentsMapper.delete(deleteWrapper); - - // 4.3 更新或插入文档数据 - List newDocuments = new ArrayList<>(); - updateReqVO.getKnowledgeDocuments().forEach(doc -> { - KnowledgeDocumentsDO docDO = BeanUtils.toBean(doc, KnowledgeDocumentsDO.class); - docDO.setKnowledgeBaseId(updateReqVO.getId()); - if (doc.getId() == null) { - newDocuments.add(docDO); // 收集新增文档 - } - knowledgeDocumentsMapper.insertOrUpdate(docDO); // 更新或插入文档 - }); - - // 4.4 异步处理新增文档和删除的文档 + updateReqVO.getKnowledgeDocuments().forEach( + knowledgeDocuments -> { + KnowledgeDocumentsDO knowledgeDocumentsDO = BeanUtils.toBean(knowledgeDocuments, KnowledgeDocumentsDO.class); + knowledgeDocumentsDO.setKnowledgeBaseId(updateReqVO.getId()); + if (knowledgeDocuments.getId() == null) { + knowledgeDocumentsList.add(knowledgeDocumentsDO); + } + knowledgeDocumentsMapper.insertOrUpdate(knowledgeDocumentsDO); + } + ); List deleteIds = knowledgeDocumentsMapper.selectDeleteIds(updateReqVO.getId()); - asyncKnowledgeBase.createKnowledgeBase(newDocuments, deleteIds); + asyncKnowledgeBase.createKnowledgeBase(knowledgeDocumentsList, deleteIds); // 4.5 异步处理知识库外挂 - asyncKnowledgeBase.knowledgeEmbed(newDocuments,updateReqVO.getId()); + asyncKnowledgeBase.knowledgeEmbed(knowledgeDocumentsList, updateReqVO.getId()); } else { - // 5. 如果传入的文档列表为空,则删除所有关联文档 knowledgeDocumentsMapper.delete(new LambdaQueryWrapperX() .eq(KnowledgeDocumentsDO::getKnowledgeBaseId, updateReqVO.getId())); - - // 5.1 异步处理删除的文档 List deleteIds = knowledgeDocumentsMapper.selectDeleteIds(updateReqVO.getId()); if (!CollectionUtils.isAnyEmpty(deleteIds)) { asyncKnowledgeBase.createKnowledgeBase(null, deleteIds); + // 4.5 异步处理知识库外挂 + asyncKnowledgeBase.knowledgeEmbed(knowledgeDocumentsList, updateReqVO.getId()); } } - } @Override