Commit 01a5c508 by zhangxingmin

Merge remote-tracking branch 'origin/test' into dev_zxm

# Conflicts:
#	yd-oss-api/src/main/java/com/yd/oss/api/controller/ApiExcelController.java
#	yd-oss-api/src/main/java/com/yd/oss/api/service/ApiExcelService.java
#	yd-oss-api/src/main/java/com/yd/oss/api/service/impl/ApiExcelServiceImpl.java
#	yd-oss-api/yd-oss-api.iml
#	yd-oss-feign/src/main/java/com/yd/oss/feign/client/ApiExcelFeignClient.java
#	yd-oss-feign/src/main/java/com/yd/oss/feign/fallback/ApiExcelFeignFallbackFactory.java
#	yd-oss-feign/yd-oss-feign.iml
#	yd-oss-service/yd-oss-service.iml
parents b4d95f8d 3bff83bc
# 基础镜像
FROM openjdk:8
# 维护人
LABEL maintainer="zxm<2060197959@qq.com>"
# 创建目录
RUN mkdir -p /home/app
# 拷贝项目jar - 使用可执行的 fat JAR
COPY target/yd-oss-api-1.0-SNAPSHOT-exec.jar /home/app/yd-oss-api.jar
# 执行命令启动jar
ENTRYPOINT ["java", "-jar", "/home/app/yd-oss-api.jar"]
# 暴露端口
EXPOSE 9106
......@@ -70,4 +70,25 @@
<artifactId>yd-oss-service</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${springboot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
<mainClass>com.yd.oss.api.OssApiApplication</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
......@@ -3,6 +3,8 @@ package com.yd.oss.api.controller;
import com.yd.common.result.Result;
import com.yd.oss.api.service.ApiExcelService;
import com.yd.oss.feign.client.ApiExcelFeignClient;
import com.yd.oss.feign.dto.ExportResult;
import com.yd.oss.feign.request.ApiExportRequest;
import com.yd.oss.feign.request.ApiOssExportAppointmentExcelRequest;
import com.yd.oss.feign.response.ApiOssExcelParseResponse;
import com.yd.oss.feign.response.ApiOssExportAppointmentExcelResponse;
......@@ -49,6 +51,15 @@ public class ApiExcelController implements ApiExcelFeignClient {
}
/**
* 导出excel(通用)
* @return
*/
@Override
public Result<ExportResult> export(ApiExportRequest request) {
return apiExcelService.export(request.getDataList(),request.getExportParam(),request.getEntityClass());
}
/**
* 通用Excel导入接口
* @param file Excel文件
* @param headerRow 表头行号(默认第1行,从0开始)
......
package com.yd.oss.api.service;
import com.yd.common.result.Result;
import com.yd.oss.feign.dto.ExportParam;
import com.yd.oss.feign.dto.ExportResult;
import com.yd.oss.feign.request.ApiOssExportAppointmentExcelRequest;
import com.yd.oss.feign.response.ApiOssExcelParseResponse;
import com.yd.oss.feign.response.ApiOssExportAppointmentExcelResponse;
import com.yd.oss.feign.result.ImportResult;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
public interface ApiExcelService {
Result<ApiOssExportAppointmentExcelResponse> exportAppointment(ApiOssExportAppointmentExcelRequest request);
Result<ApiOssExcelParseResponse> parse(MultipartFile file, String[] sheetClassNames);
Result<ExportResult> export(List<?> dataList, ExportParam exportParam, Class<?> entityClass);
Result<ImportResult> importExcel(MultipartFile file, Integer headerRow,
Integer dataStartRow, String requiredFields);
......
......@@ -6,8 +6,11 @@ import com.yd.oss.api.service.ApiExcelService;
import com.yd.oss.feign.request.ApiOssExportAppointmentExcelRequest;
import com.yd.oss.feign.response.ApiOssExcelParseResponse;
import com.yd.oss.feign.response.ApiOssExportAppointmentExcelResponse;
import com.yd.oss.feign.dto.ExportParam;
import com.yd.oss.feign.dto.ExportResult;
import com.yd.oss.feign.result.ImportResult;
import com.yd.oss.service.service.AppointmentExcelService;
import com.yd.oss.service.service.ExcelExportService;
import com.yd.oss.service.service.ExcelImportService;
import com.yd.oss.service.service.ExcelParserService;
import lombok.extern.slf4j.Slf4j;
......@@ -15,6 +18,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
......@@ -30,6 +35,9 @@ public class ApiExcelServiceImpl implements ApiExcelService {
private ExcelParserService excelParserService;
@Autowired
private ExcelExportService excelExportService;
@Autowired
private ExcelImportService excelImportService;
/**
......@@ -74,6 +82,19 @@ public class ApiExcelServiceImpl implements ApiExcelService {
}
/**
* 通用-Excel导出参数(如果传dataList附加数据,不传单纯导出表头参数)
* @param dataList
* @param exportParam
* @param entityClass
* @return
*/
@Override
public Result<ExportResult> export(List<?> dataList, ExportParam exportParam, Class<?> entityClass) {
ExportResult exportResult = excelExportService.exportAndUploadToOss(dataList,exportParam,entityClass);
return Result.success(exportResult);
}
/**
* 通用Excel导入接口
* @param file Excel文件
* @param headerRow 表头行号(默认第1行,从0开始)
......
......@@ -6,8 +6,10 @@ import com.yd.oss.api.service.ApiOssService;
import com.yd.oss.feign.response.ApiFileMetadataResponse;
import com.yd.oss.feign.response.ApiUploadResponse;
import com.yd.oss.service.dto.FileMetadata;
import com.yd.oss.service.dto.OssUploadFileDto;
import com.yd.oss.service.dto.UploadResult;
import com.yd.oss.service.service.OssService;
import com.yd.oss.service.utils.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.BeanUtils;
......@@ -44,10 +46,11 @@ public class ApiOssServiceImpl implements ApiOssService {
}
// 上传文件
String fileKey = ossService.uploadFile(file.getInputStream(), file.getOriginalFilename(), bucket, uploadUser);
OssUploadFileDto ossUploadFileDto = ossService.uploadFile(file.getInputStream(), file.getOriginalFilename(),
bucket, uploadUser, FileUtil.getFileType(file.getOriginalFilename()));
// 获取上传结果(包含文件信息和访问URL)
UploadResult result = ossService.getUploadResult(fileKey, Duration.ofHours(1));
UploadResult result = ossService.getUploadResult(ossUploadFileDto.getFileKey(), Duration.ofHours(1));
BeanUtils.copyProperties(result,response);
......
......@@ -40,7 +40,7 @@ spring:
# 配置中心
config:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace: c1e4cbcf-d8b7-4da9-a75a-7b75890fc390
namespace: b3b01715-eb85-4242-992a-5aff03d864d4
# nacos的ip地址和端口
server-addr: 139.224.145.34:8848
# 这个就表示 在我们nacos命名空间id为 dev中 有一个data-id 为 demo-service.yml 的配置文件 读取这个里面的配置
......
......@@ -111,15 +111,6 @@
<orderEntry type="library" name="Maven: p6spy:p6spy:3.9.1" level="project" />
<orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.31" level="project" />
<orderEntry type="module" module-name="yd-oss-feign" />
<orderEntry type="library" name="Maven: com.yd:yd-feign:1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-openfeign-core:3.1.1" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form-spring:3.8.0" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form:3.8.0" level="project" />
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.3" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-core:11.8" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-slf4j:11.8" level="project" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.16" level="project" />
<orderEntry type="library" name="Maven: com.yd:yd-common:1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.83" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.6.6" level="project" />
......@@ -149,7 +140,6 @@
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:5.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:5.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-oauth2-resource-server:5.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:5.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-oauth2-core:5.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-oauth2-jose:5.6.2" level="project" />
<orderEntry type="library" name="Maven: com.nimbusds:nimbus-jose-jwt:9.14" level="project" />
......@@ -170,6 +160,8 @@
<orderEntry type="library" name="Maven: com.yd:yd-framework:1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.7" level="project" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.16" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:5.6.2" level="project" />
<orderEntry type="library" name="Maven: org.redisson:redisson:3.20.0" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.69.Final" level="project" />
......@@ -190,6 +182,14 @@
<orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2" level="project" />
<orderEntry type="library" name="Maven: org.jodd:jodd-bean:5.1.6" level="project" />
<orderEntry type="library" name="Maven: org.jodd:jodd-core:5.1.6" level="project" />
<orderEntry type="library" name="Maven: com.yd:yd-feign:1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-openfeign-core:3.1.1" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form-spring:3.8.0" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form:3.8.0" level="project" />
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.3" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-core:11.8" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-slf4j:11.8" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.oss:aliyun-sdk-oss:3.15.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.15" level="project" />
......
package com.yd.oss.feign.client;
import com.yd.common.result.Result;
import com.yd.oss.feign.dto.ExportResult;
import com.yd.oss.feign.fallback.ApiExcelFeignFallbackFactory;
import com.yd.oss.feign.request.ApiExportRequest;
import com.yd.oss.feign.request.ApiOssExportAppointmentExcelRequest;
import com.yd.oss.feign.response.ApiOssExcelParseResponse;
import com.yd.oss.feign.response.ApiOssExportAppointmentExcelResponse;
......@@ -18,7 +20,7 @@ import org.springframework.web.multipart.MultipartFile;
/**
* Excel信息Feign客户端
*/
@FeignClient(name = "yd-oss-api", fallbackFactory = ApiExcelFeignFallbackFactory.class)
@FeignClient(name = "yd-oss-api",path = "/oss/api/excel",fallbackFactory = ApiExcelFeignFallbackFactory.class)
public interface ApiExcelFeignClient {
/**
......@@ -40,6 +42,13 @@ public interface ApiExcelFeignClient {
@RequestPart("sheetClassNames") String[] sheetClassNames);
/**
* 导出excel(通用)
* @return
*/
@PostMapping("/export")
Result<ExportResult> export(@Validated @RequestBody ApiExportRequest request);
/**
* 通用Excel导入接口
* @param file Excel文件
* @param headerRow 表头行号(默认第1行,从0开始)
......
package com.yd.oss.feign.dto;
import lombok.Data;
import java.util.List;
@Data
public class ExportParam {
/**
* 要导出的字段名列表
*/
private List<String> fieldNames;
/**
* 导出的文件名(不含扩展名)
*/
private String fileName;
/**
* 是否上传到OSS
*/
private Boolean uploadToOss = false;
/**
* OSS存储路径(如:exports/excel/)
*/
private String ossPath = "exports/excel/";
}
\ No newline at end of file
package com.yd.oss.feign.dto;
import lombok.Data;
@Data
public class ExportResult {
/**
* 导出是否成功
*/
private Boolean success;
/**
* 错误信息
*/
private String errorMsg;
/**
* 文件大小(字节)
*/
private Long fileSize;
/**
* OSS文件URL(如果上传到OSS)
*/
private String ossUrl;
/**
* 本地文件路径(如果不上传OSS)
*/
private String localFilePath;
public static ExportResult success(String ossUrl, Long fileSize) {
ExportResult result = new ExportResult();
result.setSuccess(true);
result.setOssUrl(ossUrl);
result.setFileSize(fileSize);
return result;
}
public static ExportResult error(String errorMsg) {
ExportResult result = new ExportResult();
result.setSuccess(false);
result.setErrorMsg(errorMsg);
return result;
}
}
\ No newline at end of file
......@@ -2,6 +2,8 @@ package com.yd.oss.feign.fallback;
import com.yd.common.result.Result;
import com.yd.oss.feign.client.ApiExcelFeignClient;
import com.yd.oss.feign.dto.ExportResult;
import com.yd.oss.feign.request.ApiExportRequest;
import com.yd.oss.feign.request.ApiOssExcelParseRequest;
import com.yd.oss.feign.request.ApiOssExportAppointmentExcelRequest;
import com.yd.oss.feign.response.ApiOssExcelParseResponse;
......@@ -32,6 +34,11 @@ public class ApiExcelFeignFallbackFactory implements FallbackFactory<ApiExcelFei
}
@Override
public Result<ExportResult> export(ApiExportRequest request) {
return null;
}
@Override
public Result<ImportResult> importExcel(MultipartFile file, Integer headerRow,
Integer dataStartRow, String requiredFields) {
return null;
......
package com.yd.oss.feign.request;
import com.yd.oss.feign.dto.ExportParam;
import lombok.Data;
import java.util.List;
@Data
public class ApiExportRequest {
/**
* 需要导出的数据列表
*/
private List<?> dataList;
/**
* 导出参数配置
*/
private ExportParam exportParam;
/**
* 实体类类型
*/
private Class<?> entityClass;
}
......@@ -102,8 +102,6 @@
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.60" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-annotations-api:9.0.60" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.13.2" level="project" />
</component>
</module>
\ No newline at end of file
......@@ -62,6 +62,18 @@
<artifactId>yd-auth-core</artifactId>
<version>${project.version}</version>
</dependency>
<!-- 框架配置模块 -->
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-framework</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Feign组件配置模块 -->
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-feign</artifactId>
<version>${project.version}</version>
</dependency>
<!-- 阿里云 OSS SDK -->
<dependency>
......
package com.yd.oss.service.dto;
import lombok.Data;
/**
* 提供OSS上传文件返回的DTO
*/
@Data
public class OssUploadFileDto {
/**
* 文件元数据表业务ID唯一标识
*/
private String fileBizId;
/**
* 文件唯一标识
*/
private String fileKey;
/**
* 原始文件名
*/
private String originalName;
/**
* 完整的访问路径
*/
private String url;
}
package com.yd.oss.service.service;
import com.yd.oss.feign.dto.ExportParam;
import com.yd.oss.feign.dto.ExportResult;
import java.util.List;
public interface ExcelExportService {
ExportResult exportAndUploadToOss(List<?> dataList, ExportParam exportParam, Class<?> entityClass);
}
package com.yd.oss.service.service;
import com.yd.oss.service.dto.FileMetadata;
import com.yd.oss.service.dto.OssUploadFileDto;
import com.yd.oss.service.dto.UploadResult;
import com.yd.oss.service.model.OssProvider;
import java.io.InputStream;
......@@ -12,7 +13,7 @@ import java.time.Duration;
public interface OssService {
// 上传文件
String uploadFile(InputStream inputStream, String fileName, String bucketName, String uploadUser);
OssUploadFileDto uploadFile(InputStream inputStream, String fileName, String bucketName, String uploadUser,String type);
// 上传文件(使用默认存储桶)
String uploadFile(InputStream inputStream, String fileName, String uploadUser);
......
package com.yd.oss.service.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import com.yd.oss.feign.dto.ExportParam;
import com.yd.oss.feign.dto.ExportResult;
import com.yd.oss.service.dto.OssUploadFileDto;
import com.yd.oss.service.service.ExcelExportService;
import com.yd.oss.service.service.OssService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.lang.reflect.Field;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* excel导出实现类
*/
@Slf4j
@Service
public class ExcelExportServiceImpl implements ExcelExportService {
// 注入OSS服务,用于文件上传
@Autowired
private OssService ossService;
/**
* 导出Excel并上传到OSS
* @param dataList 需要导出的数据列表
* @param exportParam 导出参数配置
* @param entityClass 实体类类型
* @return 导出结果
*/
@Override
public ExportResult exportAndUploadToOss(List<?> dataList, ExportParam exportParam, Class<?> entityClass) {
// 声明输出流和工作簿变量,用于后续资源关闭
ByteArrayOutputStream outputStream = null;
Workbook workbook = null;
try {
// 根据实体类字段和导出参数构建Excel导出列配置
List<ExcelExportEntity> entityList = buildExportEntities(exportParam.getFieldNames(), entityClass);
// 将数据列表转换为Map结构,便于EasyPOI处理
List<Map<String, Object>> dataMapList = buildDataMapList(dataList, exportParam.getFieldNames(), entityClass);
// 创建字节数组输出流,用于将Excel数据写入内存
outputStream = new ByteArrayOutputStream();
// 设置导出参数:无标题、工作表名称为sheet1、使用XSSF格式(支持.xlsx)
ExportParams params = new ExportParams(null, "sheet1", ExcelType.XSSF);
// 使用EasyPOI导出Excel到工作簿
workbook = ExcelExportUtil.exportExcel(params, entityList, dataMapList);
// 将工作簿内容写入输出流
workbook.write(outputStream);
// 获取Excel文件的字节数组和文件大小
byte[] excelBytes = outputStream.toByteArray();
long fileSize = excelBytes.length;
// 根据参数决定是否上传到OSS
if (Boolean.TRUE.equals(exportParam.getUploadToOss())) {
// 将字节数组转换为输入流,供OSS上传使用
ByteArrayInputStream inputStream = new ByteArrayInputStream(excelBytes);
// 生成包含时间戳的文件名,避免重复
String fileName = generateExcelFileName(exportParam.getFileName());
// 调用OSS服务上传文件到云端存储
OssUploadFileDto uploadResult = ossService.uploadFile(
inputStream, // Excel文件输入流
fileName, // 生成的文件名
"", // 存储桶名称(空字符串表示使用默认存储桶)
"", // 上传用户标识(空字符串表示匿名或系统用户)
"excel" // 文件分类类型,对应OSS文件夹目录
);
// 返回成功结果,包含文件URL和大小信息
return ExportResult.success(uploadResult.getUrl(), fileSize);
} else {
// 如果不需要上传到OSS,仅返回文件大小信息
return ExportResult.success(null, fileSize);
}
} catch (Exception e) {
// 打印异常堆栈,便于调试和问题排查
e.printStackTrace();
// 返回错误结果,包含异常信息
return ExportResult.error("导出失败: " + e.getMessage());
} finally {
// 资源清理块,确保工作簿和输出流正确关闭
try {
// 关闭工作簿,释放内存资源
if (workbook != null) {
workbook.close();
}
// 关闭输出流,释放系统资源
if (outputStream != null) {
outputStream.close();
}
} catch (Exception e) {
// 打印资源关闭时的异常信息
e.printStackTrace();
}
}
}
/**
* 生成Excel文件名(包含时间戳)
* @param baseName 基础文件名
* @return 生成的文件名
*/
private String generateExcelFileName(String baseName) {
// 如果基础文件名为空,使用默认文件名
if (StringUtils.isBlank(baseName)) {
baseName = "export_data";
}
// 去除已有文件扩展名,确保统一使用.xlsx格式
if (baseName.contains(".")) {
baseName = baseName.substring(0, baseName.lastIndexOf('.'));
}
// 生成时间戳,格式为年月日_时分秒
String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss"));
// 组合基础文件名、时间戳和文件扩展名
return baseName + "_" + timestamp + ".xlsx";
}
/**
* 构建导出列实体配置
* @param fieldNames 字段名称列表
* @param entityClass 实体类类型
* @return Excel导出列配置列表
*/
private List<ExcelExportEntity> buildExportEntities(List<String> fieldNames, Class<?> entityClass) {
// 创建导出列配置列表
List<ExcelExportEntity> entityList = new ArrayList<>();
// 获取实体类字段的注解映射(字段名->Excel列名)
Map<String, String> fieldAnnotationMap = getFieldAnnotations(entityClass);
// 遍历所有需要导出的字段
for (String fieldName : fieldNames) {
// 检查字段是否存在于注解映射中
if (fieldAnnotationMap.containsKey(fieldName)) {
// 创建Excel导出列实体:参数1为Excel列标题,参数2为实体字段名
ExcelExportEntity entity = new ExcelExportEntity(fieldAnnotationMap.get(fieldName), fieldName);
// 将列配置添加到列表
entityList.add(entity);
}
}
return entityList;
}
/**
* 获取字段注解映射(字段名->Excel列名)
* @param entityClass 实体类类型
* @return 字段注解映射表
*/
private Map<String, String> getFieldAnnotations(Class<?> entityClass) {
// 创建字段注解映射表
Map<String, String> fieldAnnotationMap = new HashMap<>();
// 获取实体类声明的所有字段
Field[] fields = entityClass.getDeclaredFields();
// 遍历所有字段
for (Field field : fields) {
// 获取字段上的Excel注解配置
cn.afterturn.easypoi.excel.annotation.Excel excelAnnotation =
field.getAnnotation(cn.afterturn.easypoi.excel.annotation.Excel.class);
// 如果字段有Excel注解,记录映射关系
if (excelAnnotation != null) {
// key: 字段名, value: Excel列名
fieldAnnotationMap.put(field.getName(), excelAnnotation.name());
}
}
return fieldAnnotationMap;
}
/**
* 构建数据Map列表,将对象列表转换为EasyPOI所需的Map结构
* @param dataList 数据对象列表
* @param fieldNames 需要导出的字段名称列表
* @param entityClass 实体类类型
* @return 数据Map列表
*/
private List<Map<String, Object>> buildDataMapList(List<?> dataList, List<String> fieldNames, Class<?> entityClass) {
// 创建数据Map列表
List<Map<String, Object>> dataMapList = new ArrayList<>();
// 遍历数据列表中的每个对象
for (Object data : dataList) {
// 为每个对象创建字段-值的映射
Map<String, Object> map = new HashMap<>();
// 遍历所有需要导出的字段
for (String fieldName : fieldNames) {
try {
// 通过反射获取字段对象
Field field = entityClass.getDeclaredField(fieldName);
// 设置字段可访问(突破private限制)
field.setAccessible(true);
// 将字段值放入Map,key为字段名,value为字段值
map.put(fieldName, field.get(data));
} catch (Exception e) {
// 如果获取字段值失败,设置为空字符串
map.put(fieldName, "");
}
}
// 将当前对象的字段映射添加到列表
dataMapList.add(map);
}
return dataMapList;
}
}
\ No newline at end of file
......@@ -50,15 +50,6 @@
<orderEntry type="library" name="Maven: p6spy:p6spy:3.9.1" level="project" />
<orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.31" level="project" />
<orderEntry type="module" module-name="yd-oss-feign" />
<orderEntry type="library" name="Maven: com.yd:yd-feign:1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-openfeign-core:3.1.1" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form-spring:3.8.0" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form:3.8.0" level="project" />
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.3" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-core:11.8" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-slf4j:11.8" level="project" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.16" level="project" />
<orderEntry type="library" name="Maven: com.yd:yd-common:1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.83" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.6.6" level="project" />
......@@ -94,14 +85,12 @@
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpasyncclient:4.1.5" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore-nio:4.4.15" level="project" />
<orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-api:1.4.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.13.2" level="project" />
<orderEntry type="library" name="Maven: io.prometheus:simpleclient:0.12.0" level="project" />
<orderEntry type="library" name="Maven: io.prometheus:simpleclient_tracer_otel:0.12.0" level="project" />
<orderEntry type="library" name="Maven: io.prometheus:simpleclient_tracer_common:0.12.0" level="project" />
<orderEntry type="library" name="Maven: io.prometheus:simpleclient_tracer_otel_agent:0.12.0" level="project" />
<orderEntry type="library" name="Maven: com.alibaba.spring:spring-context-support:1.0.11" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-commons:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:5.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-context:3.1.1" level="project" />
<orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:2021.0.1.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.6.6" level="project" />
......@@ -123,7 +112,6 @@
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:5.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:5.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-oauth2-resource-server:5.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:5.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-oauth2-core:5.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-oauth2-jose:5.6.2" level="project" />
<orderEntry type="library" name="Maven: com.nimbusds:nimbus-jose-jwt:9.14" level="project" />
......@@ -150,6 +138,10 @@
<orderEntry type="library" name="Maven: com.yd:yd-framework:1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.7" level="project" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.16" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:5.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:5.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.18" level="project" />
<orderEntry type="library" name="Maven: org.redisson:redisson:3.20.0" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.69.Final" level="project" />
......@@ -168,9 +160,18 @@
<orderEntry type="library" name="Maven: org.objenesis:objenesis:3.3" level="project" />
<orderEntry type="library" name="Maven: com.esotericsoftware:minlog:1.3.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.13.2" level="project" />
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.11.22" level="project" />
<orderEntry type="library" name="Maven: org.jodd:jodd-bean:5.1.6" level="project" />
<orderEntry type="library" name="Maven: org.jodd:jodd-core:5.1.6" level="project" />
<orderEntry type="library" name="Maven: com.yd:yd-feign:1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-openfeign-core:3.1.1" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form-spring:3.8.0" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form:3.8.0" level="project" />
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.3" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-core:11.8" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-slf4j:11.8" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.oss:aliyun-sdk-oss:3.15.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.15" level="project" />
......@@ -229,7 +230,6 @@
<orderEntry type="library" name="Maven: cn.afterturn:easypoi-web:4.4.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.18" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.18" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.18" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.18" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.18" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.18" 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