lubo 3 hónapja%!(EXTRA string=óta)
szülő
commit
057bfe23e0

+ 5 - 8
ruoyi-common/src/main/java/com/ruoyi/common/utils/MathUtils.java

@@ -131,21 +131,18 @@ public class MathUtils
      * 两个高精度数相除
      */
     public static BigDecimal divide(BigDecimal val1, BigDecimal val2, int scale) {
-        return val1.divide(val2).setScale(scale, BigDecimal.ROUND_HALF_UP);
+        return val1.divide(val2,scale, BigDecimal.ROUND_HALF_UP);
     }
 
     /**
      * 两个高精度数相除
      */
-    public static BigDecimal divideMulti(int scale,BigDecimal... values) {
-
-        double result = values[0].doubleValue();
-        for (int len = 1; len < values.length; len++) {
-            result = result / values[len].doubleValue();
-        }
-        return BigDecimal.valueOf(result).setScale(scale,BigDecimal.ROUND_HALF_UP);
+    public static BigDecimal divide(BigDecimal val1, BigDecimal val2, int scale, int roundingMode) {
+        return val1.divide(val2,scale, roundingMode);
     }
 
+
+
     /**
      * 计算倍数
      */

+ 2 - 1
ruoyi-line/src/main/java/com/ruoyi/subsidy/service/impl/SubsidyQueueServiceImpl.java

@@ -553,6 +553,7 @@ public class SubsidyQueueServiceImpl implements ISubsidyQueueService {
         return BigDecimal.ZERO;
     }
 
+
     @Override
     public BigDecimal sharedSubsidyCompute(Long businessId, BigDecimal sharedSubsidy) {
         String businessName = businessService.queryNameById(businessId);
@@ -568,7 +569,7 @@ public class SubsidyQueueServiceImpl implements ISubsidyQueueService {
                 return sharedSubsidy;
             }
             //均摊平均值
-            BigDecimal sharedSubsidyAverage = MathUtils.divide(sharedSubsidy, new BigDecimal(queueCount));
+            BigDecimal sharedSubsidyAverage = MathUtils.divide(sharedSubsidy, new BigDecimal(queueCount),2, BigDecimal.ROUND_DOWN);
             if (sharedSubsidyAverage.compareTo(BigDecimal.ZERO) == 0) {
                 //这里是为了避免 0.01/2 = 0.0
                 return sharedSubsidy;

+ 3 - 4
ruoyi-shop/src/main/java/com/ruoyi/shop/order/service/createorder/impl/AbstractCreateOrderService.java

@@ -262,8 +262,8 @@ public abstract class AbstractCreateOrderService implements ICreateOrderService
                     continue;
                 }
                 BigDecimal totalGiveBackPoint = shopOrderDetailBo.getPaymentAmount().multiply(shopOrderDetailBo.getGivePointRate()).multiply(shopOrderBo.getPointsToCashRatio());
-                shopOrderDetailBo.setTotalGiveBackPoint(totalGiveBackPoint.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
-                shopOrderDetailBo.setGiveBackPoint(shopOrderDetailBo.getTotalGiveBackPoint().divide(new BigDecimal(shopOrderDetailBo.getProductNum()), 2, RoundingMode.HALF_UP));
+                shopOrderDetailBo.setTotalGiveBackPoint(MathUtils.divide(totalGiveBackPoint,BigDecimal.valueOf(100), 2, BigDecimal.ROUND_DOWN));
+                shopOrderDetailBo.setGiveBackPoint(MathUtils.divide(shopOrderDetailBo.getTotalGiveBackPoint(),new BigDecimal(shopOrderDetailBo.getProductNum()), 2, BigDecimal.ROUND_DOWN));
             }
         }
         shopOrderBo.setGivePoint(shopOrderDetailBoList.stream().map(ShopOrderDetailBo::getTotalGiveBackPoint).reduce(BigDecimal.ZERO, BigDecimal::add));
@@ -299,8 +299,7 @@ public abstract class AbstractCreateOrderService implements ICreateOrderService
 
         if (integralAble.compareTo(needMaxPoints) < 0) {
             needMaxPoints = integralAble;
-            maxDeduction = needMaxPoints.divide(shopOrderBo.getPointsToCashRatio(),2, RoundingMode.HALF_UP);
-
+            maxDeduction = MathUtils.divide(maxDeduction,shopOrderBo.getPointsToCashRatio(), 2, BigDecimal.ROUND_DOWN);
             cashToPointsRatio = MathUtils.setScale(maxDeduction.doubleValue()*100/totalProductAmount.doubleValue());
         }
         shopOrderBo.setPaymentPoints(needMaxPoints);

+ 2 - 2
ruoyi-shop/src/main/java/com/ruoyi/shop/rights/service/impl/SaleRightsOrderServiceImpl.java

@@ -437,7 +437,7 @@ public class SaleRightsOrderServiceImpl implements ISaleRightsOrderService {
                     refundMoney = rightsOrder.getRefundMoney().subtract(allocatedMoney);
                 } else {
                     refundMoney = rightsOrder.getRefundMoney().multiply(shopOrderDetail.getPaymentAmount());
-                    refundMoney = refundMoney.divide(shopOrder.getTotalProductAmount(), 2, RoundingMode.HALF_UP);
+                    refundMoney = refundMoney.divide(shopOrder.getTotalProductAmount(), 2, RoundingMode.DOWN);
                     allocatedMoney = allocatedMoney.add(refundMoney);
                 }
             }
@@ -446,7 +446,7 @@ public class SaleRightsOrderServiceImpl implements ISaleRightsOrderService {
                     refundPoint = MathUtils.subtract(rightsOrder.getRefundPoint(), allocatedPoints);
                 } else {
                     refundPoint = rightsOrder.getRefundPoint().multiply(shopOrderDetail.getTotalPoint());
-                    refundPoint = refundPoint.divide(shopOrder.getPaymentPoints(), 2, RoundingMode.HALF_UP);
+                    refundPoint = refundPoint.divide(shopOrder.getPaymentPoints(), 2, RoundingMode.DOWN);
                     allocatedPoints = allocatedPoints.add(refundPoint);
                 }
             }