批量导入项目节点,新增日志

This commit is contained in:
2026-01-22 16:07:06 +08:00
parent 2aaecf5534
commit e104fb2ab8

View File

@@ -3369,9 +3369,14 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
@Override
@Transactional(rollbackFor = Exception.class)
public SdmResponse<List<Long>> batchCreateDir(BatchCreateDirReq req) {
log.info("开始执行批量创建目录dirType: {}, items数量: {}", req.getDirType(),
req.getItems() == null ? 0 : req.getItems().size());
long startTime = System.currentTimeMillis();
// 1. 参数校验
SdmResponse<Void> validateResult = validateBatchCreateDirRequest(req);
if (!validateResult.isSuccess()) {
log.error("批量创建目录参数校验失败: {}", validateResult.getMessage());
return SdmResponse.failed(validateResult.getMessage());
}
@@ -3382,10 +3387,13 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
try {
// 2. 构建节点分组数据
buildNodeGroupingData(req, ctx);
log.info("节点分组数据构建完成,总节点数: {}, 顶层父节点数: {}",
ctx.getAllNodeUuIds().size(), ctx.getFirstLevelParentUuIds().size());
// 3. 检查重复创建
SdmResponse<Void> duplicateCheck = checkDuplicateNodes(ctx);
if (!duplicateCheck.isSuccess()) {
log.error("批量创建目录失败,检测到重复节点: {}", duplicateCheck.getMessage());
return SdmResponse.failed(duplicateCheck.getMessage());
}
@@ -3393,15 +3401,17 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
// 获取系统根目录
SdmResponse<FileMetadataInfo> rootDirResult = getSystemRootDir(ctx.dirType);
if (!rootDirResult.isSuccess()) {
log.error("获取系统根目录失败: {}", rootDirResult.getMessage());
return SdmResponse.failed(rootDirResult.getMessage());
}
FileMetadataInfo systemRootDir = rootDirResult.getData();
initUuidMappings(ctx, systemRootDir);
log.info("初始化UUID映射完成系统根路径: {}", systemRootDir.getObjectKey());
// 6. BFS层级遍历按层分组
List<List<DirNodeInfo>> levelNodes = buildLevelNodesByBFS(ctx.getParentToChildren(), ctx.getFirstLevelParentUuIds());
log.info("批量创建目录,共{}层,总节点数:{}", levelNodes.size(),
log.info("BFS层级分析完成,共{}层,总节点数:{}", levelNodes.size(),
levelNodes.stream().mapToInt(List::size).sum());
// 7. 分层批量插入
@@ -3409,11 +3419,13 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
processLevelNodes(levelNodes.get(levelIndex), levelIndex, ctx);
}
log.info("批量创建目录完成,共创建{}个目录", ctx.createdDirIds.size());
long duration = System.currentTimeMillis() - startTime;
log.info("批量创建目录成功,耗时: {}ms, 共创建{}个目录", duration, ctx.createdDirIds.size());
return SdmResponse.success(ctx.createdDirIds);
} catch (Exception e) {
log.error("批量创建目录失败", e);
log.error("批量创建目录异常已创建MinIO Key数量: {}, 错误信息: {}",
ctx.createdMinioKeys.size(), e.getMessage(), e);
compensateDeleteMinioKeys(ctx.createdMinioKeys);
throw new RuntimeException("批量创建目录失败: " + e.getMessage(), e);
}
@@ -3532,6 +3544,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
* 处理单层节点的创建创建MinIO目录、数据库记录、权限记录
*/
private void processLevelNodes(List<DirNodeInfo> nodes, int levelIndex, BatchCreateDirContext ctx) {
long levelStartTime = System.currentTimeMillis();
log.info("开始处理第{}层,节点数:{}", levelIndex + 1, nodes.size());
// 1. 构建该层所有节点的元数据对象并收集需要创建的MinIO目录路径
@@ -3545,11 +3558,15 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
}
// 2. 批量创建MinIO目录
long minioStartTime = System.currentTimeMillis();
minioService.batchCreateDirectories(minioObjectKeys, null);
ctx.getCreatedMinioKeys().addAll(minioObjectKeys);
log.info("第{}层 MinIO目录创建完成耗时: {}ms", levelIndex + 1, System.currentTimeMillis() - minioStartTime);
// 3. 批量插入数据库
long dbStartTime = System.currentTimeMillis();
fileMetadataInfoService.saveBatch(entities, 500);
log.info("第{}层 数据库元数据插入完成,耗时: {}ms", levelIndex + 1, System.currentTimeMillis() - dbStartTime);
// 4. 插入后更新映射MyBatis-Plus会回填ID
for (FileMetadataInfo entity : entities) {
@@ -3560,7 +3577,8 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
// 5. 批量创建权限记录
createBatchPermissions(entities, ctx.tenantId);
log.info("第{}层处理完成,创建了{}个目录", levelIndex + 1, entities.size());
log.info("第{}层处理完成,创建了{}个目录,总耗时: {}ms",
levelIndex + 1, entities.size(), System.currentTimeMillis() - levelStartTime);
}
/**