知识库历史文件
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user