fix:文件打标签重构
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user