From 9ad64521d39e722b74379cc33c78de4cd0b426b3 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期三, 18 十二月 2024 17:46:53 +0800
Subject: [PATCH] update 优化 !pr_610 代码实现

---
 ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/handler/DataWriteHandler.java |   62 ++++++++++++++++++++++++++++++-
 1 files changed, 60 insertions(+), 2 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/handler/DataWriteHandler.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/handler/DataWriteHandler.java
index 0d11360..a2aa495 100644
--- a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/handler/DataWriteHandler.java
+++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/handler/DataWriteHandler.java
@@ -10,11 +10,15 @@
 import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
 import com.alibaba.excel.write.metadata.style.WriteCellStyle;
 import com.alibaba.excel.write.metadata.style.WriteFont;
-import lombok.Data;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
 import org.apache.poi.xssf.usermodel.XSSFRichTextString;
+import org.dromara.common.core.utils.reflect.ReflectUtils;
+import org.dromara.common.excel.annotation.ExcelNotation;
+import org.dromara.common.excel.annotation.ExcelRequired;
 
+import java.lang.reflect.Field;
+import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -22,7 +26,6 @@
  *
  * @author guzhouyanyu
  */
-@Data
 public class DataWriteHandler implements SheetWriteHandler, CellWriteHandler {
 
     /**
@@ -36,8 +39,16 @@
     private final Map<Integer, Short> headColumnMap;
 
 
+    public DataWriteHandler(Class<?> clazz) {
+        notationMap = getNotationMap(clazz);
+        headColumnMap = getRequiredMap(clazz);
+    }
+
     @Override
     public void afterCellDispose(CellWriteHandlerContext context) {
+        if (CollUtil.isEmpty(notationMap) && CollUtil.isEmpty(headColumnMap)) {
+            return;
+        }
         WriteCellData<?> cellData = context.getFirstCellData();
         WriteCellStyle writeCellStyle = cellData.getOrCreateStyle();
 
@@ -74,4 +85,51 @@
             }
         }
     }
+
+    /**
+     * 鑾峰彇蹇呭~鍒�
+     */
+    private static Map<Integer, Short> getRequiredMap(Class<?> clazz) {
+        Map<Integer, Short> requiredMap = new HashMap<>();
+        Field[] fields = clazz.getDeclaredFields();
+        // 妫�鏌� fields 鏁扮粍鏄惁涓虹┖
+        if (fields.length == 0) {
+            return requiredMap;
+        }
+        Field[] filteredFields = ReflectUtils.getFields(clazz, field -> !"serialVersionUID".equals(field.getName()));
+
+        for (int i = 0; i < filteredFields.length; i++) {
+            Field field = filteredFields[i];
+            if (!field.isAnnotationPresent(ExcelRequired.class)) {
+                continue;
+            }
+            ExcelRequired excelRequired = field.getAnnotation(ExcelRequired.class);
+            int columnIndex =  excelRequired.index() == -1 ? i : excelRequired.index();
+            requiredMap.put(columnIndex, excelRequired.fontColor().getIndex());
+        }
+        return requiredMap;
+    }
+
+    /**
+     * 鑾峰彇鎵规敞
+     */
+    private static Map<Integer, String> getNotationMap(Class<?> clazz) {
+        Map<Integer, String> notationMap = new HashMap<>();
+        Field[] fields = clazz.getDeclaredFields();
+        // 妫�鏌� fields 鏁扮粍鏄惁涓虹┖
+        if (fields.length == 0) {
+            return notationMap;
+        }
+        Field[] filteredFields = ReflectUtils.getFields(clazz, field -> !"serialVersionUID".equals(field.getName()));
+        for (int i = 0; i < filteredFields.length; i++) {
+            Field field = filteredFields[i];
+            if (!field.isAnnotationPresent(ExcelNotation.class)) {
+                continue;
+            }
+            ExcelNotation excelNotation = field.getAnnotation(ExcelNotation.class);
+            int columnIndex =  excelNotation.index() == -1 ? i : excelNotation.index();
+            notationMap.put(columnIndex, excelNotation.value());
+        }
+        return notationMap;
+    }
 }

--
Gitblit v1.9.3