Commit 962fbd42 by zhangxingmin

通用导出

parent da06d17c
...@@ -3,6 +3,8 @@ package com.yd.oss.api.controller; ...@@ -3,6 +3,8 @@ package com.yd.oss.api.controller;
import com.yd.common.result.Result; import com.yd.common.result.Result;
import com.yd.oss.api.service.ApiExcelService; import com.yd.oss.api.service.ApiExcelService;
import com.yd.oss.feign.client.ApiExcelFeignClient; 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.request.ApiOssExportAppointmentExcelRequest;
import com.yd.oss.feign.response.ApiOssExcelParseResponse; import com.yd.oss.feign.response.ApiOssExcelParseResponse;
import com.yd.oss.feign.response.ApiOssExportAppointmentExcelResponse; import com.yd.oss.feign.response.ApiOssExportAppointmentExcelResponse;
...@@ -47,4 +49,13 @@ public class ApiExcelController implements ApiExcelFeignClient { ...@@ -47,4 +49,13 @@ public class ApiExcelController implements ApiExcelFeignClient {
return apiExcelService.parse(file,sheetClassNames); return apiExcelService.parse(file,sheetClassNames);
} }
/**
* 导出excel(通用)
* @return
*/
@Override
public Result<ExportResult> export(ApiExportRequest request) {
return apiExcelService.export(request.getDataList(),request.getExportParam(),request.getEntityClass());
}
} }
package com.yd.oss.api.service; package com.yd.oss.api.service;
import com.yd.common.result.Result; 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.request.ApiOssExportAppointmentExcelRequest;
import com.yd.oss.feign.response.ApiOssExcelParseResponse; import com.yd.oss.feign.response.ApiOssExcelParseResponse;
import com.yd.oss.feign.response.ApiOssExportAppointmentExcelResponse; import com.yd.oss.feign.response.ApiOssExportAppointmentExcelResponse;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.List;
public interface ApiExcelService { public interface ApiExcelService {
Result<ApiOssExportAppointmentExcelResponse> exportAppointment(ApiOssExportAppointmentExcelRequest request); Result<ApiOssExportAppointmentExcelResponse> exportAppointment(ApiOssExportAppointmentExcelRequest request);
Result<ApiOssExcelParseResponse> parse(MultipartFile file, String[] sheetClassNames); Result<ApiOssExcelParseResponse> parse(MultipartFile file, String[] sheetClassNames);
Result<ExportResult> export(List<?> dataList, ExportParam exportParam, Class<?> entityClass);
} }
...@@ -6,12 +6,17 @@ import com.yd.oss.api.service.ApiExcelService; ...@@ -6,12 +6,17 @@ import com.yd.oss.api.service.ApiExcelService;
import com.yd.oss.feign.request.ApiOssExportAppointmentExcelRequest; import com.yd.oss.feign.request.ApiOssExportAppointmentExcelRequest;
import com.yd.oss.feign.response.ApiOssExcelParseResponse; import com.yd.oss.feign.response.ApiOssExcelParseResponse;
import com.yd.oss.feign.response.ApiOssExportAppointmentExcelResponse; 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.service.service.AppointmentExcelService; import com.yd.oss.service.service.AppointmentExcelService;
import com.yd.oss.service.service.ExcelExportService;
import com.yd.oss.service.service.ExcelParserService; import com.yd.oss.service.service.ExcelParserService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map; import java.util.Map;
@Slf4j @Slf4j
...@@ -24,6 +29,9 @@ public class ApiExcelServiceImpl implements ApiExcelService { ...@@ -24,6 +29,9 @@ public class ApiExcelServiceImpl implements ApiExcelService {
@Autowired @Autowired
private ExcelParserService excelParserService; private ExcelParserService excelParserService;
@Autowired
private ExcelExportService excelExportService;
/** /**
* 导出excel-预约信息 * 导出excel-预约信息
* @param request * @param request
...@@ -65,4 +73,17 @@ public class ApiExcelServiceImpl implements ApiExcelService { ...@@ -65,4 +73,17 @@ 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);
}
} }
...@@ -6,8 +6,10 @@ import com.yd.oss.api.service.ApiOssService; ...@@ -6,8 +6,10 @@ import com.yd.oss.api.service.ApiOssService;
import com.yd.oss.feign.response.ApiFileMetadataResponse; import com.yd.oss.feign.response.ApiFileMetadataResponse;
import com.yd.oss.feign.response.ApiUploadResponse; import com.yd.oss.feign.response.ApiUploadResponse;
import com.yd.oss.service.dto.FileMetadata; 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.dto.UploadResult;
import com.yd.oss.service.service.OssService; import com.yd.oss.service.service.OssService;
import com.yd.oss.service.utils.FileUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -44,10 +46,11 @@ public class ApiOssServiceImpl implements ApiOssService { ...@@ -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) // 获取上传结果(包含文件信息和访问URL)
UploadResult result = ossService.getUploadResult(fileKey, Duration.ofHours(1)); UploadResult result = ossService.getUploadResult(ossUploadFileDto.getFileKey(), Duration.ofHours(1));
BeanUtils.copyProperties(result,response); BeanUtils.copyProperties(result,response);
......
...@@ -16,8 +16,8 @@ ...@@ -16,8 +16,8 @@
</facet> </facet>
</component> </component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/../target/classes" /> <output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/../target/test-classes" /> <output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
...@@ -26,5 +26,225 @@ ...@@ -26,5 +26,225 @@
</content> </content>
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" /> <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<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" />
<orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-common:1.4.2" level="project" />
<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: commons-codec:commons-codec:1.11" 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" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.6.6" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.60" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.60" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.18" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans: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-aop: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-expression:5.3.18" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.6.6" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.11" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.2" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.36" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" 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" />
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.29" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.11.22" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.36" level="project" />
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-bootstrap:3.0.4" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.68" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.69" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind: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: com.fasterxml.jackson.core:jackson-annotations:2.13.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.2" level="project" />
<orderEntry type="module" module-name="yd-oss-service" />
<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" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.15" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.1.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-spring-boot-autoconfigure:3.5.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.6.6" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.18" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.18" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-generator:3.5.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.5.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.5.5" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.8" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.2.8" level="project" />
<orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.28" level="project" />
<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-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" />
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.2.3.Final" level="project" />
<orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.3.Final" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.6.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.6.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.6.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.3.18" level="project" />
<orderEntry type="library" name="Maven: io.lettuce:lettuce-core:6.1.8.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.yd:yd-auth-core:1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-openapi3-spring-boot-starter:4.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-core:4.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-openapi3-ui:4.3.0" level="project" />
<orderEntry type="library" name="Maven: org.springdoc:springdoc-openapi-ui:1.7.0" level="project" />
<orderEntry type="library" name="Maven: org.springdoc:springdoc-openapi-webmvc-core:1.7.0" level="project" />
<orderEntry type="library" name="Maven: org.springdoc:springdoc-openapi-common:1.7.0" level="project" />
<orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-core:2.2.9" level="project" />
<orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
<orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
<orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-annotations:2.2.9" level="project" />
<orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-models:2.2.9" level="project" />
<orderEntry type="library" name="Maven: org.webjars:swagger-ui:4.18.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:2.6.6" level="project" />
<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-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" />
<orderEntry type="library" name="Maven: com.github.stephenc.jcip:jcip-annotations:1.0-1" level="project" />
<orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-api:0.11.5" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: io.jsonwebtoken:jjwt-impl:0.11.5" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: io.jsonwebtoken:jjwt-jackson:0.11.5" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.4.16" level="project" />
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-loadbalancer:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-loadbalancer:3.1.1" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor.addons:reactor-extra:3.4.7" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.3.18" level="project" />
<orderEntry type="library" name="Maven: com.stoyanr:evictor:1.0.0" level="project" />
<orderEntry type="library" name="Maven: com.yd:yd-user-service:1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.yd:yd-user-feign:1.0-SNAPSHOT" level="project" />
<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" />
<orderEntry type="library" name="Maven: io.netty:netty-buffer: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: io.netty:netty-resolver:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: javax.cache:cache-api:1.1.1" level="project" />
<orderEntry type="library" name="Maven: io.reactivex.rxjava3:rxjava:3.1.6" level="project" />
<orderEntry type="library" name="Maven: org.jboss.marshalling:jboss-marshalling:2.0.11.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.marshalling:jboss-marshalling-river:2.0.11.Final" level="project" />
<orderEntry type="library" name="Maven: com.esotericsoftware:kryo:5.4.0" level="project" />
<orderEntry type="library" name="Maven: com.esotericsoftware:reflectasm:1.11.9" level="project" />
<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: 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" />
<orderEntry type="library" name="Maven: org.jdom:jdom2:2.0.6.1" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.1" level="project" />
<orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.5.10" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.9" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
<orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
<orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.5" level="project" />
<orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
<orderEntry type="library" name="Maven: io.opentracing:opentracing-api:0.33.0" level="project" />
<orderEntry type="library" name="Maven: io.opentracing:opentracing-util:0.33.0" level="project" />
<orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ram:3.1.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-kms:2.11.0" 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.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: commons-io:commons-io:2.11.0" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:SparseBitSet:1.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.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: org.apache.commons:commons-lang3:3.14.0" 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: ch.qos.logback:logback-core:1.2.11" level="project" />
<orderEntry type="library" name="Maven: org.jxls:jxls-poi:2.12.0" level="project" />
</component> </component>
</module> </module>
\ No newline at end of file
package com.yd.oss.feign.client; package com.yd.oss.feign.client;
import com.yd.common.result.Result; 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.fallback.ApiExcelFeignFallbackFactory;
import com.yd.oss.feign.request.ApiExportRequest;
import com.yd.oss.feign.request.ApiOssExportAppointmentExcelRequest; import com.yd.oss.feign.request.ApiOssExportAppointmentExcelRequest;
import com.yd.oss.feign.response.ApiOssExcelParseResponse; import com.yd.oss.feign.response.ApiOssExcelParseResponse;
import com.yd.oss.feign.response.ApiOssExportAppointmentExcelResponse; import com.yd.oss.feign.response.ApiOssExportAppointmentExcelResponse;
...@@ -16,7 +18,7 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -16,7 +18,7 @@ import org.springframework.web.multipart.MultipartFile;
/** /**
* Excel信息Feign客户端 * 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 { public interface ApiExcelFeignClient {
/** /**
...@@ -33,4 +35,11 @@ public interface ApiExcelFeignClient { ...@@ -33,4 +35,11 @@ public interface ApiExcelFeignClient {
@PostMapping(value = "/parse-excel", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(value = "/parse-excel", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Result<ApiOssExcelParseResponse> parse(@RequestPart("file") MultipartFile file, Result<ApiOssExcelParseResponse> parse(@RequestPart("file") MultipartFile file,
@RequestPart("sheetClassNames") String[] sheetClassNames); @RequestPart("sheetClassNames") String[] sheetClassNames);
/**
* 导出excel(通用)
* @return
*/
@PostMapping("/export")
Result<ExportResult> export(@Validated @RequestBody ApiExportRequest request);
} }
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; ...@@ -2,6 +2,8 @@ package com.yd.oss.feign.fallback;
import com.yd.common.result.Result; import com.yd.common.result.Result;
import com.yd.oss.feign.client.ApiExcelFeignClient; 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.ApiOssExcelParseRequest;
import com.yd.oss.feign.request.ApiOssExportAppointmentExcelRequest; import com.yd.oss.feign.request.ApiOssExportAppointmentExcelRequest;
import com.yd.oss.feign.response.ApiOssExcelParseResponse; import com.yd.oss.feign.response.ApiOssExcelParseResponse;
...@@ -30,6 +32,11 @@ public class ApiExcelFeignFallbackFactory implements FallbackFactory<ApiExcelFei ...@@ -30,6 +32,11 @@ public class ApiExcelFeignFallbackFactory implements FallbackFactory<ApiExcelFei
return null; return null;
} }
@Override
public Result<ExportResult> export(ApiExportRequest request) {
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;
}
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
</facet> </facet>
</component> </component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/../target/classes" /> <output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/../target/test-classes" /> <output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
...@@ -17,5 +17,91 @@ ...@@ -17,5 +17,91 @@
</content> </content>
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" /> <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<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-starter:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-context:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.68" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.69" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-openfeign-core:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.6.6" 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: 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: commons-io:commons-io:2.11.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-beans: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" />
<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: 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.slf4j:slf4j-api:1.7.36" 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.github.xiaoymin:knife4j-openapi3-spring-boot-starter:4.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-core:4.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-openapi3-ui:4.3.0" level="project" />
<orderEntry type="library" name="Maven: org.springdoc:springdoc-openapi-ui:1.7.0" level="project" />
<orderEntry type="library" name="Maven: org.springdoc:springdoc-openapi-webmvc-core:1.7.0" level="project" />
<orderEntry type="library" name="Maven: org.springdoc:springdoc-openapi-common:1.7.0" level="project" />
<orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-core:2.2.9" level="project" />
<orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
<orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind: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: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.2" level="project" />
<orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-annotations:2.2.9" level="project" />
<orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-models:2.2.9" 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.webjars:swagger-ui:4.18.2" 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" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.18" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.6.6" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.11" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.11" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.2" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.36" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.29" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.60" level="project" />
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.2.3.Final" level="project" />
<orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.3.Final" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-loadbalancer:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-loadbalancer:3.1.1" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.4.16" level="project" />
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor.addons:reactor-extra:3.4.7" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.3.18" level="project" />
<orderEntry type="library" name="Maven: com.stoyanr:evictor:1.0.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.14.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.6.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.6.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.6.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.18" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.3.18" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.18" level="project" />
<orderEntry type="library" name="Maven: io.lettuce:lettuce-core:6.1.8.RELEASE" 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-handler:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.69.Final" level="project" />
<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: com.fasterxml.jackson.core:jackson-annotations:2.13.2" level="project" />
</component> </component>
</module> </module>
\ No newline at end of file
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; package com.yd.oss.service.service;
import com.yd.oss.service.dto.FileMetadata; 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.dto.UploadResult;
import com.yd.oss.service.model.OssProvider; import com.yd.oss.service.model.OssProvider;
import java.io.InputStream; import java.io.InputStream;
...@@ -12,7 +13,7 @@ import java.time.Duration; ...@@ -12,7 +13,7 @@ import java.time.Duration;
public interface OssService { 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); String uploadFile(InputStream inputStream, String fileName, String uploadUser);
......
...@@ -7,8 +7,10 @@ import com.aliyun.oss.model.OSSObject; ...@@ -7,8 +7,10 @@ import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest; import com.aliyun.oss.model.PutObjectRequest;
import com.yd.common.enums.CommonEnum; import com.yd.common.enums.CommonEnum;
import com.yd.common.utils.IpUtil;
import com.yd.common.utils.RandomStringGenerator; import com.yd.common.utils.RandomStringGenerator;
import com.yd.oss.service.dto.FileMetadata; 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.dto.UploadResult;
import com.yd.oss.service.model.OssFile; import com.yd.oss.service.model.OssFile;
import com.yd.oss.service.model.OssOperationLog; import com.yd.oss.service.model.OssOperationLog;
...@@ -16,6 +18,7 @@ import com.yd.oss.service.model.OssProvider; ...@@ -16,6 +18,7 @@ import com.yd.oss.service.model.OssProvider;
import com.yd.oss.service.service.IOssFileService; import com.yd.oss.service.service.IOssFileService;
import com.yd.oss.service.service.IOssProviderService; import com.yd.oss.service.service.IOssProviderService;
import com.yd.oss.service.service.OssService; import com.yd.oss.service.service.OssService;
import com.yd.oss.service.utils.FileUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -57,14 +60,17 @@ public class AliYunOssServiceImpl implements OssService { ...@@ -57,14 +60,17 @@ public class AliYunOssServiceImpl implements OssService {
/** /**
* 上传文件 * 上传文件
* @param inputStream * @param inputStream 文件流
* @param fileName * @param fileName 原始文件名
* @param bucketName * @param bucketName OSS桶名
* @param uploadUser * @param uploadUser 操作用户
* @param type oss文件夹分类目录类型,例:如果是.xls那就是excel/
* @return * @return
*/ */
@Override @Override
public String uploadFile(InputStream inputStream, String fileName, String bucketName, String uploadUser) { public OssUploadFileDto uploadFile(InputStream inputStream, String fileName,
String bucketName, String uploadUser,String type) {
OssUploadFileDto ossUploadFileDto = new OssUploadFileDto();
long startTime = System.currentTimeMillis(); // 记录开始时间 long startTime = System.currentTimeMillis(); // 记录开始时间
String operationResult = "success"; // 操作结果 String operationResult = "success"; // 操作结果
String errorMessage = null; // 错误信息 String errorMessage = null; // 错误信息
...@@ -72,19 +78,19 @@ public class AliYunOssServiceImpl implements OssService { ...@@ -72,19 +78,19 @@ public class AliYunOssServiceImpl implements OssService {
try { try {
// 读取输入流到字节数组 // 读取输入流到字节数组
byte[] fileData = readInputStreamToBytes(inputStream); byte[] fileData = FileUtil.readInputStreamToBytes(inputStream);
long fileSize = fileData.length; long fileSize = fileData.length;
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(fileData); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(fileData);
// 生成文件key // 生成文件key
String fileKey = generateFileKey(fileName); String fileKey = FileUtil.generateFileKey(fileName,type);
String actualBucket = StringUtils.isNotBlank(bucketName) ? bucketName : defaultBucket; String actualBucket = StringUtils.isNotBlank(bucketName) ? bucketName : defaultBucket;
String fileType = getFileType(fileName); String fileType = FileUtil.getFileType(fileName);
// 创建上传请求 // 创建上传请求
ObjectMetadata metadata = new ObjectMetadata(); ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(fileSize); metadata.setContentLength(fileSize);
metadata.setContentType(getContentType(fileType)); metadata.setContentType(FileUtil.getContentType(fileType));
// 设置公共读权限(如果需要) // 设置公共读权限(如果需要)
// metadata.setObjectAcl(CannedAccessControlList.PublicRead); // metadata.setObjectAcl(CannedAccessControlList.PublicRead);
...@@ -115,14 +121,20 @@ public class AliYunOssServiceImpl implements OssService { ...@@ -115,14 +121,20 @@ public class AliYunOssServiceImpl implements OssService {
operationLog.setOperationUser(uploadUser); operationLog.setOperationUser(uploadUser);
operationLog.setOperationResult(operationResult); operationLog.setOperationResult(operationResult);
operationLog.setErrorMessage(errorMessage); operationLog.setErrorMessage(errorMessage);
operationLog.setClientIp(getClientIp()); operationLog.setClientIp(IpUtil.getClientIp());
operationLog.setCostTime(System.currentTimeMillis() - startTime); operationLog.setCostTime(System.currentTimeMillis() - startTime);
// 保存操作日志到数据库 // 保存操作日志到数据库
ossFileService.saveOperationLog(operationLog); ossFileService.saveOperationLog(operationLog);
log.info("文件上传成功: {} -> {}/{}", fileName, actualBucket, fileKey); log.info("文件上传成功: {} -> {}/{}", fileName, actualBucket, fileKey);
return fileKey;
ossUploadFileDto.setFileBizId(ossFile.getFileBizId());
ossUploadFileDto.setFileKey(fileKey);
ossUploadFileDto.setOriginalName(fileName);
// 如果设置了公共读,可以直接拼接URL
String publicUrl = "https://" + actualBucket + "." + defaultEndpoint + "/" + fileKey;
ossUploadFileDto.setUrl(publicUrl);
return ossUploadFileDto;
} catch (Exception e) { } catch (Exception e) {
operationResult = "failure"; // 标记操作失败 operationResult = "failure"; // 标记操作失败
errorMessage = e.getMessage(); // 记录错误信息 errorMessage = e.getMessage(); // 记录错误信息
...@@ -130,7 +142,7 @@ public class AliYunOssServiceImpl implements OssService { ...@@ -130,7 +142,7 @@ public class AliYunOssServiceImpl implements OssService {
throw new RuntimeException("阿里云OSS上传文件失败: " + fileName, e); throw new RuntimeException("阿里云OSS上传文件失败: " + fileName, e);
} finally { } finally {
// 关闭资源 // 关闭资源
closeQuietly(inputStream); FileUtil.closeQuietly(inputStream);
// 记录失败日志 // 记录失败日志
if ("failure".equals(operationResult)) { if ("failure".equals(operationResult)) {
...@@ -144,7 +156,7 @@ public class AliYunOssServiceImpl implements OssService { ...@@ -144,7 +156,7 @@ public class AliYunOssServiceImpl implements OssService {
operationLog.setOperationUser(uploadUser); operationLog.setOperationUser(uploadUser);
operationLog.setOperationResult(operationResult); operationLog.setOperationResult(operationResult);
operationLog.setErrorMessage(errorMessage); operationLog.setErrorMessage(errorMessage);
operationLog.setClientIp(getClientIp()); operationLog.setClientIp(IpUtil.getClientIp());
operationLog.setCostTime(System.currentTimeMillis() - startTime); operationLog.setCostTime(System.currentTimeMillis() - startTime);
// 保存操作日志到数据库 // 保存操作日志到数据库
...@@ -163,7 +175,8 @@ public class AliYunOssServiceImpl implements OssService { ...@@ -163,7 +175,8 @@ public class AliYunOssServiceImpl implements OssService {
@Override @Override
public String uploadFile(InputStream inputStream, String fileName, String uploadUser) { public String uploadFile(InputStream inputStream, String fileName, String uploadUser) {
// 调用重载方法,使用默认存储桶 // 调用重载方法,使用默认存储桶
return uploadFile(inputStream, fileName, defaultBucket, uploadUser); // return uploadFile(inputStream, fileName, defaultBucket, uploadUser);
return null;
} }
/** /**
...@@ -197,7 +210,7 @@ public class AliYunOssServiceImpl implements OssService { ...@@ -197,7 +210,7 @@ public class AliYunOssServiceImpl implements OssService {
operationLog.setOperationUser("system"); // 系统操作 operationLog.setOperationUser("system"); // 系统操作
operationLog.setOperationResult(operationResult); operationLog.setOperationResult(operationResult);
operationLog.setErrorMessage(errorMessage); operationLog.setErrorMessage(errorMessage);
operationLog.setClientIp(getClientIp()); operationLog.setClientIp(IpUtil.getClientIp());
operationLog.setCostTime(System.currentTimeMillis() - startTime); operationLog.setCostTime(System.currentTimeMillis() - startTime);
// 保存操作日志到数据库 // 保存操作日志到数据库
...@@ -223,7 +236,7 @@ public class AliYunOssServiceImpl implements OssService { ...@@ -223,7 +236,7 @@ public class AliYunOssServiceImpl implements OssService {
operationLog.setOperationUser("system"); operationLog.setOperationUser("system");
operationLog.setOperationResult(operationResult); operationLog.setOperationResult(operationResult);
operationLog.setErrorMessage(errorMessage); operationLog.setErrorMessage(errorMessage);
operationLog.setClientIp(getClientIp()); operationLog.setClientIp(IpUtil.getClientIp());
operationLog.setCostTime(System.currentTimeMillis() - startTime); operationLog.setCostTime(System.currentTimeMillis() - startTime);
// 保存操作日志到数据库 // 保存操作日志到数据库
...@@ -277,7 +290,7 @@ public class AliYunOssServiceImpl implements OssService { ...@@ -277,7 +290,7 @@ public class AliYunOssServiceImpl implements OssService {
operationLog.setOperationUser(operator); operationLog.setOperationUser(operator);
operationLog.setOperationResult(operationResult); operationLog.setOperationResult(operationResult);
operationLog.setErrorMessage(errorMessage); operationLog.setErrorMessage(errorMessage);
operationLog.setClientIp(getClientIp()); operationLog.setClientIp(IpUtil.getClientIp());
operationLog.setCostTime(System.currentTimeMillis() - startTime); operationLog.setCostTime(System.currentTimeMillis() - startTime);
// 保存操作日志到数据库 // 保存操作日志到数据库
...@@ -303,7 +316,7 @@ public class AliYunOssServiceImpl implements OssService { ...@@ -303,7 +316,7 @@ public class AliYunOssServiceImpl implements OssService {
operationLog.setOperationUser(operator); operationLog.setOperationUser(operator);
operationLog.setOperationResult(operationResult); operationLog.setOperationResult(operationResult);
operationLog.setErrorMessage(errorMessage); operationLog.setErrorMessage(errorMessage);
operationLog.setClientIp(getClientIp()); operationLog.setClientIp(IpUtil.getClientIp());
operationLog.setCostTime(System.currentTimeMillis() - startTime); operationLog.setCostTime(System.currentTimeMillis() - startTime);
// 保存操作日志到数据库 // 保存操作日志到数据库
...@@ -472,7 +485,10 @@ public class AliYunOssServiceImpl implements OssService { ...@@ -472,7 +485,10 @@ public class AliYunOssServiceImpl implements OssService {
} }
} }
// 切换到指定的OSS提供商 /**
* 切换到指定的OSS提供商
* @param provider
*/
private void switchToProvider(OssProvider provider) { private void switchToProvider(OssProvider provider) {
// 关闭旧的客户端 // 关闭旧的客户端
if (this.ossClient != null) { if (this.ossClient != null) {
...@@ -554,162 +570,6 @@ public class AliYunOssServiceImpl implements OssService { ...@@ -554,162 +570,6 @@ public class AliYunOssServiceImpl implements OssService {
} }
/** /**
* 生成文件key(唯一标识)
* @param originalFileName
* @return
*/
private String generateFileKey(String originalFileName) {
// 提取文件扩展名
String fileExtension = originalFileName.contains(".") ?
originalFileName.substring(originalFileName.lastIndexOf(".")) : "";
// 生成唯一文件key:日期目录 + UUID + 扩展名
return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd/")) +
UUID.randomUUID().toString().replace("-", "") + fileExtension;
}
/**
* 获取输入流大小
* @param inputStream
* @return
* @throws IOException
*/
private Long getInputStreamSize(InputStream inputStream) throws IOException {
if (inputStream instanceof ByteArrayInputStream) {
// 如果是ByteArrayInputStream,直接获取可用字节数
return (long) inputStream.available();
}
// 对于其他类型的流,需要读取并计算大小
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
long size = 0;
while ((len = inputStream.read(buffer)) > -1) {
baos.write(buffer, 0, len);
size += len;
}
return size;
}
/**
* 读取输入流到字节数组
* @param inputStream
* @return
* @throws IOException
*/
private byte[] readInputStreamToBytes(InputStream inputStream) throws IOException {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[1024];
while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
buffer.flush();
return buffer.toByteArray();
}
/**
* 重置输入流
* @param originalStream
* @param size
* @return
* @throws IOException
*/
private InputStream resetInputStream(InputStream originalStream, long size) throws IOException {
if (originalStream instanceof ByteArrayInputStream) {
// 如果是ByteArrayInputStream,可以直接重置
((ByteArrayInputStream) originalStream).reset();
return originalStream;
}
// 对于其他类型的流,需要重新创建
// 注意:这里简化处理,实际应用中可能需要更复杂的逻辑
byte[] data = new byte[(int) size];
try (ByteArrayInputStream bais = new ByteArrayInputStream(data)) {
return bais;
}
}
/**
* 获取文件类型(扩展名)
* @param fileName
* @return
*/
private String getFileType(String fileName) {
return fileName.contains(".") ?
fileName.substring(fileName.lastIndexOf(".") + 1) : "";
}
/**
* 根据文件类型获取内容类型
* @param fileType
* @return
*/
private String getContentType(String fileType) {
switch (fileType.toLowerCase()) {
case "jpg":
case "jpeg":
return "image/jpeg";
case "png":
return "image/png";
case "gif":
return "image/gif";
case "pdf":
return "application/pdf";
case "txt":
return "text/plain";
case "html":
return "text/html";
case "css":
return "text/css";
case "js":
return "application/javascript";
default:
return "application/octet-stream";
}
}
/**
* 获取客户端IP
* @return
*/
private String getClientIp() {
try {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
} catch (Exception e) {
return "unknown";
}
}
/**
* 安静关闭资源
* @param closeable
*/
private void closeQuietly(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (IOException e) {
// 安静关闭,忽略异常
}
}
}
/**
* 创建虚拟文件记录(用于操作日志) * 创建虚拟文件记录(用于操作日志)
* @return * @return
*/ */
...@@ -719,7 +579,6 @@ public class AliYunOssServiceImpl implements OssService { ...@@ -719,7 +579,6 @@ public class AliYunOssServiceImpl implements OssService {
return file; return file;
} }
/** /**
* 上传字节数组到OSS并设置为公共读权限 * 上传字节数组到OSS并设置为公共读权限
* @param content 文件内容字节数组 * @param content 文件内容字节数组
......
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
package com.yd.oss.service.utils;
import java.io.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;
/**
* 文件工具类
*/
public class FileUtil {
/**
* 获取文件类型(扩展名)
* @param fileName
* @return
*/
public static String getFileType(String fileName) {
return fileName.contains(".") ?
fileName.substring(fileName.lastIndexOf(".") + 1) : "";
}
/**
* 重置输入流
* @param originalStream
* @param size
* @return
* @throws IOException
*/
public static InputStream resetInputStream(InputStream originalStream, long size) throws IOException {
if (originalStream instanceof ByteArrayInputStream) {
// 如果是ByteArrayInputStream,可以直接重置
((ByteArrayInputStream) originalStream).reset();
return originalStream;
}
// 对于其他类型的流,需要重新创建
// 注意:这里简化处理,实际应用中可能需要更复杂的逻辑
byte[] data = new byte[(int) size];
try (ByteArrayInputStream bais = new ByteArrayInputStream(data)) {
return bais;
}
}
/**
* 安静关闭资源
* @param closeable
*/
public static void closeQuietly(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (IOException e) {
// 安静关闭,忽略异常
}
}
}
/**
* 读取输入流到字节数组
* @param inputStream
* @return
* @throws IOException
*/
public static byte[] readInputStreamToBytes(InputStream inputStream) throws IOException {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[1024];
while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
buffer.flush();
return buffer.toByteArray();
}
/**
* 获取输入流大小
* @param inputStream
* @return
* @throws IOException
*/
public static Long getInputStreamSize(InputStream inputStream) throws IOException {
if (inputStream instanceof ByteArrayInputStream) {
// 如果是ByteArrayInputStream,直接获取可用字节数
return (long) inputStream.available();
}
// 对于其他类型的流,需要读取并计算大小
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
long size = 0;
while ((len = inputStream.read(buffer)) > -1) {
baos.write(buffer, 0, len);
size += len;
}
return size;
}
/**
* 生成文件key(唯一标识)
* @param originalFileName 原始文件名
* @param type oss文件夹分类目录类型,例:如果是.xls那就是excel/
* @return
*/
public static String generateFileKey(String originalFileName,String type) {
// 提取文件扩展名
String fileExtension = originalFileName.contains(".") ?
originalFileName.substring(originalFileName.lastIndexOf(".")) : "";
// 生成唯一文件key:日期目录 + UUID + 扩展名
return type + "/" +LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd/")) +
UUID.randomUUID().toString().replace("-", "") + fileExtension;
}
/**
* 根据文件类型获取内容类型
* @param fileType 文件扩展名(不含点)
* @return MIME类型
*/
public static String getContentType(String fileType) {
if (fileType == null || fileType.trim().isEmpty()) {
return "application/octet-stream";
}
String lowerFileType = fileType.toLowerCase();
switch (lowerFileType) {
// 图像类型
case "jpg":
case "jpeg":
return "image/jpeg";
case "png":
return "image/png";
case "gif":
return "image/gif";
case "bmp":
return "image/bmp";
case "webp":
return "image/webp";
case "svg":
return "image/svg+xml";
case "ico":
return "image/x-icon";
case "tiff":
case "tif":
return "image/tiff";
case "psd":
return "image/vnd.adobe.photoshop";
// 文档类型
case "pdf":
return "application/pdf";
case "doc":
return "application/msword";
case "docx":
return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
case "xls":
return "application/vnd.ms-excel";
case "xlsx":
return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
case "ppt":
return "application/vnd.ms-powerpoint";
case "pptx":
return "application/vnd.openxmlformats-officedocument.presentationml.presentation";
case "csv":
return "text/csv";
case "rtf":
return "application/rtf";
case "odt":
return "application/vnd.oasis.opendocument.text";
case "ods":
return "application/vnd.oasis.opendocument.spreadsheet";
case "odp":
return "application/vnd.oasis.opendocument.presentation";
// 文本类型
case "txt":
return "text/plain";
case "html":
case "htm":
return "text/html";
case "css":
return "text/css";
case "xml":
return "application/xml";
case "json":
return "application/json";
case "js":
return "application/javascript";
case "md":
return "text/markdown";
case "log":
return "text/plain";
// 压缩文件类型
case "zip":
return "application/zip";
case "rar":
return "application/vnd.rar";
case "7z":
return "application/x-7z-compressed";
case "tar":
return "application/x-tar";
case "gz":
return "application/gzip";
// 音频类型
case "mp3":
return "audio/mpeg";
case "wav":
return "audio/wav";
case "ogg":
return "audio/ogg";
case "flac":
return "audio/flac";
case "aac":
return "audio/aac";
case "m4a":
return "audio/mp4";
case "wma":
return "audio/x-ms-wma";
// 视频类型
case "mp4":
return "video/mp4";
case "avi":
return "video/x-msvideo";
case "mov":
return "video/quicktime";
case "wmv":
return "video/x-ms-wmv";
case "flv":
return "video/x-flv";
case "webm":
return "video/webm";
case "mkv":
return "video/x-matroska";
case "mpeg":
case "mpg":
return "video/mpeg";
case "3gp":
return "video/3gpp";
// 字体类型
case "ttf":
return "font/ttf";
case "otf":
return "font/otf";
case "woff":
return "font/woff";
case "woff2":
return "font/woff2";
case "eot":
return "application/vnd.ms-fontobject";
// 编程文件类型
case "java":
return "text/x-java-source";
case "py":
return "text/x-python";
case "php":
return "application/x-httpd-php";
case "cpp":
case "c++":
return "text/x-c++";
case "c":
return "text/x-c";
case "h":
return "text/x-c-header";
case "cs":
return "text/x-csharp";
case "go":
return "text/x-go";
case "rb":
return "text/x-ruby";
case "pl":
return "text/x-perl";
case "sh":
return "application/x-sh";
case "bat":
return "application/x-msdownload";
case "ps1":
return "application/x-powershell";
// 数据文件类型
case "sql":
return "application/sql";
case "db":
case "sqlite":
return "application/x-sqlite3";
case "dbf":
return "application/x-dbf";
// 电子书类型
case "epub":
return "application/epub+zip";
case "mobi":
return "application/x-mobipocket-ebook";
case "azw":
return "application/vnd.amazon.ebook";
// CAD文件类型
case "dwg":
return "image/vnd.dwg";
case "dxf":
return "image/vnd.dxf";
// 其他常见类型
case "exe":
return "application/x-msdownload";
case "dll":
return "application/x-msdownload";
case "apk":
return "application/vnd.android.package-archive";
case "ipa":
return "application/x-itunes-ipa";
case "deb":
return "application/x-deb";
case "rpm":
return "application/x-rpm";
case "iso":
return "application/x-iso9660-image";
case "swf":
return "application/x-shockwave-flash";
case "ps":
return "application/postscript";
case "ai":
return "application/postscript";
case "eps":
return "application/postscript";
default:
return "application/octet-stream";
}
}
}
...@@ -16,8 +16,8 @@ ...@@ -16,8 +16,8 @@
</facet> </facet>
</component> </component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/../target/classes" /> <output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/../target/test-classes" /> <output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
...@@ -26,5 +26,221 @@ ...@@ -26,5 +26,221 @@
</content> </content>
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" /> <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<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" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.15" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.1.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-spring-boot-autoconfigure:3.5.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.6.6" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.18" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.18" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-generator:3.5.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.5.5" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.5.5" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.8" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.2.8" level="project" />
<orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.36" level="project" />
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.28" level="project" />
<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-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" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.60" level="project" />
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.2.3.Final" level="project" />
<orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.3.Final" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.6.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.6.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.6.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.3.18" level="project" />
<orderEntry type="library" name="Maven: io.lettuce:lettuce-core:6.1.8.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.13.2" level="project" />
<orderEntry type="library" name="Maven: com.yd:yd-auth-core:1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-openapi3-spring-boot-starter:4.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-core:4.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-openapi3-ui:4.3.0" level="project" />
<orderEntry type="library" name="Maven: org.springdoc:springdoc-openapi-ui:1.7.0" level="project" />
<orderEntry type="library" name="Maven: org.springdoc:springdoc-openapi-webmvc-core:1.7.0" level="project" />
<orderEntry type="library" name="Maven: org.springdoc:springdoc-openapi-common:1.7.0" level="project" />
<orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-core:2.2.9" level="project" />
<orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
<orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
<orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-annotations:2.2.9" level="project" />
<orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-models:2.2.9" level="project" />
<orderEntry type="library" name="Maven: org.webjars:swagger-ui:4.18.2" 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" />
<orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-common:1.4.2" level="project" />
<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: 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.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" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.6.6" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.60" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.6.6" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.11" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.2" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.36" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.29" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.18" level="project" />
<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-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" />
<orderEntry type="library" name="Maven: com.github.stephenc.jcip:jcip-annotations:1.0-1" level="project" />
<orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-api:0.11.5" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: io.jsonwebtoken:jjwt-impl:0.11.5" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: io.jsonwebtoken:jjwt-jackson:0.11.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.13.2" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.4.16" level="project" />
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-bootstrap:3.0.4" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.68" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.69" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-loadbalancer:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-loadbalancer:3.1.1" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor.addons:reactor-extra:3.4.7" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.6.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.3.18" level="project" />
<orderEntry type="library" name="Maven: com.stoyanr:evictor:1.0.0" level="project" />
<orderEntry type="library" name="Maven: com.yd:yd-user-service:1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.yd:yd-user-feign:1.0-SNAPSHOT" level="project" />
<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" />
<orderEntry type="library" name="Maven: io.netty:netty-buffer: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: io.netty:netty-resolver:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.69.Final" level="project" />
<orderEntry type="library" name="Maven: javax.cache:cache-api:1.1.1" level="project" />
<orderEntry type="library" name="Maven: io.reactivex.rxjava3:rxjava:3.1.6" level="project" />
<orderEntry type="library" name="Maven: org.jboss.marshalling:jboss-marshalling:2.0.11.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.marshalling:jboss-marshalling-river:2.0.11.Final" level="project" />
<orderEntry type="library" name="Maven: com.esotericsoftware:kryo:5.4.0" level="project" />
<orderEntry type="library" name="Maven: com.esotericsoftware:reflectasm:1.11.9" level="project" />
<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" />
<orderEntry type="library" name="Maven: org.jdom:jdom2:2.0.6.1" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.1" level="project" />
<orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.5.10" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.9" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
<orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
<orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.5" level="project" />
<orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
<orderEntry type="library" name="Maven: io.opentracing:opentracing-api:0.33.0" level="project" />
<orderEntry type="library" name="Maven: io.opentracing:opentracing-util:0.33.0" level="project" />
<orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ram:3.1.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-kms:2.11.0" 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.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: com.google.guava:guava:30.0-jre" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
<orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
<orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.5.0" level="project" />
<orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.4" level="project" />
<orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" 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: commons-codec:commons-codec:1.11" 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: commons-io:commons-io:2.11.0" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:SparseBitSet:1.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.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: org.apache.commons:commons-lang3:3.14.0" 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: 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-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" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.18" 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: ch.qos.logback:logback-core:1.2.11" level="project" />
<orderEntry type="library" name="Maven: org.jxls:jxls-poi:2.12.0" level="project" />
</component> </component>
</module> </module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="ExternalSystem" externalSystem="Maven" />
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
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