Commit 642f8f53 by zhangxingmin

Merge remote-tracking branch 'origin/dev' into prod

parents c5866e47 93314088
......@@ -25,7 +25,7 @@ public class ApiPdfController implements ApiPdfFeignClient {
private ApiPdfService apiPdfService;
/**
* 根据文件模板填充数据生成PDF
* 根据文件模板填充数据生成PDF ****
* @param request
* @return
*/
......
......@@ -58,16 +58,25 @@ public class ApiExcelServiceImpl implements ApiExcelService {
// 根据项目ID获取服务商信息
OssProvider provider = ossProviderService.getProviderByProjectId(request.getProjectBizId());
if (provider == null) {
log.error("未找到项目对应的OSS服务商,projectBizId={}", request.getProjectBizId());
return Result.fail("未找到对应的OSS服务商配置");
throw new BusinessException("未找到项目对应的OSS提供商,projectBizId=" + request.getProjectBizId());
}
OSS ossClient = null;
try {
ossClient = ossClientFactory.createOssClient(provider);
String url = appointmentExcelService.exportAppointment(request.getData(),
request.getTemplateType(),
request.getAppointmentBizId(),
ossClient,provider);
response.setUrl(url);
return Result.success(response);
}catch (Exception e) {
log.error("导出excel-预约信息异常:{}",e.getMessage());
throw new BusinessException("导出excel-预约信息异常");
}finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
OSS tempClient = ossClientFactory.createOssClient(provider);
String url = appointmentExcelService.exportAppointment(request.getData(),
request.getTemplateType(),
request.getAppointmentBizId(),
request.getProjectBizId());
response.setUrl(url);
return Result.success(response);
}
/**
......
package com.yd.oss.api.service.impl;
import com.aliyun.oss.OSS;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.oss.api.service.ApiMaterialService;
import com.yd.oss.feign.dto.ApiMaterialDto;
......@@ -7,11 +9,14 @@ import com.yd.oss.feign.request.ApiMaterialDownloadRequest;
import com.yd.oss.feign.request.ApiMaterialListRequest;
import com.yd.oss.feign.response.ApiMaterialDownloadResponse;
import com.yd.oss.feign.response.ApiMaterialListResponse;
import com.yd.oss.service.config.OssClientFactory;
import com.yd.oss.service.dto.MaterialDto;
import com.yd.oss.service.model.Material;
import com.yd.oss.service.model.OssProvider;
import com.yd.oss.service.model.RelObjectMaterial;
import com.yd.oss.service.service.CompressedFileService;
import com.yd.oss.service.service.IMaterialService;
import com.yd.oss.service.service.IOssProviderService;
import com.yd.oss.service.service.IRelObjectMaterialService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
......@@ -35,6 +40,12 @@ public class ApiMaterialServiceImpl implements ApiMaterialService {
@Autowired
private IRelObjectMaterialService iRelObjectMaterialService;
@Autowired
private IOssProviderService ossProviderService;
@Autowired
private OssClientFactory ossClientFactory;
/**
* 列表查询-材料基础信息
* @param request
......@@ -61,18 +72,21 @@ public class ApiMaterialServiceImpl implements ApiMaterialService {
*/
@Override
public Result<ApiMaterialDownloadResponse> downloadCompressedFile(ApiMaterialDownloadRequest request) {
// if (StringUtils.isNotBlank(request.getObjectBizId())) {
// List<ApiMaterialDto> apiMaterialDtoList = new ArrayList<>();
// List<RelObjectMaterial> relObjectMaterialList = iRelObjectMaterialService.queryList(request.getObjectBizId());
// if (!CollectionUtils.isEmpty(relObjectMaterialList)) {
// List<String> materialBizIdList = relObjectMaterialList.stream().map(RelObjectMaterial::getMaterialBizId).collect(Collectors.toList());
//
// for (RelObjectMaterial relObjectMaterial : relObjectMaterialList) {
//
// }
// }
// }
return compressedFileService.downloadCompressedFile(request);
// 获取提供商
OssProvider provider = ossProviderService.getProviderByProjectId(request.getProjectBizId());
if (provider == null) {
throw new BusinessException("未找到项目对应的OSS提供商,projectBizId=" + request.getProjectBizId());
}
OSS ossClient = null;
try {
ossClient = ossClientFactory.createOssClient(provider);
return compressedFileService.downloadCompressedFile(request,ossClient,provider);
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
......
package com.yd.oss.api.service.impl;
import com.aliyun.oss.OSS;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.oss.api.service.ApiPdfService;
import com.yd.oss.feign.request.ApiGeneratePdfRequest;
import com.yd.oss.feign.response.ApiGeneratePdfResponse;
import com.yd.oss.service.config.OssClientFactory;
import com.yd.oss.service.model.OssProvider;
import com.yd.oss.service.service.IOssProviderService;
import com.yd.oss.service.service.PdfService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -18,6 +22,12 @@ public class ApiPdfServiceImpl implements ApiPdfService {
@Autowired
private PdfService pdfService;
@Autowired
private IOssProviderService ossProviderService;
@Autowired
private OssClientFactory ossClientFactory;
/**
* 根据文件模板填充数据生成PDF
* @param request
......@@ -26,13 +36,29 @@ public class ApiPdfServiceImpl implements ApiPdfService {
@Override
public Result<ApiGeneratePdfResponse> generatePDF(ApiGeneratePdfRequest request) {
ApiGeneratePdfResponse response = new ApiGeneratePdfResponse();
// 根据项目ID获取OSS提供商
OssProvider provider = ossProviderService.getProviderByProjectId(request.getProjectBizId());
if (provider == null) {
throw new BusinessException("未找到项目对应的OSS提供商,projectBizId=" + request.getProjectBizId());
}
OSS ossClient = null;
try {
String url = pdfService.generatePDF(request.getDataObject(),request.getObjectId(),request.getTemplateType(),request.getCustomFileName());
//根据提供商创建OSS
ossClient = ossClientFactory.createOssClient(provider);
String url = pdfService.generatePDF(request.getDataObject(),
request.getObjectId(),
request.getTemplateType(),
request.getCustomFileName(),
provider,ossClient);
response.setUrl(url);
return Result.success(response);
} catch (IOException e) {
e.printStackTrace();
throw new BusinessException("生成PDF异常");
}finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
......@@ -26,6 +26,45 @@
</content>
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-sts:3.0.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.6.0" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.jaxb:jaxb-runtime:2.3.6" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.jaxb:txw2:2.3.6" level="project" />
<orderEntry type="library" name="Maven: com.sun.istack:istack-commons-runtime:3.0.12" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
<orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.7" level="project" />
<orderEntry type="library" name="Maven: com.documents4j:documents4j-local:1.1.12" level="project" />
<orderEntry type="library" name="Maven: com.documents4j:documents4j-api:1.1.12" level="project" />
<orderEntry type="library" name="Maven: com.documents4j:documents4j-transformer:1.1.12" level="project" />
<orderEntry type="library" name="Maven: com.documents4j:documents4j-util-conversion:1.1.12" level="project" />
<orderEntry type="library" name="Maven: org.zeroturnaround:zt-exec:1.11" level="project" />
<orderEntry type="library" name="Maven: com.documents4j:documents4j-transformer-msoffice-word:1.1.12" level="project" />
<orderEntry type="library" name="Maven: com.documents4j:documents4j-transformer-msoffice-base:1.1.12" level="project" />
<orderEntry type="library" name="Maven: com.documents4j:documents4j-transformer-api:1.1.12" level="project" />
<orderEntry type="library" name="Maven: com.documents4j:documents4j-util-all:1.1.12" level="project" />
<orderEntry type="library" name="Maven: com.documents4j:documents4j-util-transformer-process:1.1.12" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi:5.2.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-math3:3.6.1" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:SparseBitSet:1.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:5.2.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-lite:5.2.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.21" level="project" />
<orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.07" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:5.1.1" level="project" />
<orderEntry type="library" name="Maven: cn.afterturn:easypoi-base:4.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:4.1.1" level="project" />
<orderEntry type="library" name="Maven: ognl:ognl:3.2.6" level="project" />
<orderEntry type="library" name="Maven: org.javassist:javassist:3.20.0-GA" level="project" />
<orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
<orderEntry type="library" name="Maven: cn.afterturn:easypoi-web:4.4.0" level="project" />
<orderEntry type="library" name="Maven: cn.afterturn:easypoi-annotation:4.4.0" level="project" />
<orderEntry type="library" name="Maven: org.jxls:jxls:2.12.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-jexl3:3.2" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.4" level="project" />
<orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.slf4j:jcl-over-slf4j:1.7.36" level="project" />
<orderEntry type="library" name="Maven: org.jxls:jxls-poi:2.12.0" level="project" />
<orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2021.0.1.0" level="project" />
<orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-alibaba-commons:2021.0.1.0" level="project" />
<orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-client:1.4.2" level="project" />
......
......@@ -24,4 +24,9 @@ public class ApiGeneratePdfRequest<T> {
* 自定义文件名(有值用自定义文件名上传,无值用默认生成的规则文件名)
*/
private String customFileName;
/**
* 项目ID
*/
private String projectBizId;
}
......@@ -8,6 +8,11 @@ import java.util.List;
public class ApiMaterialDownloadRequest {
/**
* 项目ID
*/
private String projectBizId;
/**
* 对象名(包名)
*/
private String objectName;
......
package com.yd.oss.service.service;
import com.aliyun.oss.OSS;
import com.yd.oss.service.model.OssProvider;
import java.util.Map;
public interface AppointmentExcelService {
......@@ -7,5 +10,5 @@ public interface AppointmentExcelService {
String exportAppointment(Map<String, Object> data,
String templateType,
String appointmentBizId,
String projectBizId);
OSS ossClient, OssProvider provider);
}
package com.yd.oss.service.service;
import com.aliyun.oss.OSS;
import com.yd.common.result.Result;
import com.yd.oss.feign.request.ApiMaterialDownloadRequest;
import com.yd.oss.feign.response.ApiMaterialDownloadResponse;
import com.yd.oss.service.model.OssProvider;
public interface CompressedFileService {
Result<ApiMaterialDownloadResponse> downloadCompressedFile(ApiMaterialDownloadRequest request);
Result<ApiMaterialDownloadResponse> downloadCompressedFile(ApiMaterialDownloadRequest request, OSS ossClient, OssProvider provider);
}
package com.yd.oss.service.service;
import com.aliyun.oss.OSS;
import com.yd.oss.service.model.OssProvider;
import org.apache.poi.ss.usermodel.Workbook;
import java.io.File;
......@@ -7,7 +9,7 @@ import java.io.IOException;
public interface ExcelService {
File downloadTemplateToTempFile(String ossObjectKey) throws IOException;
File downloadTemplateToTempFile(String ossObjectKey, OSS ossClient, OssProvider provider) throws IOException;
File saveWorkbookToTempFile(Workbook workbook) throws IOException;
}
package com.yd.oss.service.service;
import com.aliyun.oss.OSS;
import com.yd.oss.service.dto.FileProdDto;
import com.yd.oss.service.model.FileTemplate;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yd.oss.service.model.OssProvider;
import java.io.InputStream;
......@@ -16,7 +18,7 @@ import java.io.InputStream;
*/
public interface IFileTemplateService extends IService<FileTemplate> {
InputStream getTemplateInputStreamFromOSS(String bucketName, String objectKey);
InputStream getTemplateInputStreamFromOSS(String bucketName, String objectKey, OssProvider provider, OSS ossClient);
FileProdDto getFileProd(String templateName, String templateType);
......
......@@ -78,9 +78,9 @@ public interface OssService {
// 获取上传结果(包含文件信息和访问URL)
UploadResult getUploadResult(String fileKey, Duration expiration);
String upload(byte[] content, String fileName);
String upload(byte[] content, String fileName,OSS ossClient, OssProvider provider);
String upload(InputStream inputStream, String fileName);
// String upload(InputStream inputStream, String fileName);
// 批量上传文件
com.yd.oss.feign.response.ApiBatchUploadResponse batchUploadFiles(
......
package com.yd.oss.service.service;
import com.aliyun.oss.OSS;
import com.yd.oss.service.model.OssProvider;
import java.io.IOException;
public interface PdfService<T> {
String generatePDF(T dataObject,String objectId, String templateType,String customFileName) throws IOException;
String generatePDF(T dataObject, String objectId, String templateType, String customFileName, OssProvider provider, OSS ossClient) throws IOException;
}
......@@ -172,7 +172,7 @@ public class AliYunOssServiceImpl implements OssService {
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(fileData);
// 生成文件key(这里使用ossUtils的方法,需要传入projectBizId,但此时provider已知,可根据需要调整)
String fileKey = ossUtils.getFilePrefix(provider.getProviderBizId(), "", fileName, type);
String fileKey = ossUtils.getFilePrefix(provider.getProjectBizId(), "", fileName, type);
String actualBucket = StringUtils.isNotBlank(bucketName) ? bucketName : provider.getBucketName();
String fileType = FileUtil.getFileType(fileName);
......@@ -618,19 +618,23 @@ public class AliYunOssServiceImpl implements OssService {
}
/**
* 上传字节数组并设置公共读(示例方法)
* 上传字节数组并设置公共读
*/
public String upload(byte[] content, String fileName) {
OssProvider defaultProvider = getDefaultProvider();
OSS ossClient = null;
public String upload(byte[] content, String fileName,OSS ossClient, OssProvider provider) {
// OssProvider defaultProvider = getDefaultProvider();
// OSS ossClient = null;
try {
ossClient = ossClientFactory.createOssClient(defaultProvider);
String objectName = "appointment/excel/" + UUID.randomUUID() + "/" + fileName;
// ossClient = ossClientFactory.createOssClient(defaultProvider);
// String objectName = "appointment/excel/" + UUID.randomUUID() + "/" + fileName;
//扩展名
String fileType = FileUtil.getFileType(fileName);
//获取通用文件路径的前缀
String filePrefix = ossUtils.getFilePrefix(provider.getProjectBizId(),"",fileName,fileType);
PutObjectRequest putObjectRequest = new PutObjectRequest(
defaultProvider.getBucketName(), objectName, new ByteArrayInputStream(content));
provider.getBucketName(), filePrefix, new ByteArrayInputStream(content));
ossClient.putObject(putObjectRequest);
ossClient.setObjectAcl(defaultProvider.getBucketName(), objectName, CannedAccessControlList.PublicRead);
return "https://" + defaultProvider.getBucketName() + "." + defaultProvider.getEndpoint() + "/" + objectName;
ossClient.setObjectAcl(provider.getBucketName(), filePrefix, CannedAccessControlList.PublicRead);
return "https://" + provider.getBucketName() + "." + provider.getEndpoint() + "/" + filePrefix;
} finally {
if (ossClient != null) {
ossClient.shutdown();
......@@ -641,17 +645,21 @@ public class AliYunOssServiceImpl implements OssService {
/**
* 上传输入流并设置公共读
*/
public String upload(InputStream inputStream, String fileName) {
OssProvider defaultProvider = getDefaultProvider();
OSS ossClient = null;
public String upload(InputStream inputStream, String fileName,OSS ossClient, OssProvider provider) {
// OssProvider defaultProvider = getDefaultProvider();
// OSS ossClient = null;
try {
ossClient = ossClientFactory.createOssClient(defaultProvider);
String objectName = "appointment/excel/" + UUID.randomUUID() + "/" + fileName;
// ossClient = ossClientFactory.createOssClient(defaultProvider);
// String objectName = "appointment/excel/" + UUID.randomUUID() + "/" + fileName;
//扩展名
String fileType = FileUtil.getFileType(fileName);
//获取通用文件路径的前缀
String filePrefix = ossUtils.getFilePrefix(provider.getProjectBizId(),"",fileName,fileType);
PutObjectRequest putObjectRequest = new PutObjectRequest(
defaultProvider.getBucketName(), objectName, inputStream);
provider.getBucketName(), filePrefix, inputStream);
ossClient.putObject(putObjectRequest);
ossClient.setObjectAcl(defaultProvider.getBucketName(), objectName, CannedAccessControlList.PublicRead);
return "https://" + defaultProvider.getBucketName() + "." + defaultProvider.getEndpoint() + "/" + objectName;
ossClient.setObjectAcl(provider.getBucketName(), filePrefix, CannedAccessControlList.PublicRead);
return "https://" + provider.getBucketName() + "." + provider.getEndpoint() + "/" + filePrefix;
} finally {
if (ossClient != null) {
ossClient.shutdown();
......
......@@ -2,9 +2,11 @@ package com.yd.oss.service.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import com.aliyun.oss.OSS;
import com.yd.common.utils.CommonUtil;
import com.yd.common.utils.DateUtil;
import com.yd.oss.service.dto.FileProdDto;
import com.yd.oss.service.model.OssProvider;
import com.yd.oss.service.service.AppointmentExcelService;
import com.yd.oss.service.service.ExcelService;
import com.yd.oss.service.service.IFileTemplateService;
......@@ -40,13 +42,13 @@ public class AppointmentExcelServiceImpl implements AppointmentExcelService {
* @param fileName
* @return
*/
public String exportAndUploadToOss(Map<String, Object> data, String ossObjectKey, String fileName,String projectBizId) {
public String exportAndUploadToOss(Map<String, Object> data, String ossObjectKey, String fileName,OSS ossClient, OssProvider provider) {
File tempFile = null;
File processedFile = null;
try {
// 1. 从OSS下载模板到临时文件
tempFile = excelService.downloadTemplateToTempFile(ossObjectKey);
tempFile = excelService.downloadTemplateToTempFile(ossObjectKey,ossClient,provider);
// 2. 使用临时文件路径创建TemplateExportParams
TemplateExportParams params = new TemplateExportParams(tempFile.getAbsolutePath());
......@@ -69,7 +71,7 @@ public class AppointmentExcelServiceImpl implements AppointmentExcelService {
byte[] excelBytes = outputStream.toByteArray();
// 7. 上传到OSS
String ossUrl = ossService.upload(excelBytes, fileName);
String ossUrl = ossService.upload(excelBytes, fileName,ossClient,provider);
// 8. 关闭资源
outputStream.close();
......@@ -302,12 +304,12 @@ public class AppointmentExcelServiceImpl implements AppointmentExcelService {
public String exportAppointment(Map<String, Object> data,
String templateType,
String appointmentBizId,
String projectBizId) {
OSS ossClient, OssProvider provider) {
// 获取模板信息
FileProdDto fileProdDto = iFileTemplateService.getFileProd("", templateType);
// 生成文件名
String fileName = "预约信息_" + appointmentBizId + "_" + System.currentTimeMillis() + ".xlsx";
// 导出并上传到OSS
return exportAndUploadToOss(data, fileProdDto.getFileKey(), fileName,projectBizId);
return exportAndUploadToOss(data, fileProdDto.getFileKey(), fileName,ossClient,provider);
}
}
package com.yd.oss.service.service.impl;
import com.aliyun.oss.OSS;
import com.yd.common.result.Result;
import com.yd.oss.feign.dto.ApiMaterialDto;
import com.yd.oss.feign.request.ApiMaterialDownloadRequest;
import com.yd.oss.feign.response.ApiMaterialDownloadResponse;
import com.yd.oss.service.model.OssProvider;
import com.yd.oss.service.service.CompressedFileService;
import com.yd.oss.service.service.OssService;
import com.yd.oss.service.utils.OssUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -30,11 +33,14 @@ public class CompressedFileServiceImpl implements CompressedFileService {
@Autowired
private OssService ossService;
@Autowired
private String defaultBucket; // 注入默认存储桶
// @Autowired
// private String defaultBucket; // 注入默认存储桶
//
// @Autowired
// private String defaultEndpoint; // 注入默认服务端点
@Autowired
private String defaultEndpoint; // 注入默认服务端点
private OssUtils ossUtils;
/**
......@@ -43,7 +49,7 @@ public class CompressedFileServiceImpl implements CompressedFileService {
* @return
*/
@Override
public Result<ApiMaterialDownloadResponse> downloadCompressedFile(ApiMaterialDownloadRequest request) {
public Result<ApiMaterialDownloadResponse> downloadCompressedFile(ApiMaterialDownloadRequest request, OSS ossClient, OssProvider provider) {
try {
// 验证请求参数
if (request == null || CollectionUtils.isEmpty(request.getApiMaterialDtoList())) {
......@@ -71,7 +77,7 @@ public class CompressedFileServiceImpl implements CompressedFileService {
String fileUrl = materialDto.getFileUrlList().get(i);
try {
// 下载文件并添加到压缩包
boolean success = addFileToZip(zos, fileUrl, folderName, i + 1);
boolean success = addFileToZip(zos, fileUrl, folderName, i + 1,ossClient,provider);
if (success) {
successFileCount++;
}
......@@ -96,7 +102,7 @@ public class CompressedFileServiceImpl implements CompressedFileService {
successFileCount, tempZipFile.length());
// 上传压缩包到OSS
String ossUrl = uploadZipToOss(tempZipFile, request.getObjectName());
String ossUrl = uploadZipToOss(tempZipFile, request.getObjectName(),ossClient,provider);
// 构建响应
ApiMaterialDownloadResponse response = new ApiMaterialDownloadResponse();
......@@ -153,7 +159,7 @@ public class CompressedFileServiceImpl implements CompressedFileService {
/**
* 下载文件并添加到压缩包
*/
private boolean addFileToZip(ZipOutputStream zos, String fileUrl, String folderName, int fileIndex) throws Exception {
private boolean addFileToZip(ZipOutputStream zos, String fileUrl, String folderName, int fileIndex,OSS ossClient,OssProvider provider) throws Exception {
// 从URL中提取文件名
String fileName = extractFileNameFromUrl(fileUrl, fileIndex);
......@@ -161,7 +167,7 @@ public class CompressedFileServiceImpl implements CompressedFileService {
String zipEntryName = folderName + "/" + fileName;
// 从OSS下载文件
InputStream fileInputStream = downloadFileFromUrl(fileUrl);
InputStream fileInputStream = downloadFileFromUrl(fileUrl,ossClient,provider);
if (fileInputStream == null) {
throw new IOException("无法下载文件: " + fileUrl);
}
......@@ -258,10 +264,10 @@ public class CompressedFileServiceImpl implements CompressedFileService {
/**
* 从URL下载文件
*/
private InputStream downloadFileFromUrl(String fileUrl) {
private InputStream downloadFileFromUrl(String fileUrl,OSS ossClient,OssProvider provider) {
try {
// 方法1: 尝试从OSS下载(如果URL是我们OSS的)
String fileKey = extractFileKeyFromUrl(fileUrl);
String fileKey = extractFileKeyFromUrl(fileUrl,ossClient,provider);
if (StringUtils.hasText(fileKey)) {
log.debug("从OSS下载文件,fileKey: {}", fileKey);
return ossService.downloadFile(fileKey);
......@@ -280,7 +286,7 @@ public class CompressedFileServiceImpl implements CompressedFileService {
/**
* 从完整URL中提取OSS文件key
*/
private String extractFileKeyFromUrl(String fileUrl) {
private String extractFileKeyFromUrl(String fileUrl,OSS ossClient,OssProvider provider) {
if (!StringUtils.hasText(fileUrl)) {
return null;
}
......@@ -297,10 +303,10 @@ public class CompressedFileServiceImpl implements CompressedFileService {
}
// 从配置获取endpoint
String endpoint = defaultEndpoint;
String endpoint = provider.getEndpoint();
// 查找bucket.endpoint组合
String bucketEndpoint = defaultBucket + "." + endpoint;
String bucketEndpoint = provider.getBucketName() + "." + endpoint;
int bucketEndpointIndex = url.indexOf(bucketEndpoint);
if (bucketEndpointIndex >= 0) {
......@@ -368,7 +374,7 @@ public class CompressedFileServiceImpl implements CompressedFileService {
/**
* 上传压缩包到OSS
*/
private String uploadZipToOss(File zipFile, String objectName) throws Exception {
private String uploadZipToOss(File zipFile, String objectName,OSS ossClient, OssProvider provider) throws Exception {
if (!zipFile.exists() || zipFile.length() == 0) {
throw new IOException("压缩文件不存在或为空");
}
......@@ -388,9 +394,9 @@ public class CompressedFileServiceImpl implements CompressedFileService {
try {
// 方法1: 直接调用public方法
java.lang.reflect.Method uploadMethod = AliYunOssServiceImpl.class
.getMethod("upload", InputStream.class, String.class);
.getMethod("upload", InputStream.class, String.class,OSS.class,OssProvider.class);
String ossUrl = (String) uploadMethod.invoke(aliYunOssService, fis, zipFileName);
String ossUrl = (String) uploadMethod.invoke(aliYunOssService, fis, zipFileName,ossClient,provider);
log.info("压缩包上传成功,URL: {}", ossUrl);
return ossUrl;
......@@ -402,9 +408,9 @@ public class CompressedFileServiceImpl implements CompressedFileService {
byte[] zipBytes = readFileToBytes(zipFile);
try {
java.lang.reflect.Method uploadMethod2 = AliYunOssServiceImpl.class
.getMethod("upload", byte[].class, String.class);
.getMethod("upload", byte[].class, String.class,OSS.class,OssProvider.class);
String ossUrl = (String) uploadMethod2.invoke(aliYunOssService, zipBytes, zipFileName);
String ossUrl = (String) uploadMethod2.invoke(aliYunOssService, zipBytes, zipFileName,ossClient,provider);
log.info("压缩包上传成功,URL: {}", ossUrl);
return ossUrl;
} catch (NoSuchMethodException e2) {
......
......@@ -2,6 +2,7 @@ package com.yd.oss.service.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.model.OSSObject;
import com.yd.oss.service.model.OssProvider;
import com.yd.oss.service.service.ExcelService;
import com.yd.oss.service.service.OssService;
import lombok.extern.slf4j.Slf4j;
......@@ -27,11 +28,11 @@ public class ExcelServiceImpl implements ExcelService {
@Resource
private OssService ossService;
@Autowired
private OSS ossClient; // 注入OSS客户端
// @Autowired
// private OSS ossClient; // 注入OSS客户端
@Autowired
private String defaultBucket; // 注入默认存储桶
// @Autowired
// private String defaultBucket; // 注入默认存储桶
/**
* 从OSS下载模板到临时文件
......@@ -40,13 +41,13 @@ public class ExcelServiceImpl implements ExcelService {
* @throws IOException
*/
@Override
public File downloadTemplateToTempFile(String ossObjectKey) throws IOException {
public File downloadTemplateToTempFile(String ossObjectKey,OSS ossClient, OssProvider provider) throws IOException {
// 创建临时文件
Path tempPath = Files.createTempFile("template", ".xlsx");
File tempFile = tempPath.toFile();
tempFile.deleteOnExit(); // JVM退出时删除
try (OSSObject ossObject = ossClient.getObject(defaultBucket, ossObjectKey);
try (OSSObject ossObject = ossClient.getObject(provider.getBucketName(), ossObjectKey);
InputStream inputStream = ossObject.getObjectContent();
FileOutputStream outputStream = new FileOutputStream(tempFile)) {
......
......@@ -37,8 +37,8 @@ public class FileTemplateServiceImpl extends ServiceImpl<FileTemplateMapper, Fil
@Autowired
private IOssProviderService ossProviderService;
@Autowired
private OSS ossClient; // 注入OSS客户端
// @Autowired
// private OSS ossClient; // 注入OSS客户端
/**
* 根据模板名称和模板类型获取云服务商和文件信息
......@@ -56,7 +56,7 @@ public class FileTemplateServiceImpl extends ServiceImpl<FileTemplateMapper, Fil
* @param objectKey
* @return
*/
public InputStream getTemplateInputStreamFromOSS(String bucketName, String objectKey) {
public InputStream getTemplateInputStreamFromOSS(String bucketName, String objectKey,OssProvider provider, OSS ossClient) {
OSSObject object = ossClient.getObject(bucketName, objectKey);
return object.getObjectContent();
}
......
......@@ -6,7 +6,9 @@ import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yd.oss.service.dto.FileProdDto;
import com.yd.oss.service.model.OssProvider;
import com.yd.oss.service.service.*;
import com.yd.oss.service.utils.OssUtils;
import com.yd.oss.service.utils.PdfUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
......@@ -39,7 +41,10 @@ public class PdfServiceImpl<T> implements PdfService<T> {
private FieldValueProvider<T> fieldValueProvider;
@Autowired
private OSS ossClient; // 注入OSS客户端
private OssUtils ossUtils;
// @Autowired
// private OSS ossClient; // 注入OSS客户端
/**
* 根据入参的数据和文件模板的JSON字段映射构建生成PDF
......@@ -50,13 +55,13 @@ public class PdfServiceImpl<T> implements PdfService<T> {
* @return
* @throws IOException
*/
public String generatePDF(T dataObject, String objectId, String templateType,String customFileName) throws IOException {
public String generatePDF(T dataObject, String objectId, String templateType, String customFileName, OssProvider provider, OSS ossClient) throws IOException {
// 获取模板信息
FileProdDto fileProdDto = iFileTemplateService.getFileProd("", templateType);
// 从OSS获取模板
InputStream templateStream = iFileTemplateService.getTemplateInputStreamFromOSS(
fileProdDto.getBucketName(), fileProdDto.getFileKey());
fileProdDto.getBucketName(), fileProdDto.getFileKey(),provider,ossClient);
// 创建临时文件
File tempInputFile = File.createTempFile("template", ".docx");
......@@ -71,16 +76,23 @@ public class PdfServiceImpl<T> implements PdfService<T> {
// 上传到OSS
String objectName = "";
//项目类型
String projectType = ossUtils.getProjectType(provider.getProjectBizId());
projectType = StringUtils.isNotBlank(projectType) ? projectType : "pc";
//环境变量
String env = ossUtils.getActiveEnv();
env = StringUtils.isNotBlank(env) ? env : "prod";
String prefix = projectType + "/" + env + "/";
if (StringUtils.isNotBlank(customFileName)) {
objectName = "insurance_schedules/" + System.currentTimeMillis() + "/" + customFileName + ".pdf";
objectName = prefix + "insurance_schedules/" + System.currentTimeMillis() + "/" + customFileName + ".pdf";
}else {
objectName = "insurance_schedules/" + objectId + "_" + System.currentTimeMillis() + ".pdf";
objectName = prefix + "insurance_schedules/" + objectId + "_" + System.currentTimeMillis() + ".pdf";
}
uploadToOSS(tempPdfFile, fileProdDto.getBucketName(), objectName);
uploadToOSS(tempPdfFile, fileProdDto.getBucketName(), objectName,provider,ossClient);
// 生成访问URL
return generatePresignedUrl(fileProdDto.getBucketName(), objectName);
return generatePresignedUrl(fileProdDto.getBucketName(), objectName,provider,ossClient);
} finally {
// 清理临时文件
......@@ -328,7 +340,7 @@ public class PdfServiceImpl<T> implements PdfService<T> {
* @param objectName
* @throws IOException
*/
private void uploadToOSS(File file, String bucketName, String objectName) throws IOException {
private void uploadToOSS(File file, String bucketName, String objectName,OssProvider provider, OSS ossClient) throws IOException {
ossClient.putObject(bucketName, objectName, new FileInputStream(file));
}
......@@ -338,7 +350,7 @@ public class PdfServiceImpl<T> implements PdfService<T> {
* @param objectName
* @return
*/
private String generatePresignedUrl(String bucketName, String objectName) {
private String generatePresignedUrl(String bucketName, String objectName,OssProvider provider, OSS ossClient) {
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
request.setExpiration(expiration);
......
......@@ -45,6 +45,24 @@ public class OssUtils {
}
/**
* 根据项目ID获取项目类型
* @param projectBizId
* @return
*/
public String getProjectType(String projectBizId) {
String projectType = "pc";
if (StringUtils.isNotBlank(projectBizId)) {
//通过项目ID查询项目类型
Result<ApiSysProjectDetailResponse> result = apiSysProjectFeignClient.detail(projectBizId);
if (result.getData() != null) {
ApiSysProjectDetailResponse response = result.getData();
projectType = StringUtils.isNotBlank(response.getProjectType()) ? response.getProjectType() : "pc";
}
}
return projectType;
}
/**
* 获取分片文件路径的前缀
* @param projectBizId
* @param env
......@@ -67,7 +85,7 @@ public class OssUtils {
return projectType + "/" + env + "/large_file/uploads/" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd/"));
}
private String getActiveEnv() {
public String getActiveEnv() {
String[] activeProfiles = environment.getActiveProfiles();
return activeProfiles.length > 0 ? activeProfiles[0] : "prod";
}
......
......@@ -26,6 +26,7 @@
</content>
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: com.google.guava:guava:30.0-jre" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.5.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.5.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.5.5" level="project" />
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment