package org.springblade.common.excel; 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.github.xiaoymin.knife4j.core.util.StrUtil; import org.apache.logging.log4j.util.Strings; import org.springblade.common.cache.DictBizCache; import org.springblade.modules.system.entity.DictBiz; import org.springframework.stereotype.Component; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; /** * 字典映射 * * @author zhongrj * @date 2023-11-17 */ @Component public class ExcelDictConverter implements Converter { @Override public Class supportJavaTypeKey() { return Integer.class; } @Override public CellDataTypeEnum supportExcelTypeKey() { return CellDataTypeEnum.STRING; } /** * 导入excel 解析到java 对象 * @param cellData * @param excelContentProperty * @param globalConfiguration * @return * @throws Exception */ @Override public String convertToJavaData(ReadCellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception { // 获取字典类型 Field field = excelContentProperty.getField(); ExcelDictItemLabel excel = field.getAnnotation(ExcelDictItemLabel.class); String dictType = excel.type(); // 为空返回 String dictLabel = cellData.getStringValue(); if (StrUtil.isBlank(dictLabel)) { return dictLabel; } // 多个值处理 String[] split = dictLabel.split("、"); //解析返回 List arrayList = new ArrayList<>(); for (String label : split) { // 查询字典 List list = DictBizCache.getList(dictType); for (DictBiz dictBiz : list) { if (dictBiz.getDictValue().equals(label)){ arrayList.add(dictBiz.getDictKey()); break; } } } // 返回key return Strings.join(arrayList,','); } /** * java 导出到 excel * @param dictValue * @param excelContentProperty * @param globalConfiguration * @return * @throws Exception */ @Override public WriteCellData convertToExcelData(String dictValue, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception { // 获取字典类型 Field field = excelContentProperty.getField(); ExcelDictItem excel = field.getAnnotation(ExcelDictItem.class); String dictType = excel.type(); List list = DictBizCache.getList(dictType); String value = ""; //解析返回 for (DictBiz dictBiz : list) { if (dictBiz.getDictKey().equals(dictValue)){ value = dictBiz.getDictValue(); break; } } return new WriteCellData(value); } }