From 352caa3e9386cf95c58fafa75a5c4d4bfa0d9a9b Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期二, 01 八月 2023 13:14:26 +0800
Subject: [PATCH] update 优化 excel导出字典转下拉框 无需标记index自动处理(感谢一夏coco)

---
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysClientVo.java            |    2 +-
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysTenantPackageVo.java     |    2 +-
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysLogininforVo.java        |    2 +-
 ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java |   26 ++++++++++++--------------
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysPostVo.java              |    2 +-
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysConfigVo.java            |    2 +-
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java              |    2 +-
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOperLogVo.java           |    6 +++---
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDictDataVo.java          |    4 ++--
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserExportVo.java        |    4 ++--
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java              |    4 ++--
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysTenantVo.java            |    2 +-
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDictTypeVo.java          |    2 +-
 13 files changed, 29 insertions(+), 31 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java
index db4fecc..3b791ea 100644
--- a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java
+++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java
@@ -5,7 +5,9 @@
 import cn.hutool.core.util.EnumUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
-import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.metadata.FieldCache;
+import com.alibaba.excel.metadata.FieldWrapper;
+import com.alibaba.excel.util.ClassUtils;
 import com.alibaba.excel.write.handler.SheetWriteHandler;
 import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
 import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
@@ -83,16 +85,18 @@
         Sheet sheet = writeSheetHolder.getSheet();
         // 寮�濮嬭缃笅鎷夋 HSSFWorkbook
         DataValidationHelper helper = sheet.getDataValidationHelper();
-        Field[] fields = writeWorkbookHolder.getClazz().getDeclaredFields();
         Workbook workbook = writeWorkbookHolder.getWorkbook();
-        int length = fields.length;
-        for (int i = 0; i < length; i++) {
+        FieldCache fieldCache = ClassUtils.declaredFields(writeWorkbookHolder.getClazz(), writeWorkbookHolder);
+        for (Map.Entry<Integer, FieldWrapper> entry : fieldCache.getSortedFieldMap().entrySet()) {
+            Integer index = entry.getKey();
+            FieldWrapper wrapper = entry.getValue();
+            Field field = wrapper.getField();
             // 寰幆瀹炰綋涓殑姣忎釜灞炴��
             // 鍙�夌殑涓嬫媺鍊�
             List<String> options = new ArrayList<>();
-            if (fields[i].isAnnotationPresent(ExcelDictFormat.class)) {
+            if (field.isAnnotationPresent(ExcelDictFormat.class)) {
                 // 濡傛灉鎸囧畾浜咢ExcelDictFormat锛屽垯浣跨敤瀛楀吀鐨勯�昏緫
-                ExcelDictFormat format = fields[i].getDeclaredAnnotation(ExcelDictFormat.class);
+                ExcelDictFormat format = field.getDeclaredAnnotation(ExcelDictFormat.class);
                 String dictType = format.dictType();
                 String converterExp = format.readConverterExp();
                 if (StrUtil.isNotBlank(dictType)) {
@@ -105,20 +109,14 @@
                     // 濡傛灉鎸囧畾浜嗙‘鍒囩殑鍊硷紝鍒欑洿鎺ヨВ鏋愮‘鍒囩殑鍊�
                     options = StrUtil.split(converterExp, format.separator(), true, true);
                 }
-            } else if (fields[i].isAnnotationPresent(ExcelEnumFormat.class)) {
+            } else if (field.isAnnotationPresent(ExcelEnumFormat.class)) {
                 // 鍚﹀垯濡傛灉鎸囧畾浜咢ExcelEnumFormat锛屽垯浣跨敤鏋氫妇鐨勯�昏緫
-                ExcelEnumFormat format = fields[i].getDeclaredAnnotation(ExcelEnumFormat.class);
+                ExcelEnumFormat format = field.getDeclaredAnnotation(ExcelEnumFormat.class);
                 List<Object> values = EnumUtil.getFieldValues(format.enumClass(), format.textField());
                 options = StreamUtils.toList(values, String::valueOf);
             }
             if (ObjectUtil.isNotEmpty(options)) {
                 // 浠呭綋涓嬫媺鍙�夐」涓嶄负绌烘椂鎵ц
-                // 鑾峰彇鍒椾笅鏍囷紝榛樿涓哄綋鍓嶅惊鐜鏁�
-                int index = i;
-                if (fields[i].isAnnotationPresent(ExcelProperty.class)) {
-                    // 濡傛灉鎸囧畾浜嗗垪涓嬫爣锛屼互鎸囧畾鐨勪负涓�
-                    index = fields[i].getDeclaredAnnotation(ExcelProperty.class).index();
-                }
                 if (options.size() > 20) {
                     // 杩欓噷闄愬埗濡傛灉鍙�夐」澶т簬20锛屽垯浣跨敤棰濆琛ㄥ舰寮�
                     dropDownWithSheet(helper, workbook, sheet, index, options);
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysClientVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysClientVo.java
index fa23cd1..34f24eb 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysClientVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysClientVo.java
@@ -82,7 +82,7 @@
     /**
      * 鐘舵�侊紙0姝e父 1鍋滅敤锛�
      */
-    @ExcelProperty(value = "鐘舵��", index = 7, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "鐘舵��", converter = ExcelDictConvert.class)
     @ExcelDictFormat(readConverterExp = "0=姝e父,1=鍋滅敤")
     private String status;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysConfigVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysConfigVo.java
index db7d53a..f896000 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysConfigVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysConfigVo.java
@@ -53,7 +53,7 @@
     /**
      * 绯荤粺鍐呯疆锛圷鏄� N鍚︼級
      */
-    @ExcelProperty(value = "绯荤粺鍐呯疆", index = 4, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "绯荤粺鍐呯疆", converter = ExcelDictConvert.class)
     @ExcelDictFormat(dictType = "sys_yes_no")
     private String configType;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java
index 4611ae0..e09d67e 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java
@@ -78,7 +78,7 @@
     /**
      * 閮ㄩ棬鐘舵�侊紙0姝e父 1鍋滅敤锛�
      */
-    @ExcelProperty(value = "閮ㄩ棬鐘舵��", index = 5, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "閮ㄩ棬鐘舵��", converter = ExcelDictConvert.class)
     @ExcelDictFormat(dictType = "sys_normal_disable")
     private String status;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDictDataVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDictDataVo.java
index 1372f31..d058d5e 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDictDataVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDictDataVo.java
@@ -69,14 +69,14 @@
     /**
      * 鏄惁榛樿锛圷鏄� N鍚︼級
      */
-    @ExcelProperty(value = "鏄惁榛樿", index = 5, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "鏄惁榛樿", converter = ExcelDictConvert.class)
     @ExcelDictFormat(dictType = "sys_yes_no")
     private String isDefault;
 
     /**
      * 鐘舵�侊紙0姝e父 1鍋滅敤锛�
      */
-    @ExcelProperty(value = "鐘舵��", index = 6, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "鐘舵��", converter = ExcelDictConvert.class)
     @ExcelDictFormat(dictType = "sys_normal_disable")
     private String status;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDictTypeVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDictTypeVo.java
index 771f956..2cac4a2 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDictTypeVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDictTypeVo.java
@@ -47,7 +47,7 @@
     /**
      * 鐘舵�侊紙0姝e父 1鍋滅敤锛�
      */
-    @ExcelProperty(value = "鐘舵��", index = 3, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "鐘舵��", converter = ExcelDictConvert.class)
     @ExcelDictFormat(dictType = "sys_normal_disable")
     private String status;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysLogininforVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysLogininforVo.java
index 97bc79b..cf9720e 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysLogininforVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysLogininforVo.java
@@ -48,7 +48,7 @@
     /**
      * 鐧诲綍鐘舵�侊紙0鎴愬姛 1澶辫触锛�
      */
-    @ExcelProperty(value = "鐧诲綍鐘舵��", index = 2, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "鐧诲綍鐘舵��", converter = ExcelDictConvert.class)
     @ExcelDictFormat(dictType = "sys_common_status")
     private String status;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOperLogVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOperLogVo.java
index 306237e..d9eb71d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOperLogVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOperLogVo.java
@@ -47,7 +47,7 @@
     /**
      * 涓氬姟绫诲瀷锛�0鍏跺畠 1鏂板 2淇敼 3鍒犻櫎锛�
      */
-    @ExcelProperty(value = "涓氬姟绫诲瀷", index = 2, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "涓氬姟绫诲瀷", converter = ExcelDictConvert.class)
     @ExcelDictFormat(dictType = "sys_oper_type")
     private Integer businessType;
 
@@ -71,7 +71,7 @@
     /**
      * 鎿嶄綔绫诲埆锛�0鍏跺畠 1鍚庡彴鐢ㄦ埛 2鎵嬫満绔敤鎴凤級
      */
-    @ExcelProperty(value = "鎿嶄綔绫诲埆", index = 5, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "鎿嶄綔绫诲埆", converter = ExcelDictConvert.class)
     @ExcelDictFormat(readConverterExp = "0=鍏跺畠,1=鍚庡彴鐢ㄦ埛,2=鎵嬫満绔敤鎴�")
     private Integer operatorType;
 
@@ -120,7 +120,7 @@
     /**
      * 鎿嶄綔鐘舵�侊紙0姝e父 1寮傚父锛�
      */
-    @ExcelProperty(value = "鐘舵��", index = 13, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "鐘舵��", converter = ExcelDictConvert.class)
     @ExcelDictFormat(dictType = "sys_common_status")
     private Integer status;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysPostVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysPostVo.java
index 3185423..3e6c6a8 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysPostVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysPostVo.java
@@ -54,7 +54,7 @@
     /**
      * 鐘舵�侊紙0姝e父 1鍋滅敤锛�
      */
-    @ExcelProperty(value = "鐘舵��", index = 4, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "鐘舵��", converter = ExcelDictConvert.class)
     @ExcelDictFormat(dictType = "sys_normal_disable")
     private String status;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java
index 015a043..1e5cd9e 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java
@@ -53,7 +53,7 @@
     /**
      * 鏁版嵁鑼冨洿锛�1锛氬叏閮ㄦ暟鎹潈闄� 2锛氳嚜瀹氭暟鎹潈闄� 3锛氭湰閮ㄩ棬鏁版嵁鏉冮檺 4锛氭湰閮ㄩ棬鍙婁互涓嬫暟鎹潈闄愶級
      */
-    @ExcelProperty(value = "鏁版嵁鑼冨洿", index = 4, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "鏁版嵁鑼冨洿", converter = ExcelDictConvert.class)
     @ExcelDictFormat(readConverterExp = "1=鎵�鏈夋暟鎹潈闄�,2=鑷畾涔夋暟鎹潈闄�,3=鏈儴闂ㄦ暟鎹潈闄�,4=鏈儴闂ㄥ強浠ヤ笅鏁版嵁鏉冮檺,5=浠呮湰浜烘暟鎹潈闄�")
     private String dataScope;
 
@@ -72,7 +72,7 @@
     /**
      * 瑙掕壊鐘舵�侊紙0姝e父 1鍋滅敤锛�
      */
-    @ExcelProperty(value = "瑙掕壊鐘舵��", index = 7, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "瑙掕壊鐘舵��", converter = ExcelDictConvert.class)
     @ExcelDictFormat(dictType = "sys_normal_disable")
     private String status;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysTenantPackageVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysTenantPackageVo.java
index ae11a82..070334b 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysTenantPackageVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysTenantPackageVo.java
@@ -58,7 +58,7 @@
     /**
      * 鐘舵�侊紙0姝e父 1鍋滅敤锛�
      */
-    @ExcelProperty(value = "鐘舵��", index = 5, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "鐘舵��", converter = ExcelDictConvert.class)
     @ExcelDictFormat(readConverterExp = "0=姝e父,1=鍋滅敤")
     private String status;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysTenantVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysTenantVo.java
index 49e03ea..6a45315 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysTenantVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysTenantVo.java
@@ -107,7 +107,7 @@
     /**
      * 绉熸埛鐘舵�侊紙0姝e父 1鍋滅敤锛�
      */
-    @ExcelProperty(value = "绉熸埛鐘舵��", index = 13, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "绉熸埛鐘舵��", converter = ExcelDictConvert.class)
     @ExcelDictFormat(readConverterExp = "0=姝e父,1=鍋滅敤")
     private String status;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserExportVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserExportVo.java
index b7fc480..21b1efb 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserExportVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserExportVo.java
@@ -59,14 +59,14 @@
     /**
      * 鐢ㄦ埛鎬у埆
      */
-    @ExcelProperty(value = "鐢ㄦ埛鎬у埆", index = 6, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "鐢ㄦ埛鎬у埆", converter = ExcelDictConvert.class)
     @ExcelDictFormat(dictType = "sys_user_sex")
     private String sex;
 
     /**
      * 甯愬彿鐘舵�侊紙0姝e父 1鍋滅敤锛�
      */
-    @ExcelProperty(value = "甯愬彿鐘舵��", index = 7, converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "甯愬彿鐘舵��", converter = ExcelDictConvert.class)
     @ExcelDictFormat(dictType = "sys_normal_disable")
     private String status;
 

--
Gitblit v1.9.3