Commit 3e8596ee4b0eb0f96cbcb70df333392ca5cb0713
1 parent
e11ee654
feat:【AI 大模型】增加知识库的删除功能
Showing
5 changed files
with
63 additions
and
3 deletions
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 { | @@ -63,6 +63,15 @@ public class AiKnowledgeController { | ||
| 63 | knowledgeService.updateKnowledge(updateReqVO); | 63 | knowledgeService.updateKnowledge(updateReqVO); |
| 64 | return success(true); | 64 | return success(true); |
| 65 | } | 65 | } |
| 66 | + | ||
| 67 | + @DeleteMapping("/delete") | ||
| 68 | + @Operation(summary = "删除知识库") | ||
| 69 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | ||
| 70 | + @PreAuthorize("@ss.hasPermission('ai:knowledge:delete')") | ||
| 71 | + public CommonResult<Boolean> deleteKnowledge(@RequestParam("id") Long id) { | ||
| 72 | + knowledgeService.deleteKnowledge(id); | ||
| 73 | + return success(true); | ||
| 74 | + } | ||
| 66 | 75 | ||
| 67 | @GetMapping("/simple-list") | 76 | @GetMapping("/simple-list") |
| 68 | @Operation(summary = "获得知识库的精简列表") | 77 | @Operation(summary = "获得知识库的精简列表") |
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<AiKnowledgeDocume | @@ -36,4 +36,8 @@ public interface AiKnowledgeDocumentMapper extends BaseMapperX<AiKnowledgeDocume | ||
| 36 | return selectList(AiKnowledgeDocumentDO::getStatus, status); | 36 | return selectList(AiKnowledgeDocumentDO::getStatus, status); |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | + default List<AiKnowledgeDocumentDO> selectListByKnowledgeId(Long knowledgeId) { | ||
| 40 | + return selectList(AiKnowledgeDocumentDO::getKnowledgeId, knowledgeId); | ||
| 41 | + } | ||
| 42 | + | ||
| 39 | } | 43 | } |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/knowledge/AiKnowledgeDocumentService.java
| @@ -82,6 +82,13 @@ public interface AiKnowledgeDocumentService { | @@ -82,6 +82,13 @@ public interface AiKnowledgeDocumentService { | ||
| 82 | void deleteKnowledgeDocument(Long id); | 82 | void deleteKnowledgeDocument(Long id); |
| 83 | 83 | ||
| 84 | /** | 84 | /** |
| 85 | + * 根据知识库编号,批量删除文档 | ||
| 86 | + * | ||
| 87 | + * @param knowledgeId 知识库编号 | ||
| 88 | + */ | ||
| 89 | + void deleteKnowledgeDocumentByKnowledgeId(Long knowledgeId); | ||
| 90 | + | ||
| 91 | + /** | ||
| 85 | * 校验文档是否存在 | 92 | * 校验文档是否存在 |
| 86 | * | 93 | * |
| 87 | * @param id 文档编号 | 94 | * @param id 文档编号 |
| @@ -106,6 +113,14 @@ public interface AiKnowledgeDocumentService { | @@ -106,6 +113,14 @@ public interface AiKnowledgeDocumentService { | ||
| 106 | List<AiKnowledgeDocumentDO> getKnowledgeDocumentList(Collection<Long> ids); | 113 | List<AiKnowledgeDocumentDO> getKnowledgeDocumentList(Collection<Long> ids); |
| 107 | 114 | ||
| 108 | /** | 115 | /** |
| 116 | + * 根据知识库编号获取文档列表 | ||
| 117 | + * | ||
| 118 | + * @param knowledgeId 知识库编号 | ||
| 119 | + * @return 文档列表 | ||
| 120 | + */ | ||
| 121 | + List<AiKnowledgeDocumentDO> getKnowledgeDocumentListByKnowledgeId(Long knowledgeId); | ||
| 122 | + | ||
| 123 | + /** | ||
| 109 | * 获取文档 Map | 124 | * 获取文档 Map |
| 110 | * | 125 | * |
| 111 | * @param ids 文档编号列表 | 126 | * @param ids 文档编号列表 |
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 | @@ -211,4 +211,24 @@ public class AiKnowledgeDocumentServiceImpl implements AiKnowledgeDocumentServic | ||
| 211 | return knowledgeDocumentMapper.selectBatchIds(ids); | 211 | return knowledgeDocumentMapper.selectBatchIds(ids); |
| 212 | } | 212 | } |
| 213 | 213 | ||
| 214 | + @Override | ||
| 215 | + public List<AiKnowledgeDocumentDO> getKnowledgeDocumentListByKnowledgeId(Long knowledgeId) { | ||
| 216 | + return knowledgeDocumentMapper.selectListByKnowledgeId(knowledgeId); | ||
| 217 | + } | ||
| 218 | + | ||
| 219 | + @Override | ||
| 220 | + @Transactional(rollbackFor = Exception.class) | ||
| 221 | + public void deleteKnowledgeDocumentByKnowledgeId(Long knowledgeId) { | ||
| 222 | + // 1. 获取该知识库下的所有文档 | ||
| 223 | + List<AiKnowledgeDocumentDO> documents = knowledgeDocumentMapper.selectListByKnowledgeId(knowledgeId); | ||
| 224 | + if (CollUtil.isEmpty(documents)) { | ||
| 225 | + return; | ||
| 226 | + } | ||
| 227 | + | ||
| 228 | + // 2. 逐个删除文档及其对应的段落 | ||
| 229 | + for (AiKnowledgeDocumentDO document : documents) { | ||
| 230 | + deleteKnowledgeDocument(document.getId()); | ||
| 231 | + } | ||
| 232 | + } | ||
| 233 | + | ||
| 214 | } | 234 | } |
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; | @@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.ai.service.model.AiModelService; | ||
| 12 | import jakarta.annotation.Resource; | 12 | import jakarta.annotation.Resource; |
| 13 | import lombok.extern.slf4j.Slf4j; | 13 | import lombok.extern.slf4j.Slf4j; |
| 14 | import org.springframework.stereotype.Service; | 14 | import org.springframework.stereotype.Service; |
| 15 | +import org.springframework.transaction.annotation.Transactional; | ||
| 15 | 16 | ||
| 16 | import java.util.List; | 17 | import java.util.List; |
| 17 | 18 | ||
| @@ -34,6 +35,8 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService { | @@ -34,6 +35,8 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService { | ||
| 34 | private AiModelService modelService; | 35 | private AiModelService modelService; |
| 35 | @Resource | 36 | @Resource |
| 36 | private AiKnowledgeSegmentService knowledgeSegmentService; | 37 | private AiKnowledgeSegmentService knowledgeSegmentService; |
| 38 | + @Resource | ||
| 39 | + private AiKnowledgeDocumentService knowledgeDocumentService; | ||
| 37 | 40 | ||
| 38 | @Override | 41 | @Override |
| 39 | public Long createKnowledge(AiKnowledgeSaveReqVO createReqVO) { | 42 | public Long createKnowledge(AiKnowledgeSaveReqVO createReqVO) { |
| @@ -66,8 +69,17 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService { | @@ -66,8 +69,17 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService { | ||
| 66 | } | 69 | } |
| 67 | 70 | ||
| 68 | @Override | 71 | @Override |
| 72 | + @Transactional(rollbackFor = Exception.class) | ||
| 69 | public void deleteKnowledge(Long id) { | 73 | public void deleteKnowledge(Long id) { |
| 74 | + // 1. 校验存在 | ||
| 75 | + validateKnowledgeExists(id); | ||
| 76 | + | ||
| 77 | + // 2. 删除知识库下的所有文档及段落 | ||
| 78 | + knowledgeDocumentService.deleteKnowledgeDocumentByKnowledgeId(id); | ||
| 70 | 79 | ||
| 80 | + // 3. 删除知识库 | ||
| 81 | + // 特殊:知识库需要最后删除,不然相关的配置会找不到 | ||
| 82 | + knowledgeMapper.deleteById(id); | ||
| 71 | } | 83 | } |
| 72 | 84 | ||
| 73 | @Override | 85 | @Override |
| @@ -77,11 +89,11 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService { | @@ -77,11 +89,11 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService { | ||
| 77 | 89 | ||
| 78 | @Override | 90 | @Override |
| 79 | public AiKnowledgeDO validateKnowledgeExists(Long id) { | 91 | public AiKnowledgeDO validateKnowledgeExists(Long id) { |
| 80 | - AiKnowledgeDO knowledgeBase = knowledgeMapper.selectById(id); | ||
| 81 | - if (knowledgeBase == null) { | 92 | + AiKnowledgeDO knowledge = knowledgeMapper.selectById(id); |
| 93 | + if (knowledge == null) { | ||
| 82 | throw exception(KNOWLEDGE_NOT_EXISTS); | 94 | throw exception(KNOWLEDGE_NOT_EXISTS); |
| 83 | } | 95 | } |
| 84 | - return knowledgeBase; | 96 | + return knowledge; |
| 85 | } | 97 | } |
| 86 | 98 | ||
| 87 | @Override | 99 | @Override |