From 5fa6e6f8410ef9d057174bcff2a3c5038c54a551 Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期日, 27 四月 2025 18:41:20 +0800 Subject: [PATCH] bug修改 --- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java | 541 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 459 insertions(+), 82 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..52f1852 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 @@ -28,17 +28,23 @@ import com.google.common.collect.ImmutableMap; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.enums.ProcessCategoryEnum; -import com.ruoyi.common.enums.SubmitStatusEnum; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.system.mapper.TCheckAcceptRecordMapper; -import com.ruoyi.system.model.*; -import com.ruoyi.system.service.*; +import com.ruoyi.system.model.TBill; +import com.ruoyi.system.model.TCheckAcceptRecord; +import com.ruoyi.system.model.TContract; +import com.ruoyi.system.model.TContractRentType; +import com.ruoyi.system.model.THouse; +import com.ruoyi.system.service.ISysRoleService; +import com.ruoyi.system.service.TBillService; +import com.ruoyi.system.service.TContractRentTypeService; +import com.ruoyi.system.service.TContractService; +import com.ruoyi.system.service.THouseService; import com.ruoyi.system.task.base.QuartzManager; import com.ruoyi.system.task.base.TimeJobType; import com.ruoyi.system.task.jobs.StateProcessJob; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.math.BigDecimal; @@ -46,7 +52,11 @@ import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjusters; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -81,14 +91,24 @@ 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(2).withDayOfMonth(10).with; +// 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(2).withDayOfMonth(10).withHour(00).withMinute(00).withSecond(00); +// LocalDateTime localDate2 = LocalDateTime.now().withYear(2025).withMonth(3).withDayOfMonth(31).withHour(00).withMinute(00).withSecond(00); +// LocalDateTime with = localDate1.plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); +// boolean before = with.isBefore(localDate2); +// System.err.println(before); +// long between = ChronoUnit.DAYS.between(localDate1, localDate2)+1; +// int monthValue = LocalDateTime.now().getMonthValue(); +// LocalDateTime.now(); +// LocalDateTime.now(); + int dayOfMonth = LocalDateTime.now().getMonthValue(); + System.err.println(dayOfMonth); +// 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 +271,8 @@ return true; } + + /** * 业务状态变更 */ @@ -273,47 +295,66 @@ 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); } List<TContractRentType> contractRentTypes = contractRentTypeService.list(); TContractRentType tContractRentType = contractRentTypes.stream().filter(e -> e.getContractId().equals(contract.getId())).findFirst().orElse(null); - // 生成第一笔账单 // 第一次应缴费日期 + LocalDateTime firstPayTime = contract.getStartTime().plusDays(10).withHour(0).withMinute(0).withSecond(0); TBill rentBill = new TBill(); rentBill.setContractId(contract.getId()); 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 +382,134 @@ } 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) { + System.err.println("第一笔账单 1号计算整月:"); + money = money.add(contract.getMonthRent()); + } else { + long allDays = Math.abs(ChronoUnit.DAYS.between(rentBill.getStartTime(), rentBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth())) + 1); + System.err.println("第一笔账单 计算天数"+allDays); + money =money.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(allDays))); + System.err.println("第一笔账单 计算天数金额"+money); + } + // 后续 + if (contract.getStartPayTime().getMonthValue()==3||contract.getStartPayTime().getMonthValue()==6||contract.getStartPayTime().getMonthValue()==9||contract.getStartPayTime().getMonthValue()==12){ + System.err.println("后续账单 月为3 6 9 12金额"+money); + rentBill.setPayableFeesMoney(money); + rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney()); + }else{ + + LocalDateTime localDateTime = rentBill.getStartTime().plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); + System.err.println("后续账单逻辑时间"+localDateTime); + while (true){ + if (localDateTime.toLocalDate().isBefore(rentBill.getEndTime().toLocalDate())){ + System.err.println("后续while 在结束之前"); + money = money.add(contract.getMonthRent()); + }else if(localDateTime.toLocalDate().equals(rentBill.getEndTime().toLocalDate())){ + System.err.println("后续while 结束"); + money = money.add(contract.getMonthRent()); + break; + }else { + System.err.println("后续while 加一个月大于结束时间"); + if (localDateTime.with(TemporalAdjusters.firstDayOfMonth()).isBefore(rentBill.getEndTime())){ + long a = ChronoUnit.DAYS.between(localDateTime.with(TemporalAdjusters.firstDayOfMonth()),rentBill.getEndTime())+1; + System.err.println("后续while 加一个月大于结束时间 计算天数"+a); + money = money.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply( + new BigDecimal(ChronoUnit.DAYS.between(localDateTime.with(TemporalAdjusters.firstDayOfMonth()),rentBill.getEndTime())+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(rentBill.getStartTime(), rentBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth())) ; + 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()); + LocalDateTime localDateTime = rentBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).plusDays(1); + while (true){ + if (localDateTime.isBefore(rentBill.getEndTime())){ + localDateTime = localDateTime.plusMonths(1); + 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()))))); + break; + } + } + 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(); @@ -373,6 +526,8 @@ depositBill.setBillType("2"); contractService.updateById(contract); + rentBill.setBusinessDeptId(contract.getBusinessDeptId()); + depositBill.setBusinessDeptId(contract.getBusinessDeptId()); billService.save(rentBill); billService.save(depositBill); // 生成后续账单 @@ -403,8 +558,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 +596,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 +687,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 +739,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()); @@ -517,6 +747,7 @@ tBill.setContractNumber(contract.getContractNumber()); tBill.setPayFeesStatus("1"); tBill.setBillType("1"); + tBill.setBusinessDeptId(contract.getBusinessDeptId()); billService.save(tBill); beforeBill.setEndTime(beforeBill.getEndTime().plusMonths(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12).with(TemporalAdjusters.lastDayOfMonth())); @@ -548,7 +779,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 +817,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 +908,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,29 +953,90 @@ } } } 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().getDayOfMonth()==1&&(tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).toLocalDate().isAfter(tBill.getEndTime().toLocalDate())||tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).toLocalDate().equals(tBill.getEndTime().toLocalDate()))){ + // 计算整月 + originalMoney = originalMoney.add(contract.getChangeRent()); }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()); + // 计算天 + if (tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).isBefore(tBill.getEndTime())){ + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth())))+1; + }else{ + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), tBill.getEndTime()))+1; + } + } + 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().getDayOfMonth()==1 + && + ( + tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).toLocalDate().isBefore(tBill.getEndTime().toLocalDate()) + ||tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).toLocalDate().equals(tBill.getEndTime().toLocalDate()) + ) + ){ + // 计算整月 + originalMoney = originalMoney.add(contract.getChangeRent()); + }else{ + // 计算天 + if (tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).isBefore(tBill.getEndTime())){ + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), tBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth())))+1; + }else{ + originalDays = Math.abs(ChronoUnit.DAYS.between(tBill.getStartTime(), tBill.getEndTime()))+1; + } + 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(tBill.getEndTime())){ + 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))); + if (originalTime.isBefore(tBill.getEndTime())||originalTime.toLocalDate().equals(tBill.getEndTime().toLocalDate())){ + long tempOriginal = ChronoUnit.DAYS.between(originalTime,tBill.getEndTime())+1; + 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()) { +// // 如果同年同月 且日小于15 缴费时间取合同 +// tBill.setPayableFeesTime(tBill.getStartTime().toLocalDate()); +// } else { tBill.setPayableFeesTime(tBill.getStartTime().withDayOfMonth(15).toLocalDate()); - }else if (tBill.getStartTime().getYear()==tBill.getEndTime().getYear()&& tBill.getStartTime().getMonthValue()==tBill.getEndTime().getMonthValue()){ - // 如果同年同月 且日小于15 缴费时间取合同 - tBill.setPayableFeesTime(tBill.getStartTime().toLocalDate()); - }else{ - tBill.setPayableFeesTime(tBill.getStartTime().withDayOfMonth(15).toLocalDate()); - } +// } + tBill.setBusinessDeptId(contract.getBusinessDeptId()); billService.save(tBill); } } @@ -675,10 +1044,18 @@ } case CATEGORY3: { // 合同提前终止审批 - int submitStatus = status == 0 ? 4 : (status == 1 ? 7 : 5); + int submitStatus = status == 0 ? 4 : (status == 1 ? 7 : 4); contractService.updateContractAuditStatus(processParameter.getString("projectId"), submitStatus); // 生成验收记录 TContract contract = contractService.getById(processParameter.getString("projectId")); + //更新合同结束时间 + contract.setEndTime(contract.getTerminateTime()); + contractService.updateById(contract); + // 修改房屋状态 + THouse house = houseService.getById(contract.getHouseId()); + house.setLeaseStatus("1"); + houseService.updateById(house); + TCheckAcceptRecord tCheckAcceptRecord = new TCheckAcceptRecord(); tCheckAcceptRecord.setContractId(contract.getId()); tCheckAcceptRecord.setHouseId(contract.getHouseId()); -- Gitblit v1.7.1