You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.6 KiB
73 lines
2.6 KiB
package com.ruoyi.common.convert; |
|
|
|
import cn.hutool.core.annotation.AnnotationUtil; |
|
import cn.hutool.core.convert.Convert; |
|
import cn.hutool.core.util.ObjectUtil; |
|
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.ruoyi.common.annotation.ExcelDictFormat; |
|
import com.ruoyi.common.core.service.DictService; |
|
import com.ruoyi.common.utils.StringUtils; |
|
import com.ruoyi.common.utils.poi.ExcelUtil; |
|
import com.ruoyi.common.utils.spring.SpringUtils; |
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import java.lang.reflect.Field; |
|
|
|
/** |
|
* 字典格式化转换处理 |
|
* |
|
* @author Lion Li |
|
*/ |
|
@Slf4j |
|
public class ExcelDictConvert implements Converter<Object> { |
|
|
|
@Override |
|
public Class<Object> supportJavaTypeKey() { |
|
return Object.class; |
|
} |
|
|
|
@Override |
|
public CellDataTypeEnum supportExcelTypeKey() { |
|
return null; |
|
} |
|
|
|
@Override |
|
public Object convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { |
|
ExcelDictFormat anno = getAnnotation(contentProperty.getField()); |
|
String type = anno.dictType(); |
|
String label = cellData.getStringValue(); |
|
String value; |
|
if (StringUtils.isBlank(type)) { |
|
value = ExcelUtil.reverseByExp(label, anno.readConverterExp(), anno.separator()); |
|
} else { |
|
value = SpringUtils.getBean(DictService.class).getDictValue(type, label, anno.separator()); |
|
} |
|
return Convert.convert(contentProperty.getField().getType(), value); |
|
} |
|
|
|
@Override |
|
public WriteCellData<String> convertToExcelData(Object object, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { |
|
if (ObjectUtil.isNull(object)) { |
|
return new WriteCellData<>(""); |
|
} |
|
ExcelDictFormat anno = getAnnotation(contentProperty.getField()); |
|
String type = anno.dictType(); |
|
String value = Convert.toStr(object); |
|
String label; |
|
if (StringUtils.isBlank(type)) { |
|
label = ExcelUtil.convertByExp(value, anno.readConverterExp(), anno.separator()); |
|
} else { |
|
label = SpringUtils.getBean(DictService.class).getDictLabel(type, value, anno.separator()); |
|
} |
|
return new WriteCellData<>(label); |
|
} |
|
|
|
private ExcelDictFormat getAnnotation(Field field) { |
|
return AnnotationUtil.getAnnotation(field, ExcelDictFormat.class); |
|
} |
|
}
|
|
|