Преглед изворни кода

!160 【轻量级pr】poi ExcelUtil 增加对java8 日期的支持
Merge pull request !160 from dazer007/excelUtil_add_java8_date

若依 пре 4 година
родитељ
комит
e059ed9c7f

+ 26 - 6
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java

@@ -3,12 +3,13 @@ package com.ruoyi.common.core.utils;
3
 import java.lang.management.ManagementFactory;
3
 import java.lang.management.ManagementFactory;
4
 import java.text.ParseException;
4
 import java.text.ParseException;
5
 import java.text.SimpleDateFormat;
5
 import java.text.SimpleDateFormat;
6
+import java.time.*;
6
 import java.util.Date;
7
 import java.util.Date;
7
 import org.apache.commons.lang3.time.DateFormatUtils;
8
 import org.apache.commons.lang3.time.DateFormatUtils;
8
 
9
 
9
 /**
10
 /**
10
  * 时间工具类
11
  * 时间工具类
11
- * 
12
+ *
12
  * @author ruoyi
13
  * @author ruoyi
13
  */
14
  */
14
 public class DateUtils extends org.apache.commons.lang3.time.DateUtils
15
 public class DateUtils extends org.apache.commons.lang3.time.DateUtils
@@ -22,15 +23,15 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
22
     public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
23
     public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
23
 
24
 
24
     public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
25
     public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
25
-    
26
+
26
     private static String[] parsePatterns = {
27
     private static String[] parsePatterns = {
27
-            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", 
28
+            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
28
             "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
29
             "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
29
             "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
30
             "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
30
 
31
 
31
     /**
32
     /**
32
      * 获取当前Date型日期
33
      * 获取当前Date型日期
33
-     * 
34
+     *
34
      * @return Date() 当前日期
35
      * @return Date() 当前日期
35
      */
36
      */
36
     public static Date getNowDate()
37
     public static Date getNowDate()
@@ -40,7 +41,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
40
 
41
 
41
     /**
42
     /**
42
      * 获取当前日期, 默认格式为yyyy-MM-dd
43
      * 获取当前日期, 默认格式为yyyy-MM-dd
43
-     * 
44
+     *
44
      * @return String
45
      * @return String
45
      */
46
      */
46
     public static String getDate()
47
     public static String getDate()
@@ -121,7 +122,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
121
             return null;
122
             return null;
122
         }
123
         }
123
     }
124
     }
124
-    
125
+
125
     /**
126
     /**
126
      * 获取服务器启动时间
127
      * 获取服务器启动时间
127
      */
128
      */
@@ -152,4 +153,23 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
152
         // long sec = diff % nd % nh % nm / ns;
153
         // long sec = diff % nd % nh % nm / ns;
153
         return day + "天" + hour + "小时" + min + "分钟";
154
         return day + "天" + hour + "小时" + min + "分钟";
154
     }
155
     }
156
+
157
+    /**
158
+     * 增加 LocalDateTime ==> Date
159
+     */
160
+    public static Date toDate(LocalDateTime temporalAccessor)
161
+    {
162
+        ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
163
+        return Date.from(zdt.toInstant());
164
+    }
165
+
166
+    /**
167
+     * 增加 LocalDate ==> Date
168
+     */
169
+    public static Date toDate(LocalDate temporalAccessor)
170
+    {
171
+        LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
172
+        ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
173
+        return Date.from(zdt.toInstant());
174
+    }
155
 }
175
 }

+ 54 - 27
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelUtil.java

@@ -6,6 +6,8 @@ import java.lang.reflect.Field;
6
 import java.lang.reflect.Method;
6
 import java.lang.reflect.Method;
7
 import java.math.BigDecimal;
7
 import java.math.BigDecimal;
8
 import java.text.DecimalFormat;
8
 import java.text.DecimalFormat;
9
+import java.time.LocalDate;
10
+import java.time.LocalDateTime;
9
 import java.util.ArrayList;
11
 import java.util.ArrayList;
10
 import java.util.Arrays;
12
 import java.util.Arrays;
11
 import java.util.Comparator;
13
 import java.util.Comparator;
@@ -56,7 +58,7 @@ import com.ruoyi.common.core.utils.reflect.ReflectUtils;
56
 
58
 
57
 /**
59
 /**
58
  * Excel相关处理
60
  * Excel相关处理
59
- * 
61
+ *
60
  * @author ruoyi
62
  * @author ruoyi
61
  */
63
  */
62
 public class ExcelUtil<T>
64
 public class ExcelUtil<T>
@@ -109,7 +111,7 @@ public class ExcelUtil<T>
109
      * 当前行号
111
      * 当前行号
110
      */
112
      */
111
     private int rownum;
113
     private int rownum;
112
-    
114
+
113
     /**
115
     /**
114
      * 标题
116
      * 标题
115
      */
117
      */
@@ -174,7 +176,7 @@ public class ExcelUtil<T>
174
 
176
 
175
     /**
177
     /**
176
      * 对excel表单默认第一个索引名转换成list
178
      * 对excel表单默认第一个索引名转换成list
177
-     * 
179
+     *
178
      * @param is 输入流
180
      * @param is 输入流
179
      * @return 转换后集合
181
      * @return 转换后集合
180
      */
182
      */
@@ -185,7 +187,7 @@ public class ExcelUtil<T>
185
 
187
 
186
     /**
188
     /**
187
      * 对excel表单默认第一个索引名转换成list
189
      * 对excel表单默认第一个索引名转换成list
188
-     * 
190
+     *
189
      * @param is 输入流
191
      * @param is 输入流
190
      * @param titleNum 标题占用行数
192
      * @param titleNum 标题占用行数
191
      * @return 转换后集合
193
      * @return 转换后集合
@@ -197,7 +199,7 @@ public class ExcelUtil<T>
197
 
199
 
198
     /**
200
     /**
199
      * 对excel表单指定表格索引名转换成list
201
      * 对excel表单指定表格索引名转换成list
200
-     * 
202
+     *
201
      * @param sheetName 表格索引名
203
      * @param sheetName 表格索引名
202
      * @param titleNum 标题占用行数
204
      * @param titleNum 标题占用行数
203
      * @param is 输入流
205
      * @param is 输入流
@@ -282,7 +284,7 @@ public class ExcelUtil<T>
282
                             String dateFormat = field.getAnnotation(Excel.class).dateFormat();
284
                             String dateFormat = field.getAnnotation(Excel.class).dateFormat();
283
                             if (StringUtils.isNotEmpty(dateFormat))
285
                             if (StringUtils.isNotEmpty(dateFormat))
284
                             {
286
                             {
285
-                                val = DateUtils.parseDateToStr(dateFormat, (Date) val);
287
+                                val = this.parseDateToStr(dateFormat, (Date) val);
286
                             }
288
                             }
287
                             else
289
                             else
288
                             {
290
                             {
@@ -351,7 +353,7 @@ public class ExcelUtil<T>
351
 
353
 
352
     /**
354
     /**
353
      * 对list数据源将其里面的数据导入到excel表单
355
      * 对list数据源将其里面的数据导入到excel表单
354
-     * 
356
+     *
355
      * @param response 返回数据
357
      * @param response 返回数据
356
      * @param list 导出数据集合
358
      * @param list 导出数据集合
357
      * @param sheetName 工作表的名称
359
      * @param sheetName 工作表的名称
@@ -365,7 +367,7 @@ public class ExcelUtil<T>
365
 
367
 
366
     /**
368
     /**
367
      * 对list数据源将其里面的数据导入到excel表单
369
      * 对list数据源将其里面的数据导入到excel表单
368
-     * 
370
+     *
369
      * @param response 返回数据
371
      * @param response 返回数据
370
      * @param list 导出数据集合
372
      * @param list 导出数据集合
371
      * @param sheetName 工作表的名称
373
      * @param sheetName 工作表的名称
@@ -383,13 +385,13 @@ public class ExcelUtil<T>
383
 
385
 
384
     /**
386
     /**
385
      * 对list数据源将其里面的数据导入到excel表单
387
      * 对list数据源将其里面的数据导入到excel表单
386
-     * 
388
+     *
387
      * @param sheetName 工作表的名称
389
      * @param sheetName 工作表的名称
388
      * @return 结果
390
      * @return 结果
389
      */
391
      */
390
     /**
392
     /**
391
      * 对list数据源将其里面的数据导入到excel表单
393
      * 对list数据源将其里面的数据导入到excel表单
392
-     * 
394
+     *
393
      * @param sheetName 工作表的名称
395
      * @param sheetName 工作表的名称
394
      * @return 结果
396
      * @return 结果
395
      */
397
      */
@@ -400,7 +402,7 @@ public class ExcelUtil<T>
400
 
402
 
401
     /**
403
     /**
402
      * 对list数据源将其里面的数据导入到excel表单
404
      * 对list数据源将其里面的数据导入到excel表单
403
-     * 
405
+     *
404
      * @param sheetName 工作表的名称
406
      * @param sheetName 工作表的名称
405
      * @param title 标题
407
      * @param title 标题
406
      * @return 结果
408
      * @return 结果
@@ -415,7 +417,7 @@ public class ExcelUtil<T>
415
 
417
 
416
     /**
418
     /**
417
      * 对list数据源将其里面的数据导入到excel表单
419
      * 对list数据源将其里面的数据导入到excel表单
418
-     * 
420
+     *
419
      * @return 结果
421
      * @return 结果
420
      */
422
      */
421
     public void exportExcel(HttpServletResponse response)
423
     public void exportExcel(HttpServletResponse response)
@@ -465,7 +467,7 @@ public class ExcelUtil<T>
465
 
467
 
466
     /**
468
     /**
467
      * 填充excel数据
469
      * 填充excel数据
468
-     * 
470
+     *
469
      * @param index 序号
471
      * @param index 序号
470
      * @param row 单元格行
472
      * @param row 单元格行
471
      */
473
      */
@@ -490,7 +492,7 @@ public class ExcelUtil<T>
490
 
492
 
491
     /**
493
     /**
492
      * 创建表格样式
494
      * 创建表格样式
493
-     * 
495
+     *
494
      * @param wb 工作薄对象
496
      * @param wb 工作薄对象
495
      * @return 样式列表
497
      * @return 样式列表
496
      */
498
      */
@@ -582,7 +584,7 @@ public class ExcelUtil<T>
582
 
584
 
583
     /**
585
     /**
584
      * 设置单元格信息
586
      * 设置单元格信息
585
-     * 
587
+     *
586
      * @param value 单元格值
588
      * @param value 单元格值
587
      * @param attr 注解相关
589
      * @param attr 注解相关
588
      * @param cell 单元格信息
590
      * @param cell 单元格信息
@@ -701,7 +703,7 @@ public class ExcelUtil<T>
701
                 String separator = attr.separator();
703
                 String separator = attr.separator();
702
                 if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value))
704
                 if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value))
703
                 {
705
                 {
704
-                    cell.setCellValue(DateUtils.parseDateToStr(dateFormat, (Date) value));
706
+                    cell.setCellValue(this.parseDateToStr(dateFormat, (Date) value));
705
                 }
707
                 }
706
                 else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value))
708
                 else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value))
707
                 {
709
                 {
@@ -732,7 +734,7 @@ public class ExcelUtil<T>
732
 
734
 
733
     /**
735
     /**
734
      * 设置 POI XSSFSheet 单元格提示
736
      * 设置 POI XSSFSheet 单元格提示
735
-     * 
737
+     *
736
      * @param sheet 表单
738
      * @param sheet 表单
737
      * @param promptTitle 提示标题
739
      * @param promptTitle 提示标题
738
      * @param promptContent 提示内容
740
      * @param promptContent 提示内容
@@ -755,7 +757,7 @@ public class ExcelUtil<T>
755
 
757
 
756
     /**
758
     /**
757
      * 设置某些列的值只能输入预制的数据,显示下拉框.
759
      * 设置某些列的值只能输入预制的数据,显示下拉框.
758
-     * 
760
+     *
759
      * @param sheet 要设置的sheet.
761
      * @param sheet 要设置的sheet.
760
      * @param textlist 下拉框显示的内容
762
      * @param textlist 下拉框显示的内容
761
      * @param firstRow 开始行
763
      * @param firstRow 开始行
@@ -789,7 +791,7 @@ public class ExcelUtil<T>
789
 
791
 
790
     /**
792
     /**
791
      * 解析导出值 0=男,1=女,2=未知
793
      * 解析导出值 0=男,1=女,2=未知
792
-     * 
794
+     *
793
      * @param propertyValue 参数值
795
      * @param propertyValue 参数值
794
      * @param converterExp 翻译注解
796
      * @param converterExp 翻译注解
795
      * @param separator 分隔符
797
      * @param separator 分隔符
@@ -826,7 +828,7 @@ public class ExcelUtil<T>
826
 
828
 
827
     /**
829
     /**
828
      * 反向解析值 男=0,女=1,未知=2
830
      * 反向解析值 男=0,女=1,未知=2
829
-     * 
831
+     *
830
      * @param propertyValue 参数值
832
      * @param propertyValue 参数值
831
      * @param converterExp 翻译注解
833
      * @param converterExp 翻译注解
832
      * @param separator 分隔符
834
      * @param separator 分隔符
@@ -863,7 +865,7 @@ public class ExcelUtil<T>
863
 
865
 
864
     /**
866
     /**
865
      * 数据处理器
867
      * 数据处理器
866
-     * 
868
+     *
867
      * @param value 数据值
869
      * @param value 数据值
868
      * @param excel 数据注解
870
      * @param excel 数据注解
869
      * @return
871
      * @return
@@ -931,7 +933,7 @@ public class ExcelUtil<T>
931
 
933
 
932
     /**
934
     /**
933
      * 获取bean中的属性值
935
      * 获取bean中的属性值
934
-     * 
936
+     *
935
      * @param vo 实体对象
937
      * @param vo 实体对象
936
      * @param field 字段
938
      * @param field 字段
937
      * @param excel 注解
939
      * @param excel 注解
@@ -962,7 +964,7 @@ public class ExcelUtil<T>
962
 
964
 
963
     /**
965
     /**
964
      * 以类的属性的get方法方法形式获取值
966
      * 以类的属性的get方法方法形式获取值
965
-     * 
967
+     *
966
      * @param o
968
      * @param o
967
      * @param name
969
      * @param name
968
      * @return value
970
      * @return value
@@ -1057,7 +1059,7 @@ public class ExcelUtil<T>
1057
 
1059
 
1058
     /**
1060
     /**
1059
      * 创建工作表
1061
      * 创建工作表
1060
-     * 
1062
+     *
1061
      * @param sheetNo sheet数量
1063
      * @param sheetNo sheet数量
1062
      * @param index 序号
1064
      * @param index 序号
1063
      */
1065
      */
@@ -1074,7 +1076,7 @@ public class ExcelUtil<T>
1074
 
1076
 
1075
     /**
1077
     /**
1076
      * 获取单元格值
1078
      * 获取单元格值
1077
-     * 
1079
+     *
1078
      * @param row 获取的行
1080
      * @param row 获取的行
1079
      * @param column 获取单元格列号
1081
      * @param column 获取单元格列号
1080
      * @return 单元格值
1082
      * @return 单元格值
@@ -1134,7 +1136,7 @@ public class ExcelUtil<T>
1134
 
1136
 
1135
     /**
1137
     /**
1136
      * 判断是否是空行
1138
      * 判断是否是空行
1137
-     * 
1139
+     *
1138
      * @param row 判断的行
1140
      * @param row 判断的行
1139
      * @return
1141
      * @return
1140
      */
1142
      */
@@ -1154,4 +1156,29 @@ public class ExcelUtil<T>
1154
         }
1156
         }
1155
         return true;
1157
         return true;
1156
     }
1158
     }
1157
-}
1159
+
1160
+    /**
1161
+     * 增加ExcelUtil对java8 日期的支持
1162
+     * 格式化日期,日期可能是:{@link Date}、{@link LocalDateTime}、 {@link LocalDate} 其他日期暂不支持
1163
+     * @param dateFormat 日期格式
1164
+     * @param val 被格式化的日期对象
1165
+     * @see DateUtils#parseDateToStr(String, Date)
1166
+     */
1167
+    private String parseDateToStr(final String dateFormat, Object val)
1168
+    {
1169
+        if (val == null) {
1170
+            return "";
1171
+        }
1172
+        String str;
1173
+        if (val instanceof Date) {
1174
+            str = DateUtils.parseDateToStr(dateFormat, (Date) val);
1175
+        } else if (val instanceof LocalDateTime) {
1176
+            str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDateTime) val));
1177
+        } else if (val instanceof LocalDate) {
1178
+            str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDate) val));
1179
+        } else {
1180
+            str = val.toString();
1181
+        }
1182
+        return str;
1183
+    }
1184
+}