批量导入项目节点,新增日志
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user