From e104fb2ab88da6a6507313862d23edfd63094d2a Mon Sep 17 00:00:00 2001 From: gulongcheng <474084054@qq.com> Date: Thu, 22 Jan 2026 16:07:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=AF=BC=E5=85=A5=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E8=8A=82=E7=82=B9,=E6=96=B0=E5=A2=9E=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/MinioFileIDataFileServiceImpl.java | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) 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 ce1d40c6..a139c6b1 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 @@ -3369,9 +3369,14 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService { @Override @Transactional(rollbackFor = Exception.class) public SdmResponse> batchCreateDir(BatchCreateDirReq req) { + log.info("开始执行批量创建目录,dirType: {}, items数量: {}", req.getDirType(), + req.getItems() == null ? 0 : req.getItems().size()); + long startTime = System.currentTimeMillis(); + // 1. 参数校验 SdmResponse 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 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 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> 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 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); } /**