Răsfoiți Sursa

feat:【AI 大模型】增加知识库的删除功能

YunaiV 6 luni în urmă
părinte
comite
3e8596ee4b

+ 9 - 0
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<Boolean> deleteKnowledge(@RequestParam("id") Long id) {
+        knowledgeService.deleteKnowledge(id);
+        return success(true);
+    }
 
     @GetMapping("/simple-list")
     @Operation(summary = "获得知识库的精简列表")

+ 4 - 0
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
         return selectList(AiKnowledgeDocumentDO::getStatus, status);
     }
 
+    default List<AiKnowledgeDocumentDO> selectListByKnowledgeId(Long knowledgeId) {
+        return selectList(AiKnowledgeDocumentDO::getKnowledgeId, knowledgeId);
+    }
+
 }

+ 15 - 0
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<AiKnowledgeDocumentDO> getKnowledgeDocumentList(Collection<Long> ids);
 
+    /**
+     * 根据知识库编号获取文档列表
+     *
+     * @param knowledgeId 知识库编号
+     * @return 文档列表
+     */
+    List<AiKnowledgeDocumentDO> getKnowledgeDocumentListByKnowledgeId(Long knowledgeId);
+
     /**
      * 获取文档 Map
      *

+ 20 - 0
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<AiKnowledgeDocumentDO> getKnowledgeDocumentListByKnowledgeId(Long knowledgeId) {
+        return knowledgeDocumentMapper.selectListByKnowledgeId(knowledgeId);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteKnowledgeDocumentByKnowledgeId(Long knowledgeId) {
+        // 1. 获取该知识库下的所有文档
+        List<AiKnowledgeDocumentDO> documents = knowledgeDocumentMapper.selectListByKnowledgeId(knowledgeId);
+        if (CollUtil.isEmpty(documents)) {
+            return;
+        }
+
+        // 2. 逐个删除文档及其对应的段落
+        for (AiKnowledgeDocumentDO document : documents) {
+            deleteKnowledgeDocument(document.getId());
+        }
+    }
+
 }

+ 15 - 3
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