From 07034b763fcd9ffcfdea59b2864aeefc15ef2cdd Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期四, 06 三月 2025 18:07:21 +0800
Subject: [PATCH] 权限

---
 ruoyi-system/src/main/resources/mapper/system/THouseMapper.xml                    |   20 +++++-
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java   |    6 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java |  141 ++++++++++++++++++-----------------------------
 3 files changed, 75 insertions(+), 92 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 3240660..73a6b1f 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
@@ -379,7 +379,6 @@
                                         beforeBill.getEndTime().plusMonths(1).withDayOfMonth(15).toLocalDate() : contract.getPayType().equals("2") ?
                                         beforeBill.getEndTime().plusMonths(3).withDayOfMonth(15).toLocalDate() : beforeBill.getEndTime().withDayOfMonth(15).plusMonths(12).toLocalDate()));
                             }
-                            // 根据支付方式判断需不需要生成订单
                             tBill.setContractId(contract.getId());
                             if (contract.getIsIncreasing()) {
                                 if (tContractRentType != null) {
@@ -427,7 +426,7 @@
                                             // 不需要涨租金的时间段
                                             long originalDays = ChronoUnit.DAYS.between(beforeBill.getEndTime(), tContractRentType.getChangeTime());
                                             if (originalDays > 0) {
-                                                originalMoney = originalMoney.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN))
+                                                originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN))
                                                         .multiply(new BigDecimal(originalDays));
                                             }
                                             tBill.setPayableFeesMoney(contractRentTypeMoney.add(originalMoney));
@@ -483,16 +482,16 @@
                                             }
                                             tBill.setPayableFeesMoney(contractRentTypeMoney.add(originalMoney));
                                             tBill.setOutstandingMoney(tBill.getPayableFeesMoney());
+                                            contractService.updateById(contract);
+
                                         }
                                     }
                                 } else {
-
-                                    tBill.setPayableFeesMoney(contract.getMonthRent().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());
 
                                 }
                                 tBill.setContractNumber(contract.getContractNumber());
-
                                 tBill.setPayFeesStatus("1");
                                 tBill.setBillType("1");
                                 tBill.setStartTime(beforeBill.getEndTime().plusDays(1));
@@ -518,66 +517,16 @@
                     tBill.setStartTime(beforeBill.getEndTime().plusDays(1));
                     tBill.setEndTime(contract.getEndTime());
                     if (contract.getIsIncreasing()) {
-                        if (tContractRentType != null
-                                && beforeBill.getEndTime().isBefore(tContractRentType.getChangeTime())
-                                && beforeBill.getEndTime().plusMonths(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12).with(TemporalAdjusters.lastDayOfMonth()).isAfter(tContractRentType.getChangeTime())) {
-                            // 如果没变过
-                            if (contract.getChangeTime() == null) {
-                                contract.setChangeTime(LocalDateTime.now());
-                                // 租金递增递减的时长 天
-                                long moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), contract.getEndTime());
-                                // 递增递减的租金
-                                BigDecimal contractRentTypeMoney = new BigDecimal("0");
-                                // 不递增递减的租金
-                                BigDecimal originalMoney = new BigDecimal("0");
-                                // 原租金
-                                switch (tContractRentType.getIncreasingDecreasingType()) {
-                                    case 1:
-                                        switch (tContractRentType.getIncreasingDecreasing()) {
-                                            case 1:
-                                                contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().multiply(new BigDecimal(100).add(tContractRentType.getNumericalValue())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays)));
-                                                contract.setChangeRent(contractRentTypeMoney);
-                                                break;
-                                            case 2:
-                                                contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().multiply((new BigDecimal(100).subtract(tContractRentType.getNumericalValue()))).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays)).divide(new BigDecimal(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12), 2, BigDecimal.ROUND_DOWN));
-                                                contract.setChangeRent(contractRentTypeMoney);
-                                                break;
-                                        }
-                                        break;
-                                    case 2:
-                                        switch (tContractRentType.getIncreasingDecreasing()) {
-                                            case 1:
-                                                contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().add(tContractRentType.getNumericalValue())).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays));
-                                                contract.setChangeRent(contractRentTypeMoney);
-                                                break;
-                                            case 2:
-                                                contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().subtract(tContractRentType.getNumericalValue())).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays));
-                                                contract.setChangeRent(contractRentTypeMoney);
-
-                                                break;
-                                        }
-                                        break;
-                                }
-                                // 不需要涨租金的时间段
-                                long originalDays = ChronoUnit.DAYS.between(beforeBill.getEndTime(), tContractRentType.getChangeTime());
-
-                                // 不需要涨租金的时间段
-                                if (contract.getFirstPayTime().isBefore(tContractRentType.getChangeTime())) {
-                                    originalMoney = originalMoney.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN))
-                                            .multiply(new BigDecimal(originalDays));
-                                    tBill.setPayableFeesMoney(contractRentTypeMoney.add(originalMoney));
-                                    tBill.setOutstandingMoney(tBill.getPayableFeesMoney());
-                                } else {
-                                    tBill.setPayableFeesMoney(contractRentTypeMoney);
-                                    tBill.setOutstandingMoney(tBill.getPayableFeesMoney());
-                                }
-
-                            } else {
+                        if (tContractRentType != null) {
+                            // 如果变过 并且时间在递增递减时间段内
+                            if (contract.getChangeTime() != null) {
+                                // 下次递增递减时间
+                                LocalDateTime changeTime = contract.getChangeTime().plusYears(tContractRentType.getCycleTime());
                                 // 之前已经涨、跌过租金了 需要判断周期是否还需要再涨、跌
-                                if ((LocalDateTime.now().getYear() - contract.getChangeTime().getYear()) % tContractRentType.getCycleTime() == 0) {
-                                    contract.setChangeTime(LocalDateTime.now());
+                                if (changeTime.isBefore(tBill.getEndTime()) && changeTime.isAfter(tBill.getStartTime())) {
+                                    contract.setChangeTime(changeTime);
                                     // 租金递增递减的时长 天
-                                    long moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), contract.getEndTime());
+                                    long moneyDays = Math.abs(ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), beforeBill.getEndTime()));
                                     // 递增递减的租金
                                     BigDecimal contractRentTypeMoney = new BigDecimal("0");
                                     // 不递增递减的租金
@@ -588,11 +537,12 @@
                                             switch (tContractRentType.getIncreasingDecreasing()) {
                                                 case 1:
                                                     contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().multiply(new BigDecimal(100).add(tContractRentType.getNumericalValue())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays)));
-                                                    contract.setChangeRent(contractRentTypeMoney);
+                                                    // 变动后的每月租金
+                                                    contract.setChangeRent(contract.getChangeRent().multiply(new BigDecimal(100).add(tContractRentType.getNumericalValue())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN));
                                                     break;
                                                 case 2:
-                                                    contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().multiply((new BigDecimal(100).subtract(tContractRentType.getNumericalValue()))).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays)).divide(new BigDecimal(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12), 2, BigDecimal.ROUND_DOWN));
-                                                    contract.setChangeRent(contractRentTypeMoney);
+                                                    contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().multiply((new BigDecimal(100).subtract(tContractRentType.getNumericalValue()))).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays)));
+                                                    contract.setChangeRent(contract.getChangeRent().multiply((new BigDecimal(100).subtract(tContractRentType.getNumericalValue()))).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN));
                                                     break;
                                             }
                                             break;
@@ -600,27 +550,34 @@
                                             switch (tContractRentType.getIncreasingDecreasing()) {
                                                 case 1:
                                                     contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().add(tContractRentType.getNumericalValue())).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays));
-                                                    contract.setChangeRent(contractRentTypeMoney);
+                                                    contract.setChangeRent(contract.getChangeRent().add(tContractRentType.getNumericalValue()));
                                                     break;
                                                 case 2:
                                                     contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().subtract(tContractRentType.getNumericalValue())).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays));
-                                                    contract.setChangeRent(contractRentTypeMoney);
-
+                                                    contract.setChangeRent(contract.getChangeRent().subtract(tContractRentType.getNumericalValue()));
                                                     break;
                                             }
                                             break;
                                     }
                                     // 不需要涨租金的时间段
                                     long originalDays = ChronoUnit.DAYS.between(beforeBill.getEndTime(), tContractRentType.getChangeTime());
-                                    originalMoney = originalMoney.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN))
-                                            .multiply(new BigDecimal(originalDays));
+                                    if (originalDays > 0) {
+                                        originalMoney = originalMoney.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN))
+                                                .multiply(new BigDecimal(originalDays));
+                                    }
                                     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{
+                                if (tContractRentType.getChangeTime().isBefore(tBill.getEndTime()) && tContractRentType.getChangeTime().isAfter(tBill.getStartTime())) {
+                                    contract.setChangeTime(tContractRentType.getChangeTime());
                                     // 租金递增递减的时长 天
-                                    long moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), contract.getEndTime());
+                                    long moneyDays = Math.abs(ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), beforeBill.getEndTime()));
                                     // 递增递减的租金
                                     BigDecimal contractRentTypeMoney = new BigDecimal("0");
                                     // 不递增递减的租金
@@ -631,11 +588,12 @@
                                             switch (tContractRentType.getIncreasingDecreasing()) {
                                                 case 1:
                                                     contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().multiply(new BigDecimal(100).add(tContractRentType.getNumericalValue())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays)));
-                                                    contract.setChangeRent(contractRentTypeMoney);
+                                                    // 变动后的每月租金
+                                                    contract.setChangeRent(contract.getChangeRent().multiply(new BigDecimal(100).add(tContractRentType.getNumericalValue())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN));
                                                     break;
                                                 case 2:
-                                                    contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().multiply((new BigDecimal(100).subtract(tContractRentType.getNumericalValue()))).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays)).divide(new BigDecimal(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12), 2, BigDecimal.ROUND_DOWN));
-                                                    contract.setChangeRent(contractRentTypeMoney);
+                                                    contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().multiply((new BigDecimal(100).subtract(tContractRentType.getNumericalValue()))).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays)));
+                                                    contract.setChangeRent(contract.getChangeRent().multiply((new BigDecimal(100).subtract(tContractRentType.getNumericalValue()))).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN));
                                                     break;
                                             }
                                             break;
@@ -643,32 +601,41 @@
                                             switch (tContractRentType.getIncreasingDecreasing()) {
                                                 case 1:
                                                     contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().add(tContractRentType.getNumericalValue())).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays));
-                                                    contract.setChangeRent(contractRentTypeMoney);
+                                                    contract.setChangeRent(contract.getChangeRent().add(tContractRentType.getNumericalValue()));
                                                     break;
                                                 case 2:
                                                     contractRentTypeMoney = contractRentTypeMoney.add(contract.getChangeRent().subtract(tContractRentType.getNumericalValue())).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays));
-                                                    contract.setChangeRent(contractRentTypeMoney);
-
+                                                    contract.setChangeRent(contract.getChangeRent().subtract(tContractRentType.getNumericalValue()));
                                                     break;
                                             }
                                             break;
                                     }
                                     // 不需要涨租金的时间段
                                     long originalDays = ChronoUnit.DAYS.between(beforeBill.getEndTime(), tContractRentType.getChangeTime());
-                                    originalMoney = originalMoney.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN))
-                                            .multiply(new BigDecimal(originalDays));
+                                    if (originalDays > 0) {
+                                        originalMoney = originalMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN))
+                                                .multiply(new BigDecimal(originalDays));
+                                    }
                                     tBill.setPayableFeesMoney(contractRentTypeMoney.add(originalMoney));
                                     tBill.setOutstandingMoney(tBill.getPayableFeesMoney());
+                                    contractService.updateById(contract);
 
                                 }
                             }
+                        } 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());
+                            }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());
+                            }
+
 
                         }
-                    } else {
-                        long allDays = ChronoUnit.DAYS.between(beforeBill.getEndTime(), contract.getEndTime());
-                        tBill.setPayableFeesMoney(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(allDays)));
-                        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());
@@ -705,7 +672,7 @@
                 checkAcceptRecordMapper.insert(tCheckAcceptRecord);
                 // 将所有未缴费账单设置未已失效
                 List<TBill> tBills = billService.list(new LambdaQueryWrapper<TBill>()
-                        .in(TBill::getPayFeesStatus, Arrays.asList("1,2,4"))
+                        .ne(TBill::getPayFeesStatus, 3)
                         .eq(TBill::getContractId, contract.getId()));
                 for (TBill tBill : tBills) {
                     tBill.setPayFeesStatus("5");
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java
index 91f1c4f..593d888 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java
@@ -45,10 +45,12 @@
             TContract tContract = tContracts.stream().filter(e -> e.getHouseId().equals(tHouse.getId())).findFirst().orElse(null);
             if (tContract!=null){
                 tHouse.setTenantType(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CONTRACT_PAY_TYPE,tContract.getPayType()));
-                tHouse.setLeaseStatus(DictUtils.getDictLabel(DictConstants.DICT_TYPE_LEASE_STATUS,"2"));
+//                tHouse.setLeaseStatus(DictUtils.getDictLabel(DictConstants.DICT_TYPE_LEASE_STATUS,"2"));
             }else{
-                tHouse.setLeaseStatus(DictUtils.getDictLabel(DictConstants.DICT_TYPE_LEASE_STATUS,tHouse.getLeaseStatus()));
+//                tHouse.setLeaseStatus(DictUtils.getDictLabel(DictConstants.DICT_TYPE_LEASE_STATUS,tHouse.getLeaseStatus()));
             }
+                            tHouse.setLeaseStatus(DictUtils.getDictLabel(DictConstants.DICT_TYPE_LEASE_STATUS,tHouse.getLeaseStatus()));
+
         }
         pageInfo.setRecords(list);
         return pageInfo;
diff --git a/ruoyi-system/src/main/resources/mapper/system/THouseMapper.xml b/ruoyi-system/src/main/resources/mapper/system/THouseMapper.xml
index a4f10ec..bbb5742 100644
--- a/ruoyi-system/src/main/resources/mapper/system/THouseMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/THouseMapper.xml
@@ -29,8 +29,16 @@
         id, house_picture, house_name, house_address, house_area, house_type, business_attributes, product_type, property_right_person, property_right_number, property_right_start_time, property_right_duration, lease_status, create_time, update_time, create_by, update_by, disabled
     </sql>
     <select id="houseList" resultType="com.ruoyi.system.model.THouse">
-        select t1.* from
-            t_house t1
+        select t1.*,t2.start_time as startTime
+        from t_house t1
+        left join t_contract t2
+        on (t2.house_id = t1.id
+        and t2.status != 1
+        and t2.status != 2
+        and t2.status != 3
+        and t2.status != 5
+        and t2.status != 8
+        and NOW() between t2.start_time and t2.end_time)
         <where>
             <if test="req.houseName != null and req.houseName != ''">
                 and t1.house_name like concat('%', #{req.houseName}, '%')
@@ -38,9 +46,15 @@
             <if test="req.propertyRightPerson != null and req.propertyRightPerson != ''">
                 and t1.property_right_person like concat('%', #{req.propertyRightPerson}, '%')
             </if>
-            <if test="req.leaseStatus != null and req.houseName != ''">
+            <if test="req.leaseStatus == 3">
                 and t1.lease_status = #{req.leaseStatus}
             </if>
+            <if test="req.leaseStatus == 2">
+                and (t2.start_time is not null)
+            </if>
+            <if test="req.leaseStatus == 1">
+                and (t2.start_time is null)
+            </if>
             AND t1.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
         </where>
         order by t1.create_time desc

--
Gitblit v1.7.1