修复业务附件查询携带附件url接口不存在 附件时的错误
This commit is contained in:
21
pom.xml
21
pom.xml
@@ -32,7 +32,7 @@
|
||||
<url>https://github.com/YunaiV/ruoyi-vue-pro</url>
|
||||
|
||||
<properties>
|
||||
<revision>3.0.1</revision>
|
||||
<revision>3.0.3</revision>
|
||||
<!-- Maven 相关 -->
|
||||
<java.version>17</java.version>
|
||||
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||
@@ -133,6 +133,21 @@
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<version>3.2.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-sources</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
<resources>
|
||||
<!-- 只对 yaml 文件过滤 -->
|
||||
@@ -188,7 +203,7 @@
|
||||
<repository>
|
||||
<id>ZT</id>
|
||||
<name>中铜 ZStack 私服</name>
|
||||
<url>http://172.16.46.63:30708/repository/maven-hosted/</url>
|
||||
<url>http://172.16.46.63:30708/repository/test/</url>
|
||||
<releases>
|
||||
<enabled>false</enabled>
|
||||
</releases>
|
||||
@@ -199,7 +214,7 @@
|
||||
<repository>
|
||||
<id>ZT</id>
|
||||
<name>中铜 ZStack 私服</name>
|
||||
<url>http://172.16.46.63:30708/repository/maven-hosted/</url>
|
||||
<url>http://172.16.46.63:30708/repository/test/</url>
|
||||
</repository>
|
||||
<!-- <snapshotRepository>-->
|
||||
<!-- <id>ZT</id>-->
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<repository>
|
||||
<id>ZT</id>
|
||||
<name>中铜 ZStack 私服</name>
|
||||
<url>http://172.16.46.63:30708/repository/maven-hosted/</url>
|
||||
<url>http://172.16.46.63:30708/repository/test/</url>
|
||||
</repository>
|
||||
<!-- <snapshotRepository>-->
|
||||
<!-- <id>ZT</id>-->
|
||||
@@ -26,7 +26,7 @@
|
||||
<url>https://github.com/YunaiV/ruoyi-vue-pro</url>
|
||||
|
||||
<properties>
|
||||
<revision>3.0.1</revision>
|
||||
<revision>3.0.3</revision>
|
||||
<flatten-maven-plugin.version>1.6.0</flatten-maven-plugin.version>
|
||||
<!-- 统一依赖管理 -->
|
||||
<spring.boot.version>3.4.5</spring.boot.version>
|
||||
|
||||
@@ -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<PageResult<BusinessFileWithUrlRespVO>> getBusinessFilePageWithUrl(@Valid BusinessFilePageReqVO pageReqVO) {
|
||||
PageResult<BusinessFileDO> pageResult = businessFileService.getBusinessFilePage(pageReqVO);
|
||||
PageResult<BusinessFileWithUrlRespVO> result = BeanUtils.toBean(pageResult, BusinessFileWithUrlRespVO.class);
|
||||
|
||||
// 批量获取文件信息并设置URL
|
||||
List<Long> fileIds = result.getList().stream()
|
||||
.map(BusinessFileWithUrlRespVO::getFileId)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.toList();
|
||||
|
||||
// 批量查询文件信息
|
||||
Map<Long, FileDO> 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")
|
||||
|
||||
@@ -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<S3FileClientConfig> {
|
||||
} catch (Exception ignored) {}
|
||||
realExpiration = Duration.ofSeconds(expireSeconds);
|
||||
}
|
||||
if (path == null){
|
||||
return StringUtils.EMPTY;
|
||||
}
|
||||
|
||||
// 使用 S3 官方支持的 responseCacheControl 参数,强制浏览器和代理不缓存
|
||||
GetObjectRequest.Builder getObjectRequestBuilder = GetObjectRequest.builder()
|
||||
.bucket(config.getBucket())
|
||||
|
||||
@@ -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<BusinessFileDO> getBusinessFilePage(BusinessFilePageReqVO pageReqVO);
|
||||
|
||||
PageResult<BusinessFileWithUrlRespVO> getBusinessFilePageWithUrl(BusinessFilePageReqVO pageReqVO);
|
||||
|
||||
List<Long> batchCreateBusinessFile(List<BusinessFileSaveReqVO> createReqVOList);
|
||||
|
||||
/**
|
||||
|
||||
@@ -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<BusinessFileWithUrlRespVO> getBusinessFilePageWithUrl(BusinessFilePageReqVO pageReqVO) {
|
||||
PageResult<BusinessFileDO> pageResult = getBusinessFilePage(pageReqVO);
|
||||
PageResult<BusinessFileWithUrlRespVO> result = BeanUtils.toBean(pageResult, BusinessFileWithUrlRespVO.class);
|
||||
|
||||
// 批量获取文件信息并设置URL
|
||||
List<Long> fileIds = result.getList().stream()
|
||||
.map(BusinessFileWithUrlRespVO::getFileId)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.toList();
|
||||
|
||||
// 批量查询文件信息
|
||||
Map<Long, FileDO> 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<Long> batchCreateBusinessFile(List<BusinessFileSaveReqVO> createReqVOList) {
|
||||
List<BusinessFileDO> businessFileList = BeanUtils.toBean(createReqVOList, BusinessFileDO.class);
|
||||
|
||||
Reference in New Issue
Block a user