java110 3 lat temu
rodzic
commit
5659983f77

+ 13 - 10
java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java

@@ -1949,29 +1949,32 @@ public class ComputeFeeSMOImpl implements IComputeFeeSMO {
 
         double maxCycle = Math.floor(curOweMonth / rateCycle);
 
-        //基准
-        BigDecimal firstAmount = curFeePrice.multiply(new BigDecimal(rateCycle));
-        BigDecimal preCycleAmount = firstAmount;
+        // 增长前的欠费
+        BigDecimal addTotalAmount = oweAmountDec ;
+        BigDecimal preCycleAmount = curFeePrice.multiply(new BigDecimal(rateCycle));
         BigDecimal rateDec = null; //递增周期所收费用
         BigDecimal lastRateAmountDec = null;
         double curCycle = 0;
+        BigDecimal curAmount = null; // 当期金额
         for (int cycleIndex = 0; cycleIndex < maxCycle; cycleIndex++) {
+            //当期增长部分
             rateDec = preCycleAmount.multiply(new BigDecimal(rate)).setScale(2, BigDecimal.ROUND_HALF_UP);
             //增长周期的倍数
             curCycle = (cycleIndex + 1) * rateCycle;
             if (curCycle > curOweMonth) {
+                //不足增长周期增长率
                 rateDec = new BigDecimal(curOweMonth / rateCycle - Math.ceil(curOweMonth / rateCycle)).multiply(rateDec).setScale(2, BigDecimal.ROUND_HALF_UP);
                 lastRateAmountDec = new BigDecimal(curOweMonth / rateCycle - Math.ceil(curOweMonth / rateCycle)).multiply(preCycleAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
-                firstAmount = firstAmount.add(rateDec).add(lastRateAmountDec);
+                addTotalAmount = addTotalAmount.add(rateDec).add(lastRateAmountDec);
                 continue;
             }
-            firstAmount = firstAmount.add(rateDec).add(preCycleAmount);
-            preCycleAmount = preCycleAmount.add(rateDec);
+            //本期金额
+            curAmount = rateDec.add(preCycleAmount);// 增长部分 + 上本期费用
+            addTotalAmount = addTotalAmount.add(curAmount); // 计入总的 费用中
+            preCycleAmount = curAmount;
         }
-
-        firstAmount = firstAmount.add(oweAmountDec);
-        feeDto.setAmountOwed(firstAmount.doubleValue() + "");
-        feeDto.setFeeTotalPrice(firstAmount.doubleValue());
+        feeDto.setAmountOwed(addTotalAmount.doubleValue() + "");
+        feeDto.setFeeTotalPrice(addTotalAmount.doubleValue());
     }
 }