Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -3464,6 +3464,14 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
|
||||
* </pre>
|
||||
*/
|
||||
Map<String, String> uuidToObjectKeyMap = new HashMap<>();
|
||||
|
||||
/**
|
||||
* 已存在的节点映射:uuid -> FileMetadataInfo
|
||||
* <pre>
|
||||
* 用于幂等性检查,如果节点已存在则跳过创建
|
||||
* </pre>
|
||||
*/
|
||||
Map<String, FileMetadataInfo> existingNodesMap = new HashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3606,15 +3614,22 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
|
||||
* 检查要创建的节点是否已存在(重复导入检测)
|
||||
*/
|
||||
private SdmResponse<Void> checkDuplicateNodes(BatchCreateDirContext ctx) {
|
||||
if (CollectionUtils.isEmpty(ctx.getAllNodeUuIds())) {
|
||||
return SdmResponse.success(null);
|
||||
}
|
||||
|
||||
List<FileMetadataInfo> existingNodes = fileMetadataInfoService.lambdaQuery()
|
||||
.in(FileMetadataInfo::getRelatedResourceUuid, ctx.allNodeUuIds)
|
||||
.eq(FileMetadataInfo::getTenantId, ctx.tenantId)
|
||||
.in(FileMetadataInfo::getRelatedResourceUuid, ctx.getAllNodeUuIds())
|
||||
.eq(FileMetadataInfo::getTenantId, ctx.getTenantId())
|
||||
.list();
|
||||
|
||||
if (CollectionUtils.isNotEmpty(existingNodes)) {
|
||||
log.error("批量创建目录失败,部分目录已存在(非新项目),已存在的uuid: {}",
|
||||
existingNodes.stream().map(FileMetadataInfo::getRelatedResourceUuid).collect(Collectors.toList()));
|
||||
return SdmResponse.failed("目录已存在,请勿重复创建");
|
||||
log.info("批量创建目录检测到部分节点已存在,数量: {}", existingNodes.size());
|
||||
for (FileMetadataInfo node : existingNodes) {
|
||||
if (node.getRelatedResourceUuid() != null) {
|
||||
ctx.getExistingNodesMap().put(node.getRelatedResourceUuid(), node);
|
||||
}
|
||||
}
|
||||
}
|
||||
return SdmResponse.success(null);
|
||||
}
|
||||
@@ -3660,6 +3675,18 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
|
||||
List<String> minioObjectKeys = new ArrayList<>();
|
||||
|
||||
for (DirNodeInfo node : nodes) {
|
||||
// 检查节点是否已存在(幂等性处理)
|
||||
if (ctx.getExistingNodesMap().containsKey(node.getUuId())) {
|
||||
FileMetadataInfo existingNode = ctx.getExistingNodesMap().get(node.getUuId());
|
||||
// 更新映射,供子节点使用
|
||||
ctx.getUuidToDbIdMap().put(node.getUuId(), existingNode.getId());
|
||||
ctx.getUuidToObjectKeyMap().put(node.getUuId(), existingNode.getObjectKey());
|
||||
// 将已存在的ID也加入结果列表,保持返回完整性
|
||||
ctx.getCreatedDirIds().add(existingNode.getId());
|
||||
log.info("节点已存在,跳过创建: uuid={}, objectKey={}", node.getUuId(), existingNode.getObjectKey());
|
||||
continue;
|
||||
}
|
||||
|
||||
FileMetadataInfo entity = buildDirNodeMetadata(node, ctx);
|
||||
entities.add(entity);
|
||||
minioObjectKeys.add(entity.getObjectKey());
|
||||
|
||||
Reference in New Issue
Block a user