From 5d03e66a005a5401c1ff50669e0d6913c28611ec Mon Sep 17 00:00:00 2001 From: xudawei Date: Wed, 12 Mar 2025 17:41:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:(REQ-3540)=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=8E=A5=E5=8F=A3=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ServerFileController.java | 11 ++++ .../cn/axzo/oss/dal/repository/FileDao.java | 6 ++ .../oss/dal/repository/impl/FileDaoImpl.java | 16 ++++++ .../oss/http/api/ServerFileServiceApi.java | 8 +++ .../model/file/UpdateFileInfoRequest.java | 44 +++++++++++++++ .../model/file/UpdateFileInfoResponse.java | 27 +++++++++ .../dto/request/file/UpdateFileInfoDto.java | 55 +++++++++++++++++++ .../cn/axzo/oss/service/api/FileService.java | 6 ++ .../oss/service/impl/FileServiceImpl.java | 38 +++++++++++++ 9 files changed, 211 insertions(+) create mode 100644 oss-http-api/src/main/java/cn/axzo/oss/http/model/file/UpdateFileInfoRequest.java create mode 100644 oss-http-api/src/main/java/cn/axzo/oss/http/model/file/UpdateFileInfoResponse.java create mode 100644 oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/file/UpdateFileInfoDto.java diff --git a/oss-client/src/main/java/cn/axzo/oss/client/controller/ServerFileController.java b/oss-client/src/main/java/cn/axzo/oss/client/controller/ServerFileController.java index f4fbe75..bfbbacd 100644 --- a/oss-client/src/main/java/cn/axzo/oss/client/controller/ServerFileController.java +++ b/oss-client/src/main/java/cn/axzo/oss/client/controller/ServerFileController.java @@ -29,6 +29,8 @@ import cn.axzo.oss.http.model.ServerFileUploadResponse; import cn.axzo.oss.http.model.ServerFileUploadV2Request; import cn.axzo.oss.http.model.copyobject.ServerFileBatchCopyObjectRequest; import cn.axzo.oss.http.model.copyobject.ServerFileBatchCopyObjectResponse; +import cn.axzo.oss.http.model.file.UpdateFileInfoRequest; +import cn.axzo.oss.http.model.file.UpdateFileInfoResponse; import cn.axzo.oss.manager.api.dto.request.FileCopyObjectDto; import cn.axzo.oss.manager.api.dto.request.FindFileKeyDto; import cn.axzo.oss.manager.api.dto.request.FindFileUrlDto; @@ -39,6 +41,7 @@ import cn.axzo.oss.manager.api.dto.request.ServerFileUploadByUrlDto; import cn.axzo.oss.manager.api.dto.request.ServerFileUploadDto; 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.UpdateFileInfoDto; import cn.axzo.oss.manager.api.dto.response.FileCopyObjectResponse; import cn.axzo.oss.service.api.FileByUrlService; import cn.axzo.oss.service.api.FileCopyToDictService; @@ -239,4 +242,12 @@ public class ServerFileController implements ServerFileServiceApi { List fileCopyObjectResponses = fileService.batchCopyObject(fileCopyObjectDtos, request.getAppCode()); return CommonResponse.success(ServerFileBatchCopyObjectResponse.builder().responses(BeanUtil.copyToList(fileCopyObjectResponses, ServerFileBatchCopyObjectResponse.ServerFileCopyObjectResponse.class)).build()); } + + /** + * 更新文件信息 + */ + public CommonResponse updateFileInfo(@Valid @RequestBody UpdateFileInfoRequest request) { + UpdateFileInfoDto updateFileInfoDto = BeanUtil.copyProperties(request, UpdateFileInfoDto.class); + return CommonResponse.success(UpdateFileInfoResponse.builder().updateFlag(this.fileService.updateFileInfo(updateFileInfoDto)).build()); + } } diff --git a/oss-dal/src/main/java/cn/axzo/oss/dal/repository/FileDao.java b/oss-dal/src/main/java/cn/axzo/oss/dal/repository/FileDao.java index 94afb29..a66d9f6 100644 --- a/oss-dal/src/main/java/cn/axzo/oss/dal/repository/FileDao.java +++ b/oss-dal/src/main/java/cn/axzo/oss/dal/repository/FileDao.java @@ -32,4 +32,10 @@ public interface FileDao extends IService { File getByUrlMd5(String urlMd5); boolean deleteFile(String fileUuid); + + /** + * 更新文件 + * 目前只有文件名称更新,后续有其他属性可以添加 + */ + boolean updateFileById(File file); } diff --git a/oss-dal/src/main/java/cn/axzo/oss/dal/repository/impl/FileDaoImpl.java b/oss-dal/src/main/java/cn/axzo/oss/dal/repository/impl/FileDaoImpl.java index d371845..1db07d7 100644 --- a/oss-dal/src/main/java/cn/axzo/oss/dal/repository/impl/FileDaoImpl.java +++ b/oss-dal/src/main/java/cn/axzo/oss/dal/repository/impl/FileDaoImpl.java @@ -10,9 +10,11 @@ import cn.axzo.oss.dal.repository.FileDao; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Objects; /** *

@@ -75,4 +77,18 @@ public class FileDaoImpl extends ServiceImpl implements FileDa .set(File::getStatus, FileStatusEnum.STATUS_DELETE.getCode()) .set(File::getIsDelete, IsDeleteEnum.YES.getCode()).update(); } + + /** + * 更新文件 + * 目前只有文件名称更新,后续有其他属性可以添加 + */ + @Override + public boolean updateFileById(File file) { + if (Objects.isNull(file) || Objects.isNull(file.getId()) || StringUtils.isBlank(file.getFileUuid())) { + return false; + } + return lambdaUpdate().eq(File::getId, file.getId()) + .set(StringUtils.isNotBlank(file.getFileName()), File::getFileName, file.getFileName()) + .update(); + } } diff --git a/oss-http-api/src/main/java/cn/axzo/oss/http/api/ServerFileServiceApi.java b/oss-http-api/src/main/java/cn/axzo/oss/http/api/ServerFileServiceApi.java index 3694a53..02574f0 100644 --- a/oss-http-api/src/main/java/cn/axzo/oss/http/api/ServerFileServiceApi.java +++ b/oss-http-api/src/main/java/cn/axzo/oss/http/api/ServerFileServiceApi.java @@ -24,6 +24,8 @@ import cn.axzo.oss.http.model.ServerFileUploadResponse; import cn.axzo.oss.http.model.ServerFileUploadV2Request; import cn.axzo.oss.http.model.copyobject.ServerFileBatchCopyObjectRequest; import cn.axzo.oss.http.model.copyobject.ServerFileBatchCopyObjectResponse; +import cn.axzo.oss.http.model.file.UpdateFileInfoRequest; +import cn.axzo.oss.http.model.file.UpdateFileInfoResponse; import cn.azxo.framework.common.model.CommonResponse; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.RequestBody; @@ -143,4 +145,10 @@ public interface ServerFileServiceApi { @RequestMapping(value = "/api/server/batchCopyObject", method = RequestMethod.POST) CommonResponse batchCopyObject(@Valid @RequestBody ServerFileBatchCopyObjectRequest request); + /** + * 更新文件信息 + */ + @RequestMapping(value = "/api/server/batchCopyObject", method = RequestMethod.POST) + CommonResponse updateFileInfo(@Valid @RequestBody UpdateFileInfoRequest request); + } diff --git a/oss-http-api/src/main/java/cn/axzo/oss/http/model/file/UpdateFileInfoRequest.java b/oss-http-api/src/main/java/cn/axzo/oss/http/model/file/UpdateFileInfoRequest.java new file mode 100644 index 0000000..fee9c47 --- /dev/null +++ b/oss-http-api/src/main/java/cn/axzo/oss/http/model/file/UpdateFileInfoRequest.java @@ -0,0 +1,44 @@ +package cn.axzo.oss.http.model.file; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 更新文件请求 + * + * @author xudawei + * @date 2025-03-12 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class UpdateFileInfoRequest { + /** + * 文件Id + */ + private Long fileId; + /** + * 文件fileKey + */ + private String fileKey; + + /** + * 需要更新属性 + */ + private UpdateFileInfo updateFileInfo; + + @Data + @AllArgsConstructor + @NoArgsConstructor + @Builder + public static class UpdateFileInfo{ + /** + * 文件名称 + */ + private String fileName; + } + +} diff --git a/oss-http-api/src/main/java/cn/axzo/oss/http/model/file/UpdateFileInfoResponse.java b/oss-http-api/src/main/java/cn/axzo/oss/http/model/file/UpdateFileInfoResponse.java new file mode 100644 index 0000000..23489e9 --- /dev/null +++ b/oss-http-api/src/main/java/cn/axzo/oss/http/model/file/UpdateFileInfoResponse.java @@ -0,0 +1,27 @@ +package cn.axzo.oss.http.model.file; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 文件更新返回 + * + * @author xudawei + * @date 2025-03-12 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class UpdateFileInfoResponse { + + /** + * 文件Id + */ + private boolean updateFlag; + +} diff --git a/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/file/UpdateFileInfoDto.java b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/file/UpdateFileInfoDto.java new file mode 100644 index 0000000..c73d4d7 --- /dev/null +++ b/oss-manager-api/src/main/java/cn/axzo/oss/manager/api/dto/request/file/UpdateFileInfoDto.java @@ -0,0 +1,55 @@ +package cn.axzo.oss.manager.api.dto.request.file; + +import cn.axzo.oss.dal.entity.File; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author xudawei@axzo.cn + * @date 2025/3/12 + * @description 更新文件信息 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UpdateFileInfoDto { + + /** + * 文件Id + */ + private Long fileId; + /** + * 文件fileKey + */ + private String fileKey; + + /** + * 需要更新属性 + */ + private UpdateFileInfo updateFileInfo; + + @Data + @AllArgsConstructor + @NoArgsConstructor + @Builder + public static class UpdateFileInfo{ + /** + * 文件名称 + */ + private String fileName; + } + + /** + * 创建文件 + */ + public static File create(Long id, UpdateFileInfo updateFileInfo){ + File file = new File(); + file.setId(id); + file.setFileName(updateFileInfo.getFileName()); + return file; + } + +} diff --git a/oss-service-api/src/main/java/cn/axzo/oss/service/api/FileService.java b/oss-service-api/src/main/java/cn/axzo/oss/service/api/FileService.java index 2194d9f..d16738a 100644 --- a/oss-service-api/src/main/java/cn/axzo/oss/service/api/FileService.java +++ b/oss-service-api/src/main/java/cn/axzo/oss/service/api/FileService.java @@ -17,6 +17,7 @@ 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.SignUrlDownloadDto; import cn.axzo.oss.manager.api.dto.request.SignUrlUploadDto; +import cn.axzo.oss.manager.api.dto.request.file.UpdateFileInfoDto; import cn.axzo.oss.manager.api.dto.response.FileCopyObjectResponse; import cn.axzo.oss.manager.api.dto.response.FileInformationResponse; import cn.axzo.oss.manager.api.dto.response.FindFileKeyResponse; @@ -126,4 +127,9 @@ public interface FileService { * 2 相同通道,则直接调用复制方法 */ List batchCopyObject(List dtoList, String appCode); + + /** + * 更新文件信息 + */ + boolean updateFileInfo(UpdateFileInfoDto updateFileInfoDto); } diff --git a/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java b/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java index 81d9dd0..5b88c29 100644 --- a/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java +++ b/oss-service/src/main/java/cn/axzo/oss/service/impl/FileServiceImpl.java @@ -47,6 +47,7 @@ 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.SignUrlDownloadDto; import cn.axzo.oss.manager.api.dto.request.SignUrlUploadDto; +import cn.axzo.oss.manager.api.dto.request.file.UpdateFileInfoDto; import cn.axzo.oss.manager.api.dto.response.FileCopyObjectResponse; import cn.axzo.oss.manager.api.dto.response.FileInformationResponse; import cn.axzo.oss.manager.api.dto.response.FindFileKeyResponse; @@ -1363,4 +1364,41 @@ public class FileServiceImpl implements FileService { return returnList; } + /** + * 更新文件信息 + */ + @Override + public boolean updateFileInfo(UpdateFileInfoDto updateFileInfoDto) { + //构建需要更新的信息 + //1 fileId有值,则用fileId直接更新文件信息 + //2 fileId无值,fileKey有值,则用fileKey查询file信息 + File file = this.buildUpdateFileInfo(updateFileInfoDto); + if (Objects.isNull(file)) { + return false; + } + return this.fileDao.updateFileById(file); + } + + /** + * 构建需要更新的信息 + * 1 fileId有值,则用fileId直接更新文件信息 + * 2 fileId无值,fileKey有值,则用fileKey查询file信息 + */ + private File buildUpdateFileInfo(UpdateFileInfoDto updateFileInfoDto) { + //fileId有值,则用fileId直接更新文件信息 + if (Objects.nonNull(updateFileInfoDto.getFileId())) { + return UpdateFileInfoDto.create(updateFileInfoDto.getFileId(), updateFileInfoDto.getUpdateFileInfo()); + } else { + //fileId无值,fileKey有值,则用fileKey查询file信息 + //根据查询file信息更新文件 + if (StringUtils.isNotBlank(updateFileInfoDto.getFileKey())) { + File byFileUuid = this.fileDao.getByFileUuid(updateFileInfoDto.getFileKey()); + if (Objects.isNull(byFileUuid)) { + return null; + } + return UpdateFileInfoDto.create(byFileUuid.getId(), updateFileInfoDto.getUpdateFileInfo()); + } + } + return null; + } }