From cbb0dfaec496d441bbf4287ca8ae85c2776e50ed Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期四, 13 三月 2025 13:12:39 +0800
Subject: [PATCH] #修改 1. 收货通知单明细模板修改 2. 收货通知单添加动态扩展字段

---
 rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java |  156 +++++++++++++++++++++++++++++++--------------------
 1 files changed, 95 insertions(+), 61 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
index bab11e6..922d42f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
@@ -1,7 +1,12 @@
 package com.vincent.rsf.server.common.utils;
 
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import cn.afterturn.easypoi.excel.entity.ImportParams;
 import com.vincent.rsf.framework.common.Cools;
+import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelComment;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 import org.apache.poi.ss.usermodel.*;
@@ -19,6 +24,7 @@
 /**
  * Created by vincent on 2/17/2024
  */
+@Slf4j
 public class ExcelUtil {
 
     public static void build(Workbook workbook, HttpServletResponse response) {
@@ -32,6 +38,10 @@
     }
 
     public static <T> Workbook create(List<T> list, Class<T> clz) {
+        return  create(list, clz, false);
+    }
+
+    public static <T> Workbook create(List<T> list, Class<T> clz, boolean flagTemplate) {
         HSSFWorkbook workbook = new HSSFWorkbook();
         Sheet sheet = workbook.createSheet(clz.getSimpleName());
 
@@ -45,6 +55,15 @@
                 continue;
             }
             String memo = "Undefined";
+            if (flagTemplate) {
+                if (field.isAnnotationPresent(ExcelComment.class)) {
+                    memo = field.getAnnotation(ExcelComment.class).value();
+                }
+            } else {
+                if (field.isAnnotationPresent(Excel.class)) {
+                    memo = field.getAnnotation(Excel.class).name();
+                }
+            }
             if (field.isAnnotationPresent(ApiModelProperty.class)) {
                 memo = field.getAnnotation(ApiModelProperty.class).value();
             }
@@ -64,7 +83,8 @@
                     continue;
                 }
 
-                field.setAccessible(true);  // 姝よ寰堥噸瑕侊紝鐗瑰埆鏄瓧娈典负private鏃�
+                // 姝よ寰堥噸瑕侊紝鐗瑰埆鏄瓧娈典负private鏃�
+                field.setAccessible(true);
                 Object value = null;
                 try {
                     value = field.get(t);
@@ -91,76 +111,90 @@
     }
 
     /**
-     * Excel 瀵煎叆
-     * @param file 鏂囦欢
-     * @param keys 鏁版嵁椤哄簭
+     * 娣诲姞瀵煎叆excel閰嶇疆鍙傛暟
+     * 娉細榛樿閰嶇疆鍙弧瓒冲綋鍓嶉渶姹�
+     * @return
      */
-    public static  List<Map<String, Object>>  importExcel(MultipartFile file, String[] keys) throws Exception{
-        Workbook wb = null;
-        String fileName = file.getOriginalFilename();
-        if (fileName.endsWith("xls")) {
-            POIFSFileSystem pois = new POIFSFileSystem(file.getInputStream());
-            wb = new HSSFWorkbook(pois);
-        } else if (fileName.endsWith("xlsx")) {
-            wb = new XSSFWorkbook(file.getInputStream());
+    public static ImportParams getDefaultImportParams() {
+        ImportParams params = new ImportParams();
+        return params;
+    }
+
+    /**
+     * 鏍规嵁 {@code tClass} 鐩稿叧鎴愬憳鍙橀噺鐨� {@link ExcelComment#example()} 瀛楁鍒涘缓妯℃嫙鏁版嵁锛屾殏涓嶆敮鎸� 澶嶆潅绫诲瀷
+     * @param tClass
+     * @return
+     */
+    public static <T> T mockData(Class<T> tClass) {
+        if (tClass == null) {
+            return null;
         }
-        Sheet sheet = wb.getSheetAt(0);
-        int rowCount = sheet.getPhysicalNumberOfRows();
-        if (sheet.getRow( 1).getPhysicalNumberOfCells() != keys.length){
-            throw new RuntimeException("瀵煎叆鐨凟xcel鍜屾ā鏉跨殑鍒椾笉鍖归厤");
-        }
-        List<Map<String,Object>> result = new ArrayList<>();
-        for (int i = 0; i < rowCount - 1; i++) {
-            Row row = sheet.getRow(i + 1);
-            Map<String,Object> tmp = new HashMap<>();
-            for (int j = 0;j < keys.length; j++){
-                Cell cell = row.getCell(j);
-                // 鎶婄被鍨嬭浆琛孲tring
-//                cell.setCellType(CellType.STRING);
-                tmp.put(keys[j], cell.getStringCellValue());
+        T instance = null;
+
+        try {
+            instance = tClass.newInstance();
+            Field[] declaredFields = tClass.getDeclaredFields();
+            for (Field declaredField : declaredFields) {
+                ExcelComment comment = declaredField.getAnnotation(ExcelComment.class);
+                if (comment == null) {
+                    continue;
+                }
+                declaredField.setAccessible(true);
+                Class<?> fieldType = declaredField.getType();
+
+                String exampleValue = comment.example();
+                Object value = null;
+
+                if (fieldType == int.class || fieldType == Integer.class) {
+                    value = StringUtils.isBlank(exampleValue) ? 0 : Integer.parseInt(exampleValue);
+                } else if (fieldType == short.class || fieldType == Short.class) {
+                    value = StringUtils.isBlank(exampleValue) ? 0 : Short.parseShort(exampleValue);
+                } else if (fieldType == long.class || fieldType == Long.class) {
+                    value = StringUtils.isBlank(exampleValue) ? 0 : Long.parseLong(exampleValue);
+                } else if (fieldType == double.class || fieldType == Double.class) {
+                    value = StringUtils.isBlank(exampleValue) ? 0 : Double.parseDouble(exampleValue);
+                } else if (fieldType == boolean.class || fieldType == Boolean.class) {
+                    value = StringUtils.isNotBlank(exampleValue) && Boolean.parseBoolean(exampleValue);
+                } else if (fieldType == String.class) {
+                    value = exampleValue;
+                } else if (fieldType == Date.class) {
+                    value = DateUtils.parse(exampleValue);
+                }
+
+                if (value == null && !isBaseType(fieldType)) {
+                    declaredField.set(instance, null);
+                } else {
+                    declaredField.set(instance, value);
+                }
             }
-            result.add(tmp);
+        } catch (Exception e) {
+            log.error("鏁版嵁鏋勯�犲け璐ワ紝璇锋煡璇㈣缁嗕俊鎭�", e);
+            return instance;
         }
-        return result;
+
+        return instance;
     }
 
-    /**
-     * 琛ㄥご鏍峰紡
-     */
-    private static CellStyle HeaderStyle(Workbook wb){
-        Font font = wb.createFont();
-        font.setFontName("瀹嬩綋");
-        font.setFontHeightInPoints((short) 11);
-        CellStyle cellStyle = commonStyle(wb);
-        cellStyle.setFont(font);
-        return cellStyle;
-    }
 
     /**
-     * 鍐呭鏍峰紡
+     * 鏄惁鏄熀纭�鏁版嵁绫诲瀷
+     *
+     * @param className
+     * @return
      */
-    private static CellStyle contentStyle(Workbook wb){
-        Font font = wb.createFont();
-        font.setFontName("瀹嬩綋");
-        font.setFontHeightInPoints((short) 10);
-        CellStyle cellStyle = commonStyle(wb);
-        cellStyle.setFont(font);
-        return cellStyle;
+    private static boolean isBaseType(Class<?> className) {
+        if (className.equals(java.lang.Integer.class) ||
+                className.equals(java.lang.Byte.class) ||
+                className.equals(java.lang.Long.class) ||
+                className.equals(java.lang.Double.class) ||
+                className.equals(java.lang.Float.class) ||
+                className.equals(java.lang.Character.class) ||
+                className.equals(java.lang.Short.class) ||
+                className.equals(java.lang.Boolean.class)) {
+            return true;
+        }
+        return false;
     }
 
-    /**
-     * 鍏叡鏍峰紡
-     */
-    private static CellStyle commonStyle(Workbook wb){
-        CellStyle style = wb.createCellStyle();
-        style.setAlignment(HorizontalAlignment.CENTER);
-        style.setVerticalAlignment(VerticalAlignment.CENTER);
-        style.setBorderBottom(BorderStyle.THIN);
-        style.setBorderLeft(BorderStyle.THIN);
-        style.setBorderTop(BorderStyle.THIN);
-        style.setBorderRight(BorderStyle.THIN);
-        style.setWrapText(true);// 鑷姩鎹㈣
-        return style;
-    }
 
 }

--
Gitblit v1.9.1