From 8936268038b4f554d00f738a2311b560bda205d8 Mon Sep 17 00:00:00 2001 From: Charles7c Date: Sat, 13 Jan 2024 15:58:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(extension/crud):=20=E6=96=B0=E5=A2=9E=20Ea?= =?UTF-8?q?sy=20Excel=20=E6=9E=9A=E4=B8=BE=E6=8E=A5=E5=8F=A3=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../converter/ExcelBaseEnumConverter.java | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 continew-starter-extension/continew-starter-extension-crud/src/main/java/top/charles7c/continew/starter/extension/crud/converter/ExcelBaseEnumConverter.java diff --git a/continew-starter-extension/continew-starter-extension-crud/src/main/java/top/charles7c/continew/starter/extension/crud/converter/ExcelBaseEnumConverter.java b/continew-starter-extension/continew-starter-extension-crud/src/main/java/top/charles7c/continew/starter/extension/crud/converter/ExcelBaseEnumConverter.java new file mode 100644 index 00000000..24726f7c --- /dev/null +++ b/continew-starter-extension/continew-starter-extension-crud/src/main/java/top/charles7c/continew/starter/extension/crud/converter/ExcelBaseEnumConverter.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + *

+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.gnu.org/licenses/lgpl.html + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.charles7c.continew.starter.extension.crud.converter; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.ClassUtil; +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 top.charles7c.continew.starter.core.constant.StringConstants; +import top.charles7c.continew.starter.data.mybatis.plus.base.IBaseEnum; + +/** + * Easy Excel 枚举接口转换器 + * + * @see IBaseEnum + * @author Charles7c + * @since 1.2.0 + */ +public class ExcelBaseEnumConverter implements Converter> { + + @Override + public Class supportJavaTypeKey() { + return IBaseEnum.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + /** + * 转换为 Java 数据(读取 Excel) + */ + @Override + public IBaseEnum convertToJavaData(ReadCellData cellData, + ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + return this.getEnum(IBaseEnum.class, Convert.toStr(cellData.getData())); + } + + /** + * 转换为 Excel 数据(写入 Excel) + */ + @Override + public WriteCellData convertToExcelData(IBaseEnum value, + ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + if (null == value) { + return new WriteCellData<>(StringConstants.EMPTY); + } + return new WriteCellData<>(value.getDescription()); + } + + /** + * 通过 value 获取枚举对象,获取不到时为 {@code null} + * + * @param enumType 枚举类型 + * @param description 描述 + * @return 对应枚举 ,获取不到时为 {@code null} + */ + private IBaseEnum getEnum(Class enumType, String description) { + Object[] enumConstants = enumType.getEnumConstants(); + for (Object enumConstant : enumConstants) { + if (ClassUtil.isAssignable(IBaseEnum.class, enumType)) { + IBaseEnum baseEnum = (IBaseEnum)enumConstant; + if (baseEnum.getDescription().equals(description)) { + return baseEnum; + } + } + } + return null; + } +}