From 9b8c37252e09c6c28f2214f59bae2eecd44f768e Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期四, 13 二月 2025 17:53:15 +0800
Subject: [PATCH] 权限修改

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java |  155 ++++++++++++++++++++++++++++++++-------------------
 1 files changed, 96 insertions(+), 59 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java
index 05076e9..5586d45 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java
@@ -51,17 +51,16 @@
                 long hours = ChronoUnit.HOURS.between(payableFeesTime, now);
                 long l = hours / 72;
                 if (l>0){
-                    // 计算每天租金
-                    long days = ChronoUnit.DAYS.between(tBill.getStartTime(),tBill.getEndTime());
-                    BigDecimal everyDayMoney = tBill.getPayableFeesMoney().divide(new BigDecimal(days), 2, BigDecimal.ROUND_DOWN);
                     // 违约金比例
                     BigDecimal proportion = contract.getProportion();
-                    // 预期x天后的违约金
-                    BigDecimal money = everyDayMoney.multiply(proportion).multiply(new BigDecimal(l));
-                    tBill.setPayableFeesPenalty(money);
+                    // 应缴违约金
+                    BigDecimal money = tBill.getOutstandingMoney().multiply(proportion);
+                    TBill changeBill = new TBill();
+                    changeBill.setId(tBill.getId());
+                    changeBill.setPayableFeesPenalty(money);
+                    billService.lockAndUpdateInfo(changeBill,2);
                 }
             }
-            billService.updateBatchById(list);
 
         } catch (Exception e) {
             e.printStackTrace();
@@ -120,12 +119,12 @@
                         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.add(contract.getChangeRent().multiply(new BigDecimal(100).add(tContractRentType.getNumericalValue()).divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN))));
+                                    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)));
-                                    contract.setChangeRent(contractRentTypeMoney.add(contract.getChangeRent().multiply(new BigDecimal(100).subtract(tContractRentType.getNumericalValue()).divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN))));
+                                    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;
@@ -133,21 +132,28 @@
                             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.add(contract.getChangeRent().add(tContractRentType.getNumericalValue())));
+                                    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.add(contract.getChangeRent().subtract(tContractRentType.getNumericalValue())));
+                                    contract.setChangeRent(contractRentTypeMoney);
 
                                     break;
                             }
                             break;
                     }
                     // 不需要涨租金的时间段
-                    long originalDays = ChronoUnit.DAYS.between(contract.getFirstPayTime(), tContractRentType.getChangeTime());
-                    originalMoney=originalMoney.add(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN))
-                            .multiply(new BigDecimal(originalDays));
-                    rentBill.setPayableFeesMoney(contractRentTypeMoney.add(originalMoney));
+                    if (contract.getFirstPayTime().isBefore(tContractRentType.getChangeTime())){
+                        long originalDays = ChronoUnit.DAYS.between(contract.getFirstPayTime(), tContractRentType.getChangeTime());
+                        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{
+                        rentBill.setPayableFeesMoney(contractRentTypeMoney);
+                        rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney());
+                    }
+
                     if (contract.getFirstPayTime().plusMonths(contract.getPayType().equals("1")? 1:contract.getPayType().equals("2")? 3:12).isAfter(contract.getEndTime())){
                         rentBill.setEndTime(contract.getFirstPayTime().plusMonths(contract.getPayType().equals("1")? 1:contract.getPayType().equals("2")? 3:12));
                     }else{
@@ -162,6 +168,8 @@
                     // 不走递增递减
                     long allDays = ChronoUnit.DAYS.between(contract.getFirstPayTime(), rentBill.getEndTime());
                     rentBill.setPayableFeesMoney(contract.getMonthRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(allDays)));
+                    rentBill.setOutstandingMoney(rentBill.getPayableFeesMoney());
+
                 }
                 // 租金账单
                 bills.add(rentBill);
@@ -170,6 +178,8 @@
                 depositBill.setContractId(contract.getId());
                 depositBill.setContractNumber(contract.getContractNumber());
                 depositBill.setPayableFeesMoney(contract.getDeposit());
+                depositBill.setOutstandingMoney(depositBill.getPayableFeesMoney());
+
                 depositBill.setPayableFeesTime(firstPayTime);
                 depositBill.setPayFeesStatus("1");
                 depositBill.setBillType("2");
@@ -227,12 +237,12 @@
                                     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(days)));
-                                                contract.setChangeRent(contractRentTypeMoney.add(contract.getChangeRent().multiply(new BigDecimal(100).add(tContractRentType.getNumericalValue()).divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN))));
+                                                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(days)));
-                                                contract.setChangeRent(contractRentTypeMoney.add(contract.getChangeRent().multiply(new BigDecimal(100).subtract(tContractRentType.getNumericalValue()).divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN))));
+                                                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;
@@ -240,11 +250,11 @@
                                         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.add(contract.getChangeRent().add(tContractRentType.getNumericalValue())));
+                                                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.add(contract.getChangeRent().subtract(tContractRentType.getNumericalValue())));
+                                                contract.setChangeRent(contractRentTypeMoney);
 
                                                 break;
                                         }
@@ -252,9 +262,18 @@
                                 }
                                 // 不需要涨租金的时间段
                                 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));
-                                tBill.setPayableFeesMoney(contractRentTypeMoney.add(originalMoney));
+
+                                // 不需要涨租金的时间段
+                                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 ((LocalDateTime.now().getYear() - contract.getChangeTime().getYear())%tContractRentType.getCycleTime()==0){
@@ -270,12 +289,12 @@
                                         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(days)));
-                                                    contract.setChangeRent(contractRentTypeMoney.add(contract.getChangeRent().multiply(new BigDecimal(100).add(tContractRentType.getNumericalValue()).divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN))));
+                                                    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(days)));
-                                                    contract.setChangeRent(contractRentTypeMoney.add(contract.getChangeRent().multiply(new BigDecimal(100).subtract(tContractRentType.getNumericalValue()).divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN))));
+                                                    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;
@@ -283,11 +302,11 @@
                                             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.add(contract.getChangeRent().add(tContractRentType.getNumericalValue())));
+                                                    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.add(contract.getChangeRent().subtract(tContractRentType.getNumericalValue())));
+                                                    contract.setChangeRent(contractRentTypeMoney);
 
                                                     break;
                                             }
@@ -298,6 +317,8 @@
                                     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{
                                     // 不涨租金 用上次的
                                     // 租金递增递减的时长 天
@@ -311,20 +332,25 @@
                                         case 1:
                                             switch (tContractRentType.getIncreasingDecreasing()){
                                                 case 1:
-                                                    contractRentTypeMoney =contractRentTypeMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(days))) ;
+                                                    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().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(days)));
+                                                    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()).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays));
+                                                    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()).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays));
+                                                    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;
@@ -334,6 +360,8 @@
                                     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());
+
                                 }
                             }
 
@@ -341,6 +369,8 @@
                     }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){
@@ -415,12 +445,12 @@
                                         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(days)));
-                                                    contract.setChangeRent(contractRentTypeMoney.add(contract.getChangeRent().multiply(new BigDecimal(100).add(tContractRentType.getNumericalValue()).divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN))));
+                                                    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(days)));
-                                                    contract.setChangeRent(contractRentTypeMoney.add(contract.getChangeRent().multiply(new BigDecimal(100).subtract(tContractRentType.getNumericalValue()).divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN))));
+                                                    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;
@@ -428,11 +458,11 @@
                                             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.add(contract.getChangeRent().add(tContractRentType.getNumericalValue())));
+                                                    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.add(contract.getChangeRent().subtract(tContractRentType.getNumericalValue())));
+                                                    contract.setChangeRent(contractRentTypeMoney);
 
                                                     break;
                                             }
@@ -443,6 +473,8 @@
                                     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{
                                     // 之前已经涨、跌过租金了 需要判断周期是否还需要再涨、跌
                                     if ((LocalDateTime.now().getYear() - contract.getChangeTime().getYear())%tContractRentType.getCycleTime()==0){
@@ -458,12 +490,12 @@
                                             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(days)));
-                                                        contract.setChangeRent(contractRentTypeMoney.add(contract.getChangeRent().multiply(new BigDecimal(100).add(tContractRentType.getNumericalValue()).divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN))));
+                                                        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(days)));
-                                                        contract.setChangeRent(contractRentTypeMoney.add(contract.getChangeRent().multiply(new BigDecimal(100).subtract(tContractRentType.getNumericalValue()).divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN))));
+                                                        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;
@@ -471,11 +503,11 @@
                                                 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.add(contract.getChangeRent().add(tContractRentType.getNumericalValue())));
+                                                        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.add(contract.getChangeRent().subtract(tContractRentType.getNumericalValue())));
+                                                        contract.setChangeRent(contractRentTypeMoney);
 
                                                         break;
                                                 }
@@ -486,6 +518,8 @@
                                         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{
                                         // 不涨租金 用上次的
                                         // 租金递增递减的时长 天
@@ -499,20 +533,25 @@
                                             case 1:
                                                 switch (tContractRentType.getIncreasingDecreasing()){
                                                     case 1:
-                                                        contractRentTypeMoney =contractRentTypeMoney.add(contract.getChangeRent().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(days))) ;
+                                                        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().divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(days)));
+                                                        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()).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays));
+                                                        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()).divide(new BigDecimal(30), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(moneyDays));
+                                                        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;
@@ -522,6 +561,8 @@
                                         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());
+
                                     }
                                 }
 
@@ -531,6 +572,8 @@
                                     beforeBill.getEndTime().plusMonths(1):contract.getPayType().equals("2")?
                                     beforeBill.getEndTime().plusMonths(3):beforeBill.getEndTime().plusMonths(12)).with(TemporalAdjusters.lastDayOfMonth()));
                             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){
@@ -546,13 +589,7 @@
                         tBill.setEndTime(contract.getEndTime());
                         bills.add(tBill);
                     }
-                    tBill.setPayableFeesMoney(contract.getMonthRent().multiply(new BigDecimal("3")));
-                    tBill.setPayableFeesTime(LocalDateTime.now().withHour(0).withMinute(0).withSecond(0));
-                    tBill.setPayFeesStatus("1");
-                    tBill.setBillType("1");
-                    tBill.setStartTime(beforeBill.getEndTime().plusMonths(1).with(TemporalAdjusters.firstDayOfMonth()));
-                    tBill.setEndTime(beforeBill.getEndTime().plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()));
-                    bills.add(tBill);
+
                 }
             }
             billService.saveBatch(bills);

--
Gitblit v1.7.1