From 98b037ec600f2543d2690195bd2e08b879de2014 Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Tue, 30 Sep 2025 12:59:53 +0800 Subject: [PATCH] fix(ai):修复知识库文件状态更新逻辑 --- src/main/java/cc/mrbird/febs/ai/service/impl/AiKnowledgeFileServiceImpl.java | 152 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 139 insertions(+), 13 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 ba6b536..ad5f1f2 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; @@ -12,6 +10,7 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; import cc.mrbird.febs.common.exception.FebsException; +import cc.mrbird.febs.rabbit.producter.AgentProducer; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -25,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 @@ -38,6 +37,7 @@ private final AiKnowledgeFileMapper aiKnowledgeFileMapper; private final AiCompanyService aiCompanyService; + private final AgentProducer agentProducer; @Override public IPage<AiKnowledgeFile> listInPage(AiKnowledgeFile dto, QueryRequest request) { @@ -48,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; } @@ -58,14 +77,31 @@ 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); + agentProducer.sendAddKnowledge( entity.getId()); + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse update(AiKnowledgeFile dto) { + return null; + } + + @Override + public void getAddKnowledge(String id) { + AiKnowledgeFile aiKnowledgeFile = this.getById(id); + if (ObjectUtil.isNull(aiKnowledgeFile)){ + return; + } + String categoryId = null; String knowledgeId = null; - if (StrUtil.isNotEmpty(entity.getCompanyId())){ - AiCompany aiCompany = aiCompanyService.getById(entity.getCompanyId()); + if (StrUtil.isNotEmpty(aiKnowledgeFile.getCompanyId())){ + AiCompany aiCompany = aiCompanyService.getById(aiKnowledgeFile.getCompanyId()); if (StrUtil.isNotEmpty(aiCompany.getCategoryId())){ categoryId = aiCompany.getCategoryId(); knowledgeId = aiCompany.getKnowledgeId(); @@ -75,9 +111,10 @@ knowledgeId = KnowledgeBaseUtil.DEFAULT_KNOWLEDGE_ID; } - String fileId = KnowledgeBaseUtil.uploadFileToAppData(entity.getSavePath(), categoryId); + String fileId = KnowledgeBaseUtil.uploadFileToAppData(aiKnowledgeFile.getSavePath(), categoryId); if (StrUtil.isBlank(fileId)){ - throw new FebsException("初始化应用数据失败"); + log.info("初始化应用数据失败"); + return ; } String jobId = KnowledgeBaseUtil.updateKnowledgeBase(fileId, knowledgeId, null); @@ -85,13 +122,102 @@ Wrappers.lambdaUpdate(AiKnowledgeFile.class) .set(AiKnowledgeFile::getFileId, fileId) .set(AiKnowledgeFile::getJobId, jobId) - .eq(AiKnowledgeFile::getId, entity.getId()) + .eq(AiKnowledgeFile::getId, aiKnowledgeFile.getId()) + ); + + } + + @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 update(AiKnowledgeFile dto) { - return null; + 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()); + } + + //知识库删除 + 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