无关风月
2025-03-06 07034b763fcd9ffcfdea59b2864aeefc15ef2cdd
权限
3个文件已修改
167 ■■■■■ 已修改文件
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/THouseMapper.xml 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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");
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;
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