From 9447449a738fed988753e14f2b2df7bb373b7823 Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: 星期三, 19 八月 2020 11:22:33 +0800
Subject: [PATCH] Excel注解支持设置BigDecimal精度&舍入规则
---
src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excel.java | 13 ++++++++++++-
src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java | 16 ++++++++++++++--
2 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
index 764c5d7..5527511 100644
--- a/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
+++ b/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
@@ -8,6 +8,7 @@
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
+import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
@@ -546,9 +547,13 @@
{
cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator));
}
- else if (StringUtils.isNotEmpty(dictType))
+ else if (StringUtils.isNotEmpty(dictType) && StringUtils.isNotNull(value))
{
cell.setCellValue(convertDictByExp(Convert.toStr(value), dictType, separator));
+ }
+ else if (value instanceof BigDecimal && -1 != attr.scale())
+ {
+ cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).toString());
}
else
{
@@ -896,7 +901,14 @@
}
else
{
- val = new BigDecimal(val.toString()); // 娴偣鏍煎紡澶勭悊
+ if ((Double) val % 1 > 0)
+ {
+ val = new BigDecimal(val.toString());
+ }
+ else
+ {
+ val = new DecimalFormat("0").format(val);
+ }
}
}
else if (cell.getCellTypeEnum() == CellType.STRING)
diff --git a/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excel.java b/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excel.java
index fed6f19..2a333ab 100644
--- a/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excel.java
+++ b/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excel.java
@@ -4,6 +4,7 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import java.math.BigDecimal;
/**
* 鑷畾涔夊鍑篍xcel鏁版嵁娉ㄨВ
@@ -30,7 +31,7 @@
public String dateFormat() default "";
/**
- * 濡傛灉鏄瓧鍏哥被鍨嬶紝璇疯缃瓧鍏哥殑type鍊�
+ * 濡傛灉鏄瓧鍏哥被鍨嬶紝璇疯缃瓧鍏哥殑type鍊� (濡�: sys_user_sex)
*/
public String dictType() default "";
@@ -45,6 +46,16 @@
public String separator() default ",";
/**
+ * BigDecimal 绮惧害 榛樿:-1(榛樿涓嶅紑鍚疊igDecimal鏍煎紡鍖�)
+ */
+ public int scale() default -1;
+
+ /**
+ * BigDecimal 鑸嶅叆瑙勫垯 榛樿:BigDecimal.ROUND_HALF_EVEN
+ */
+ public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
+
+ /**
* 瀵煎嚭绫诲瀷锛�0鏁板瓧 1瀛楃涓诧級
*/
public ColumnType cellType() default ColumnType.STRING;
--
Gitblit v1.9.3