无关风月
2025-03-07 6b5c8b69c7fd9a816cefb805d71daaf64b3dabf3
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java
@@ -290,7 +290,7 @@
                        rentBill.setEndTime(rentBill.getStartTime().plusMonths(contract.getPayType().equals("1") ? 1 : contract.getPayType().equals("2") ? 3 : 12).with(TemporalAdjusters.lastDayOfMonth()));
                    }
                } else {
                    rentBill.setEndTime(contract.getEndTime());
                    rentBill.setEndTime(rentBill.getStartTime().with(TemporalAdjusters.lastDayOfMonth()));
                }
                if (tContractRentType != null && rentBill.getEndTime().isAfter(tContractRentType.getChangeTime())) {
                    long moneyDays = 0;
@@ -365,12 +365,15 @@
                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.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()));
                                            // 递增递减的租金
                                            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()));
                                            // 递增递减的租金
                                            BigDecimal contractRentTypeMoney = new BigDecimal("0");
                                            // 不递增递减的租金
@@ -483,22 +488,26 @@
                                            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());
                                }
                                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");
                            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) {
@@ -516,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) {
                            // 如果变过 并且时间在递增递减时间段内
@@ -526,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()));
                                    // 递增递减的租金
                                    BigDecimal contractRentTypeMoney = new BigDecimal("0");
                                    // 不递增递减的租金
@@ -560,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));
@@ -569,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()));
                                    // 递增递减的租金
                                    BigDecimal contractRentTypeMoney = new BigDecimal("0");
                                    // 不递增递减的租金
@@ -632,19 +642,20 @@
                                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());
                    }
                    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;
@@ -659,7 +670,6 @@
                tCheckAcceptRecord.setContractId(contract.getId());
                tCheckAcceptRecord.setHouseId(contract.getHouseId());
                tCheckAcceptRecord.setLeaseReason("后台终止合同");
                tCheckAcceptRecord.setStatus(false);
                tCheckAcceptRecord.setAcceptanceTime(LocalDateTime.now());
                LocalDate now = LocalDate.now();
                String replace = (now + "").replace("-", "");
@@ -668,14 +678,7 @@
                tCheckAcceptRecord.setCode(replace.substring(2) + String.format("%03d", size + 1));
                checkAcceptRecordMapper.insert(tCheckAcceptRecord);
                // 将所有未缴费账单设置未已失效
                List<TBill> tBills = billService.list(new LambdaQueryWrapper<TBill>()
                        .ne(TBill::getPayFeesStatus, 3)
                        .eq(TBill::getContractId, contract.getId()));
                for (TBill tBill : tBills) {
                    tBill.setPayFeesStatus("5");
                }
                billService.updateBatchById(tBills);
                break;
            }
            default: