fix:复制报告模板

This commit is contained in:
2026-01-12 20:32:53 +08:00
parent 9786df2b39
commit 6a309a980f
7 changed files with 63 additions and 1 deletions

View File

@@ -87,4 +87,7 @@ public class ReportTemplateDto {
@Schema(description = "分页参数,一页几条")
private int size;
@Schema(description = "是否复制模板")
private boolean isCopied;
}

View File

@@ -27,6 +27,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import java.util.*;
@@ -51,8 +52,19 @@ public class SimulationReportTemplateServiceImpl extends ServiceImpl<SimulationR
reportTemplate.setTemplateCode(generateUuid("report_code_"));
reportTemplate.setCreator(ThreadLocalContext.getUserId());
reportTemplate.setTenantId(ThreadLocalContext.getTenantId());
// 复制模板的话 先根据fileId查到模板 再重新上传
MultipartFile file = null;
if (templateDto.isCopied()) {
SdmResponse<MultipartFile> response = dataFeignClient.getMultipartFileByFileId(templateDto.getFileId());
if (!response.isSuccess()) {
return response;
}
file = response.getData();
} else {
file = templateDto.getFile();
}
UploadFilesReq req = new UploadFilesReq();
req.setFile(templateDto.getFile());
req.setFile(file);
SdmResponse<Long> response = dataFeignClient.uploadReportTemplateFile(req);
if (!response.isSuccess()) {
return response;

View File

@@ -246,4 +246,16 @@ public class DataClientFeignClientImpl implements IDataFeignClient {
}
}
@Override
public SdmResponse<MultipartFile> getMultipartFileByFileId(Long fileId) {
SdmResponse<MultipartFile> response;
try {
response = dataClient.getMultipartFileByFileId(fileId);
return response;
} catch (Exception e) {
log.error("获取文件失败:", e);
return SdmResponse.failed("获取文件失败");
}
}
}

View File

@@ -94,4 +94,7 @@ public interface IDataFeignClient {
@PostMapping(value = "/data/updateReportTemplateFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
SdmResponse<Long> updateReportTemplateFile(UpdateScriptAndReportReq req);
@GetMapping("/data/getMultipartFileByFileId")
SdmResponse<MultipartFile> getMultipartFileByFileId(@RequestParam(value = "fileId") @Validated Long fileId);
}

View File

@@ -487,6 +487,12 @@ public class DataFileController implements IDataFeignClient {
return IDataFileService.downloadFileForEdit(fileId);
}
@GetMapping("/getMultipartFileByFileId")
@Operation(summary = "根据fileId获取MultipartFile文件", description = "根据fileId获取MultipartFile文件")
public SdmResponse<MultipartFile> getMultipartFileByFileId(@RequestParam(value = "fileId") @Validated Long fileId) {
return IDataFileService.getMultipartFileByFileId(fileId);
}
/**
* only office 回调
* @param callbackData

View File

@@ -357,6 +357,8 @@ public interface IDataFileService {
SdmResponse downloadFileForEdit(Long fileId);
SdmResponse<MultipartFile> getMultipartFileByFileId(Long fileId);
default SdmResponse<List<FileMetadataInfoResp>> queryFileListByIdList(QueryFileReq queryFileReq){return null;}
default SdmResponse<FileMetadataInfoResp> queryFileIdByNodeId(QueryFileIdReq queryFileIdReq){return null;};

View File

@@ -2995,6 +2995,30 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
return SdmResponse.failed("onlyoffice编辑文件失败");
}
@Override
public SdmResponse<MultipartFile> getMultipartFileByFileId(Long fileId) {
try {
FileMetadataInfo fileMetadataInfo = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getId, fileId).one();
if (ObjectUtils.isEmpty(fileMetadataInfo)) {
return SdmResponse.failed("未查询到文件的元数据信息");
}
String fileObjectKey = fileMetadataInfo.getObjectKey();
// 从MinIO下载文件
byte[] fileData = minioService.downloadFile(fileObjectKey,fileMetadataInfo.getBucketName());
String contentType = getContentTypeByFileName(fileMetadataInfo.getOriginalName());
MultipartFile multipartFile = new MockMultipartFile(
fileMetadataInfo.getOriginalName(),
fileMetadataInfo.getOriginalName(),
contentType,
fileData
);
return SdmResponse.success(multipartFile);
} catch (Exception e) {
log.error("获取文件失败", e);
}
return SdmResponse.failed("获取文件失败");
}
public SdmResponse<List<FileMetadataInfoResp>> queryFileListByIdList(QueryFileReq queryFileReq) {
List<FileMetadataInfo> fileMetadataInfos = fileMetadataInfoService.lambdaQuery().in(FileMetadataInfo::getId, queryFileReq.getFileIdList()).list();
if (CollectionUtils.isEmpty(fileMetadataInfos)) {