From a649df4aa1cbadb102692134b7ff4845531b196c Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Tue, 30 Sep 2025 13:06:27 +0800 Subject: [PATCH] fix(ai):修复知识库文件删除逻辑 --- src/main/java/cc/mrbird/febs/ai/service/impl/AiKnowledgeFileServiceImpl.java | 126 ++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 120 insertions(+), 6 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiKnowledgeFileServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiKnowledgeFileServiceImpl.java index 68b811f..41b0733 100644 --- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiKnowledgeFileServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiKnowledgeFileServiceImpl.java @@ -2,8 +2,6 @@ import cc.mrbird.febs.ai.entity.AiCompany; import cc.mrbird.febs.ai.entity.AiKnowledgeFile; -import cc.mrbird.febs.ai.entity.AiProduct; -import cc.mrbird.febs.ai.entity.AiProductCategory; import cc.mrbird.febs.ai.mapper.AiKnowledgeFileMapper; import cc.mrbird.febs.ai.service.AiCompanyService; import cc.mrbird.febs.ai.service.AiKnowledgeFileService; @@ -26,10 +24,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; import java.util.stream.Collectors; @Slf4j @@ -50,6 +48,25 @@ } query.orderByDesc(AiKnowledgeFile::getCompanyId); Page<AiKnowledgeFile> pages = aiKnowledgeFileMapper.selectPage(page, query); + List<AiKnowledgeFile> records = pages.getRecords(); + if (CollUtil.isNotEmpty(records)){ + //stream流获取全部的公司ID + Set<String> companyIds = records.stream().map(AiKnowledgeFile::getCompanyId).collect(Collectors.toSet()); + List<String> companyIdList = new ArrayList<>(companyIds); + List<AiCompany> listById = aiCompanyService.getListById((companyIdList)); + Map<String, AiCompany> collect = listById.stream().collect(Collectors.toMap(AiCompany::getId, aiCompany -> aiCompany)); + for (AiKnowledgeFile aiKnowledgeFile : records){ + if (StrUtil.isEmpty(aiKnowledgeFile.getCompanyId())){ + aiKnowledgeFile.setCompanyName("公共"); + }else{ + if (StrUtil.isEmpty(aiKnowledgeFile.getCompanyId())){ + aiKnowledgeFile.setCompanyName("公共"); + }else{ + aiKnowledgeFile.setCompanyName(collect.get(aiKnowledgeFile.getCompanyId()).getName()); + } + } + } + } return pages; } @@ -60,6 +77,7 @@ entity.setId(UUID.getSimpleUUIDString()); entity.setCompanyId(dto.getCompanyId()); entity.setName(dto.getName()); + entity.setState(1); entity.setSavePath(dto.getSavePath()); entity.setCreatedTime(new Date()); this.save(entity); @@ -108,4 +126,100 @@ ); } + + @Override + public FebsResponse refresh(String id) { + AiKnowledgeFile aiKnowledgeFile = this.getById(id); + if (ObjectUtil.isNull(aiKnowledgeFile)){ + throw new FebsException("文件不存在"); + } + + Integer state = aiKnowledgeFile.getState(); + + if (state == 1){ + state = KnowledgeBaseUtil.getFileJobStatus(aiKnowledgeFile.getFileId()); + if ( state == 2) { + aiKnowledgeFileMapper.update(null, + Wrappers.lambdaUpdate(AiKnowledgeFile.class) + .set(AiKnowledgeFile::getState, state) + .eq(AiKnowledgeFile::getId, aiKnowledgeFile.getId()) + ); + } + } + + if (state == 2){ + String knowledgeId = null; + if (StrUtil.isNotEmpty(aiKnowledgeFile.getCompanyId())){ + AiCompany aiCompany = aiCompanyService.getById(aiKnowledgeFile.getCompanyId()); + if (StrUtil.isNotEmpty(aiCompany.getCategoryId())){ + knowledgeId = aiCompany.getKnowledgeId(); + } + }else{ + knowledgeId = KnowledgeBaseUtil.DEFAULT_KNOWLEDGE_ID; + } + state = KnowledgeBaseUtil.getIndexKnowledgeJobStatus(aiKnowledgeFile.getJobId(),knowledgeId); + if ( state == 3) { + aiKnowledgeFileMapper.update(null, + Wrappers.lambdaUpdate(AiKnowledgeFile.class) + .set(AiKnowledgeFile::getState, state) + .eq(AiKnowledgeFile::getId, aiKnowledgeFile.getId()) + ); + } + } + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse delete(String id) { + //如何从服务器上的位置删除对应的文件 + AiKnowledgeFile aiKnowledgeFile = this.getById(id); + if (ObjectUtil.isNull(aiKnowledgeFile)){ + throw new FebsException("文件不存在"); + } + //服务器删除 + try { + Path filePath = Paths.get(aiKnowledgeFile.getSavePath()); + boolean deleted = Files.deleteIfExists(filePath); + if (!deleted) { + throw new FebsException("文件删除失败"); + } + } catch (Exception e) { + throw new FebsException("删除文件时发生错误: " + e.getMessage()); + } + + aiKnowledgeFileMapper.deleteById(id); + + //知识库删除 + String knowledgeId = null; + if (StrUtil.isNotEmpty(aiKnowledgeFile.getCompanyId())){ + AiCompany aiCompany = aiCompanyService.getById(aiKnowledgeFile.getCompanyId()); + if (StrUtil.isNotEmpty(aiCompany.getCategoryId())){ + knowledgeId = aiCompany.getKnowledgeId(); + } + }else{ + knowledgeId = KnowledgeBaseUtil.DEFAULT_KNOWLEDGE_ID; + } + KnowledgeBaseUtil.knowledgeFileDelete(aiKnowledgeFile.getFileId(), knowledgeId); + + //应用数据删除 + try { + KnowledgeBaseUtil.deleteFile(aiKnowledgeFile.getFileId()); + } catch (Exception e) { + throw new FebsException("应用数据删除时发生错误: " + e.getMessage()); + } + return new FebsResponse().success().message("操作成功"); + } + + @Override + public void refreshEvent() { + LambdaQueryWrapper<AiKnowledgeFile> queryWrapper = Wrappers.lambdaQuery(AiKnowledgeFile.class); + queryWrapper.ne(AiKnowledgeFile::getState, 3); + List<AiKnowledgeFile> list = aiKnowledgeFileMapper.selectList(queryWrapper); + if (CollUtil.isEmpty( list)){ + for (AiKnowledgeFile aiKnowledgeFile : list){ + refresh(aiKnowledgeFile.getId()); + } + } + + } } -- Gitblit v1.9.1