提交 f933b01b authored 作者: huyufan's avatar huyufan

列表导出excel

上级 a4cbd70b
......@@ -3,6 +3,9 @@ package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
@Getter
@AllArgsConstructor
@SuppressWarnings("all")
......@@ -18,6 +21,17 @@ public enum OwnerAccountEnum {
private final Integer code;
private final String msg;
public static Optional<OwnerAccountEnum.AccountTypeStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public Integer getCode() {
return this.code;
}
public String getMsg() {
return this.msg;
}
}
@Getter
......@@ -58,6 +72,16 @@ public enum OwnerAccountEnum {
;
private final Integer code;
private final String msg;
public static Optional<OwnerAccountEnum.RunningWaterStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public Integer getCode() {
return this.code;
}
public String getMsg() {
return this.msg;
}
}
}
package com.clx.performance.vo.pc;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
......@@ -77,22 +78,30 @@ public class OwnerAccountRunningWaterRecordVO {
* 变动金额
*/
@ApiModelProperty("变动金额")
@MoneyOutConvert
private BigDecimal alterationBalance;
/**
* 冻结金额
*/
@ApiModelProperty("冻结金额")
@MoneyOutConvert
private BigDecimal frozenBalance;
/**
* 可用余额
*/
@ApiModelProperty("可用余额")
@MoneyOutConvert
private BigDecimal usableBalance;
/**
* 账户余额
*/
@ApiModelProperty("账户余额")
@MoneyOutConvert
private BigDecimal accountBalance;
@ApiModelProperty("扣除金额")
@MoneyOutConvert
private BigDecimal takeOutBalance;
/**
* 操作人
*/
......
......@@ -9,6 +9,7 @@ import com.clx.performance.vo.pc.OwnerAccountRunningWaterRecordVO;
import com.clx.performance.vo.pc.OwnerAccountVO;
import com.clx.performance.vo.pc.OwnerCaseOutVO;
import com.clx.performance.vo.pc.OwnerTopUpVO;
import com.clx.user.param.pc.driver.truck.PageDriverTruckParam;
import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.result.Result;
......@@ -16,9 +17,14 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotBlank;
......@@ -53,6 +59,14 @@ public class CarrierAccountController {
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "保证金账户详情流水下载")
@PostMapping("/exportMarginAccountPageList")
public void exportMarginAccountPageList(@RequestBody @Validated PagePlatformMarginAccountParam param, HttpServletResponse response) throws Exception {
SXSSFWorkbook workbook = ownerAccountService.exportMarginAccountPageList(param);
response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
workbook.write(response.getOutputStream());
}
@ApiOperation(value = "预付金账户详情流水列表", notes = "<br>By:胡宇帆")
@PostMapping("/prepaidFreightAccountPageList")
@UnitCovert(param = false)
......@@ -61,6 +75,14 @@ public class CarrierAccountController {
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "预付金账户详情流水下载")
@PostMapping("/exportPrepaidFreightAccountPageList")
public void exportPrepaidFreightAccountPageList(@RequestBody @Validated PagePlatformPrepaidFreightAccountParam param, HttpServletResponse response) throws Exception {
SXSSFWorkbook workbook = ownerAccountService.exportPrepaidFreightAccountPageList(param);
response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
workbook.write(response.getOutputStream());
}
@ApiOperation(value = "充值审批", notes = "<br>By:胡宇帆")
@PostMapping("/accountTopUpApprove")
......
......@@ -17,9 +17,13 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotNull;
import java.util.List;
......@@ -95,4 +99,12 @@ public class OwnerAccountController {
IPage<OwnerAccountRunningWaterRecordVO> page = ownerRunningWaterRecordService.ownerAccountRunningWaterPageList(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "货主账户流水列表下载")
@PostMapping("/exportOwnerAccountRunningWaterPageList")
public void exportOwnerAccountRunningWaterPageList(@RequestBody @Validated PageOwnerAccountRunningWaterParam param, HttpServletResponse response) throws Exception {
SXSSFWorkbook workbook = ownerRunningWaterRecordService.exportOwnerAccountRunningWaterPageList(param);
response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
workbook.write(response.getOutputStream());
}
}
......@@ -107,6 +107,12 @@ public class OwnerRunningWaterRecord implements HasKey<Integer> {
*/
@TableField("account_balance")
private BigDecimal accountBalance;
/**
* 扣除金额
*/
@TableField("take_out_balance")
private BigDecimal takeOutBalance;
/**
* 操作人
*/
......
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.*;
import com.clx.performance.vo.pc.OwnerAccountRunningWaterRecordVO;
import com.clx.performance.vo.pc.OwnerAccountVO;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.util.List;
......@@ -36,4 +37,18 @@ public interface OwnerAccountService {
* @param id
*/
void accountBalanceConfirm(Integer id);
/**
*保证金导出
* @param param
* @return
*/
SXSSFWorkbook exportMarginAccountPageList(PagePlatformMarginAccountParam param);
/**
* 预付金导出
* @param param
* @return
*/
SXSSFWorkbook exportPrepaidFreightAccountPageList(PagePlatformPrepaidFreightAccountParam param);
}
......@@ -3,6 +3,7 @@ package com.clx.performance.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.PageOwnerAccountRunningWaterParam;
import com.clx.performance.vo.pc.OwnerAccountRunningWaterRecordVO;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
public interface OwnerRunningWaterRecordService {
......@@ -12,4 +13,11 @@ public interface OwnerRunningWaterRecordService {
* @return
*/
IPage<OwnerAccountRunningWaterRecordVO> ownerAccountRunningWaterPageList(PageOwnerAccountRunningWaterParam param);
/**
* 货主资金账户管理流水下载
* @param param
* @return
*/
SXSSFWorkbook exportOwnerAccountRunningWaterPageList(PageOwnerAccountRunningWaterParam param);
}
......@@ -15,17 +15,25 @@ import com.clx.performance.model.OwnerRunningWaterRecord;
import com.clx.performance.model.OwnerTopUp;
import com.clx.performance.param.pc.*;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.utils.excel.ExcelData;
import com.clx.performance.utils.excel.ExcelField;
import com.clx.performance.utils.excel.ExcelSheet;
import com.clx.performance.utils.excel.ExcelUtil;
import com.clx.performance.vo.pc.OwnerAccountRunningWaterRecordVO;
import com.clx.performance.vo.pc.OwnerAccountVO;
import com.clx.user.enums.driver.DriverTruckEnum;
import com.clx.user.vo.pc.driver.truck.DriverTruckVo;
import com.msl.common.base.Optional;
import com.msl.common.exception.ServiceSystemException;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Slf4j
......@@ -217,4 +225,117 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
update.setId(account.getId());
ownerAccountDao.updateEntityByKey(update);
}
@Override
public SXSSFWorkbook exportMarginAccountPageList(PagePlatformMarginAccountParam param) {
IPage<OwnerAccountRunningWaterRecordVO> page = ownerRunningWaterRecordDao.marginAccountPageList(param);
List<OwnerAccountRunningWaterRecordVO> list = page.getRecords();
// 组装表头
List<ExcelField> fieldList = new ArrayList<>();
fieldList.add(new ExcelField(0, "序号", "index", 2000));
fieldList.add(new ExcelField(1, "货主编码", "ownerUserNo", 5000));
fieldList.add(new ExcelField(2, "货主名称", "ownerName", 5000));
fieldList.add(new ExcelField(3, "联系电话", "mobile", 5000));
fieldList.add(new ExcelField(4, "账户类型", "accountType", 15000));
fieldList.add(new ExcelField(5, "流水类型", "runningWaterType", 5000));
fieldList.add(new ExcelField(6, "订单编号", "orderNo", 5000));
fieldList.add(new ExcelField(7, "变动金额", "alterationBalance", 5000));
fieldList.add(new ExcelField(8, "冻结金额", "frozenBalance", 5000));
fieldList.add(new ExcelField(9, "可用余额", "usableBalance", 5000));
fieldList.add(new ExcelField(10, "账户余额", "accountBalance", 5000));
fieldList.add(new ExcelField(11, "扣除金额", "takeOutBalance", 5000));
fieldList.add(new ExcelField(12, "流水编号", "runningWaterNo", 5000));
fieldList.add(new ExcelField(13, "操作人", "createBy", 5000));
fieldList.add(new ExcelField(14, "操作时间", "createTime", 5000));
// 组装数据
List<List<ExcelData>> dataList = new ArrayList<>();
for (int i=0; i<list.size(); i++){
OwnerAccountRunningWaterRecordVO dto = list.get(i);
List<ExcelData> rowData = new ArrayList<>();
rowData.add(new ExcelData(i+1));
rowData.add(new ExcelData(dto.getOwnerUserNo().toString()));
rowData.add(new ExcelData(dto.getOwnerName()));
rowData.add(new ExcelData(dto.getMobile()));
rowData.add(new ExcelData(OwnerAccountEnum.AccountTypeStatus.getByCode(dto.getAccountType()).get().getMsg()));
rowData.add(new ExcelData(OwnerAccountEnum.RunningWaterStatus.getByCode(dto.getRunningWaterType()).get().getMsg()));
rowData.add(new ExcelData(dto.getOrderNo()));
rowData.add(new ExcelData(dto.getAlterationBalance()));
rowData.add(new ExcelData(dto.getFrozenBalance()));
rowData.add(new ExcelData(dto.getUsableBalance()));
rowData.add(new ExcelData(dto.getAccountBalance()));
rowData.add(new ExcelData(dto.getTakeOutBalance()));
rowData.add(new ExcelData(dto.getRunningWaterNo().toString()));
rowData.add(new ExcelData(dto.getCreateBy()));
rowData.add(new ExcelData(dto.getCreateTime().toString()));
dataList.add(rowData);
}
ExcelSheet excelSheet = new ExcelSheet("保证金账户详情", "保证金账户详情", fieldList, dataList);
//创建excel
return ExcelUtil.create(excelSheet);
}
@Override
public SXSSFWorkbook exportPrepaidFreightAccountPageList(PagePlatformPrepaidFreightAccountParam param) {
IPage<OwnerAccountRunningWaterRecordVO> page = ownerRunningWaterRecordDao.prepaidFreightAccountPageList(param);
List<OwnerAccountRunningWaterRecordVO> list = page.getRecords();
// 组装表头
List<ExcelField> fieldList = new ArrayList<>();
fieldList.add(new ExcelField(0, "序号", "index", 2000));
fieldList.add(new ExcelField(1, "货主编码", "ownerUserNo", 5000));
fieldList.add(new ExcelField(2, "货主名称", "ownerName", 5000));
fieldList.add(new ExcelField(3, "联系电话", "mobile", 5000));
fieldList.add(new ExcelField(4, "账户类型", "accountType", 15000));
fieldList.add(new ExcelField(5, "流水类型", "runningWaterType", 5000));
fieldList.add(new ExcelField(6, "订单编号", "orderNo", 5000));
fieldList.add(new ExcelField(7, "运单编号", "orderChildNo", 5000));
fieldList.add(new ExcelField(8, "变动金额", "alterationBalance", 5000));
fieldList.add(new ExcelField(9, "冻结金额", "frozenBalance", 5000));
fieldList.add(new ExcelField(10, "可用余额", "usableBalance", 5000));
fieldList.add(new ExcelField(11, "账户余额", "accountBalance", 5000));
fieldList.add(new ExcelField(12, "扣除金额", "takeOutBalance", 5000));
fieldList.add(new ExcelField(13, "流水编号", "runningWaterNo", 5000));
fieldList.add(new ExcelField(14, "操作人", "createBy", 5000));
fieldList.add(new ExcelField(15, "操作时间", "createTime", 5000));
// 组装数据
List<List<ExcelData>> dataList = new ArrayList<>();
for (int i=0; i<list.size(); i++){
OwnerAccountRunningWaterRecordVO dto = list.get(i);
List<ExcelData> rowData = new ArrayList<>();
rowData.add(new ExcelData(i+1));
rowData.add(new ExcelData(dto.getOwnerUserNo().toString()));
rowData.add(new ExcelData(dto.getOwnerName()));
rowData.add(new ExcelData(dto.getMobile()));
rowData.add(new ExcelData(OwnerAccountEnum.AccountTypeStatus.getByCode(dto.getAccountType()).get().getMsg()));
rowData.add(new ExcelData(OwnerAccountEnum.RunningWaterStatus.getByCode(dto.getRunningWaterType()).get().getMsg()));
rowData.add(new ExcelData(dto.getOrderNo()));
rowData.add(new ExcelData(dto.getOrderChildNo()));
rowData.add(new ExcelData(dto.getAlterationBalance()));
rowData.add(new ExcelData(dto.getFrozenBalance()));
rowData.add(new ExcelData(dto.getUsableBalance()));
rowData.add(new ExcelData(dto.getAccountBalance()));
rowData.add(new ExcelData(dto.getTakeOutBalance()));
rowData.add(new ExcelData(dto.getRunningWaterNo().toString()));
rowData.add(new ExcelData(dto.getCreateBy()));
rowData.add(new ExcelData(dto.getCreateTime().toString()));
dataList.add(rowData);
}
ExcelSheet excelSheet = new ExcelSheet("预付账户详情", "预付账户详情", fieldList, dataList);
//创建excel
return ExcelUtil.create(excelSheet);
}
}
......@@ -2,13 +2,22 @@ package com.clx.performance.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.OwnerRunningWaterRecordDao;
import com.clx.performance.enums.OwnerAccountEnum;
import com.clx.performance.param.pc.PageOwnerAccountRunningWaterParam;
import com.clx.performance.service.OwnerRunningWaterRecordService;
import com.clx.performance.utils.excel.ExcelData;
import com.clx.performance.utils.excel.ExcelField;
import com.clx.performance.utils.excel.ExcelSheet;
import com.clx.performance.utils.excel.ExcelUtil;
import com.clx.performance.vo.pc.OwnerAccountRunningWaterRecordVO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Service
@AllArgsConstructor
......@@ -20,4 +29,62 @@ public class OwnerRunningWaterRecordServiceImpl implements OwnerRunningWaterReco
public IPage<OwnerAccountRunningWaterRecordVO> ownerAccountRunningWaterPageList(PageOwnerAccountRunningWaterParam param) {
return ownerRunningWaterRecordDao.ownerAccountRunningWaterPageList(param);
}
@Override
public SXSSFWorkbook exportOwnerAccountRunningWaterPageList(PageOwnerAccountRunningWaterParam param) {
IPage<OwnerAccountRunningWaterRecordVO> page = ownerRunningWaterRecordDao.ownerAccountRunningWaterPageList(param);
List<OwnerAccountRunningWaterRecordVO> list = page.getRecords();
// 组装表头
List<ExcelField> fieldList = new ArrayList<>();
fieldList.add(new ExcelField(0, "序号", "index", 2000));
fieldList.add(new ExcelField(1, "货主编码", "ownerUserNo", 5000));
fieldList.add(new ExcelField(2, "货主名称", "ownerName", 5000));
fieldList.add(new ExcelField(3, "联系电话", "mobile", 5000));
fieldList.add(new ExcelField(4, "账户类型", "accountType", 15000));
fieldList.add(new ExcelField(5, "流水类型", "runningWaterType", 5000));
fieldList.add(new ExcelField(6, "订单编号", "orderNo", 5000));
fieldList.add(new ExcelField(7, "运单编号", "orderChildNo", 5000));
fieldList.add(new ExcelField(8, "变动金额", "alterationBalance", 5000));
fieldList.add(new ExcelField(9, "冻结金额", "frozenBalance", 5000));
fieldList.add(new ExcelField(10, "可用余额", "usableBalance", 5000));
fieldList.add(new ExcelField(11, "账户余额", "accountBalance", 5000));
fieldList.add(new ExcelField(12, "扣除金额", "takeOutBalance", 5000));
fieldList.add(new ExcelField(13, "流水编号", "runningWaterNo", 5000));
fieldList.add(new ExcelField(14, "操作人", "createBy", 5000));
fieldList.add(new ExcelField(15, "操作时间", "createTime", 5000));
// 组装数据
List<List<ExcelData>> dataList = new ArrayList<>();
for (int i=0; i<list.size(); i++){
OwnerAccountRunningWaterRecordVO dto = list.get(i);
List<ExcelData> rowData = new ArrayList<>();
rowData.add(new ExcelData(i+1));
rowData.add(new ExcelData(dto.getOwnerUserNo().toString()));
rowData.add(new ExcelData(dto.getOwnerName()));
rowData.add(new ExcelData(dto.getMobile()));
rowData.add(new ExcelData(OwnerAccountEnum.AccountTypeStatus.getByCode(dto.getAccountType()).get().getMsg()));
rowData.add(new ExcelData(OwnerAccountEnum.RunningWaterStatus.getByCode(dto.getRunningWaterType()).get().getMsg()));
rowData.add(new ExcelData(dto.getOrderNo()));
rowData.add(new ExcelData(dto.getOrderChildNo()));
rowData.add(new ExcelData(dto.getAlterationBalance()));
rowData.add(new ExcelData(dto.getFrozenBalance()));
rowData.add(new ExcelData(dto.getUsableBalance()));
rowData.add(new ExcelData(dto.getAccountBalance()));
rowData.add(new ExcelData(dto.getTakeOutBalance()));
rowData.add(new ExcelData(dto.getRunningWaterNo().toString()));
rowData.add(new ExcelData(dto.getCreateBy()));
rowData.add(new ExcelData(dto.getCreateTime().toString()));
dataList.add(rowData);
}
ExcelSheet excelSheet = new ExcelSheet("货主资金账户管理", "货主资金账户管理", fieldList, dataList);
//创建excel
return ExcelUtil.create(excelSheet);
}
}
......@@ -15,7 +15,7 @@ public class OwnerRunningWaterRecordSqlProvider {
String sql = new SQL() {{
SELECT("a.id, a.owner_user_no," +
" a.owner_name, a.mobile, a.account_type, a.running_water_type,a.order_id,a.order_no,a.order_child_id,a.order_child_no,a.alteration_balance," +
" a.account_balance,a.usable_balance, a.frozen_balance,a.create_by,a.create_time");
" a.account_balance,a.usable_balance, a.frozen_balance,a.take_out_balance,a.create_by,a.create_time");
FROM("owner_running_water_record a");
WHERE("a.account_type =" + OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode());
WHERE("a.owner_user_no = #{param.ownerUserNo}");
......
package com.clx.performance.utils.excel;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 数据导出类型 0数据 1小计 2合计 3总计
*/
@Getter
@AllArgsConstructor
public enum DataExcelTypeEnum {
DATA_TYPE(0, "数据"),
SUBTOTAL(1, "小计"),
EXCELLENT(2, "合计"),
ALL_TOTAL(3, "总计"),
;
private int value;
private String desc;
public static String getDesc(int value) {
for (DataExcelTypeEnum c : DataExcelTypeEnum.values()) {
if (c.getValue() == value) {
return c.desc;
}
}
return null;
}
}
package com.clx.performance.utils.excel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@NoArgsConstructor
public class ExcelData {
private String value;
private double doubleValue;
private Integer styleType;
private Integer dataType; //数据类型:1字符串 2数字
@Getter
@AllArgsConstructor
public enum DataType{
STRING(1, "字符串"),
NUMERIC(2, "数字"),
;
private Integer value;
private String msg;
}
public ExcelData(String value) {
this(value,null);
}
public ExcelData(String value, String defaultValue) {
this.value = value;
this.dataType = DataType.STRING.value;
}
public ExcelData(Double value) {
this(value,null);
}
public ExcelData(Double value, String defaultValue) {
if (null != value) {
this.doubleValue = value;
this.dataType = DataType.NUMERIC.value;
}
else {
this.value = defaultValue;
this.dataType = DataType.STRING.value;
}
}
public ExcelData(Integer value) {
this(value,null);
}
public ExcelData(Integer value, String defaultValue) {
if (null != value) {
this.doubleValue = value;
this.dataType = DataType.NUMERIC.value;
}
else {
this.value = defaultValue;
this.dataType = DataType.STRING.value;
}
}
public ExcelData(BigDecimal value) {
this(value,null);
}
public ExcelData(BigDecimal value, String defaultValue) {
if (null != value) {
this.doubleValue = value.doubleValue();
this.dataType = DataType.NUMERIC.value;
}
else {
this.value = defaultValue;
this.dataType = DataType.STRING.value;
}
}
public double getDoubleValue() {
return doubleValue;
}
public String getStringValue() {
return value;
}
}
package com.clx.performance.utils.excel;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author: aiqingguo
* @Description:
* @Date: 2022/8/18 14:25
* @Version: 1.0
*/
@Data
@NoArgsConstructor
public class ExcelField {
private Integer column;
private String fieldName;
private String field;
private Integer width;
private Integer styleType;
private Integer contentAlignment;
public ExcelField(String fieldName, String field, Integer width) {
this.fieldName = fieldName;
this.field = field;
this.width = width;
}
public ExcelField(Integer column, String fieldName, String field, Integer width) {
this.column = column;
this.fieldName = fieldName;
this.field = field;
this.width = width;
}
}
package com.clx.performance.utils.excel;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @Author: aiqingguo
* @Description:
* @Date: 2022/8/19 9:53
* @Version: 1.0
*/
@Data
@NoArgsConstructor
public class ExcelSheet {
private String name;
private String title;
private String time;
private Integer timeStyleType;
private List<ExcelField> fieldList;
private List<List<ExcelData>> dataList;
public ExcelSheet(String name, String title) {
this.name = name;
this.title = title;
}
public ExcelSheet(String name, String title, List<ExcelField> fieldList) {
this.name = name;
this.title = title;
this.fieldList = fieldList;
}
public ExcelSheet(String name, String title, List<ExcelField> fieldList, List<List<ExcelData>> dataList) {
this.name = name;
this.title = title;
this.fieldList = fieldList;
this.dataList = dataList;
}
}
package com.clx.performance.utils.excel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.util.List;
/**
* @Author: aiqingguo
* @Description:
* @Date: 2022/8/18 14:33
* @Version: 1.0
*/
public class ExcelUtil {
@Getter
@AllArgsConstructor
public enum CellStyleType {
CONTENT_CENTER(1), //内容居中
CONTENT_LEFT(2), //内容居左
CONTENT_RIGHT(3), //内容居右
TIME_LEFT(11), //时间左边
TIME_RIGHT(12), //时间右边
;
private final Integer code;
}
/**
* 创建excel
*/
public static SXSSFWorkbook create(ExcelSheet excelSheet) {
List<ExcelField> fieldList = excelSheet.getFieldList();
List<List<ExcelData>> dataList = excelSheet.getDataList();
SXSSFWorkbook workbook = new SXSSFWorkbook();
//创建sheet
SXSSFSheet sheet = workbook.createSheet(excelSheet.getName());
int fieldSize = fieldList.size();
for (int i = 0; i < fieldSize; i++) {
sheet.setColumnWidth(i, fieldList.get(i).getWidth());
}
//添加标题
int row = 0;
CellRangeAddress cellRangeAddress = new CellRangeAddress(row, row, 0, fieldSize - 1);
SXSSFRow rowTitle = sheet.createRow(row++);
sheet.addMergedRegion(cellRangeAddress);
rowTitle.setHeightInPoints(30);
SXSSFCell titleCell = rowTitle.createCell(0);
titleCell.setCellValue(excelSheet.getTitle());
titleCell.setCellStyle(getTitleStyle(workbook));
//时间
if (StringUtils.isNotBlank(excelSheet.getTime())) {
CellRangeAddress timeCellRangeAddress = new CellRangeAddress(row, row, 0, fieldSize - 1);
SXSSFRow rowTime = sheet.createRow(row++);
sheet.addMergedRegion(timeCellRangeAddress);
SXSSFCell timeCell = rowTime.createCell(0);
timeCell.setCellValue(excelSheet.getTime());
Integer styleType = excelSheet.getTimeStyleType();
if (null != styleType) {
timeCell.setCellStyle(getCellStyle(workbook, styleType));
}
}
//添加表头
CellStyle headCellStyle = getHeadStyle(workbook);
SXSSFRow rowHead = sheet.createRow(row++);
for (int i = 0; i < fieldSize; i++) {
SXSSFCell headCell = rowHead.createCell(i);
headCell.setCellValue(fieldList.get(i).getFieldName());
Integer styleType = fieldList.get(i).getStyleType();
if (null != styleType) {
headCell.setCellStyle(getCellStyle(workbook, styleType));
} else {
headCell.setCellStyle(headCellStyle);
}
}
//内容
SXSSFRow rowData;
int dataSize = dataList.size();
for (int i = 0; i < dataSize; i++) {
rowData = sheet.createRow(row++);
for (int j = 0; j < fieldSize; j++) {
SXSSFCell dataCell = rowData.createCell(j);
ExcelData excelData = dataList.get(i).get(j);
setCellValue(dataCell, excelData);
Integer styleType = dataList.get(i).get(j).getStyleType();
if (null != styleType) {
dataCell.setCellStyle(getCellStyle(workbook, styleType));
}
}
}
return workbook;
}
/**
* 设置值
*/
private static void setCellValue(SXSSFCell dataCell, ExcelData excelData) {
if (ExcelData.DataType.STRING.getValue().equals(excelData.getDataType())) {
String stringValue = excelData.getStringValue();
dataCell.setCellValue(stringValue);
} else if (ExcelData.DataType.NUMERIC.getValue().equals(excelData.getDataType())) {
if (null == excelData.getStyleType()) {
excelData.setStyleType(CellStyleType.CONTENT_RIGHT.getCode());
}
dataCell.setCellValue(excelData.getDoubleValue());
}
}
/**
* 设置标题字体
*/
private static Font getTitleFont(SXSSFWorkbook workbook) {
Font ztFont = workbook.createFont();
ztFont.setColor(Font.COLOR_NORMAL);
ztFont.setFontHeightInPoints((short) 22);
return ztFont;
}
/**
* 设置标题样式
*/
private static CellStyle getTitleStyle(SXSSFWorkbook workbook) {
Font font = getTitleFont(workbook);
CellStyle style = workbook.createCellStyle();
style.setFont(font);
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
return style;
}
/**
* 设置格式
*/
private static Font getHeadFont(SXSSFWorkbook workbook) {
Font ztFont = workbook.createFont();
ztFont.setBold(true);
return ztFont;
}
/**
* 设置表头样式
*/
private static CellStyle getHeadStyle(SXSSFWorkbook workbook) {
Font headFont = getHeadFont(workbook);
CellStyle style = workbook.createCellStyle();
style.setFont(headFont);
style.setVerticalAlignment(VerticalAlignment.CENTER);
style.setAlignment(HorizontalAlignment.CENTER);
return style;
}
//获取单元格样式
private static CellStyle getCellStyle(SXSSFWorkbook workbook, Integer cellStyleType) {
if (CellStyleType.CONTENT_CENTER.getCode().equals(cellStyleType)) {
return contentCenterStyle(workbook);
}
if (CellStyleType.CONTENT_LEFT.getCode().equals(cellStyleType)) {
return contentLeftStyle(workbook);
}
if (CellStyleType.CONTENT_RIGHT.getCode().equals(cellStyleType)) {
return contentRightStyle(workbook);
}
if (CellStyleType.TIME_LEFT.getCode().equals(cellStyleType)) {
return timeLeftStyle(workbook);
}
if (CellStyleType.TIME_RIGHT.getCode().equals(cellStyleType)) {
return timeRightStyle(workbook);
}
return workbook.createCellStyle();
}
/**
* 内容居中
*/
private static CellStyle contentCenterStyle(SXSSFWorkbook workbook) {
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
return cellStyle;
}
/**
* 内容居右
*/
private static CellStyle contentLeftStyle(SXSSFWorkbook workbook) {
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.LEFT);
return cellStyle;
}
/**
* 内容居右
*/
private static CellStyle contentRightStyle(SXSSFWorkbook workbook) {
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.RIGHT);
return cellStyle;
}
/**
* 时间样式
*/
private static CellStyle timeLeftStyle(SXSSFWorkbook workbook) {
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.LEFT);
Font font = workbook.createFont();
font.setBold(true);
font.setFontName("宋体");
cellStyle.setFont(font);
return cellStyle;
}
private static CellStyle timeRightStyle(SXSSFWorkbook workbook) {
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.RIGHT);
Font font = workbook.createFont();
font.setBold(true);
font.setFontName("宋体");
cellStyle.setFont(font);
return cellStyle;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论