阅读 415

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();}}}}


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐