From e135f00a19b166ad035b45f5b998d3483febe659 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期二, 18 三月 2025 18:43:02 +0800 Subject: [PATCH] 账单 --- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java | 453 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 382 insertions(+), 71 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java index 96320ad..b2e6c81 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java @@ -81,14 +81,21 @@ private final THouseService houseService; public static void main(String[] args) { -// LocalDate localDate1 = LocalDate.now().withYear(2025).withMonth(4).withDayOfMonth(1); -// LocalDate localDate2 = LocalDate.now().withYear(2025).withMonth(4).withDayOfMonth(16); - LocalDateTime localDate1 = LocalDateTime.now().withYear(2025).withMonth(4).withDayOfMonth(16); - LocalDateTime localDate2 = LocalDateTime.now().withYear(2025).withMonth(10).withDayOfMonth(24); + LocalDate localDate1 = LocalDate.now().withYear(2025).withMonth(1).withDayOfMonth(31); + System.err.println(localDate1.plusMonths(1)); - long between = ChronoUnit.DAYS.between(localDate1, localDate2)+1; - System.err.println(between); +//// LocalDate localDate2 = LocalDate.now().withYear(2025).withMonth(4).withDayOfMonth(16); +// LocalDateTime localDate1 = LocalDateTime.now().withYear(2025).withMonth(4).withDayOfMonth(16); +// LocalDateTime localDate2 = LocalDateTime.now().withYear(2025).withMonth(10).withDayOfMonth(24); +// +// long between = ChronoUnit.DAYS.between(localDate1, localDate2)+1; + int monthValue = LocalDateTime.now().getMonthValue(); + LocalDateTime.now(); + LocalDateTime.now(); + + System.err.println(LocalDateTime.now().isBefore(LocalDateTime.now())); } + @Override public boolean notify(EventType eventType, Supplier<FlwTask> supplier, NodeModel nodeModel, FlowCreator flowCreator) { FlwTask flwTask = supplier.get(); @@ -251,6 +258,7 @@ return true; } + /** * 业务状态变更 */ @@ -273,11 +281,11 @@ int submitStatus = status == 0 ? 3 : (status == 1 ? 4 : 1); contractService.updateContractAuditStatus(processParameter.getString("projectId"), submitStatus); TContract contract = contractService.getById(processParameter.getString("projectId")); - if(contract.getStatus().equals("4")){ + if (contract.getStatus().equals("4")) { // 修改房屋状态 THouse house = houseService.getById(contract.getHouseId()); - if(Objects.nonNull(house)){ + if (Objects.nonNull(house)) { house.setLeaseStatus("2"); houseService.updateById(house); } @@ -292,28 +300,47 @@ rentBill.setContractNumber(contract.getContractNumber()); rentBill.setPayableFeesTime(firstPayTime.toLocalDate()); rentBill.setPayFeesStatus("1"); - rentBill.setBillType("1"); rentBill.setStartTime(contract.getStartPayTime()); - if (rentBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).isAfter(contract.getEndTime())) { - if (rentBill.getStartTime().getDayOfMonth() != 1) { - rentBill.setEndTime(rentBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth())); + if (contract.getPayType().equals("2")) { + // 季付 取3 6 9 12 + int temp = 0 ; + if (contract.getStartPayTime().getMonthValue() <= 3 ) { + temp = 3; + } else if (contract.getStartPayTime().getMonthValue() <= 6) { + temp = 6; + } else if (contract.getStartPayTime().getMonthValue() <= 9) { + temp = 9; } else { - rentBill.setEndTime(rentBill.getStartTime().plusMonths(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12).with(TemporalAdjusters.lastDayOfMonth())); + temp = 12; + } + if (contract.getEndTime().isAfter(contract.getStartPayTime().withMonth(temp).with(TemporalAdjusters.lastDayOfMonth()))){ + rentBill.setEndTime(contract.getStartPayTime().withMonth(temp).with(TemporalAdjusters.lastDayOfMonth())); + }else { + rentBill.setEndTime(contract.getEndTime()); + } + } else if (contract.getPayType().equals("3")) { + if (contract.getEndTime().isAfter(contract.getStartPayTime().withMonth(12).with(TemporalAdjusters.lastDayOfMonth()))){ + rentBill.setEndTime(contract.getStartPayTime().withMonth(12).with(TemporalAdjusters.lastDayOfMonth())); + }else { + rentBill.setEndTime(contract.getEndTime()); } } else { rentBill.setEndTime(rentBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth())); } - if (tContractRentType != null && rentBill.getEndTime().isAfter(tContractRentType.getChangeTime())) { + if (tContractRentType != null && rentBill.getEndTime().isAfter(tContractRentType.getChangeTime())){ long moneyDays = 0; - moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), rentBill.getEndTime())+1; + if (tContractRentType.getChangeTime().with(TemporalAdjusters.lastDayOfMonth()).isBefore(rentBill.getEndTime())){ + moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), tContractRentType.getChangeTime().with(TemporalAdjusters.lastDayOfMonth())) + 1; + }else{ + moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(),rentBill.getEndTime()) + 1; + } // 计算租金变动的天数 contract.setChangeTime(tContractRentType.getChangeTime()); // 递增递减的租金 BigDecimal contractRentTypeMoney = new BigDecimal("0"); // 不递增递减的租金 BigDecimal originalMoney = new BigDecimal("0"); - // 原租金 switch (tContractRentType.getIncreasingDecreasingType()) { case 1: switch (tContractRentType.getIncreasingDecreasing()) { @@ -341,22 +368,114 @@ } break; } + LocalDateTime localDateTime = tContractRentType.getChangeTime().with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); + while(true){ + if (localDateTime.isBefore(rentBill.getEndTime())){ + if (localDateTime.plusMonths(1).isBefore(rentBill.getEndTime())){ + contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent()); + localDateTime = localDateTime.plusMonths(1); + }else { + break; + } + }else{ + break; + } + } + long temp = ChronoUnit.DAYS.between(localDateTime,rentBill.getEndTime()) + 1; + contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(temp))); // 不需要涨租金的时间段 - long originalDays = Math.abs(ChronoUnit.DAYS.between(contract.getFirstPayTime(), tContractRentType.getChangeTime())); - originalMoney = originalMoney.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN)) - .multiply(new BigDecimal(originalDays)); + long originalDays = 0; + if (contract.getFirstPayTime().with(TemporalAdjusters.lastDayOfMonth()).isBefore(tContractRentType.getChangeTime())){ + originalDays = Math.abs(ChronoUnit.DAYS.between(contract.getFirstPayTime(), contract.getFirstPayTime().with(TemporalAdjusters.lastDayOfMonth()))); + }else{ + originalDays = Math.abs(ChronoUnit.DAYS.between(contract.getFirstPayTime(), tContractRentType.getChangeTime())); + } + originalMoney = originalMoney.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(originalDays))); + LocalDateTime originalTime = contract.getFirstPayTime().with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); + while(true){ + if (originalTime.isBefore(tContractRentType.getChangeTime())){ + if (originalTime.plusMonths(1).isBefore(tContractRentType.getChangeTime())){ + originalMoney = originalMoney.add(contract.getMonthRent()); + originalTime = originalTime.plusMonths(1); + }else { + break; + } + }else{ + break; + } + } + long tempOriginal = ChronoUnit.DAYS.between(localDateTime,tContractRentType.getChangeTime()) ; + originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(tempOriginal))); rentBill.setPayableFeesMoney(contractRentTypeMoney.add(originalMoney)); rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney()); } else { // 不走递增递减 - long allDays = ChronoUnit.DAYS.between(contract.getStartPayTime(), rentBill.getEndTime())+1; - int dayOfMonth = rentBill.getStartTime().getDayOfMonth(); - if (dayOfMonth == 1) { - rentBill.setPayableFeesMoney(contract.getMonthRent().multiply(new BigDecimal(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12))); - } else { - rentBill.setPayableFeesMoney(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(allDays))); + if (contract.getPayType().equals("2")){ + BigDecimal money = new BigDecimal("0"); + // 第一个月计算天 + int dayOfMonth = rentBill.getStartTime().getDayOfMonth(); + if (dayOfMonth == 1) { + money = money.add(contract.getMonthRent()); + } else { + long allDays = ChronoUnit.DAYS.between(contract.getStartPayTime(), contract.getStartPayTime().with(TemporalAdjusters.lastDayOfMonth())) + 1; + money =money.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(allDays))); + } + // 后续 + if (contract.getStartPayTime().getMonthValue()==3||contract.getStartPayTime().getMonthValue()==6||contract.getStartPayTime().getMonthValue()==9||contract.getStartPayTime().getMonthValue()==12){ + rentBill.setPayableFeesMoney(money); + rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney()); + }else{ + LocalDateTime localDateTime = rentBill.getStartTime().plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); + while (true){ + if (localDateTime.isBefore(rentBill.getEndTime())){ + money = money.add(contract.getMonthRent()); + }else{ + money = money.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(ChronoUnit.DAYS.between(rentBill.getEndTime(),localDateTime.with(TemporalAdjusters.firstDayOfMonth()))+1))); + break; + } + localDateTime = localDateTime.plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); + } + rentBill.setPayableFeesMoney(money); + rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney()); + } + }else if (contract.getPayType().equals("3")){ + BigDecimal money = new BigDecimal("0"); + // 第一个月计算天 + int dayOfMonth = rentBill.getStartTime().getDayOfMonth(); + if (dayOfMonth == 1) { + money = money.add(contract.getMonthRent()); + } else { + long allDays = ChronoUnit.DAYS.between(contract.getStartPayTime(), contract.getStartPayTime().with(TemporalAdjusters.lastDayOfMonth())) + 1; + money =money.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(allDays))); + } + // 后续 + if (contract.getStartPayTime().getMonthValue()==12){ + rentBill.setPayableFeesMoney(money); + rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney()); + }else{ + LocalDateTime localDateTime = rentBill.getStartTime().plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); + while (true){ + if (localDateTime.isBefore(rentBill.getEndTime())){ + money = money.add(contract.getMonthRent()); + }else{ + money = money.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(ChronoUnit.DAYS.between(rentBill.getEndTime(),localDateTime.with(TemporalAdjusters.firstDayOfMonth()))+1))); + break; + } + localDateTime = localDateTime.plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); + } + rentBill.setPayableFeesMoney(money); + rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney()); + } + }else { + long allDays = ChronoUnit.DAYS.between(contract.getStartPayTime(), rentBill.getEndTime()) + 1; + int dayOfMonth = rentBill.getStartTime().getDayOfMonth(); + if (dayOfMonth == 1) { + rentBill.setPayableFeesMoney(contract.getMonthRent()); + } else { + rentBill.setPayableFeesMoney(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(allDays))); + } + rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney()); } - rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney()); } // 押金账单 TBill depositBill = new TBill(); @@ -403,8 +522,12 @@ // 之前已经涨、跌过租金了 需要判断周期是否还需要再涨、跌 if (changeTime.isBefore(tBill.getEndTime()) && changeTime.isAfter(tBill.getStartTime())) { contract.setChangeTime(changeTime); - // 租金递增递减的时长 天 - long moneyDays = Math.abs(ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), tBill.getEndTime()))+1; + long moneyDays = 0; + if (changeTime.with(TemporalAdjusters.lastDayOfMonth()).isBefore(tBill.getEndTime())){ + moneyDays = ChronoUnit.DAYS.between(changeTime, changeTime.with(TemporalAdjusters.lastDayOfMonth())) + 1; + }else{ + moneyDays = ChronoUnit.DAYS.between(changeTime,tBill.getEndTime()) + 1; + } // 递增递减的租金 BigDecimal contractRentTypeMoney = new BigDecimal("0"); // 不递增递减的租金 @@ -437,26 +560,64 @@ } break; } - // 不需要涨租金的时间段 - long originalDays = ChronoUnit.DAYS.between(tBill.getStartTime(), tContractRentType.getChangeTime()); - if (originalDays > 0) { - originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN)) - .multiply(new BigDecimal(originalDays)); + LocalDateTime localDateTime = changeTime.with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); + while(true){ + if (localDateTime.isBefore(tBill.getEndTime())){ + if (localDateTime.plusMonths(1).isBefore(tBill.getEndTime())){ + contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent()); + localDateTime = localDateTime.plusMonths(1); + }else { + break; + } + }else{ + break; + } } + long temp = ChronoUnit.DAYS.between(localDateTime,tBill.getEndTime()) + 1; + contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(temp))); + // 不需要涨租金的时间段 + long originalDays = 0; + if (tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).isBefore(changeTime)){ + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()))); + }else{ + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), changeTime)); + } + originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(originalDays))); + LocalDateTime originalTime = tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); + while(true){ + if (originalTime.isBefore(changeTime)){ + if (originalTime.plusMonths(1).isBefore(changeTime)){ + originalMoney = originalMoney.add(contract.getChangeRent()); + originalTime = originalTime.plusMonths(1); + }else { + break; + } + }else{ + break; + } + } + long tempOriginal = ChronoUnit.DAYS.between(originalTime,changeTime); + originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(tempOriginal))); + tBill.setPayableFeesMoney(contractRentTypeMoney.add(originalMoney)); tBill.setOutstandingMoney(tBill.getPayableFeesMoney()); contractService.updateById(contract); } else { // 不涨租金 用上次的 - tBill.setPayableFeesMoney(contract.getChangeRent().multiply(new BigDecimal(contract.getPayType().equals("1")?1:contract.getPayType().equals("2")?3:12))); + tBill.setPayableFeesMoney(contract.getChangeRent().multiply(new BigDecimal(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12))); tBill.setOutstandingMoney(tBill.getPayableFeesMoney()); } - }else{ + } else { if (tContractRentType.getChangeTime().isBefore(tBill.getEndTime()) && tContractRentType.getChangeTime().isAfter(tBill.getStartTime())) { System.err.println("首次递增递减"); contract.setChangeTime(tContractRentType.getChangeTime()); // 租金递增递减的时长 天 - long moneyDays = Math.abs(ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), tBill.getEndTime()))+1; + long moneyDays = 0 ; + if (tContractRentType.getChangeTime().with(TemporalAdjusters.lastDayOfMonth()).isBefore(rentBill.getEndTime())){ + moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), tContractRentType.getChangeTime().with(TemporalAdjusters.lastDayOfMonth())) + 1; + }else{ + moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(),rentBill.getEndTime()) + 1; + } // 递增递减的租金 BigDecimal contractRentTypeMoney = new BigDecimal("0"); @@ -490,17 +651,50 @@ } break; } - // 不需要涨租金的时间段 - long originalDays = ChronoUnit.DAYS.between(tBill.getStartTime(), tContractRentType.getChangeTime()); - System.err.println("不需要长租金时长"+originalDays); - if (originalDays > 0) { - originalMoney = originalMoney.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN)) - .multiply(new BigDecimal(originalDays)); + LocalDateTime localDateTime = tContractRentType.getChangeTime().with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); + while(true){ + if (localDateTime.isBefore(tBill.getEndTime())){ + if (localDateTime.plusMonths(1).isBefore(tBill.getEndTime())){ + contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent()); + localDateTime = localDateTime.plusMonths(1); + }else { + break; + } + }else{ + break; + } } + long temp = ChronoUnit.DAYS.between(localDateTime,tBill.getEndTime()) + 1; + contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(temp))); + + // 不需要涨租金的时间段 + long originalDays = 0; + if (tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).isBefore(tContractRentType.getChangeTime())){ + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()))); + }else{ + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), tContractRentType.getChangeTime())); + } + originalMoney = originalMoney.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(originalDays))); + LocalDateTime originalTime = contract.getFirstPayTime().with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); + while(true){ + if (originalTime.isBefore(tContractRentType.getChangeTime())){ + if (originalTime.plusMonths(1).isBefore(tContractRentType.getChangeTime())){ + originalMoney = originalMoney.add(contract.getMonthRent()); + originalTime = originalTime.plusMonths(1); + }else { + break; + } + }else{ + break; + } + } + long tempOriginal = ChronoUnit.DAYS.between(originalTime,tContractRentType.getChangeTime()) ; + originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(tempOriginal))); + tBill.setPayableFeesMoney(contractRentTypeMoney.add(originalMoney)); tBill.setOutstandingMoney(tBill.getPayableFeesMoney()); contractService.updateById(contract); - }else{ + } else { tBill.setPayableFeesMoney(contract.getChangeRent().multiply(new BigDecimal(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12))); tBill.setOutstandingMoney(tBill.getPayableFeesMoney()); } @@ -509,7 +703,7 @@ tBill.setPayableFeesMoney(contract.getChangeRent().multiply(new BigDecimal(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12))); tBill.setOutstandingMoney(tBill.getPayableFeesMoney()); } - }else { + } else { System.err.println("不执行递增递减"); tBill.setPayableFeesMoney(contract.getChangeRent().multiply(new BigDecimal(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12))); tBill.setOutstandingMoney(tBill.getPayableFeesMoney()); @@ -548,7 +742,12 @@ if (changeTime.isBefore(tBill.getEndTime()) && changeTime.isAfter(tBill.getStartTime())) { contract.setChangeTime(changeTime); // 租金递增递减的时长 天 - long moneyDays = Math.abs(ChronoUnit.DAYS.between(changeTime, tBill.getEndTime()))+1; + long moneyDays = 0; + if (changeTime.with(TemporalAdjusters.lastDayOfMonth()).isBefore(tBill.getEndTime())){ + moneyDays = ChronoUnit.DAYS.between(changeTime, changeTime.with(TemporalAdjusters.lastDayOfMonth())) + 1; + }else{ + moneyDays = ChronoUnit.DAYS.between(changeTime,tBill.getEndTime()) + 1; + } // 递增递减的租金 BigDecimal contractRentTypeMoney = new BigDecimal("0"); // 不递增递减的租金 @@ -581,25 +780,65 @@ } break; } - // 不需要涨租金的时间段 - long originalDays = ChronoUnit.DAYS.between(tBill.getStartTime(), changeTime); - if (originalDays > 0) { - originalMoney = originalMoney.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN)) - .multiply(new BigDecimal(originalDays)); + LocalDateTime localDateTime = changeTime.with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); + while(true){ + if (localDateTime.isBefore(tBill.getEndTime())){ + if (localDateTime.plusMonths(1).isBefore(tBill.getEndTime())){ + contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent()); + localDateTime = localDateTime.plusMonths(1); + }else { + break; + } + }else{ + break; + } } + long temp = ChronoUnit.DAYS.between(localDateTime,tBill.getEndTime()) + 1; + contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(temp))); + // 不需要涨租金的时间段 + long originalDays = 0; + if (tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).isBefore(tContractRentType.getChangeTime())){ + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), changeTime.with(TemporalAdjusters.lastDayOfMonth()))); + }else{ + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), changeTime)); + } + originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(originalDays))); + LocalDateTime originalTime = tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); + while(true){ + if (originalTime.isBefore(changeTime)){ + if (originalTime.plusMonths(1).isBefore(changeTime)){ + originalMoney = originalMoney.add(contract.getChangeRent()); + originalTime = originalTime.plusMonths(1); + }else { + break; + } + }else{ + break; + } + } + long tempOriginal = ChronoUnit.DAYS.between(originalTime,changeTime); + originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(tempOriginal))); + + tBill.setPayableFeesMoney(contractRentTypeMoney.add(originalMoney)); tBill.setOutstandingMoney(tBill.getPayableFeesMoney()); contractService.updateById(contract); } else { long finalDays = ChronoUnit.DAYS.between(beforeBill.getEndTime(), contract.getEndTime()); - tBill.setPayableFeesMoney(contract.getChangeRent().divide(new BigDecimal("30"),2,BigDecimal.ROUND_DOWN).multiply(new BigDecimal(finalDays))); + tBill.setPayableFeesMoney(contract.getChangeRent().divide(new BigDecimal("30"), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(finalDays))); tBill.setOutstandingMoney(tBill.getPayableFeesMoney()); } - }else{ + } else { if (tContractRentType.getChangeTime().isBefore(tBill.getEndTime()) && tContractRentType.getChangeTime().isAfter(tBill.getStartTime())) { contract.setChangeTime(tContractRentType.getChangeTime()); // 租金递增递减的时长 天 - long moneyDays = Math.abs(ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), tBill.getEndTime()))+1; + // 租金递增递减的时长 天 + long moneyDays = 0; + if (tContractRentType.getChangeTime().with(TemporalAdjusters.lastDayOfMonth()).isBefore(tBill.getEndTime())){ + moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), tContractRentType.getChangeTime().with(TemporalAdjusters.lastDayOfMonth())) + 1; + }else{ + moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(),tBill.getEndTime()) + 1; + } // 递增递减的租金 BigDecimal contractRentTypeMoney = new BigDecimal("0"); // 不递增递减的租金 @@ -632,12 +871,44 @@ } break; } - // 不需要涨租金的时间段 - long originalDays = ChronoUnit.DAYS.between(tBill.getStartTime(), tContractRentType.getChangeTime()); - if (originalDays > 0) { - originalMoney = originalMoney.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN)) - .multiply(new BigDecimal(originalDays)).setScale(2,BigDecimal.ROUND_DOWN); + LocalDateTime localDateTime = tContractRentType.getChangeTime().with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); + while(true){ + if (localDateTime.isBefore(tBill.getEndTime())){ + if (localDateTime.plusMonths(1).isBefore(tBill.getEndTime())){ + contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent()); + localDateTime = localDateTime.plusMonths(1); + }else { + break; + } + }else{ + break; + } } + long temp = ChronoUnit.DAYS.between(localDateTime,tBill.getEndTime()) + 1; + contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(temp))); + // 不需要涨租金的时间段 + long originalDays = 0; + if (tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).isBefore(tContractRentType.getChangeTime())){ + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()))); + }else{ + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), tContractRentType.getChangeTime())); + } + originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(originalDays))); + LocalDateTime originalTime = tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); + while(true){ + if (originalTime.isBefore(tContractRentType.getChangeTime())){ + if (originalTime.plusMonths(1).isBefore(tContractRentType.getChangeTime())){ + originalMoney = originalMoney.add(contract.getChangeRent()); + originalTime = originalTime.plusMonths(1); + }else { + break; + } + }else{ + break; + } + } + long tempOriginal = ChronoUnit.DAYS.between(originalTime,tContractRentType.getChangeTime()); + originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(tempOriginal))); tBill.setPayableFeesMoney(contractRentTypeMoney.add(originalMoney)); tBill.setOutstandingMoney(tBill.getPayableFeesMoney()); contractService.updateById(contract); @@ -645,27 +916,67 @@ } } } else { - if (tBill.getStartTime().getDayOfMonth()==1 && tBill.getEndTime().toLocalDate().equals(tBill.getEndTime().with(TemporalAdjusters.lastDayOfMonth()).toLocalDate())){ - tBill.setPayableFeesMoney(contract.getChangeRent().multiply(new BigDecimal(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12))); - tBill.setOutstandingMoney(tBill.getPayableFeesMoney()); + BigDecimal originalMoney = new BigDecimal("0"); + // 不需要涨租金的时间段 + long originalDays = 0; + if (tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).isBefore(tBill.getEndTime())){ + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()))); }else{ - // 最后一笔账单时间 - long finalDays = ChronoUnit.DAYS.between(beforeBill.getEndTime(), contract.getEndTime()); - tBill.setPayableFeesMoney(contract.getChangeRent().divide(new BigDecimal("30"),2,BigDecimal.ROUND_DOWN).multiply(new BigDecimal(finalDays))); - tBill.setOutstandingMoney(tBill.getPayableFeesMoney()); + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), tBill.getEndTime())); + } + originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(originalDays))); + LocalDateTime originalTime = tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); + while(true){ + if (originalTime.isBefore(tBill.getEndTime())){ + if (originalTime.plusMonths(1).isBefore(tContractRentType.getChangeTime())){ + originalMoney = originalMoney.add(contract.getChangeRent()); + originalTime = originalTime.plusMonths(1); + }else { + break; + } + }else{ + break; + } + } + long tempOriginal = ChronoUnit.DAYS.between(originalTime,tBill.getEndTime()); + originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(tempOriginal))); + tBill.setPayableFeesMoney(originalMoney); + tBill.setOutstandingMoney(tBill.getPayableFeesMoney()); + } + } else { + BigDecimal originalMoney = new BigDecimal("0"); + // 不需要涨租金的时间段 + long originalDays = 0; + if (tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).isBefore(tBill.getEndTime())){ + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()))); + }else{ + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), tBill.getEndTime())); + } + originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(originalDays))); + LocalDateTime originalTime = tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); + while(true){ + if (originalTime.isBefore(tBill.getEndTime())){ + if (originalTime.plusMonths(1).isBefore(tContractRentType.getChangeTime())){ + originalMoney = originalMoney.add(contract.getChangeRent()); + originalTime = originalTime.plusMonths(1); + }else { + break; + } + }else{ + break; } } - }else{ - long finalDays = ChronoUnit.DAYS.between(beforeBill.getEndTime(), contract.getEndTime()); - tBill.setPayableFeesMoney(contract.getChangeRent().divide(new BigDecimal("30"),2,BigDecimal.ROUND_DOWN).multiply(new BigDecimal(finalDays))); + long tempOriginal = ChronoUnit.DAYS.between(originalTime,tBill.getEndTime()); + originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(tempOriginal))); + tBill.setPayableFeesMoney(originalMoney); tBill.setOutstandingMoney(tBill.getPayableFeesMoney()); } - if (tBill.getEndTime().getDayOfMonth()>=15){ + if (tBill.getEndTime().getDayOfMonth() >= 15) { tBill.setPayableFeesTime(tBill.getStartTime().withDayOfMonth(15).toLocalDate()); - }else if (tBill.getStartTime().getYear()==tBill.getEndTime().getYear()&& tBill.getStartTime().getMonthValue()==tBill.getEndTime().getMonthValue()){ + } else if (tBill.getStartTime().getYear() == tBill.getEndTime().getYear() && tBill.getStartTime().getMonthValue() == tBill.getEndTime().getMonthValue()) { // 如果同年同月 且日小于15 缴费时间取合同 tBill.setPayableFeesTime(tBill.getStartTime().toLocalDate()); - }else{ + } else { tBill.setPayableFeesTime(tBill.getStartTime().withDayOfMonth(15).toLocalDate()); } billService.save(tBill); -- Gitblit v1.7.1