| | |
| | | |
| | | 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()); |
| | | } |
| | | } |
| | | |