diff --git a/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/AiKnowledgeController.java b/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/AiKnowledgeController.java index c6e31f0e8d..b9daa95135 100644 --- a/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/AiKnowledgeController.java +++ b/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/AiKnowledgeController.java @@ -63,6 +63,15 @@ public class AiKnowledgeController { knowledgeService.updateKnowledge(updateReqVO); return success(true); } + + @DeleteMapping("/delete") + @Operation(summary = "删除知识库") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('ai:knowledge:delete')") + public CommonResult deleteKnowledge(@RequestParam("id") Long id) { + knowledgeService.deleteKnowledge(id); + return success(true); + } @GetMapping("/simple-list") @Operation(summary = "获得知识库的精简列表") diff --git a/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/knowledge/AiKnowledgeDocumentMapper.java b/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/knowledge/AiKnowledgeDocumentMapper.java index 11a76cc57b..55f04bb328 100644 --- a/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/knowledge/AiKnowledgeDocumentMapper.java +++ b/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/knowledge/AiKnowledgeDocumentMapper.java @@ -36,4 +36,8 @@ public interface AiKnowledgeDocumentMapper extends BaseMapperX selectListByKnowledgeId(Long knowledgeId) { + return selectList(AiKnowledgeDocumentDO::getKnowledgeId, knowledgeId); + } + } diff --git a/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/AiKnowledgeDocumentService.java b/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/AiKnowledgeDocumentService.java index 8ff137b331..3ffd47a510 100644 --- a/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/AiKnowledgeDocumentService.java +++ b/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/AiKnowledgeDocumentService.java @@ -81,6 +81,13 @@ public interface AiKnowledgeDocumentService { */ void deleteKnowledgeDocument(Long id); + /** + * 根据知识库编号,批量删除文档 + * + * @param knowledgeId 知识库编号 + */ + void deleteKnowledgeDocumentByKnowledgeId(Long knowledgeId); + /** * 校验文档是否存在 * @@ -105,6 +112,14 @@ public interface AiKnowledgeDocumentService { */ List getKnowledgeDocumentList(Collection ids); + /** + * 根据知识库编号获取文档列表 + * + * @param knowledgeId 知识库编号 + * @return 文档列表 + */ + List getKnowledgeDocumentListByKnowledgeId(Long knowledgeId); + /** * 获取文档 Map * diff --git a/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/AiKnowledgeDocumentServiceImpl.java b/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/AiKnowledgeDocumentServiceImpl.java index 2d78f94f34..c03d35f064 100644 --- a/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/AiKnowledgeDocumentServiceImpl.java +++ b/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/AiKnowledgeDocumentServiceImpl.java @@ -211,4 +211,24 @@ public class AiKnowledgeDocumentServiceImpl implements AiKnowledgeDocumentServic return knowledgeDocumentMapper.selectBatchIds(ids); } + @Override + public List getKnowledgeDocumentListByKnowledgeId(Long knowledgeId) { + return knowledgeDocumentMapper.selectListByKnowledgeId(knowledgeId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteKnowledgeDocumentByKnowledgeId(Long knowledgeId) { + // 1. 获取该知识库下的所有文档 + List documents = knowledgeDocumentMapper.selectListByKnowledgeId(knowledgeId); + if (CollUtil.isEmpty(documents)) { + return; + } + + // 2. 逐个删除文档及其对应的段落 + for (AiKnowledgeDocumentDO document : documents) { + deleteKnowledgeDocument(document.getId()); + } + } + } diff --git a/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/AiKnowledgeServiceImpl.java b/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/AiKnowledgeServiceImpl.java index 3a4f60cfa7..75b9943a8c 100644 --- a/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/AiKnowledgeServiceImpl.java +++ b/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/AiKnowledgeServiceImpl.java @@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.ai.service.model.AiModelService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -34,6 +35,8 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService { private AiModelService modelService; @Resource private AiKnowledgeSegmentService knowledgeSegmentService; + @Resource + private AiKnowledgeDocumentService knowledgeDocumentService; @Override public Long createKnowledge(AiKnowledgeSaveReqVO createReqVO) { @@ -66,8 +69,17 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService { } @Override + @Transactional(rollbackFor = Exception.class) public void deleteKnowledge(Long id) { + // 1. 校验存在 + validateKnowledgeExists(id); + // 2. 删除知识库下的所有文档及段落 + knowledgeDocumentService.deleteKnowledgeDocumentByKnowledgeId(id); + + // 3. 删除知识库 + // 特殊:知识库需要最后删除,不然相关的配置会找不到 + knowledgeMapper.deleteById(id); } @Override @@ -77,11 +89,11 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService { @Override public AiKnowledgeDO validateKnowledgeExists(Long id) { - AiKnowledgeDO knowledgeBase = knowledgeMapper.selectById(id); - if (knowledgeBase == null) { + AiKnowledgeDO knowledge = knowledgeMapper.selectById(id); + if (knowledge == null) { throw exception(KNOWLEDGE_NOT_EXISTS); } - return knowledgeBase; + return knowledge; } @Override