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.basics.common.util.AssertUtil;
|
||||||
import cn.axzo.core.utils.converter.BeanConverter;
|
import cn.axzo.core.utils.converter.BeanConverter;
|
||||||
import cn.axzo.framework.auth.domain.ContextInfo;
|
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.common.utils.BeanConvertUtil;
|
||||||
import cn.axzo.oss.http.api.ServerFileServiceApi;
|
import cn.axzo.oss.http.api.ServerFileServiceApi;
|
||||||
import cn.axzo.oss.http.model.ApiSignUrlDownloadRequest;
|
import cn.axzo.oss.http.model.ApiSignUrlDownloadRequest;
|
||||||
@ -245,7 +246,7 @@ public class ServerFileController implements ServerFileServiceApi {
|
|||||||
public CommonResponse<ServerFileBatchCopyObjectResponse> batchCopyObject(@Valid @RequestBody ServerFileBatchCopyObjectRequest request) {
|
public CommonResponse<ServerFileBatchCopyObjectResponse> batchCopyObject(@Valid @RequestBody ServerFileBatchCopyObjectRequest request) {
|
||||||
AssertUtil.isFalse(Objects.isNull(request) || CollectionUtils.isEmpty(request.getCopyObjects()), "入参为空");
|
AssertUtil.isFalse(Objects.isNull(request) || CollectionUtils.isEmpty(request.getCopyObjects()), "入参为空");
|
||||||
List<FileCopyObjectDto> fileCopyObjectDtos = BeanUtil.copyToList(request.getCopyObjects(), FileCopyObjectDto.class);
|
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());
|
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, "获取元文件失败"),
|
GET_OBJECT_META_FAIL(507, "获取元文件失败"),
|
||||||
URL_BUCKET_NAME_KEY_ALL_EMPTY(508, "url-bucketName-key同时为空"),
|
URL_BUCKET_NAME_KEY_ALL_EMPTY(508, "url-bucketName-key同时为空"),
|
||||||
SIGN_URL_DOWNLOAD_FILEKEYS_EXCEEDS_MAXSIZE(509, "fileKeys exceeds the maximum size"),
|
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;
|
private final Integer code;
|
||||||
|
|||||||
@ -27,6 +27,16 @@ public class ServerFileBatchCopyObjectRequest {
|
|||||||
@NotBlank(message = "bizScene must not be null")
|
@NotBlank(message = "bizScene must not be null")
|
||||||
private String bizScene;
|
private String bizScene;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 目标appCode
|
||||||
|
*/
|
||||||
|
private String targetAppCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 目标bizScene
|
||||||
|
*/
|
||||||
|
private String targetBizScene;
|
||||||
|
|
||||||
@NotEmpty(message = "集合对象不能为空")
|
@NotEmpty(message = "集合对象不能为空")
|
||||||
private Set<ServerFileCopyObjectRequest> copyObjects;
|
private Set<ServerFileCopyObjectRequest> copyObjects;
|
||||||
|
|
||||||
|
|||||||
@ -25,4 +25,14 @@ public class AppInfoDto {
|
|||||||
*/
|
*/
|
||||||
private String bizScene;
|
private String bizScene;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 目标appCode
|
||||||
|
*/
|
||||||
|
private String targetAppCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 目标bizScene
|
||||||
|
*/
|
||||||
|
private String targetBizScene;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,6 +9,8 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author xudawei@axzo.cn
|
* @author xudawei@axzo.cn
|
||||||
* @date 2025/3/10
|
* @date 2025/3/10
|
||||||
@ -69,13 +71,16 @@ public class CopyObjectCloudDto {
|
|||||||
|
|
||||||
private String appCode;
|
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 targetChannelCode = StringUtils.isBlank(fileCopyObjectRequest.getTargetChannelCode()) ? fileBusinessScene.getChannelCode() : fileCopyObjectRequest.getTargetChannelCode();
|
||||||
String targetBucketName = StringUtils.isBlank(fileCopyObjectRequest.getTargetBucketName()) ? fileBusinessScene.getBucketName() : fileCopyObjectRequest.getTargetBucketName();
|
String targetBucketName = StringUtils.isBlank(fileCopyObjectRequest.getTargetBucketName()) ? fileBusinessScene.getBucketName() : fileCopyObjectRequest.getTargetBucketName();
|
||||||
String targetBucketDict = StringUtils.isBlank(fileCopyObjectRequest.getTargetDict()) ? fileBusinessScene.getDirectory() : fileCopyObjectRequest.getTargetDict();
|
String targetBucketDict = StringUtils.isBlank(fileCopyObjectRequest.getTargetDict()) ? fileBusinessScene.getDirectory() : fileCopyObjectRequest.getTargetDict();
|
||||||
String fileName = StringUtils.isBlank(fileCopyObjectRequest.getTargetFileName()) ? file.getFileName() : fileCopyObjectRequest.getTargetFileName();
|
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();
|
String uuid = Utility.getUUID();
|
||||||
|
|
||||||
return CopyObjectCloudDto.builder()
|
return CopyObjectCloudDto.builder()
|
||||||
@ -90,8 +95,8 @@ public class CopyObjectCloudDto {
|
|||||||
.targetFileName(fileName)
|
.targetFileName(fileName)
|
||||||
.file(file)
|
.file(file)
|
||||||
.fileUuid(fileCopyObjectRequest.getFileUuid())
|
.fileUuid(fileCopyObjectRequest.getFileUuid())
|
||||||
.appChannelBucketNo(fileBusinessScene.getAppChannelBucketNo())
|
.appChannelBucketNo(appChannelBucketNo)
|
||||||
.appCode(fileBusinessScene.getAppCode())
|
.appCode(appCode)
|
||||||
.build();
|
.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.FileAppDao;
|
||||||
import cn.axzo.oss.dal.repository.FileDao;
|
import cn.axzo.oss.dal.repository.FileDao;
|
||||||
import cn.axzo.oss.dal.vo.FileBusinessSceneVo;
|
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.integration.s3.config.HuaWeiCloudObsConfig;
|
||||||
import cn.axzo.oss.manager.api.AppChannelBucketManager;
|
import cn.axzo.oss.manager.api.AppChannelBucketManager;
|
||||||
import cn.axzo.oss.manager.api.FileBusinessSceneManager;
|
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.ServerFileDeleteDto;
|
||||||
import cn.axzo.oss.manager.api.dto.request.ServerFileDownloadDto;
|
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.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.SignUrlDownloadDto;
|
||||||
import cn.axzo.oss.manager.api.dto.request.SignUrlUploadDto;
|
import cn.axzo.oss.manager.api.dto.request.SignUrlUploadDto;
|
||||||
import cn.axzo.oss.manager.api.dto.request.file.DeleteObjectsFileDto;
|
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.ServerFileUploadResponse;
|
||||||
import cn.axzo.oss.manager.api.dto.response.SignUrlDownloadResponse;
|
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.SignUrlUploadResponse;
|
||||||
import cn.axzo.oss.manager.api.dto.response.UploadTokenResponse;
|
|
||||||
import cn.axzo.oss.service.api.FileService;
|
import cn.axzo.oss.service.api.FileService;
|
||||||
import cn.axzo.oss.service.metafile.WithFileFactory;
|
import cn.axzo.oss.service.metafile.WithFileFactory;
|
||||||
import cn.axzo.oss.service.metafile.WithFileService;
|
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) {
|
private List<CopyObjectCloudDto> doBatchCopyObjectByFiles(Map<String, FileCopyObjectDto> reqFileKeyMap, List<File> fileList, AppInfoDto appInfoDto) {
|
||||||
List<CopyObjectCloudDto> returnList = Lists.newArrayList();
|
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) {
|
for (File file : fileList) {
|
||||||
if (Objects.isNull(reqFileKeyMap.get(file.getFileUuid()))) {
|
if (Objects.isNull(reqFileKeyMap.get(file.getFileUuid()))) {
|
||||||
continue;
|
continue;
|
||||||
@ -1363,7 +1363,7 @@ public class FileServiceImpl implements FileService {
|
|||||||
if (Objects.isNull(fileCopyObjectRequest)) {
|
if (Objects.isNull(fileCopyObjectRequest)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
CopyObjectCloudDto dto = CopyObjectCloudDto.create(fileCopyObjectRequest, file, fileBusinessScene);
|
CopyObjectCloudDto dto = CopyObjectCloudDto.create(fileCopyObjectRequest, file, pair.getKey(), pair.getValue());
|
||||||
|
|
||||||
this.fileManager.copyObjects(dto);
|
this.fileManager.copyObjects(dto);
|
||||||
returnList.add(dto);
|
returnList.add(dto);
|
||||||
@ -1371,10 +1371,20 @@ public class FileServiceImpl implements FileService {
|
|||||||
return returnList;
|
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()
|
List<FileBusinessScene> list = this.fileBusinessSceneManager.findByCondition(FileBusinessSceneVo.builder()
|
||||||
.appCode(appInfoDto.getAppCode())
|
.appCode(appCode)
|
||||||
.businessScene(appInfoDto.getBizScene())
|
.businessScene(bizScene)
|
||||||
.build());
|
.build());
|
||||||
AssertUtil.notEmpty(list, "文件业务场景未配置");
|
AssertUtil.notEmpty(list, "文件业务场景未配置");
|
||||||
AssertUtil.isFalse(list.size() > 1, "文件业务场景匹配多个");
|
AssertUtil.isFalse(list.size() > 1, "文件业务场景匹配多个");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user