From 3603b4ea7d56f0893f5067ca05fc81b784c27b94 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 07 三月 2025 18:23:19 +0800
Subject: [PATCH] 权限

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java |   53 +++++++++++++++++++++++++++++++----------------------
 1 files changed, 31 insertions(+), 22 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 900b49c..dd8ced0 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
@@ -294,7 +294,7 @@
                 }
                 if (tContractRentType != null && rentBill.getEndTime().isAfter(tContractRentType.getChangeTime())) {
                     long moneyDays = 0;
-                    moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), rentBill.getEndTime());
+                    moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), rentBill.getEndTime())+1;
                     // 计算租金变动的天数
                     contract.setChangeTime(tContractRentType.getChangeTime());
                     // 递增递减的租金
@@ -330,14 +330,14 @@
                             break;
                     }
                     // 不需要涨租金的时间段
-                    long originalDays = Math.abs(ChronoUnit.DAYS.between(contract.getFirstPayTime(), tContractRentType.getChangeTime()));
+                    long originalDays = Math.abs(ChronoUnit.DAYS.between(contract.getFirstPayTime(), tContractRentType.getChangeTime()))+1;
                     originalMoney = originalMoney.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN))
                             .multiply(new BigDecimal(originalDays));
                     rentBill.setPayableFeesMoney(contractRentTypeMoney.add(originalMoney));
                     rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney());
                 } else {
                     // 不走递增递减
-                    long allDays = ChronoUnit.DAYS.between(contract.getStartPayTime(), rentBill.getEndTime());
+                    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)));
@@ -369,8 +369,11 @@
                             .last("limit 1").one();
                     if (!beforeBill.getEndTime().toLocalDate().equals(contract.getEndTime().toLocalDate())) {
                         while (beforeBill.getEndTime().plusMonths(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12).isBefore(contract.getEndTime())) {
+                            System.err.println("生成后续账单");
                             TBill tBill = new TBill();
                             tBill.setContractId(contract.getId());
+                            tBill.setStartTime(beforeBill.getEndTime().plusDays(1));
+                            tBill.setEndTime(beforeBill.getEndTime().plusMonths(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12).with(TemporalAdjusters.lastDayOfMonth()));
                             tBill.setContractNumber(contract.getContractNumber());
                             if (beforeBill.getEndTime().plusMonths(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12).getDayOfMonth() <= 15) {
                                 tBill.setPayableFeesTime(contract.getEndTime().toLocalDate());
@@ -381,6 +384,7 @@
                             }
                             tBill.setContractId(contract.getId());
                             if (contract.getIsIncreasing()) {
+                                System.err.println("执行递增递减");
                                 if (tContractRentType != null) {
                                     // 如果变过 并且时间在递增递减时间段内
                                     if (contract.getChangeTime() != null) {
@@ -390,7 +394,7 @@
                                         if (changeTime.isBefore(tBill.getEndTime()) && changeTime.isAfter(tBill.getStartTime())) {
                                             contract.setChangeTime(changeTime);
                                             // 租金递增递减的时长 天
-                                            long moneyDays = Math.abs(ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), beforeBill.getEndTime()));
+                                            long moneyDays = Math.abs(ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), tBill.getEndTime()))+1;
                                             // 递增递减的租金
                                             BigDecimal contractRentTypeMoney = new BigDecimal("0");
                                             // 不递增递减的租金
@@ -439,9 +443,10 @@
                                         }
                                     }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(), beforeBill.getEndTime()));
+                                            long moneyDays = Math.abs(ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), tBill.getEndTime()))+1;
                                             // 递增递减的租金
                                             BigDecimal contractRentTypeMoney = new BigDecimal("0");
                                             // 不递增递减的租金
@@ -483,19 +488,24 @@
                                             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.setOutstandingMoney(tBill.getPayableFeesMoney());
                                         }
                                     }
                                 } else {
                                     tBill.setPayableFeesMoney(contract.getChangeRent().multiply(new BigDecimal(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12)));
                                     tBill.setOutstandingMoney(tBill.getPayableFeesMoney());
                                 }
+                            }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());
                             }
                             tBill.setContractNumber(contract.getContractNumber());
                             tBill.setPayFeesStatus("1");
                             tBill.setBillType("1");
-                            tBill.setStartTime(beforeBill.getEndTime().plusDays(1));
-                            tBill.setEndTime(beforeBill.getEndTime().plusMonths(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12).with(TemporalAdjusters.lastDayOfMonth()));
+
                             billService.save(tBill);
                             beforeBill.setEndTime(beforeBill.getEndTime().plusMonths(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12).with(TemporalAdjusters.lastDayOfMonth()));
                         }
@@ -515,6 +525,7 @@
                     tBill.setBillType("1");
                     tBill.setStartTime(beforeBill.getEndTime().plusDays(1));
                     tBill.setEndTime(contract.getEndTime());
+                    tBill.setContractNumber(contract.getContractNumber());
                     if (contract.getIsIncreasing()) {
                         if (tContractRentType != null) {
                             // 如果变过 并且时间在递增递减时间段内
@@ -525,7 +536,7 @@
                                 if (changeTime.isBefore(tBill.getEndTime()) && changeTime.isAfter(tBill.getStartTime())) {
                                     contract.setChangeTime(changeTime);
                                     // 租金递增递减的时长 天
-                                    long moneyDays = Math.abs(ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), beforeBill.getEndTime()));
+                                    long moneyDays = Math.abs(ChronoUnit.DAYS.between(changeTime, tBill.getEndTime()))+1;
                                     // 递增递减的租金
                                     BigDecimal contractRentTypeMoney = new BigDecimal("0");
                                     // 不递增递减的租金
@@ -559,7 +570,7 @@
                                             break;
                                     }
                                     // 不需要涨租金的时间段
-                                    long originalDays = ChronoUnit.DAYS.between(beforeBill.getEndTime(), tContractRentType.getChangeTime());
+                                    long originalDays = ChronoUnit.DAYS.between(beforeBill.getEndTime(), changeTime);
                                     if (originalDays > 0) {
                                         originalMoney = originalMoney.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN))
                                                 .multiply(new BigDecimal(originalDays));
@@ -568,15 +579,15 @@
                                     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)));
+                                    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());
                                 }
                             }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(), beforeBill.getEndTime()));
+                                    long moneyDays = Math.abs(ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), tBill.getEndTime()))+1;
                                     // 递增递减的租金
                                     BigDecimal contractRentTypeMoney = new BigDecimal("0");
                                     // 不递增递减的租金
@@ -636,17 +647,15 @@
                         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());
-                        tBill.setContractNumber(contract.getContractNumber());
                     }
-
-                    if (beforeBill.getEndTime().plusMonths(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12).getDayOfMonth() <= 15) {
-                        tBill.setPayableFeesTime(contract.getEndTime().withHour(0).withMinute(0).withSecond(0).toLocalDate());
-                    } else {
-                        tBill.setPayableFeesTime((contract.getPayType().equals("1") ?
-                                beforeBill.getEndTime().plusMonths(1).withDayOfMonth(15).toLocalDate() : contract.getPayType().equals("2") ?
-                                beforeBill.getEndTime().plusMonths(3).withDayOfMonth(15).toLocalDate() : beforeBill.getEndTime().withDayOfMonth(15).plusMonths(12).withHour(0).withMinute(0).withSecond(0).toLocalDate()));
+                    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());
                     }
-
                     billService.save(tBill);
                 }
                 break;

--
Gitblit v1.7.1