首先在项目的resources下面建一个template包,之后在下面创建一个模版,模版格式如下:
名称为 financeReportBillStandardTemplateExcel.xlsx:
{.fee}类型的属性值,是下面实体类的属性,要注意这里面的格式,不能错,还需要注意就是驼峰,例如:{.stockMv},要跟实体类的属性名保持一致,否则在导入的时候就会出现null之类的问题。
要是需要给属性设置格式之类的,例如:我们这里设置千分符并且保留两位小数,可进行如下图所示的操作,先选中所要设置的单元格,然后右键点击,选中设置单元格格式,就会弹出下图的操作,可以进行配置格式
接下来是实体类
package com.citicsc.galaxy.finance.lq;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
/**
* @ClassName StandardBillFieldsDTO
* @Description TODO
* @Author houbing
* @Date 2023/9/18 10:07
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class StandardBillFieldsDTO {
private String id;
//利息收入(利息归本)
private BigDecimal interest;
//股息红利
private BigDecimal dividend;
//资金余额
private BigDecimal availableCash;
//资产市值
private BigDecimal assetMv;
//非上市股票市值
private BigDecimal unlistedMv;
//当日国债逆回购发生额
private BigDecimal debtReverseRepurchase;
//出入金净额
private BigDecimal netCash;
//其他资金变动
private BigDecimal otherCash;
//总资金变动
private BigDecimal totalCashInout;
//交易费用
private BigDecimal fee;
//利息收入
private BigDecimal interestIncome;
//权利金收支
private BigDecimal netPremium;
//执行实收资金
private BigDecimal realReceiveCash;
//执行实付资金
private BigDecimal realPaymentCash;
//现金替代实收资金
private BigDecimal realOffsetCashIn;
//现金替代实付资金
private BigDecimal realOffsetCashOut;
//执行冻结资金
private BigDecimal frozenCash;
//市值权益
private BigDecimal totalMv;
//股票市值
private BigDecimal stockMv;
//买券金额
private BigDecimal buySecuritiesAmount;
//做市商交易经手费优惠
private BigDecimal marketDiscount;
//累计平仓盈亏
private BigDecimal closePnl;
//累计浮动盈亏
private BigDecimal floatPnl;
//其他交易费用
private BigDecimal otherFee;
}
这里只展示部分字段。
接下来就直接在controller层中进行导出
@ApiOperation(value = "交易账户基础数据查询表")
@PostMapping("/exportBill")
public void exportBill(@RequestBody @Validated TraAccBillReq req ,HttpServletResponse response) throws Exception {
response.setContentType("application/octet-stream");
String fileName = URLEncoder.encode("交易账户基础数据查询表" + DateUtils.formatStr(req.getTradingDay()), "utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
//查询数据库的数据
List<StandardBillFieldsDTO> dtos = lqAppService.queryBillFieldList(req);
if (CollectionUtils.isNotEmpty(dtos)) {
FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();
WriteSheet sheet = EasyExcel.writerSheet(0).build();
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
.withTemplate(new ClassPathResource("template/financeReportBillStandardTemplateExcel.xlsx").getInputStream())
.build();
excelWriter.fill(dtos, fillConfig, sheet);
excelWriter.finish();
} else {
throw new BizException("未查询到账单信息");
}
}