From 9c0bfff1512e53dc810b1b227310ea89b4cddf01 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期四, 10 四月 2025 15:27:22 +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