Przeglądaj źródła

Excel注解支持设置BigDecimal精度&舍入规则

RuoYi 5 lat temu
rodzic
commit
7401297236

+ 11 - 0
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/annotation/Excel.java

@@ -4,6 +4,7 @@ import java.lang.annotation.ElementType;
4
 import java.lang.annotation.Retention;
4
 import java.lang.annotation.Retention;
5
 import java.lang.annotation.RetentionPolicy;
5
 import java.lang.annotation.RetentionPolicy;
6
 import java.lang.annotation.Target;
6
 import java.lang.annotation.Target;
7
+import java.math.BigDecimal;
7
 
8
 
8
 /**
9
 /**
9
  * 自定义导出Excel数据注解
10
  * 自定义导出Excel数据注解
@@ -40,6 +41,16 @@ public @interface Excel
40
     public String separator() default ",";
41
     public String separator() default ",";
41
 
42
 
42
     /**
43
     /**
44
+     * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
45
+     */
46
+    public int scale() default -1;
47
+
48
+    /**
49
+     * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
50
+     */
51
+    public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
52
+
53
+    /**
43
      * 导出类型(0数字 1字符串)
54
      * 导出类型(0数字 1字符串)
44
      */
55
      */
45
     public ColumnType cellType() default ColumnType.STRING;
56
     public ColumnType cellType() default ColumnType.STRING;

+ 13 - 1
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelUtil.java

@@ -6,6 +6,7 @@ import java.io.OutputStream;
6
 import java.lang.reflect.Field;
6
 import java.lang.reflect.Field;
7
 import java.lang.reflect.Method;
7
 import java.lang.reflect.Method;
8
 import java.math.BigDecimal;
8
 import java.math.BigDecimal;
9
+import java.text.DecimalFormat;
9
 import java.util.ArrayList;
10
 import java.util.ArrayList;
10
 import java.util.Arrays;
11
 import java.util.Arrays;
11
 import java.util.Comparator;
12
 import java.util.Comparator;
@@ -536,6 +537,10 @@ public class ExcelUtil<T>
536
                 {
537
                 {
537
                     cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator));
538
                     cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator));
538
                 }
539
                 }
540
+                else if (value instanceof BigDecimal && -1 != attr.scale())
541
+                {
542
+                    cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).toString());
543
+                }
539
                 else
544
                 else
540
                 {
545
                 {
541
                     // 设置列类型
546
                     // 设置列类型
@@ -831,7 +836,14 @@ public class ExcelUtil<T>
831
                     }
836
                     }
832
                     else
837
                     else
833
                     {
838
                     {
834
-                        val = new BigDecimal(val.toString()); // 浮点格式处理
839
+                        if ((Double) val % 1 > 0)
840
+                        {
841
+                            val = new BigDecimal(val.toString());
842
+                        }
843
+                        else
844
+                        {
845
+                            val = new DecimalFormat("0").format(val);
846
+                        }
835
                     }
847
                     }
836
                 }
848
                 }
837
                 else if (cell.getCellTypeEnum() == CellType.STRING)
849
                 else if (cell.getCellTypeEnum() == CellType.STRING)

+ 2 - 2
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/page/PageDomain.java

@@ -17,9 +17,9 @@ public class PageDomain
17
 
17
 
18
     /** 排序列 */
18
     /** 排序列 */
19
     private String orderByColumn;
19
     private String orderByColumn;
20
-    /** 排序的方向 "desc" 或者 "asc". */
21
 
20
 
22
-    private String isAsc;
21
+    /** 排序的方向desc或者asc */
22
+    private String isAsc = "asc";
23
 
23
 
24
     public String getOrderBy()
24
     public String getOrderBy()
25
     {
25
     {