From 0375fd319c9f3b08d255c814cb0f8521d8ec641b Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期三, 18 八月 2021 11:11:24 +0800
Subject: [PATCH] !78 同步dev分支 Merge pull request !78 from 疯狂的狮子Li/dev

---
 ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelDictConvert.java |   69 ++++++++++++++++++++++++++++++++++
 1 files changed, 69 insertions(+), 0 deletions(-)

diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelDictConvert.java b/ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelDictConvert.java
new file mode 100644
index 0000000..58560d0
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelDictConvert.java
@@ -0,0 +1,69 @@
+package com.ruoyi.common.convert;
+
+import cn.hutool.core.annotation.AnnotationUtil;
+import cn.hutool.core.convert.Convert;
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+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(CellData 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 = ExcelUtil.reverseDictByExp(label, type, anno.separator());
+		}
+		return Convert.convert(contentProperty.getField().getType(), value);
+	}
+
+	@Override
+	public CellData<String> convertToExcelData(Object object, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
+		if (StringUtils.isNull(object)) {
+			return new CellData<>("");
+		}
+		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 = ExcelUtil.convertDictByExp(value, type, anno.separator());
+		}
+		return new CellData<>(label);
+	}
+
+	private ExcelDictFormat getAnnotation(Field field) {
+		return AnnotationUtil.getAnnotation(field, ExcelDictFormat.class);
+	}
+}

--
Gitblit v1.9.3