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