feat:(REQ-3540) 文件克隆-加上targetAppCode
This commit is contained in:
parent
911b70631c
commit
ba1e0715fd
@ -3,6 +3,7 @@ package cn.axzo.oss.client.controller;
|
||||
import cn.axzo.basics.common.util.AssertUtil;
|
||||
import cn.axzo.core.utils.converter.BeanConverter;
|
||||
import cn.axzo.framework.auth.domain.ContextInfo;
|
||||
import cn.axzo.oss.client.convert.ServerFileConvert;
|
||||
import cn.axzo.oss.common.utils.BeanConvertUtil;
|
||||
import cn.axzo.oss.http.api.ServerFileServiceApi;
|
||||
import cn.axzo.oss.http.model.ApiSignUrlDownloadRequest;
|
||||
@ -245,7 +246,7 @@ public class ServerFileController implements ServerFileServiceApi {
|
||||
public CommonResponse<ServerFileBatchCopyObjectResponse> batchCopyObject(@Valid @RequestBody ServerFileBatchCopyObjectRequest request) {
|
||||
AssertUtil.isFalse(Objects.isNull(request) || CollectionUtils.isEmpty(request.getCopyObjects()), "入参为空");
|
||||
List<FileCopyObjectDto> fileCopyObjectDtos = BeanUtil.copyToList(request.getCopyObjects(), FileCopyObjectDto.class);
|
||||
List<FileCopyObjectResponse> fileCopyObjectResponses = fileService.batchCopyObject(fileCopyObjectDtos, AppInfoDto.builder().appCode(request.getAppCode()).bizScene(request.getBizScene()).build());
|
||||
List<FileCopyObjectResponse> fileCopyObjectResponses = fileService.batchCopyObject(fileCopyObjectDtos, ServerFileConvert.copyObjectConvertAppInfo(request));
|
||||
return CommonResponse.success(ServerFileBatchCopyObjectResponse.builder().responses(BeanUtil.copyToList(fileCopyObjectResponses, ServerFileBatchCopyObjectResponse.ServerFileCopyObjectResponse.class)).build());
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
package cn.axzo.oss.client.convert;
|
||||
|
||||
import cn.axzo.oss.http.model.copyobject.ServerFileBatchCopyObjectRequest;
|
||||
import cn.axzo.oss.manager.api.dto.request.AppInfoDto;
|
||||
|
||||
/**
|
||||
* @author xudawei@axzo.cn
|
||||
* @date 2025/3/21
|
||||
* @description 对象转换
|
||||
*/
|
||||
public class ServerFileConvert {
|
||||
|
||||
/**
|
||||
* 克隆对象转换成AppInfo
|
||||
*/
|
||||
public static AppInfoDto copyObjectConvertAppInfo(ServerFileBatchCopyObjectRequest request) {
|
||||
return AppInfoDto.builder()
|
||||
.appCode(request.getAppCode())
|
||||
.bizScene(request.getBizScene())
|
||||
.targetAppCode(request.getTargetAppCode())
|
||||
.targetBizScene(request.getTargetBizScene())
|
||||
.build();
|
||||
}
|
||||
|
||||
}
|
||||
@ -64,6 +64,7 @@ public enum CodeEnum implements EnumBase<Integer> {
|
||||
GET_OBJECT_META_FAIL(507, "获取元文件失败"),
|
||||
URL_BUCKET_NAME_KEY_ALL_EMPTY(508, "url-bucketName-key同时为空"),
|
||||
SIGN_URL_DOWNLOAD_FILEKEYS_EXCEEDS_MAXSIZE(509, "fileKeys exceeds the maximum size"),
|
||||
FILE_TARGET_APP_IS_EMPTY(510, "target app is empty"),
|
||||
;
|
||||
|
||||
private final Integer code;
|
||||
|
||||
@ -27,6 +27,16 @@ public class ServerFileBatchCopyObjectRequest {
|
||||
@NotBlank(message = "bizScene must not be null")
|
||||
private String bizScene;
|
||||
|
||||
/**
|
||||
* 目标appCode
|
||||
*/
|
||||
private String targetAppCode;
|
||||
|
||||
/**
|
||||
* 目标bizScene
|
||||
*/
|
||||
private String targetBizScene;
|
||||
|
||||
@NotEmpty(message = "集合对象不能为空")
|
||||
private Set<ServerFileCopyObjectRequest> copyObjects;
|
||||
|
||||
|
||||
@ -25,4 +25,14 @@ public class AppInfoDto {
|
||||
*/
|
||||
private String bizScene;
|
||||
|
||||
/**
|
||||
* 目标appCode
|
||||
*/
|
||||
private String targetAppCode;
|
||||
|
||||
/**
|
||||
* 目标bizScene
|
||||
*/
|
||||
private String targetBizScene;
|
||||
|
||||
}
|
||||
|
||||
@ -9,6 +9,8 @@ import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author xudawei@axzo.cn
|
||||
* @date 2025/3/10
|
||||
@ -69,13 +71,16 @@ public class CopyObjectCloudDto {
|
||||
|
||||
private String appCode;
|
||||
|
||||
public static CopyObjectCloudDto create(FileCopyObjectDto fileCopyObjectRequest, File file, FileBusinessScene fileBusinessScene) {
|
||||
public static CopyObjectCloudDto create(FileCopyObjectDto fileCopyObjectRequest, File file, FileBusinessScene fileBusinessScene,FileBusinessScene targetFileBiz) {
|
||||
// 入参中有通道,则优先取入参;否则取源通道
|
||||
String targetChannelCode = StringUtils.isBlank(fileCopyObjectRequest.getTargetChannelCode()) ? fileBusinessScene.getChannelCode() : fileCopyObjectRequest.getTargetChannelCode();
|
||||
String targetBucketName = StringUtils.isBlank(fileCopyObjectRequest.getTargetBucketName()) ? fileBusinessScene.getBucketName() : fileCopyObjectRequest.getTargetBucketName();
|
||||
String targetBucketDict = StringUtils.isBlank(fileCopyObjectRequest.getTargetDict()) ? fileBusinessScene.getDirectory() : fileCopyObjectRequest.getTargetDict();
|
||||
String fileName = StringUtils.isBlank(fileCopyObjectRequest.getTargetFileName()) ? file.getFileName() : fileCopyObjectRequest.getTargetFileName();
|
||||
|
||||
String appCode = (Objects.isNull(targetFileBiz) || StringUtils.isBlank(targetFileBiz.getAppCode())) ? fileBusinessScene.getAppCode() : targetFileBiz.getAppCode();
|
||||
String appChannelBucketNo = (Objects.isNull(targetFileBiz) || StringUtils.isBlank(targetFileBiz.getAppChannelBucketNo())) ? fileBusinessScene.getAppChannelBucketNo() : targetFileBiz.getAppChannelBucketNo();
|
||||
|
||||
String uuid = Utility.getUUID();
|
||||
|
||||
return CopyObjectCloudDto.builder()
|
||||
@ -90,8 +95,8 @@ public class CopyObjectCloudDto {
|
||||
.targetFileName(fileName)
|
||||
.file(file)
|
||||
.fileUuid(fileCopyObjectRequest.getFileUuid())
|
||||
.appChannelBucketNo(fileBusinessScene.getAppChannelBucketNo())
|
||||
.appCode(fileBusinessScene.getAppCode())
|
||||
.appChannelBucketNo(appChannelBucketNo)
|
||||
.appCode(appCode)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
@ -27,7 +27,6 @@ import cn.axzo.oss.dal.entity.FileUploadConfig;
|
||||
import cn.axzo.oss.dal.repository.FileAppDao;
|
||||
import cn.axzo.oss.dal.repository.FileDao;
|
||||
import cn.axzo.oss.dal.vo.FileBusinessSceneVo;
|
||||
import cn.axzo.oss.integration.s3.config.CadThirdProperty;
|
||||
import cn.axzo.oss.integration.s3.config.HuaWeiCloudObsConfig;
|
||||
import cn.axzo.oss.manager.api.AppChannelBucketManager;
|
||||
import cn.axzo.oss.manager.api.FileBusinessSceneManager;
|
||||
@ -48,7 +47,6 @@ import cn.axzo.oss.manager.api.dto.request.MultipartUploadInitDto;
|
||||
import cn.axzo.oss.manager.api.dto.request.ServerFileDeleteDto;
|
||||
import cn.axzo.oss.manager.api.dto.request.ServerFileDownloadDto;
|
||||
import cn.axzo.oss.manager.api.dto.request.ServerFileUploadDto;
|
||||
import cn.axzo.oss.manager.api.dto.request.SignUploadTokenDto;
|
||||
import cn.axzo.oss.manager.api.dto.request.SignUrlDownloadDto;
|
||||
import cn.axzo.oss.manager.api.dto.request.SignUrlUploadDto;
|
||||
import cn.axzo.oss.manager.api.dto.request.file.DeleteObjectsFileDto;
|
||||
@ -64,7 +62,6 @@ import cn.axzo.oss.manager.api.dto.response.ServerFileDownloadResponse;
|
||||
import cn.axzo.oss.manager.api.dto.response.ServerFileUploadResponse;
|
||||
import cn.axzo.oss.manager.api.dto.response.SignUrlDownloadResponse;
|
||||
import cn.axzo.oss.manager.api.dto.response.SignUrlUploadResponse;
|
||||
import cn.axzo.oss.manager.api.dto.response.UploadTokenResponse;
|
||||
import cn.axzo.oss.service.api.FileService;
|
||||
import cn.axzo.oss.service.metafile.WithFileFactory;
|
||||
import cn.axzo.oss.service.metafile.WithFileService;
|
||||
@ -1354,7 +1351,10 @@ public class FileServiceImpl implements FileService {
|
||||
*/
|
||||
private List<CopyObjectCloudDto> doBatchCopyObjectByFiles(Map<String, FileCopyObjectDto> reqFileKeyMap, List<File> fileList, AppInfoDto appInfoDto) {
|
||||
List<CopyObjectCloudDto> returnList = Lists.newArrayList();
|
||||
FileBusinessScene fileBusinessScene = this.fetchBizSceneByAppCodeAndBizScene(appInfoDto);
|
||||
// key:appCode的对象
|
||||
// value:targetAppCode的对象
|
||||
Pair<FileBusinessScene, FileBusinessScene> pair = this.checkBatchCopyObject(appInfoDto);
|
||||
|
||||
for (File file : fileList) {
|
||||
if (Objects.isNull(reqFileKeyMap.get(file.getFileUuid()))) {
|
||||
continue;
|
||||
@ -1363,7 +1363,7 @@ public class FileServiceImpl implements FileService {
|
||||
if (Objects.isNull(fileCopyObjectRequest)) {
|
||||
continue;
|
||||
}
|
||||
CopyObjectCloudDto dto = CopyObjectCloudDto.create(fileCopyObjectRequest, file, fileBusinessScene);
|
||||
CopyObjectCloudDto dto = CopyObjectCloudDto.create(fileCopyObjectRequest, file, pair.getKey(), pair.getValue());
|
||||
|
||||
this.fileManager.copyObjects(dto);
|
||||
returnList.add(dto);
|
||||
@ -1371,10 +1371,20 @@ public class FileServiceImpl implements FileService {
|
||||
return returnList;
|
||||
}
|
||||
|
||||
private FileBusinessScene fetchBizSceneByAppCodeAndBizScene(AppInfoDto appInfoDto) {
|
||||
private Pair<FileBusinessScene,FileBusinessScene> checkBatchCopyObject(AppInfoDto appInfoDto) {
|
||||
FileBusinessScene fileBusinessScene = this.fetchBizSceneByAppCodeAndBizScene(appInfoDto.getAppCode(), appInfoDto.getBizScene());
|
||||
FileBusinessScene targetFileBiz = null;
|
||||
if (StringUtils.isNotBlank(appInfoDto.getTargetAppCode()) && StringUtils.isNotBlank(appInfoDto.getTargetBizScene())) {
|
||||
targetFileBiz = this.fetchBizSceneByAppCodeAndBizScene(appInfoDto.getTargetAppCode(), appInfoDto.getTargetBizScene());
|
||||
BizException.error(Utility.objIsNotNull(targetFileBiz), CodeEnum.FILE_TARGET_APP_IS_EMPTY);
|
||||
}
|
||||
return Pair.of(fileBusinessScene, targetFileBiz);
|
||||
}
|
||||
|
||||
private FileBusinessScene fetchBizSceneByAppCodeAndBizScene(String appCode, String bizScene) {
|
||||
List<FileBusinessScene> list = this.fileBusinessSceneManager.findByCondition(FileBusinessSceneVo.builder()
|
||||
.appCode(appInfoDto.getAppCode())
|
||||
.businessScene(appInfoDto.getBizScene())
|
||||
.appCode(appCode)
|
||||
.businessScene(bizScene)
|
||||
.build());
|
||||
AssertUtil.notEmpty(list, "文件业务场景未配置");
|
||||
AssertUtil.isFalse(list.size() > 1, "文件业务场景匹配多个");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user