From f07412bb05e42b989f9960faf4c1d78190efc507 Mon Sep 17 00:00:00 2001 From: zhuxinru Date: Thu, 26 Feb 2026 15:50:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E7=AE=97=E4=BE=8B=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=BD=92=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-02-26/simulation_run_key_result.sql | 1 + .../impl/data/DataClientFeignClientImpl.java | 4 +- .../feign/inter/data/IDataFeignClient.java | 2 +- .../data/controller/DataFileController.java | 2 +- .../sdm/data/service/IDataFileService.java | 2 +- .../impl/MinioFileIDataFileServiceImpl.java | 44 ++++++++++++++++++- .../impl/SimulationRunServiceImpl.java | 12 ++++- 7 files changed, 59 insertions(+), 8 deletions(-) create mode 100644 1-sql/2026-02-26/simulation_run_key_result.sql diff --git a/1-sql/2026-02-26/simulation_run_key_result.sql b/1-sql/2026-02-26/simulation_run_key_result.sql new file mode 100644 index 00000000..b09e828a --- /dev/null +++ b/1-sql/2026-02-26/simulation_run_key_result.sql @@ -0,0 +1 @@ +ALTER TABLE spdm_baseline.simulation_run_key_result MODIFY COLUMN runId varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' NULL COMMENT '所属Run UUID'; diff --git a/common/src/main/java/com/sdm/common/feign/impl/data/DataClientFeignClientImpl.java b/common/src/main/java/com/sdm/common/feign/impl/data/DataClientFeignClientImpl.java index 94d32e46..214bce9d 100644 --- a/common/src/main/java/com/sdm/common/feign/impl/data/DataClientFeignClientImpl.java +++ b/common/src/main/java/com/sdm/common/feign/impl/data/DataClientFeignClientImpl.java @@ -301,8 +301,8 @@ public class DataClientFeignClientImpl implements IDataFeignClient { } @Override - public SdmResponse copyFileToTask(CopyFileToTaskReq req) { - SdmResponse response; + public SdmResponse copyFileToTask(CopyFileToTaskReq req) { + SdmResponse response; try { response = dataClient.copyFileToTask(req); return response; diff --git a/common/src/main/java/com/sdm/common/feign/inter/data/IDataFeignClient.java b/common/src/main/java/com/sdm/common/feign/inter/data/IDataFeignClient.java index 5e9a6f0e..7cb74670 100644 --- a/common/src/main/java/com/sdm/common/feign/inter/data/IDataFeignClient.java +++ b/common/src/main/java/com/sdm/common/feign/inter/data/IDataFeignClient.java @@ -108,5 +108,5 @@ public interface IDataFeignClient { SdmResponse getMultipartFileByFileId(@RequestParam(value = "fileId") @Validated Long fileId); @PostMapping("/data/copyFileToTask") - SdmResponse copyFileToTask(@RequestBody CopyFileToTaskReq req); + SdmResponse copyFileToTask(@RequestBody CopyFileToTaskReq req); } diff --git a/data/src/main/java/com/sdm/data/controller/DataFileController.java b/data/src/main/java/com/sdm/data/controller/DataFileController.java index f525b40d..2543f105 100644 --- a/data/src/main/java/com/sdm/data/controller/DataFileController.java +++ b/data/src/main/java/com/sdm/data/controller/DataFileController.java @@ -709,7 +709,7 @@ public class DataFileController implements IDataFeignClient { @PostMapping("/copyFileToTask") @Operation(summary = "复制关键结果文件到task下", description = "复制关键结果文件到task下") - public SdmResponse copyFileToTask(@RequestBody CopyFileToTaskReq req) { + public SdmResponse copyFileToTask(@RequestBody CopyFileToTaskReq req) { return IDataFileService.copyFileToTask(req); } diff --git a/data/src/main/java/com/sdm/data/service/IDataFileService.java b/data/src/main/java/com/sdm/data/service/IDataFileService.java index 50ceceb9..471e7fd8 100644 --- a/data/src/main/java/com/sdm/data/service/IDataFileService.java +++ b/data/src/main/java/com/sdm/data/service/IDataFileService.java @@ -412,7 +412,7 @@ public interface IDataFileService { SdmResponse> batchAddFileInfo(UploadFilesReq req); - SdmResponse copyFileToTask(CopyFileToTaskReq req); + SdmResponse copyFileToTask(CopyFileToTaskReq req); SdmResponse chunkUploadToMinio(ChunkUploadMinioFileReq req); 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 3fba998c..c6bfe344 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 @@ -1610,7 +1610,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService { } @Override - public SdmResponse copyFileToTask(CopyFileToTaskReq req) { + public SdmResponse copyFileToTask(CopyFileToTaskReq req) { // 源文件 FileMetadataInfo sourceMetadataInfo = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getId, req.getSourceFileId()).one(); if (ObjectUtils.isEmpty(sourceMetadataInfo)) { @@ -1647,7 +1647,15 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService { FileMetadataInfo fileInfo = createFileMetadata(newDirMinioObjectKey, sourceMetadataInfo.getOriginalName(), null, null, null, targetParentMetadataInfo.getId(), sourceMetadataInfo.getFileSize(), sourceMetadataInfo.getTag1()); fileMetadataInfoService.save(fileInfo); - return SdmResponse.success("复制文件成功"); + + UploadFilesReq uploadFilesReq = new UploadFilesReq(); + uploadFilesReq.setSize(sourceMetadataInfo.getFileSize()); + List ancestorDirIds = collectAncestorDirIds(targetParentMetadataInfo.getId()); + saveFileStorageStats(fileInfo, uploadFilesReq, ancestorDirIds); + saveCopyFileTags(uploadFilesReq, fileInfo, sourceMetadataInfo, ancestorDirIds); + createFilePermission(fileInfo.getId()); + + return SdmResponse.success(fileInfo.getId()); } catch (Exception e) { log.error("复制文件失败", e); throw new RuntimeException("复制文件失败: " + e.getMessage(), e); @@ -2305,6 +2313,38 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService { } } + private void saveCopyFileTags(UploadFilesReq req, FileMetadataInfo fileInfo, FileMetadataInfo oldFileInfo, + List ancestorDirIds) { + + Long tenantId = ThreadLocalContext.getTenantId(); + Long creatorId = ThreadLocalContext.getUserId(); + long fileSize = resolveFileSize(req); + // 旧文件的标签 + List oldTagRelList = fileTagRelService.lambdaQuery().eq(FileTagRel::getFileId, oldFileInfo.getId()).list(); + if (CollectionUtils.isNotEmpty(oldTagRelList)) { + List allTagRelList = new ArrayList<>(); + List tagIdList = oldTagRelList.stream().map(FileTagRel::getTagId).distinct().toList(); + for (Integer tagId : tagIdList) { + // 遍历查询结果,构造文件标签关系 + // 为所有目录(当前目录 + 祖先目录)创建标签关系 + for (Long dirIdItem : ancestorDirIds) { + FileTagRel tagRel = new FileTagRel(); + tagRel.setFileId(fileInfo.getId()); + tagRel.setTagId(tagId); + tagRel.setDirId(dirIdItem); + tagRel.setTenantId(tenantId); + tagRel.setCreatorId(creatorId); + tagRel.setFileSize(fileSize); + allTagRelList.add(tagRel); + } + } + // 一次性批量插入所有标签关系 + if (CollectionUtils.isNotEmpty(allTagRelList)) { + fileTagRelService.saveBatch(allTagRelList); + } + } + } + private void bindSimulationPool(UploadFilesReq req, FileMetadataInfo fileInfo) { diff --git a/project/src/main/java/com/sdm/project/service/impl/SimulationRunServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/SimulationRunServiceImpl.java index 6cf2a23d..49bf5c68 100644 --- a/project/src/main/java/com/sdm/project/service/impl/SimulationRunServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/SimulationRunServiceImpl.java @@ -2640,6 +2640,7 @@ public class SimulationRunServiceImpl extends ServiceImpl taskKeyResultList = new ArrayList<>(); for (String keyResultId : req.getKeyResultIdList()) { SimulationRunKeyResult keyResult = simulationKeyResultService.lambdaQuery().eq(SimulationRunKeyResult::getUuid, keyResultId).one(); if (keyResult == null) { @@ -2658,11 +2659,20 @@ public class SimulationRunServiceImpl extends ServiceImpl response = dataFeignClient.copyFileToTask(copyFileToTaskReq); if (!response.isSuccess()) { return SdmResponse.failed("归档关键结果文件失败"); } + // 同时归档一份keyResult到表里,因为任务下的曲线预览也需要展示物理量和单位 + SimulationRunKeyResult simulationRunKeyResult = new SimulationRunKeyResult(); + BeanUtils.copyProperties(keyResult, simulationRunKeyResult); + simulationRunKeyResult.setId(null); + simulationRunKeyResult.setUuid(RandomUtil.generateString(32)); + simulationRunKeyResult.setRunId(null); + simulationRunKeyResult.setFileId(response.getData()); + taskKeyResultList.add(simulationRunKeyResult); } + simulationKeyResultService.saveBatch(taskKeyResultList); } } else { // 将算例下的指标分析值同步到任务指标