SpringBoot集成CSV的导出
文章目录
1、pom依赖
2、工具类
3、controller层
1、pom依赖
<!-- csv的导出工具类--><dependency><groupId>net.sf.supercsv</groupId><artifactId>super-csv</artifactId><version>2.4.0</version></dependency>
2、工具类
ReportCsvUtils.java
package com.zhz.util;import org.apache.commons.lang3.StringUtils;import org.supercsv.cellprocessor.ift.CellProcessor;import org.supercsv.io.CsvBeanWriter;import org.supercsv.io.ICsvBeanWriter;import org.supercsv.prefs.CsvPreference;import javax.servlet.http.HttpServletResponse;import java.net.URLEncoder;import java.util.List;/** * 导出工具类 **/public class ReportCsvUtils {public static void reportList(HttpServletResponse response,String[] header,String[] properties,String fileName,List<?> soureList) throws Exception {if (header == null || properties == null || soureList == null || header.length <= 0 || properties.length <= 0 || soureList.size() <= 0)return;if (StringUtils.isBlank(fileName)) {fileName = "1.csv";}response.setContentType("application/csv");response.setCharacterEncoding("GBK");response.setHeader("Content-FileName", URLEncoder.encode(fileName, "UTF-8"));response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\"");ICsvBeanWriter csvWriter = new CsvBeanWriter(response.getWriter(), CsvPreference.STANDARD_PREFERENCE);csvWriter.writeHeader(header);for (Object obj : soureList) {csvWriter.write(obj, properties);}csvWriter.close();}public static void reportListCsv(HttpServletResponse response,String[] header,String[] properties,String fileName,List<?> soureList,CellProcessor[] PROCESSORS) throws Exception {if (header == null || properties == null || soureList == null || header.length <= 0 || properties.length <= 0 || soureList.size() <= 0)return;if (StringUtils.isBlank(fileName)) {fileName = "1.csv";}response.setContentType("application/csv");response.setCharacterEncoding("GBK");response.setHeader("Content-FileName", URLEncoder.encode(fileName, "UTF-8"));response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\"");ICsvBeanWriter csvWriter = new CsvBeanWriter(response.getWriter(), CsvPreference.STANDARD_PREFERENCE);csvWriter.writeHeader(header);for (Object obj : soureList) {csvWriter.write(obj, properties, PROCESSORS);}csvWriter.close();}}
3、controller层
package com.zhz.controller;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.zhz.domain.CashRecharge;import com.zhz.domain.CashRechargeAuditRecord;import com.zhz.model.R;import com.zhz.service.CashRechargeService;import com.zhz.util.ReportCsvUtils;import io.swagger.annotations.Api;import io.swagger.annotations.ApiImplicitParam;import io.swagger.annotations.ApiImplicitParams;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.security.core.context.SecurityContextHolder;import org.springframework.util.CollectionUtils;import org.springframework.validation.annotation.Validated;import org.springframework.web.bind.annotation.*;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import org.supercsv.cellprocessor.CellProcessorAdaptor;import org.supercsv.cellprocessor.ift.CellProcessor;import org.supercsv.util.CsvContext;import springfox.documentation.annotations.ApiIgnore;import java.math.BigDecimal;import java.text.DecimalFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;@RestController@RequestMapping("/cashRecharges")@Api(value = "GCN控制器")public class CashRechargeController { //finance/cashRecharges/records/export cash_recharge_audit_export// String[] header = {"ID","用户ID", "用户名", "真实用户名", "充值币种", "充值金额(USDT)", "手续费", "到账金额(CNY)", "充值方式", "充值订单", "参考号", "充值时间","完成时间", "状态","审核备注","审核级数"};// String[] properties = {"id","userId", "username", "realName", "coinName", "num", "fee", "mum", "type", "tradeno", "remark", "created", "lastTime","statusStr","auditRemark","step"};@GetMapping("/records/export")@ApiImplicitParams({@ApiImplicitParam(name = "coinId", value = "当前页"),@ApiImplicitParam(name = "userId", value = "用户的ID"),@ApiImplicitParam(name = "userName", value = "用户的名称"),@ApiImplicitParam(name = "mobile", value = "用户的手机号"),@ApiImplicitParam(name = "status", value = "充值的状态"),@ApiImplicitParam(name = "numMin", value = "充值金额的最小值"),@ApiImplicitParam(name = "numMax", value = "充值金额的最小值"),@ApiImplicitParam(name = "startTime", value = "充值开始时间"),@ApiImplicitParam(name = "endTime", value = "充值结束时间"),})public void recordsExport(Long coinId, Long userId, String userName, String mobile, Byte status, String numMin, String numMax, String startTime, String endTime) {Page<CashRecharge> page = new Page<>(1, 10000);Page<CashRecharge> pageData = cashRechargeService.findByPage(page, coinId, userId, userName,mobile, status, numMin, numMax, startTime, endTime);List<CashRecharge> records = pageData.getRecords();if (!CollectionUtils.isEmpty(records)) {//跟自己要导出的列表名一样String[] header = {"ID", "用户ID", "用户名", "真实用户名", "充值币种", "充值金额(USDT)", "手续费", "到账金额(CNY)", "充值方式", "充值订单", "参考号", "充值时间", "完成时间", "状态", "审核备注", "审核级数"};//属性对应的字段String[] properties = {"id", "userId", "username", "realName", "coinName", "num", "fee", "mum", "type", "tradeno", "remark", "created", "lastTime", "status", "auditRemark", "step"};CellProcessorAdaptor longToStringAdapter = new CellProcessorAdaptor() {@Overridepublic <T> T execute(Object o, CsvContext csvContext) {return (T) String.valueOf(o);}};// 对于金额,需要8位有效数字,金额DecimalFormat decimalFormat = new DecimalFormat("0.00000000");//金额的筛选CellProcessorAdaptor moneyCellProcessorAdaptor = new CellProcessorAdaptor() {@Overridepublic <T> T execute(Object o, CsvContext csvContext) {BigDecimal num = (BigDecimal) o;String numReal = decimalFormat.format(num);return (T) numReal;}};// @ApiModelProperty(value = "类型:alipay,支付宝;cai1pay,财易付;bank,银联;")//支付类型的筛选CellProcessorAdaptor typeAdapter = new CellProcessorAdaptor() {@Overridepublic <T> T execute(Object o, CsvContext csvContext) {String type = String.valueOf(o);String typeName = "";switch (type) {case "alipay":typeName = "支付宝";break;case "cai1pay":typeName = "财易付";break;case "bank":typeName = "银联";break;case "linepay":typeName = "在线支付";break;default:typeName = "未知";break;}return (T) typeName;}};SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//日期的筛选CellProcessorAdaptor timeCellProcessorAdaptor = new CellProcessorAdaptor() {@Overridepublic <T> T execute(Object o, CsvContext csvContext) {if(o ==null){return (T)"" ;}Date date = (Date) o;String dateStr = simpleDateFormat.format(date);return (T) dateStr;}};// 0-待审核;1-审核通过;2-拒绝;3-充值成功//状态的筛选CellProcessorAdaptor statusCellProcessorAdaptor = new CellProcessorAdaptor(){@Overridepublic <T> T execute(Object o, CsvContext csvContext) {Integer status = Integer.valueOf(String.valueOf(o));String statusStr = "" ;switch (status){case 0:statusStr = "待审核" ;break;case 1:statusStr = "审核通过" ;break;case 2:statusStr = "拒绝" ;break;case 3:statusStr = "充值成功" ;break;default:statusStr = "未知" ;break;}return (T) statusStr;}};// String[] header = {"ID", "用户ID", "用户名", "真实用户名", "充值币种", "充值金额(USDT)", "手续费", "到账金额(CNY)", "充值方式", "充值订单", "参考号", "充值时间", "完成时间", "状态", "审核备注", "审核级数"};CellProcessor[] PROCESSOR = new CellProcessor[]{longToStringAdapter, longToStringAdapter, null, null, null, // "ID", "用户ID", "用户名", "真实用户名", "充值币种",moneyCellProcessorAdaptor, moneyCellProcessorAdaptor, moneyCellProcessorAdaptor, typeAdapter, // "充值金额(USDT)", "手续费", "到账金额(CNY)", 充值方式"null, null ,timeCellProcessorAdaptor , timeCellProcessorAdaptor ,//充值订单", "参考号", "充值时间", "完成时间statusCellProcessorAdaptor, null ,null //状态 "审核备注", "审核级数"};ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();try {// 导出csv 文件ReportCsvUtils.reportListCsv(requestAttributes.getResponse(), header, properties, "场外交易充值审核.csv", records, PROCESSOR);} catch (Exception e) {e.printStackTrace();}}}}