diff --git a/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java b/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java index 0487884d..676a1e57 100644 --- a/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java +++ b/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java @@ -1934,12 +1934,19 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService { return SdmResponse.success(); } + /** + * 收集目录ID列表(包含当前目录和所有祖先目录) + * @param dirId 当前目录ID + * @return 目录ID列表(当前目录 + 父目录 + ... + 根目录) + */ private List collectAncestorDirIds(Long dirId) { Long parentDirId = dirId; List 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> dictIdMap = req.getDictTagIdsCache(); @@ -1993,8 +2001,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService { } } - List directRelList = new ArrayList<>(); - List derivedRelList = new ArrayList<>(); + List allTagRelList = new ArrayList<>(); // 遍历查询结果,构造文件标签关系 for (Map.Entry> 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); } }