From 053cee67887cac52e8f6882fa63db3a95aab2ba4 Mon Sep 17 00:00:00 2001 From: chenbowen Date: Tue, 16 Sep 2025 20:40:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=9A=E5=8A=A1=E9=99=84?= =?UTF-8?q?=E4=BB=B6=E6=9F=A5=E8=AF=A2=E6=90=BA=E5=B8=A6=E9=99=84=E4=BB=B6?= =?UTF-8?q?url=E6=8E=A5=E5=8F=A3=E4=B8=8D=E5=AD=98=E5=9C=A8=20=E9=99=84?= =?UTF-8?q?=E4=BB=B6=E6=97=B6=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit f82a2d76eca4fc21d65897519174f46378758990) --- pom.xml | 21 ++++- yudao-dependencies/pom.xml | 4 +- .../businessfile/BusinessFileController.java | 79 ++++++------------- .../file/core/client/s3/S3FileClient.java | 5 ++ .../businessfile/BusinessFileService.java | 3 + .../businessfile/BusinessFileServiceImpl.java | 46 ++++++++++- 6 files changed, 94 insertions(+), 64 deletions(-) diff --git a/pom.xml b/pom.xml index d633bce0..93fd3453 100644 --- a/pom.xml +++ b/pom.xml @@ -71,7 +71,7 @@ https://github.com/YunaiV/ruoyi-vue-pro - 3.0.1 + 3.0.3 17 ${java.version} @@ -172,6 +172,21 @@ + + + org.apache.maven.plugins + maven-source-plugin + 3.2.1 + + + attach-sources + package + + jar + + + + @@ -227,7 +242,7 @@ ZT 中铜 ZStack 私服 - http://172.16.46.63:30708/repository/maven-hosted/ + http://172.16.46.63:30708/repository/test/ false @@ -238,7 +253,7 @@ ZT 中铜 ZStack 私服 - http://172.16.46.63:30708/repository/maven-hosted/ + http://172.16.46.63:30708/repository/test/ diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml index 402f5785..5d353506 100644 --- a/yudao-dependencies/pom.xml +++ b/yudao-dependencies/pom.xml @@ -8,7 +8,7 @@ ZT 中铜 ZStack 私服 - http://172.16.46.63:30708/repository/maven-hosted/ + http://172.16.46.63:30708/repository/test/ @@ -26,7 +26,7 @@ https://github.com/YunaiV/ruoyi-vue-pro - 3.0.2 + 3.0.3 1.6.0 3.4.5 diff --git a/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/businessfile/BusinessFileController.java b/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/businessfile/BusinessFileController.java index a6bc0d83..269d02ee 100644 --- a/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/businessfile/BusinessFileController.java +++ b/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/businessfile/BusinessFileController.java @@ -1,35 +1,33 @@ package cn.iocoder.yudao.module.infra.controller.admin.businessfile; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import jakarta.validation.constraints.*; -import jakarta.validation.*; -import jakarta.servlet.http.*; -import java.util.*; -import java.io.IOException; - +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; -import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; - -import cn.iocoder.yudao.module.infra.controller.admin.businessfile.vo.*; +import cn.iocoder.yudao.module.infra.controller.admin.businessfile.vo.BusinessFilePageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.businessfile.vo.BusinessFileRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.businessfile.vo.BusinessFileSaveReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.businessfile.vo.BusinessFileWithUrlRespVO; import cn.iocoder.yudao.module.infra.dal.dataobject.businessfile.BusinessFileDO; -import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO; import cn.iocoder.yudao.module.infra.service.businessfile.BusinessFileService; import cn.iocoder.yudao.module.infra.service.file.FileService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 业务附件关联") @RestController @@ -104,40 +102,7 @@ public class BusinessFileController { @Operation(summary = "获得业务附件关联分页(带URL)") @PreAuthorize("@ss.hasPermission('infra:business-file:query')") public CommonResult> getBusinessFilePageWithUrl(@Valid BusinessFilePageReqVO pageReqVO) { - PageResult pageResult = businessFileService.getBusinessFilePage(pageReqVO); - PageResult result = BeanUtils.toBean(pageResult, BusinessFileWithUrlRespVO.class); - - // 批量获取文件信息并设置URL - List fileIds = result.getList().stream() - .map(BusinessFileWithUrlRespVO::getFileId) - .filter(Objects::nonNull) - .distinct() - .toList(); - - // 批量查询文件信息 - Map fileMap = new HashMap<>(); - for (Long fileId : fileIds) { - FileDO fileDO = fileService.getActiveFileById(fileId); - if (fileDO != null) { - fileMap.put(fileId, fileDO); - } - } - - // 设置文件相关信息 - for (BusinessFileWithUrlRespVO vo : result.getList()) { - if (vo.getFileId() != null) { - FileDO fileDO = fileMap.get(vo.getFileId()); - if (fileDO != null) { - vo.setFilePath(fileDO.getPath()); - vo.setFileUrl(fileDO.getUrl()); - vo.setIsEncrypted(fileDO.getIsEncrypted()); - vo.setFileType(fileDO.getType()); - vo.setFileSize(fileDO.getSize()); - } - } - } - - return success(result); + return success(businessFileService.getBusinessFilePageWithUrl(pageReqVO)); } @GetMapping("/export-excel") diff --git a/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/s3/S3FileClient.java b/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/s3/S3FileClient.java index 3e2b2a6c..cebb848e 100644 --- a/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/s3/S3FileClient.java +++ b/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/s3/S3FileClient.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import cn.iocoder.yudao.framework.common.util.spring.SpringUtils; import cn.iocoder.yudao.module.infra.framework.file.core.client.AbstractFileClient; +import org.apache.commons.lang3.StringUtils; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; @@ -47,6 +48,10 @@ public class S3FileClient extends AbstractFileClient { } catch (Exception ignored) {} realExpiration = Duration.ofSeconds(expireSeconds); } + if (path == null){ + return StringUtils.EMPTY; + } + // 使用 S3 官方支持的 responseCacheControl 参数,强制浏览器和代理不缓存 GetObjectRequest.Builder getObjectRequestBuilder = GetObjectRequest.builder() .bucket(config.getBucket()) diff --git a/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/service/businessfile/BusinessFileService.java b/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/service/businessfile/BusinessFileService.java index 21bfc094..d6d2f26d 100644 --- a/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/service/businessfile/BusinessFileService.java +++ b/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/service/businessfile/BusinessFileService.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.infra.service.businessfile; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.infra.controller.admin.businessfile.vo.BusinessFilePageReqVO; import cn.iocoder.yudao.module.infra.controller.admin.businessfile.vo.BusinessFileSaveReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.businessfile.vo.BusinessFileWithUrlRespVO; import cn.iocoder.yudao.module.infra.dal.dataobject.businessfile.BusinessFileDO; import jakarta.validation.Valid; @@ -60,6 +61,8 @@ public interface BusinessFileService { */ PageResult getBusinessFilePage(BusinessFilePageReqVO pageReqVO); + PageResult getBusinessFilePageWithUrl(BusinessFilePageReqVO pageReqVO); + List batchCreateBusinessFile(List createReqVOList); /** diff --git a/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/service/businessfile/BusinessFileServiceImpl.java b/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/service/businessfile/BusinessFileServiceImpl.java index 1098f0d7..fd1b0031 100644 --- a/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/service/businessfile/BusinessFileServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-server/src/main/java/cn/iocoder/yudao/module/infra/service/businessfile/BusinessFileServiceImpl.java @@ -6,14 +6,16 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.infra.controller.admin.businessfile.vo.BusinessFilePageReqVO; import cn.iocoder.yudao.module.infra.controller.admin.businessfile.vo.BusinessFileSaveReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.businessfile.vo.BusinessFileWithUrlRespVO; import cn.iocoder.yudao.module.infra.dal.dataobject.businessfile.BusinessFileDO; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO; import cn.iocoder.yudao.module.infra.dal.mysql.businessfile.BusinessFileMapper; +import cn.iocoder.yudao.module.infra.service.file.FileService; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; -import java.util.ArrayList; -import java.util.List; +import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.BUSINESS_FILE_NOT_EXISTS; @@ -30,6 +32,9 @@ public class BusinessFileServiceImpl implements BusinessFileService { @Resource private BusinessFileMapper businessFileMapper; + @Resource + private FileService fileService; + @Override public Long createBusinessFile(BusinessFileSaveReqVO createReqVO) { // 插入 @@ -87,6 +92,43 @@ public class BusinessFileServiceImpl implements BusinessFileService { return businessFileMapper.selectPage(pageReqVO); } + @Override + public PageResult getBusinessFilePageWithUrl(BusinessFilePageReqVO pageReqVO) { + PageResult pageResult = getBusinessFilePage(pageReqVO); + PageResult result = BeanUtils.toBean(pageResult, BusinessFileWithUrlRespVO.class); + + // 批量获取文件信息并设置URL + List fileIds = result.getList().stream() + .map(BusinessFileWithUrlRespVO::getFileId) + .filter(Objects::nonNull) + .distinct() + .toList(); + + // 批量查询文件信息 + Map fileMap = new HashMap<>(); + for (Long fileId : fileIds) { + FileDO fileDO = fileService.getActiveFileById(fileId); + if (fileDO != null) { + fileMap.put(fileId, fileDO); + } + } + + // 设置文件相关信息 + for (BusinessFileWithUrlRespVO vo : result.getList()) { + if (vo.getFileId() != null) { + FileDO fileDO = fileMap.get(vo.getFileId()); + if (fileDO != null) { + vo.setFilePath(fileDO.getPath()); + vo.setFileUrl(fileDO.getUrl()); + vo.setIsEncrypted(fileDO.getIsEncrypted()); + vo.setFileType(fileDO.getType()); + vo.setFileSize(fileDO.getSize()); + } + } + } + return result; + } + @Override public List batchCreateBusinessFile(List createReqVOList) { List businessFileList = BeanUtils.toBean(createReqVOList, BusinessFileDO.class);