知识库历史文件

This commit is contained in:
2025-12-20 17:12:42 +08:00
parent dfd9bb8b95
commit 62850717eb
59 changed files with 2351 additions and 276 deletions

View File

@@ -243,13 +243,13 @@ public class KnowledgeController {
/**
* 获取文件历史版本获取fileRootId下所有version
* @param fileRootId 文件id
* @param fileRootId 文件根ID
* @author yslg
* @since 2025-12-18
*/
@PreAuthorize("hasAuthority('ai:knowledge:file:view')")
@GetMapping("/file/{fileId}/history")
public ResultDomain<TbKnowledgeFile> getFileHistory(@PathVariable("fileId") @NotBlank String fileRootId) {
@GetMapping("/file/{fileRootId}/history")
public ResultDomain<KnowledgeFileVO> getFileHistory(@PathVariable("fileRootId") @NotBlank String fileRootId) {
logger.info("获取文件历史: fileRootId={}", fileRootId);
return knowledgeService.getKnowledgeFileHistory(fileRootId);
}

View File

@@ -76,4 +76,14 @@ public interface TbKnowledgeFileMapper {
@Param("knowledgeId") String knowledgeId,
@Param("fileRootId") String fileRootId
);
/**
* 根据文件根ID查询最大版本的文件
*/
TbKnowledgeFile selectLatestVersionFile(@Param("fileRootId") String fileRootId);
/**
* 根据文件根ID查询所有版本包含文件详细信息
*/
List<KnowledgeFileVO> selectFileVersionsWithDetail(@Param("fileRootId") String fileRootId);
}

View File

@@ -55,7 +55,7 @@ public class KnowledgeServiceImpl implements KnowledgeService {
@Autowired
private DifyApiClient difyApiClient;
@DubboReference(version = "1.0.0", group = "file", timeout = 30000)
@DubboReference(version = "1.0.0", group = "file", timeout = 30000, retries = 0)
private FileService fileService;
@Autowired
@@ -615,14 +615,22 @@ public class KnowledgeServiceImpl implements KnowledgeService {
return ResultDomain.failure("知识库未关联Dify");
}
// 3. 获取旧版本
List<TbKnowledgeFile> oldVersions = knowledgeFileMapper.selectFileVersions(fileRootId);
if (oldVersions == null || oldVersions.isEmpty()) {
// 3. 获取最大版本的旧文件
TbKnowledgeFile latestOldFile = knowledgeFileMapper.selectLatestVersionFile(fileRootId);
if (latestOldFile == null) {
return ResultDomain.failure("原文件不存在");
}
// 4. 上传新版本到minio
ResultDomain<TbSysFileDTO> fileResult = fileService.uploadFileVersion(file, "knowledge", knowledgeId, fileRootId);
// 4. 上传新版本到minio(使用字节数组避免 Dubbo 序列化问题)
byte[] fileBytes;
try {
fileBytes = file.getBytes();
} catch (java.io.IOException e) {
logger.error("读取文件字节失败", e);
return ResultDomain.failure("读取文件字节失败: " + e.getMessage());
}
ResultDomain<TbSysFileDTO> fileResult = fileService.uploadFileBytesVersion(
fileBytes, file.getOriginalFilename(), file.getContentType(), "knowledge", knowledgeId, fileRootId);
if (!fileResult.getSuccess() || fileResult.getData() == null) {
return ResultDomain.failure("上传新版本文件失败: " + fileResult.getMessage());
}
@@ -631,11 +639,9 @@ public class KnowledgeServiceImpl implements KnowledgeService {
int newVersion = sysFile.getVersion();
logger.info("上传新版本到minio成功: fileId={}, version={}", newFileId, newVersion);
// 5. 删除Dify旧文档
for (TbKnowledgeFile oldFile : oldVersions) {
if (StringUtils.hasText(oldFile.getDifyFileId())) {
aiFileUploadService.deleteFileFromDify(knowledge.getDifyDatasetId(), oldFile.getDifyFileId());
}
// 5. 删除Dify最大版本的旧文档
if (StringUtils.hasText(latestOldFile.getDifyFileId())) {
aiFileUploadService.deleteFileFromDify(knowledge.getDifyDatasetId(), latestOldFile.getDifyFileId());
}
// 6. 上传新文件到Dify
@@ -734,17 +740,19 @@ public class KnowledgeServiceImpl implements KnowledgeService {
/**
* @description 获取文件历史版本
* @param fileRootId 文件根ID
* @return ResultDomain<TbKnowledgeFile> 文件历史版本列表
* @return ResultDomain<KnowledgeFileVO> 文件历史版本列表dataList
* @author yslg
* @since 2025-12-18
*/
@Override
public ResultDomain<TbKnowledgeFile> getKnowledgeFileHistory(String fileRootId) {
public ResultDomain<KnowledgeFileVO> getKnowledgeFileHistory(String fileRootId) {
if (!StringUtils.hasText(fileRootId)) {
return ResultDomain.failure("文件根ID不能为空");
}
List<TbKnowledgeFile> versions = knowledgeFileMapper.selectFileVersions(fileRootId);
return ResultDomain.success("查询成功", versions);
List<KnowledgeFileVO> versions = knowledgeFileMapper.selectFileVersionsWithDetail(fileRootId);
ResultDomain<KnowledgeFileVO> result = ResultDomain.success("查询成功");
result.setDataList(versions);
return result;
}
}

View File

@@ -33,6 +33,7 @@
<result column="file_url" property="fileUrl" jdbcType="VARCHAR"/>
<result column="file_extension" property="fileExtension" jdbcType="VARCHAR"/>
<result column="file_md5_hash" property="fileMd5Hash" jdbcType="VARCHAR"/>
<result column="uploader_name" property="uploaderName" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
@@ -83,9 +84,17 @@
f.mime_type as file_mime_type,
f.url as file_url,
f.extension as file_extension,
f.md5_hash as file_md5_hash
f.md5_hash as file_md5_hash,
ui.username as uploader_name
FROM ai.tb_knowledge_file kf
INNER JOIN (
SELECT file_root_id, MAX(version) as max_version
FROM ai.tb_knowledge_file
WHERE knowledge_id = #{knowledgeId} AND deleted = false
GROUP BY file_root_id
) latest ON kf.file_root_id = latest.file_root_id AND kf.version = latest.max_version
LEFT JOIN file.tb_sys_file f ON kf.file_id = f.file_id AND f.deleted = false
LEFT JOIN sys.tb_sys_user_info ui ON f.uploader = ui.user_id AND ui.deleted = false
WHERE kf.knowledge_id = #{knowledgeId} AND kf.deleted = false
ORDER BY kf.create_time DESC
</select>
@@ -107,16 +116,24 @@
f.mime_type as file_mime_type,
f.url as file_url,
f.extension as file_extension,
f.md5_hash as file_md5_hash
f.md5_hash as file_md5_hash,
ui.username as uploader_name
FROM ai.tb_knowledge_file kf
INNER JOIN (
SELECT file_root_id, MAX(version) as max_version
FROM ai.tb_knowledge_file
WHERE knowledge_id = #{knowledgeId} AND deleted = false
GROUP BY file_root_id
) latest ON kf.file_root_id = latest.file_root_id AND kf.version = latest.max_version
LEFT JOIN file.tb_sys_file f ON kf.file_id = f.file_id AND f.deleted = false
LEFT JOIN sys.tb_sys_user_info ui ON f.uploader = ui.user_id AND ui.deleted = false
WHERE kf.knowledge_id = #{knowledgeId} AND kf.deleted = false
ORDER BY kf.create_time DESC
LIMIT #{pageParam.pageSize} OFFSET #{pageParam.offset}
</select>
<select id="countFiles" resultType="long">
SELECT COUNT(*)
SELECT COUNT(DISTINCT file_root_id)
FROM ai.tb_knowledge_file
WHERE knowledge_id = #{knowledgeId} AND deleted = false
</select>
@@ -133,4 +150,31 @@
FROM ai.tb_knowledge_file
WHERE knowledge_id = #{knowledgeId} AND file_root_id = #{fileRootId}
</select>
<select id="selectLatestVersionFile" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/>
FROM ai.tb_knowledge_file
WHERE file_root_id = #{fileRootId} AND deleted = false
ORDER BY version DESC
LIMIT 1
</select>
<select id="selectFileVersionsWithDetail" resultMap="KnowledgeFileVOResultMap">
SELECT
kf.optsn, kf.knowledge_id, kf.file_root_id, kf.file_id, kf.dify_file_id, kf.version,
kf.create_time, kf.update_time, kf.delete_time, kf.deleted,
f.name as file_name,
f.path as file_path,
f.size as file_size,
f.mime_type as file_mime_type,
f.url as file_url,
f.extension as file_extension,
f.md5_hash as file_md5_hash,
ui.username as uploader_name
FROM ai.tb_knowledge_file kf
LEFT JOIN file.tb_sys_file f ON kf.file_id = f.file_id AND f.deleted = false
LEFT JOIN sys.tb_sys_user_info ui ON f.uploader = ui.user_id AND ui.deleted = false
WHERE kf.file_root_id = #{fileRootId} AND kf.deleted = false
ORDER BY kf.version DESC
</select>
</mapper>