diff --git a/pom.xml b/pom.xml index d9f8f1bc..1229b8d2 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ https://github.com/YunaiV/ruoyi-vue-pro - 3.0.1 + 3.0.3 17 ${java.version} @@ -133,6 +133,21 @@ + + + org.apache.maven.plugins + maven-source-plugin + 3.2.1 + + + attach-sources + package + + jar + + + + @@ -188,7 +203,7 @@ ZT 中铜 ZStack 私服 - http://172.16.46.63:30708/repository/maven-hosted/ + http://172.16.46.63:30708/repository/test/ false @@ -199,7 +214,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 a15e1e33..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.1 + 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);