From 8e21b9f23159f38953b99f763742dac301a9ec1b Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 07 三月 2025 09:50:12 +0800
Subject: [PATCH] 权限

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java |   47 +++++++++++++++++++++++++++--------------------
 1 files changed, 27 insertions(+), 20 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 9d939a3..e2a93ad 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
@@ -365,10 +365,11 @@
                 billService.save(depositBill);
                 // 生成后续账单
                 try {
-                    TBill beforeBill = billService.lambdaQuery().eq(TBill::getContractId, contract.getId()).eq(TBill::getBillType, 1).orderByDesc(TBill::getCreateTime)
+                    TBill beforeBill = billService.lambdaQuery().eq(TBill::getContractId, contract.getId()).eq(TBill::getBillType, 1).orderByDesc(TBill::getStartTime)
                             .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.setContractNumber(contract.getContractNumber());
@@ -381,6 +382,7 @@
                             }
                             tBill.setContractId(contract.getId());
                             if (contract.getIsIncreasing()) {
+                                System.err.println("执行递增递减");
                                 if (tContractRentType != null) {
                                     // 如果变过 并且时间在递增递减时间段内
                                     if (contract.getChangeTime() != null) {
@@ -489,16 +491,19 @@
                                 } else {
                                     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()));
+                            }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()));
                         }
                     }
                 } catch (Exception e) {
@@ -632,19 +637,21 @@
                                 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()));
+                    }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());
+                        tBill.setContractNumber(contract.getContractNumber());
                     }
-
+                    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