xuhy
2025-02-13 5e2ffa1a9cb4edf29f88de2b05ada32381d42fea
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java
@@ -103,77 +103,77 @@
        rentBill.setStartTime(contract.getStartPayTime());
        TContractRentType tContractRentType = contractRentTypes.stream().filter(e -> e.getContractId().equals(contract.getId())).findFirst().orElse(null);
        if (tContractRentType!=null && contract.getStartPayTime().plusMonths(contract.getPayType().equals("1")? 1:contract.getPayType().equals("2")? 3:12).isAfter(tContractRentType.getChangeTime())){
            // 计算租金变动的天数
            long moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), contract.getStartPayTime().plusMonths(contract.getPayType().equals("1")? 1:contract.getPayType().equals("2")? 3:12))+1L;
            contract.setChangeTime(LocalDateTime.now());
            // 递增递减的租金
            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.add(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)));
                            contract.setChangeRent(contractRentTypeMoney.add(contract.getChangeRent().multiply(new BigDecimal(100).subtract(tContractRentType.getNumericalValue()).divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN))));
                            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.add(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.add(contract.getChangeRent().subtract(tContractRentType.getNumericalValue())));
            if (tContractRentType!=null && contract.getStartPayTime().plusMonths(contract.getPayType().equals("1")? 1:contract.getPayType().equals("2")? 3:12).isAfter(tContractRentType.getChangeTime())){
                // 计算租金变动的天数
                long moneyDays = ChronoUnit.DAYS.between(tContractRentType.getChangeTime(), contract.getStartPayTime().plusMonths(contract.getPayType().equals("1")? 1:contract.getPayType().equals("2")? 3:12))+1L;
                contract.setChangeTime(LocalDateTime.now());
                // 递增递减的租金
                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.add(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)));
                                contract.setChangeRent(contractRentTypeMoney.add(contract.getChangeRent().multiply(new BigDecimal(100).subtract(tContractRentType.getNumericalValue())).divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN)));
                                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.add(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.add(contract.getChangeRent().subtract(tContractRentType.getNumericalValue())));
                            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));
            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));
                                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));
                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{
                    rentBill.setEndTime(contract.getEndTime());
                }
            }else{
                rentBill.setEndTime(contract.getEndTime());
            }
        }else{
            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{
                rentBill.setEndTime(contract.getEndTime());
            }
            // 不走递增递减
            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());
                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{
                    rentBill.setEndTime(contract.getEndTime());
                }
                // 不走递增递减
                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);
        // 押金账单
        TBill depositBill = new TBill();
        depositBill.setContractId(contract.getId());
        depositBill.setContractNumber(contract.getContractNumber());
        depositBill.setPayableFeesMoney(contract.getDeposit());
        depositBill.setOutstandingMoney(depositBill.getPayableFeesMoney());
            }
            // 租金账单
            bills.add(rentBill);
            // 押金账单
            TBill depositBill = new TBill();
            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");
            depositBill.setPayableFeesTime(firstPayTime);
            depositBill.setPayFeesStatus("1");
            depositBill.setBillType("2");
        contractService.updateById(contract);
        billService.save(rentBill);
        billService.save(depositBill);
@@ -191,6 +191,7 @@
    @PostMapping(value = "/addContract")
    @PreAuthorize("@ss.hasPermi('system:contract:add')")
    public R<Boolean> addContract(@Validated @RequestBody TContractDTO dto) {
        dto.setChangeRent(dto.getMonthRent());
        contractService.save(dto);
        if (dto.getIsIncreasing()){
            TContractRentType tContractRentType = new TContractRentType();