fix:文件打标签重构

This commit is contained in:
2026-02-03 19:44:36 +08:00
parent 0ca037d615
commit a4fe852e41

View File

@@ -1934,12 +1934,19 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
return SdmResponse.success();
}
/**
* 收集目录ID列表包含当前目录和所有祖先目录
* @param dirId 当前目录ID
* @return 目录ID列表当前目录 + 父目录 + ... + 根目录)
*/
private List<Long> collectAncestorDirIds(Long dirId) {
Long parentDirId = dirId;
List<Long> ancestorDirIds = new ArrayList<>();
while (parentDirId != null) {
ancestorDirIds.add(parentDirId);
parentDirId = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getId, parentDirId).oneOpt()
parentDirId = fileMetadataInfoService.lambdaQuery()
.eq(FileMetadataInfo::getId, parentDirId)
.oneOpt()
.map(FileMetadataInfo::getParentId)
.orElse(null);
}
@@ -1980,6 +1987,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
Long tenantId = ThreadLocalContext.getTenantId();
Long creatorId = ThreadLocalContext.getUserId();
long fileSize = resolveFileSize(req);
Long currentDirId = dirMetadataInfo.getId();
// 从缓存获取字典标签ID已由AOP切面自动填充
Map<String, Map<String, Integer>> dictIdMap = req.getDictTagIdsCache();
@@ -1993,8 +2001,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
}
}
List<FileTagRel> directRelList = new ArrayList<>();
List<FileTagRel> derivedRelList = new ArrayList<>();
List<FileTagRel> allTagRelList = new ArrayList<>();
// 遍历查询结果,构造文件标签关系
for (Map.Entry<String, Map<String, Integer>> classEntry : dictIdMap.entrySet()) {
@@ -2006,35 +2013,23 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
continue;
}
// 创建当前目录的直接关联
FileTagRel directRel = new FileTagRel();
directRel.setFileId(fileInfo.getId());
directRel.setTagId(dictId);
directRel.setDirId(dirMetadataInfo.getId());
directRel.setTenantId(tenantId);
directRel.setCreatorId(creatorId);
directRel.setFileSize(fileSize);
directRelList.add(directRel);
// 创建祖先目录的派生关联
// 为所有目录(当前目录 + 祖先目录)创建标签关系
for (Long dirIdItem : ancestorDirIds) {
FileTagRel derivedRel = new FileTagRel();
derivedRel.setFileId(fileInfo.getId());
derivedRel.setTagId(dictId);
derivedRel.setDirId(dirIdItem);
derivedRel.setTenantId(tenantId);
derivedRel.setCreatorId(creatorId);
derivedRel.setFileSize(fileSize);
derivedRelList.add(derivedRel);
FileTagRel tagRel = new FileTagRel();
tagRel.setFileId(fileInfo.getId());
tagRel.setTagId(dictId);
tagRel.setDirId(dirIdItem);
tagRel.setTenantId(tenantId);
tagRel.setCreatorId(creatorId);
tagRel.setFileSize(fileSize);
allTagRelList.add(tagRel);
}
}
}
if (CollectionUtils.isNotEmpty(directRelList)) {
fileTagRelService.saveBatch(directRelList);
}
if (CollectionUtils.isNotEmpty(derivedRelList)) {
fileTagRelService.saveBatch(derivedRelList);
// 一次性批量插入所有标签关系
if (CollectionUtils.isNotEmpty(allTagRelList)) {
fileTagRelService.saveBatch(allTagRelList);
}
}