模型
/**
* (渠道商-无规格分组字段)导入新增商品Excel模板对象
* @author czc
* @date 2023-04-10 16:44
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class AddChannelSkuNotGroupModel extends ExcelBaseModel {
static final String bigTitle = "PMS.EXCEL.BIGTITLE";
/**
* 平台一级类目
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.ONE.CATEGORY.INSTRUCTION1", "PMS.EXCEL.ONE.CATEGORY.INSTRUCTION2"})
@ColumnWidth(value = 24)
private String oneCategory;
/**
* 平台二级类目
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.TWO.CATEGORY.INSTRUCTION1", "PMS.EXCEL.TWO.CATEGORY.INSTRUCTION2"})
@ColumnWidth(value = 24)
private String twoCategory;
/**
* 平台三级类目
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.THREE.CATEGORY.INSTRUCTION1", "PMS.EXCEL.THREE.CATEGORY.INSTRUCTION2"})
@ColumnWidth(value = 24)
private String threeCategory;
/**
* 平台四级类目
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.FOUR.CATEGORY.INSTRUCTION1", "PMS.EXCEL.FOUR.CATEGORY.INSTRUCTION2"})
@ColumnWidth(value = 24)
private String fourCategory;
/**
* 自定义一级类目
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.ONE.CUSTOMIZE.CATEGORY.INSTRUCTION1", "PMS.EXCEL.ONE.CUSTOMIZE.CATEGORY.INSTRUCTION2"})
@ColumnWidth(value = 20)
private String oneCustomizeCategory;
/**
* 自定义二级类目
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.TWO.CUSTOMIZE.CATEGORY.INSTRUCTION1", "PMS.EXCEL.TWO.CUSTOMIZE.CATEGORY.INSTRUCTION2"})
@ColumnWidth(value = 20)
private String twoCustomizeCategory;
/**
* 商品名称
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.NAME.INSTRUCTION1", "PMS.EXCEL.NAME.INSTRUCTION2"})
@ColumnWidth(value = 40)
private String name;
/**
* SKU编码
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.SKU.CODE.INSTRUCTION1", "PMS.EXCEL.SKU.CODE.INSTRUCTION2"})
@ColumnWidth(value = 20)
private String skuCode;
/**
* 商品品牌
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.BRAND.NAME.INSTRUCTION1", "PMS.EXCEL.BRAND.NAME.INSTRUCTION2"})
@ColumnWidth(value = 20)
@DropDownField(fieldName = DropDownFieldConstant.BRAND_FIELD)
private String brandName;
/**
* 规格名1
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.SPEC.ONE.INSTRUCTION1", "PMS.EXCEL.SPEC.ONE.INSTRUCTION2"})
@ColumnWidth(value = 20)
private String specOne;
/**
* 规格值1
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.SPEC.ONE.VALUE.INSTRUCTION1", "PMS.EXCEL.SPEC.ONE.VALUE.INSTRUCTION2"})
@ColumnWidth(value = 20)
private String specOneValue;
/**
* 规格名2
*/
@ExcelProperty(value = {bigTitle, " ", "PMS.EXCEL.SPEC.TWO.INSTRUCTION2"})
@ColumnWidth(value = 20)
private String specTwo;
/**
* 规格值2
*/
@ExcelProperty(value = {bigTitle, " ", "PMS.EXCEL.SPEC.TWO.VALUE.INSTRUCTION2"})
@ColumnWidth(value = 20)
private String specTwoValue;
/**
* 规格名3
*/
@ExcelProperty(value = {bigTitle, " ", "PMS.EXCEL.SPEC.THREE.INSTRUCTION2"})
@ColumnWidth(value = 20)
private String specThree;
/**
* 规格值3
*/
@ExcelProperty(value = {bigTitle, " ", "PMS.EXCEL.SPEC.THREE.VALUE.INSTRUCTION2"})
@ColumnWidth(value = 20)
private String specThreeValue;
/**
* 商品单位
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.UNIT.INSTRUCTION1", "PMS.EXCEL.UNIT.INSTRUCTION2"})
@ColumnWidth(value = 10)
@DropDownField(fieldName = DropDownFieldConstant.UNIT_FIELD)
private String unit;
/**
* 最小销售单元
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.SALE.GROUP.INSTRUCTION1", "PMS.EXCEL.SALE.GROUP.INSTRUCTION2"})
@ColumnWidth(value = 15)
private String saleGroup;
/**
* 单位换算模板编号
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.UNIT.TEMPLATE.NUMBER.INSTRUCTION1", "PMS.EXCEL.UNIT.TEMPLATE.NUMBER.INSTRUCTION2"})
@ColumnWidth(value = 20)
private String unitTemplateNumber;
/**
* 所属供应商
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.SUPPLIER.NAME.INSTRUCTION1", "PMS.EXCEL.SUPPLIER.NAME.INSTRUCTION2"})
@ColumnWidth(value = 20)
@DropDownField(fieldName = DropDownFieldConstant.SUPPLIER_FIELD)
private String supplierName;
/**
* 供应商型号
*/
@ExcelProperty(value = {bigTitle, " ", "PMS.EXCEL.SUPPLIER.MODEL.INSTRUCTION2"})
@ColumnWidth(value = 20)
private String supplierModel;
/**
* 条形码
*/
@ExcelProperty(value = {bigTitle, " ", "PMS.EXCEL.BAR.CODE.INSTRUCTION2"})
@ColumnWidth(value = 20)
private String barCode;
/**
* 零售价
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.MARKET.PRICE.INSTRUCTION1", "PMS.EXCEL.MARKET.PRICE.INSTRUCTION2"})
@ColumnWidth(value = 15)
private String marketPrice;
/**
* 成本价
*/
@ExcelProperty(value = {bigTitle, "PMS.EXCEL.COST.PRICE.INSTRUCTION1", "PMS.EXCEL.COST.PRICE.INSTRUCTION2"})
@ColumnWidth(value = 15)
private String costPrice;
/**
* ERP-SKU编码
*/
@ExcelProperty(value = {bigTitle, " ", "PMS.EXCEL.ERP.SKU.CODE.INSTRUCTION2"})
@ColumnWidth(value = 20)
private String erpSkuCode;
}
拦截器
@RequiredArgsConstructor
public class I18nCellWriteHandler implements CellWriteHandler {
@Resource
private MessageSource messageSource;
@Override
public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
// 仅处理表头
if (!isHead || head == null) {
return;
}
// 获取原始表头名称列表
List<String> originHeadNames = head.getHeadNameList();
if (CollectionUtils.isEmpty(originHeadNames)) {
return;
}
// 仅在预计算阶段执行国际化逻辑
if (relativeRowIndex == 0) { // relativeRowIndex == 0 表示预计算阶段
List<String> i18nHeadNames = originHeadNames.stream()
.map(code ->{
if (StringUtils.isNotBlank(code)){
return MessageUtil.getMessage(code);
}
return code;
}
) // 缓存结果
.collect(Collectors.toList());
// 替换表头名称
head.setHeadNameList(i18nHeadNames);
}
}
@Override
public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) {
}
@Override
public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) {
}
@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
}
}
简单使用
EasyExcel.write(response.getOutputStream(), head)
// 注册拦截器
.registerWriteHandler(new I18nCellWriteHandler())
.sheet(sheetName).doWrite(data);