java110
2022-07-21 5659983f778bf64fbca6a3c76616a50834180b7c
优化代码
1个文件已修改
23 ■■■■■ 已修改文件
java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java
@@ -1949,29 +1949,32 @@
        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());
    }
}