parent
61818816a4
commit
f68b58448c
@ -0,0 +1,81 @@
|
|||||||
|
package com.yunxi.scm.framework.excel.core.convert;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.excel.converters.Converter;
|
||||||
|
import com.alibaba.excel.enums.CellDataTypeEnum;
|
||||||
|
import com.alibaba.excel.metadata.GlobalConfiguration;
|
||||||
|
import com.alibaba.excel.metadata.data.ReadCellData;
|
||||||
|
import com.alibaba.excel.metadata.data.WriteCellData;
|
||||||
|
import com.alibaba.excel.metadata.property.ExcelContentProperty;
|
||||||
|
import com.yunxi.scm.framework.dict.core.util.DictFrameworkUtils;
|
||||||
|
import com.yunxi.scm.framework.excel.core.annotations.DictFormat;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
@Slf4j
|
||||||
|
public class MutilDictConvert implements Converter<List<String>> {
|
||||||
|
|
||||||
|
// 分隔符
|
||||||
|
private static final String COMMA = ",";
|
||||||
|
|
||||||
|
// 指定转化参数的Java类型
|
||||||
|
@Override
|
||||||
|
public Class<?> supportJavaTypeKey() {
|
||||||
|
return List.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 指定转化参数对应的单元格类型
|
||||||
|
@Override
|
||||||
|
public CellDataTypeEnum supportExcelTypeKey() {
|
||||||
|
return CellDataTypeEnum.STRING;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> convertToJavaData(ReadCellData readCellData, ExcelContentProperty contentProperty,
|
||||||
|
GlobalConfiguration globalConfiguration) {
|
||||||
|
// 使用字典解析
|
||||||
|
String type = getType(contentProperty);
|
||||||
|
String strings = readCellData.getStringValue();
|
||||||
|
// Class<?> fieldClazz = contentProperty.getField().getType(); // 获取被注解的字段类型
|
||||||
|
List<String> labels = StrUtil.splitTrim(strings, COMMA);
|
||||||
|
List<String> values = new ArrayList<>();
|
||||||
|
for(String label : labels) {
|
||||||
|
String value = DictFrameworkUtils.parseDictDataValue(type, label);
|
||||||
|
if (value == null) {
|
||||||
|
log.error("[convertToJavaData][type({}) 解析不掉 label({})]", type, label);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
values.add(value);
|
||||||
|
}
|
||||||
|
// return Convert.convert(fieldClazz, value); // 类型转换
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WriteCellData<String> convertToExcelData(List<String> values, ExcelContentProperty contentProperty,
|
||||||
|
GlobalConfiguration globalConfiguration) {
|
||||||
|
// 空时,返回空
|
||||||
|
if (values == null || values.isEmpty()) {
|
||||||
|
return new WriteCellData<>("");
|
||||||
|
}
|
||||||
|
// 使用字典格式化
|
||||||
|
String type = getType(contentProperty);
|
||||||
|
List<String> labels = new ArrayList<>();
|
||||||
|
for(String value : values) {
|
||||||
|
String label = DictFrameworkUtils.getDictDataLabel(type, value);
|
||||||
|
if (label == null) {
|
||||||
|
log.error("[convertToExcelData][type({}) 转换不了 label({})]", type, value);
|
||||||
|
} else {
|
||||||
|
labels.add(label);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 生成 Excel 小表格
|
||||||
|
return new WriteCellData<>(CollUtil.join(labels, COMMA));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getType(ExcelContentProperty contentProperty) {
|
||||||
|
return contentProperty.getField().getAnnotation(DictFormat.class).value();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.yunxi.scm.module.demo.controller.admin.material.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.yunxi.scm.framework.excel.core.annotations.DictFormat;
|
||||||
|
import com.yunxi.scm.framework.excel.core.convert.MutilDictConvert;
|
||||||
|
import com.yunxi.scm.module.demo.enums.DictTypeConstants;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
// 测试转换
|
||||||
|
@Data
|
||||||
|
public class MaterialExportTestVO {
|
||||||
|
|
||||||
|
@ExcelProperty(value = "分类测试", converter = MutilDictConvert.class)
|
||||||
|
@DictFormat(DictTypeConstants.TRADE_ORDER_TYPE)
|
||||||
|
private List<String> category;
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.yunxi.scm.module.demo.dal.dataobject.material;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class MaterialXDO {
|
||||||
|
|
||||||
|
private List<String> category;
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package com.yunxi.scm.module.demo.enums.material;
|
||||||
|
|
||||||
|
import com.yunxi.scm.framework.common.core.IntArrayValuable;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum CategoryEnum implements IntArrayValuable {
|
||||||
|
COMMON(0, "普通"),
|
||||||
|
MIAOSHA(1, "秒杀"),
|
||||||
|
|
||||||
|
PINTUAN(2,"拼团"),
|
||||||
|
|
||||||
|
KANJIA(3, "砍价");
|
||||||
|
|
||||||
|
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CategoryEnum::getCode).toArray();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态值
|
||||||
|
*/
|
||||||
|
private final Integer code;
|
||||||
|
/**
|
||||||
|
* 状态名
|
||||||
|
*/
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int[] array() {
|
||||||
|
return ARRAYS;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue