From c00e3974050ff609fb34463d70292e768a786fea Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期五, 26 十一月 2021 18:06:44 +0800
Subject: [PATCH] update 抽象 Excel 导入支持自定义监听器

---
 ruoyi-common/src/main/java/com/ruoyi/common/excel/DefaultExcelListener.java |  101 +++++++++++
 /dev/null                                                                   |   40 ----
 ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java  |    7 
 ruoyi-common/src/main/java/com/ruoyi/common/excel/DefautExcelResult.java    |   78 ++++++++
 ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java        |  220 +++++++++++++-----------
 ruoyi-ui/src/views/demo/demo/index.vue                                      |    2 
 ruoyi-common/src/main/java/com/ruoyi/common/excel/ExcelResult.java          |   26 ++
 ruoyi-demo/src/main/java/com/ruoyi/demo/domain/bo/TestDemoImportVo.java     |   17 -
 8 files changed, 333 insertions(+), 158 deletions(-)

diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/excel/DefaultExcelListener.java b/ruoyi-common/src/main/java/com/ruoyi/common/excel/DefaultExcelListener.java
new file mode 100644
index 0000000..ba4cbf9
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/excel/DefaultExcelListener.java
@@ -0,0 +1,101 @@
+package com.ruoyi.common.excel;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.alibaba.excel.exception.ExcelAnalysisException;
+import com.alibaba.excel.exception.ExcelDataConvertException;
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.common.utils.ValidatorUtils;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * Excel 瀵煎叆鐩戝惉
+ *
+ * @author Yjoioooo
+ * @author Lion Li
+ */
+@Slf4j
+@NoArgsConstructor
+public class DefaultExcelListener<T> extends AnalysisEventListener<T> {
+
+    /**
+     * 鏄惁Validator妫�楠岋紝榛樿涓烘槸
+     */
+    private Boolean isValidate = Boolean.TRUE;
+
+    /**
+     * 瀵煎叆鍥炴墽
+     */
+    private ExcelResult<T> excelResult;
+
+    public DefaultExcelListener(boolean isValidate) {
+        this.excelResult = new DefautExcelResult<>();
+        this.isValidate = isValidate;
+    }
+
+    /**
+     * 澶勭悊寮傚父
+     *
+     * @param exception ExcelDataConvertException
+     * @param context   Excel 涓婁笅鏂�
+     */
+    @Override
+    public void onException(Exception exception, AnalysisContext context) throws Exception {
+        String errMsg = null;
+        if (exception instanceof ExcelDataConvertException) {
+            // 濡傛灉鏄煇涓�涓崟鍏冩牸鐨勮浆鎹㈠紓甯� 鑳借幏鍙栧埌鍏蜂綋琛屽彿
+            // 濡傛灉瑕佽幏鍙栧ご鐨勪俊鎭� 閰嶅悎doAfterAllAnalysedHeadMap浣跨敤
+            ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException) exception;
+            errMsg = StrUtil.format("绗瑊}琛�-绗瑊}鍒楄В鏋愬紓甯�<br/>",
+                excelDataConvertException.getRowIndex() + 1,
+                excelDataConvertException.getColumnIndex() + 1);
+            if (log.isDebugEnabled()) {
+                log.error(errMsg);
+            }
+        }
+        if (exception instanceof ConstraintViolationException) {
+            ConstraintViolationException constraintViolationException = (ConstraintViolationException) exception;
+            Set<ConstraintViolation<?>> constraintViolations = constraintViolationException.getConstraintViolations();
+            String constraintViolationsMsg = constraintViolations.stream()
+                .map(ConstraintViolation::getMessage)
+                .collect(Collectors.joining(", "));
+            errMsg = StrUtil.format("绗瑊}琛屾暟鎹牎楠屽紓甯�: {}", context.readRowHolder().getRowIndex() + 1, constraintViolationsMsg);
+            if (log.isDebugEnabled()) {
+                log.error(errMsg);
+            }
+        }
+        excelResult.getErrorList().add(errMsg);
+        throw new ExcelAnalysisException(errMsg);
+    }
+
+    @Override
+    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
+        log.debug("瑙f瀽鍒颁竴鏉″ご鏁版嵁: {}", JSON.toJSONString(headMap));
+    }
+
+    @Override
+    public void invoke(T data, AnalysisContext context) {
+        if (isValidate) {
+            ValidatorUtils.validate(data);
+        }
+        excelResult.getList().add(data);
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+        log.debug("鎵�鏈夋暟鎹В鏋愬畬鎴愶紒");
+    }
+
+    public ExcelResult<T> getExcelResult() {
+        return excelResult;
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/excel/DefautExcelResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/excel/DefautExcelResult.java
new file mode 100644
index 0000000..76c60e8
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/excel/DefautExcelResult.java
@@ -0,0 +1,78 @@
+package com.ruoyi.common.excel;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 榛樿excel杩斿洖瀵硅薄
+ *
+ * @author Yjoioooo
+ * @author Lion Li
+ */
+public class DefautExcelResult<T> implements ExcelResult<T> {
+
+    /**
+     * 鏁版嵁瀵硅薄list
+     */
+    @Setter
+    private List<T> list;
+
+    /**
+     * 閿欒淇℃伅鍒楄〃
+     */
+    @Setter
+    private List<String> errorList;
+
+    public DefautExcelResult() {
+        this.list = new ArrayList<>();
+        this.errorList = new ArrayList<>();
+    }
+
+    public DefautExcelResult(List<T> list, List<String> errorList) {
+        this.list = list;
+        this.errorList = errorList;
+    }
+
+    public DefautExcelResult(ExcelResult<T> excelResult) {
+        this.list = excelResult.getList();
+        this.errorList = excelResult.getErrorList();
+    }
+
+    @Override
+    public List<T> getList() {
+        return list;
+    }
+
+    @Override
+    public List<String> getErrorList() {
+        return errorList;
+    }
+
+    /**
+     * 鑾峰彇瀵煎叆鍥炴墽
+     *
+     * @return 瀵煎叆鍥炴墽
+     */
+    @Override
+    public String getAnalysis() {
+        int successCount = list.size();
+        int errorCount = errorList.size();
+        if (successCount == 0) {
+            return "璇诲彇澶辫触锛屾湭瑙f瀽鍒版暟鎹�";
+        } else {
+            if (errorList.size() == 0) {
+                return StrUtil.format("鎭枩鎮紝鍏ㄩ儴璇诲彇鎴愬姛锛佸叡{}鏉�", successCount);
+            } else {
+                return StrUtil.format("閮ㄥ垎璇诲彇鎴愬姛锛屽叾涓垚鍔焮}鏉★紝澶辫触{}鏉★紝閿欒淇℃伅濡備笅锛�<br/>{}",
+                    successCount,
+                    errorCount,
+                    CollUtil.join(errorList, "<br/>"));
+            }
+
+        }
+    }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/excel/ExcelResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/excel/ExcelResult.java
new file mode 100644
index 0000000..63f8b8a
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/excel/ExcelResult.java
@@ -0,0 +1,26 @@
+package com.ruoyi.common.excel;
+
+import java.util.List;
+
+/**
+ * excel杩斿洖瀵硅薄
+ *
+ * @author Lion Li
+ */
+public interface ExcelResult<T> {
+
+    /**
+     * 瀵硅薄鍒楄〃
+     */
+    List<T> getList();
+
+    /**
+     * 閿欒鍒楄〃
+     */
+    List<String> getErrorList();
+
+    /**
+     * 瀵煎叆鍥炴墽
+     */
+    String getAnalysis();
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelListener.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelListener.java
deleted file mode 100644
index 5705e94..0000000
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelListener.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.ruoyi.common.utils.poi;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
-import com.alibaba.excel.context.AnalysisContext;
-import com.alibaba.excel.event.AnalysisEventListener;
-import com.alibaba.excel.exception.ExcelAnalysisException;
-import com.alibaba.excel.exception.ExcelDataConvertException;
-import com.alibaba.fastjson.JSON;
-import com.ruoyi.common.utils.ValidatorUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import javax.validation.*;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-/**
- * 鍏叡excel鐩戝惉绫�
- * @param <T>
- */
-public class ExcelListener<T> extends AnalysisEventListener<T> {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(ExcelListener.class);
-    /** 鏁版嵁瀵硅薄list */
-    private final List<T> list = new ArrayList<>();
-    /** 閿欒淇℃伅鍒楄〃 */
-    private final List<String> errorList = new ArrayList<>();
-    /** 閬囧埌寮傚父鏄惁璺冲嚭瀵煎叆锛岄粯璁や负鏄� */
-    private Boolean skipException = Boolean.TRUE;
-    /** 鏄惁Validator妫�楠岋紝榛樿涓烘槸 */
-    private Boolean isValidate = Boolean.TRUE;
-    /**
-     * 瀵煎叆鍥炴墽
-     */
-    private final ExcelResult<T> excelResult = new ExcelResult<>();
-
-    public ExcelListener() {
-
-    }
-
-    public ExcelListener(boolean isValidate, boolean skipException) {
-        this.isValidate = isValidate;
-        this.skipException = skipException;
-    }
-
-    /**
-     * 澶勭悊寮傚父
-     *
-     * @param exception ExcelDataConvertException
-     * @param context excel涓婁笅鏂�
-     */
-    @Override
-    public void onException(Exception exception, AnalysisContext context) throws Exception {
-        // 濡傛灉鏄煇涓�涓崟鍏冩牸鐨勮浆鎹㈠紓甯� 鑳借幏鍙栧埌鍏蜂綋琛屽彿
-        // 濡傛灉瑕佽幏鍙栧ご鐨勪俊鎭� 閰嶅悎doAfterAllAnalysedHeadMap浣跨敤
-        String errMsg = null;
-        if (exception instanceof ExcelDataConvertException) {
-            ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException)exception;
-            errMsg = StrUtil.format("绗瑊}琛�-绗瑊}鍒楄В鏋愬紓甯�<br/>", excelDataConvertException.getRowIndex() + 1,
-                    excelDataConvertException.getColumnIndex() + 1);
-            LOGGER.error(errMsg);
-        }
-        if (exception instanceof ConstraintViolationException) {
-            ConstraintViolationException constraintViolationException = (ConstraintViolationException)exception;
-            Set<ConstraintViolation<?>> constraintViolations = constraintViolationException.getConstraintViolations();
-            String constraintViolationsMsg= CollUtil.join(constraintViolations
-                    .stream()
-                    .map(ConstraintViolation::getMessage)
-                    .collect(Collectors.toList()),
-                ",");
-            errMsg = StrUtil.format("绗瑊}琛屾暟鎹牎楠屽紓甯�:{}", context.readRowHolder().getRowIndex() + 1,
-                constraintViolationsMsg);
-            LOGGER.error(errMsg);
-        }
-        errorList.add(errMsg);
-        if (!skipException){
-            throw new ExcelAnalysisException(errMsg);
-        }
-    }
-
-    @Override
-    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
-        LOGGER.debug("瑙f瀽鍒颁竴鏉″ご鏁版嵁:{}", JSON.toJSONString(headMap));
-    }
-
-    @Override
-    public void invoke(T data, AnalysisContext context) {
-        if (isValidate) {
-            ValidatorUtils.validate(data);
-        }
-        list.add(data);
-    }
-
-    @Override
-    public void doAfterAllAnalysed(AnalysisContext context) {
-        excelResult.setList(list);
-        excelResult.setErrorList(errorList);
-        LOGGER.debug("鎵�鏈夋暟鎹В鏋愬畬鎴愶紒");
-    }
-
-    /**
-     * 鑾峰彇瀵煎叆鏁版嵁
-     * @return 瀵煎叆鏁版嵁
-     */
-    public List<T> getList() {
-        return list;
-    }
-
-    public ExcelResult<T> getExcelResult() {
-        return excelResult;
-    }
-
-}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelResult.java
deleted file mode 100644
index 3e17548..0000000
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelResult.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.ruoyi.common.utils.poi;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
-import lombok.Data;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@Data
-public class ExcelResult<T> {
-
-    /** 鏁版嵁瀵硅薄list
-     */
-    private List<T> list;
-    /** 閿欒淇℃伅鍒楄〃 */
-    private List<String> errorList;
-
-    /**
-     * 鑾峰彇瀵煎叆鍥炴墽
-     * @return 瀵煎叆鍥炴墽
-     */
-    public String getAnalysis() {
-        int successCount = list.size();
-        int errorCount = errorList.size();
-        if (successCount == 0) {
-            return "璇诲彇澶辫触锛屾湭瑙f瀽鍒版暟鎹�";
-        } else {
-            if (errorList.size() == 0) {
-                return StrUtil.format("鎭枩鎮紝鍏ㄩ儴璇诲彇鎴愬姛锛佸叡{}鏉�", successCount);
-            } else {
-                return StrUtil.format("閮ㄥ垎璇诲彇鎴愬姛锛屽叾涓垚鍔焮}鏉★紝澶辫触{}鏉★紝閿欒淇℃伅濡備笅锛�<br/>{}",
-                    successCount,
-                    errorCount,
-                    CollUtil.join(errorList, "<br/>"));
-            }
-
-        }
-    }
-}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
index 8802a54..d2ccd56 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
@@ -4,9 +4,10 @@
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.ruoyi.common.convert.ExcelBigNumberConvert;
+import com.ruoyi.common.excel.DefaultExcelListener;
+import com.ruoyi.common.excel.ExcelResult;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.file.FileUtils;
-import org.apache.poi.ss.formula.functions.T;
 
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
@@ -21,118 +22,133 @@
  */
 public class ExcelUtil {
 
-	/**
-	 * 瀵筫xcel琛ㄥ崟榛樿绗竴涓储寮曞悕杞崲鎴恖ist锛圗asyExcel锛�
-	 *
-	 * @param is 杈撳叆娴�
-	 * @return 杞崲鍚庨泦鍚�
-	 */
-	public static <T> List<T> importExcel(InputStream is, Class<T> clazz) {
-		return EasyExcel.read(is).head(clazz).autoCloseStream(false).sheet().doReadSync();
-	}
-
-
     /**
-     * 瀵筫xcel琛ㄥ崟榛樿绗竴涓储寮曞悕杞崲鎴恖ist锛圗asyExcel锛�
+     * 鍚屾瀵煎叆
      *
      * @param is 杈撳叆娴�
      * @return 杞崲鍚庨泦鍚�
      */
-    public static <T> ExcelResult<T> importExcel(InputStream is, Class<T> clazz, boolean isValidate, boolean skipException) {
-        ExcelListener<T> listener = new ExcelListener<>(isValidate, skipException);
+    public static <T> List<T> importExcel(InputStream is, Class<T> clazz) {
+        return EasyExcel.read(is).head(clazz).autoCloseStream(false).sheet().doReadSync();
+    }
+
+
+    /**
+     * 浣跨敤鏍¢獙鐩戝惉鍣ㄥ鐞嗗鍏�
+     *
+     * @param is            杈撳叆娴�
+     * @param clazz         瀵硅薄绫诲瀷
+     * @param isValidate    鏄惁 Validator 妫�楠� 榛樿涓烘槸
+     * @return 杞崲鍚庨泦鍚�
+     */
+    public static <T> ExcelResult<T> importExcel(InputStream is, Class<T> clazz, boolean isValidate) {
+        DefaultExcelListener<T> listener = new DefaultExcelListener<>(isValidate);
         EasyExcel.read(is, clazz, listener).sheet().doRead();
         return listener.getExcelResult();
     }
 
-	/**
-	 * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟锛圗asyExcel锛�
-	 *
-	 * @param list      瀵煎嚭鏁版嵁闆嗗悎
-	 * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О
-	 * @return 缁撴灉
-	 */
-	public static <T> void exportExcel(List<T> list, String sheetName, Class<T> clazz, HttpServletResponse response) {
-		try {
-			String filename = encodingFilename(sheetName);
-			response.reset();
-			FileUtils.setAttachmentResponseHeader(response, filename);
-			response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
-			ServletOutputStream os = response.getOutputStream();
-			EasyExcel.write(os, clazz)
-				.autoCloseStream(false)
-				// 鑷姩閫傞厤
-				.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
-				// 澶ф暟鍊艰嚜鍔ㄨ浆鎹� 闃叉澶辩湡
-				.registerConverter(new ExcelBigNumberConvert())
-				.sheet(sheetName).doWrite(list);
-		} catch (IOException e) {
-			throw new RuntimeException("瀵煎嚭Excel寮傚父");
-		}
-	}
+    /**
+     * 浣跨敤鑷畾涔夌洃鍚櫒瀵煎叆
+     *
+     * @param is            杈撳叆娴�
+     * @param clazz         瀵硅薄绫诲瀷
+     * @param readListener  鑷畾涔夌洃鍚櫒
+     * @return 杞崲鍚庨泦鍚�
+     */
+    public static <T> ExcelResult<T> importExcel(InputStream is, Class<T> clazz, DefaultExcelListener<T> readListener) {
+        EasyExcel.read(is, clazz, readListener).sheet().doRead();
+        return readListener.getExcelResult();
+    }
 
-	/**
-	 * 瑙f瀽瀵煎嚭鍊� 0=鐢�,1=濂�,2=鏈煡
-	 *
-	 * @param propertyValue 鍙傛暟鍊�
-	 * @param converterExp  缈昏瘧娉ㄨВ
-	 * @param separator     鍒嗛殧绗�
-	 * @return 瑙f瀽鍚庡��
-	 */
-	public static String convertByExp(String propertyValue, String converterExp, String separator) {
-		StringBuilder propertyString = new StringBuilder();
-		String[] convertSource = converterExp.split(",");
-		for (String item : convertSource) {
-			String[] itemArray = item.split("=");
-			if (StringUtils.containsAny(separator, propertyValue)) {
-				for (String value : propertyValue.split(separator)) {
-					if (itemArray[0].equals(value)) {
-						propertyString.append(itemArray[1] + separator);
-						break;
-					}
-				}
-			} else {
-				if (itemArray[0].equals(propertyValue)) {
-					return itemArray[1];
-				}
-			}
-		}
-		return StringUtils.stripEnd(propertyString.toString(), separator);
-	}
+    /**
+     * 瀵煎嚭excel
+     *
+     * @param list      瀵煎嚭鏁版嵁闆嗗悎
+     * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О
+     * @return 缁撴灉
+     */
+    public static <T> void exportExcel(List<T> list, String sheetName, Class<T> clazz, HttpServletResponse response) {
+        try {
+            String filename = encodingFilename(sheetName);
+            response.reset();
+            FileUtils.setAttachmentResponseHeader(response, filename);
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
+            ServletOutputStream os = response.getOutputStream();
+            EasyExcel.write(os, clazz)
+                .autoCloseStream(false)
+                // 鑷姩閫傞厤
+                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+                // 澶ф暟鍊艰嚜鍔ㄨ浆鎹� 闃叉澶辩湡
+                .registerConverter(new ExcelBigNumberConvert())
+                .sheet(sheetName).doWrite(list);
+        } catch (IOException e) {
+            throw new RuntimeException("瀵煎嚭Excel寮傚父");
+        }
+    }
 
-	/**
-	 * 鍙嶅悜瑙f瀽鍊� 鐢�=0,濂�=1,鏈煡=2
-	 *
-	 * @param propertyValue 鍙傛暟鍊�
-	 * @param converterExp  缈昏瘧娉ㄨВ
-	 * @param separator     鍒嗛殧绗�
-	 * @return 瑙f瀽鍚庡��
-	 */
-	public static String reverseByExp(String propertyValue, String converterExp, String separator) {
-		StringBuilder propertyString = new StringBuilder();
-		String[] convertSource = converterExp.split(",");
-		for (String item : convertSource) {
-			String[] itemArray = item.split("=");
-			if (StringUtils.containsAny(separator, propertyValue)) {
-				for (String value : propertyValue.split(separator)) {
-					if (itemArray[1].equals(value)) {
-						propertyString.append(itemArray[0] + separator);
-						break;
-					}
-				}
-			} else {
-				if (itemArray[1].equals(propertyValue)) {
-					return itemArray[0];
-				}
-			}
-		}
-		return StringUtils.stripEnd(propertyString.toString(), separator);
-	}
+    /**
+     * 瑙f瀽瀵煎嚭鍊� 0=鐢�,1=濂�,2=鏈煡
+     *
+     * @param propertyValue 鍙傛暟鍊�
+     * @param converterExp  缈昏瘧娉ㄨВ
+     * @param separator     鍒嗛殧绗�
+     * @return 瑙f瀽鍚庡��
+     */
+    public static String convertByExp(String propertyValue, String converterExp, String separator) {
+        StringBuilder propertyString = new StringBuilder();
+        String[] convertSource = converterExp.split(",");
+        for (String item : convertSource) {
+            String[] itemArray = item.split("=");
+            if (StringUtils.containsAny(separator, propertyValue)) {
+                for (String value : propertyValue.split(separator)) {
+                    if (itemArray[0].equals(value)) {
+                        propertyString.append(itemArray[1] + separator);
+                        break;
+                    }
+                }
+            } else {
+                if (itemArray[0].equals(propertyValue)) {
+                    return itemArray[1];
+                }
+            }
+        }
+        return StringUtils.stripEnd(propertyString.toString(), separator);
+    }
 
-	/**
-	 * 缂栫爜鏂囦欢鍚�
-	 */
-	public static String encodingFilename(String filename) {
-		return IdUtil.fastSimpleUUID() + "_" + filename + ".xlsx";
-	}
+    /**
+     * 鍙嶅悜瑙f瀽鍊� 鐢�=0,濂�=1,鏈煡=2
+     *
+     * @param propertyValue 鍙傛暟鍊�
+     * @param converterExp  缈昏瘧娉ㄨВ
+     * @param separator     鍒嗛殧绗�
+     * @return 瑙f瀽鍚庡��
+     */
+    public static String reverseByExp(String propertyValue, String converterExp, String separator) {
+        StringBuilder propertyString = new StringBuilder();
+        String[] convertSource = converterExp.split(",");
+        for (String item : convertSource) {
+            String[] itemArray = item.split("=");
+            if (StringUtils.containsAny(separator, propertyValue)) {
+                for (String value : propertyValue.split(separator)) {
+                    if (itemArray[1].equals(value)) {
+                        propertyString.append(itemArray[0] + separator);
+                        break;
+                    }
+                }
+            } else {
+                if (itemArray[1].equals(propertyValue)) {
+                    return itemArray[0];
+                }
+            }
+        }
+        return StringUtils.stripEnd(propertyString.toString(), separator);
+    }
+
+    /**
+     * 缂栫爜鏂囦欢鍚�
+     */
+    public static String encodingFilename(String filename) {
+        return IdUtil.fastSimpleUUID() + "_" + filename + ".xlsx";
+    }
 
 }
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java
index 0307d13..a3b1c7f 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java
@@ -5,14 +5,13 @@
 import com.ruoyi.common.annotation.RepeatSubmit;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.core.validate.AddGroup;
 import com.ruoyi.common.core.validate.EditGroup;
 import com.ruoyi.common.core.validate.QueryGroup;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.ValidatorUtils;
-import com.ruoyi.common.utils.poi.ExcelResult;
+import com.ruoyi.common.excel.ExcelResult;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.demo.domain.TestDemo;
 import com.ruoyi.demo.domain.bo.TestDemoBo;
@@ -69,7 +68,7 @@
         return iTestDemoService.customPageList(bo);
     }
 
-    @ApiOperation("瀵煎叆娴嬭瘯鍗曡〃")
+    @ApiOperation("瀵煎叆娴嬭瘯-鏍¢獙")
     @ApiImplicitParams({
         @ApiImplicitParam(name = "file", value = "瀵煎叆鏂囦欢", dataType = "java.io.File", required = true),
     })
@@ -77,7 +76,7 @@
     @PreAuthorize("@ss.hasPermi('demo:demo:import')")
     @PostMapping("/importData")
     public AjaxResult<Void> importData(@RequestPart("file") MultipartFile file) throws Exception {
-        ExcelResult<TestDemoImportVo> excelResult = ExcelUtil.importExcel(file.getInputStream(), TestDemoImportVo.class, true, true);
+        ExcelResult<TestDemoImportVo> excelResult = ExcelUtil.importExcel(file.getInputStream(), TestDemoImportVo.class, true);
         List<TestDemoImportVo> volist = excelResult.getList();
         List<TestDemo> list = BeanUtil.copyToList(volist, TestDemo.class);
         iTestDemoService.saveAll(list);
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/bo/TestDemoImportVo.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/bo/TestDemoImportVo.java
index 2150cdf..7185514 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/bo/TestDemoImportVo.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/bo/TestDemoImportVo.java
@@ -1,13 +1,9 @@
 package com.ruoyi.demo.domain.bo;
 
 import com.alibaba.excel.annotation.ExcelProperty;
-import com.ruoyi.common.core.domain.BaseEntity;
-import com.ruoyi.common.core.validate.AddGroup;
-import com.ruoyi.common.core.validate.EditGroup;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
@@ -18,16 +14,14 @@
  * @author Lion Li
  * @date 2021-07-26
  */
-
 @Data
 @ApiModel("娴嬭瘯鍗曡〃涓氬姟瀵硅薄")
 public class TestDemoImportVo {
 
-
     /**
      * 閮ㄩ棬id
      */
-	@ApiModelProperty("閮ㄩ棬id")
+    @ApiModelProperty("閮ㄩ棬id")
     @NotNull(message = "閮ㄩ棬id涓嶈兘涓虹┖")
     @ExcelProperty(value = "閮ㄩ棬id")
     private Long deptId;
@@ -35,7 +29,7 @@
     /**
      * 鐢ㄦ埛id
      */
-	@ApiModelProperty("鐢ㄦ埛id")
+    @ApiModelProperty("鐢ㄦ埛id")
     @NotNull(message = "鐢ㄦ埛id涓嶈兘涓虹┖")
     @ExcelProperty(value = "鐢ㄦ埛id")
     private Long userId;
@@ -43,7 +37,7 @@
     /**
      * 鎺掑簭鍙�
      */
-	@ApiModelProperty("鎺掑簭鍙�")
+    @ApiModelProperty("鎺掑簭鍙�")
     @NotNull(message = "鎺掑簭鍙蜂笉鑳戒负绌�")
     @ExcelProperty(value = "鎺掑簭鍙�")
     private Long orderNum;
@@ -51,7 +45,7 @@
     /**
      * key閿�
      */
-	@ApiModelProperty("key閿�")
+    @ApiModelProperty("key閿�")
     @NotBlank(message = "key閿笉鑳戒负绌�")
     @ExcelProperty(value = "key閿�")
     private String testKey;
@@ -59,8 +53,9 @@
     /**
      * 鍊�
      */
-	@ApiModelProperty("鍊�")
+    @ApiModelProperty("鍊�")
     @NotBlank(message = "鍊间笉鑳戒负绌�")
     @ExcelProperty(value = "鍊�")
     private String value;
+
 }
diff --git a/ruoyi-ui/src/views/demo/demo/index.vue b/ruoyi-ui/src/views/demo/demo/index.vue
index c6a2cdf..65387c9 100644
--- a/ruoyi-ui/src/views/demo/demo/index.vue
+++ b/ruoyi-ui/src/views/demo/demo/index.vue
@@ -79,7 +79,7 @@
           size="mini"
           @click="handleImport"
           v-hasPermi="['demo:demo:import']"
-        >瀵煎叆</el-button>
+        >瀵煎叆(鏍¢獙)</el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button

--
Gitblit v1.9.3