From d58423b256bf640e5ea61244a33f71e440bb067a Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期二, 11 二月 2025 11:34:27 +0800 Subject: [PATCH] 房屋合同生成账单定时任务 --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java | 111 ++++++++++++++++++++++++++----------------------------- 1 files changed, 53 insertions(+), 58 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 60c83ba..34d7837 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 @@ -64,13 +64,14 @@ if (days<30){ rentBill.setPayableFeesMoney(contract.getMonthRent().divide(new BigDecimal("30"),2,BigDecimal.ROUND_DOWN).multiply(new BigDecimal(days))); }else{ - rentBill.setPayableFeesMoney(contract.getMonthRent()); + rentBill.setPayableFeesMoney(contract.getPayType().equals("1")?contract.getMonthRent(): + contract.getPayType().equals("2")?contract.getMonthRent().multiply(new BigDecimal("3")):contract.getMonthRent().multiply(new BigDecimal("12")).setScale(2,BigDecimal.ROUND_DOWN)); } rentBill.setPayableFeesTime(firstPayTime); rentBill.setPayFeesStatus("1"); rentBill.setBillType("1"); rentBill.setStartTime(contract.getStartPayTime()); - if (contract.getEndTime().getYear() == contract.getStartTime().getYear() && contract.getEndTime().getMonth() == contract.getStartTime().getMonth()) { + if ((contract.getEndTime().getYear() == contract.getStartTime().getYear()) && (contract.getEndTime().getMonth() == contract.getStartTime().getMonth())) { // 如果同年同月 那么账单周期为合同结束时间 rentBill.setEndTime(contract.getEndTime()); } else { @@ -96,74 +97,64 @@ e.printStackTrace(); } } + + // 每天凌晨00点执行的定时任务 用于生成合同期最后一笔账单 + @Scheduled(cron = "0 0 0 * * ?") + public void dayOfEndBill() { + try { + // 查询所有已签订的合同并且已经生成第一笔账单的 + List<TContract> list = contractService.lambdaQuery().eq(TContract::getStatus, 4).isNotNull(TContract::getFirstPayTime).list(); + List<TBill> bills = new ArrayList<>(); + for (TContract contract : list) { + TBill beforeBill = billService.lambdaQuery().eq(TBill::getContractId, contract.getId()).eq(TBill::getBillType, 1).orderByDesc(TBill::getCreateTime) + .last("limit 1").one(); + if (!(beforeBill.getEndTime().toLocalDate().equals(contract.getEndTime().toLocalDate()))&&beforeBill.getEndTime().plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()).isAfter(contract.getEndTime())){ + TBill tBill = new TBill(); + tBill.setContractId(contract.getId()); + tBill.setContractNumber(contract.getContractNumber()); + tBill.setPayableFeesMoney(contract.getMonthRent()); + tBill.setPayableFeesTime(LocalDateTime.now()); + tBill.setPayFeesStatus("1"); + tBill.setBillType("1"); + tBill.setStartTime(beforeBill.getEndTime().plusMonths(1).with(TemporalAdjusters.firstDayOfMonth())); + tBill.setEndTime(contract.getEndTime()); + bills.add(tBill); + } + } + billService.saveBatch(bills); + } catch (Exception e) { + e.printStackTrace(); + } + } + // 每月15号凌晨执行的定时任务 用于生成租金账单 @Scheduled(cron = "0 0 0 15 * ?") public void monthOfBill() { try { - // 查询所有已签订的合同 - List<TContract> list = contractService.lambdaQuery().eq(TContract::getStatus, 4).isNotNull(TContract::getFirstPayTime).list(); + // 查询所有已签订的合同 且合同时间大于15号 + List<TContract> list = contractService.lambdaQuery().eq(TContract::getStatus, 4) + .isNotNull(TContract::getFirstPayTime) + .ge(TContract::getEndTime, LocalDateTime.now()) + .list(); List<TBill> bills = new ArrayList<>(); for (TContract contract : list) { - TBill tBill = new TBill(); - LocalDateTime endTime = contract.getEndTime(); - if (endTime.isBefore(LocalDateTime.now())){ - // 最后缴费日期是当天 + TBill beforeBill = billService.lambdaQuery().eq(TBill::getContractId, contract.getId()).eq(TBill::getBillType, 1).orderByDesc(TBill::getCreateTime) + .last("limit 1").one(); + if (beforeBill.getEndTime().toLocalDate().equals(contract.getEndTime().toLocalDate()))continue; + if (beforeBill.getEndTime().plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()).isBefore(contract.getEndTime())){ + TBill tBill = new TBill(); tBill.setContractId(contract.getId()); tBill.setContractNumber(contract.getContractNumber()); - tBill.setPayableFeesMoney(contract.getMonthRent()); -// tBill.setPayableFeesTime(); + tBill.setPayableFeesTime(LocalDateTime.now()); tBill.setPayFeesStatus("1"); tBill.setBillType("1"); - tBill.setStartTime(contract.getStartPayTime()); - // 如果同年同月 那么账单周期为合同结束时间 - tBill.setEndTime(contract.getEndTime()); + tBill.setStartTime(beforeBill.getEndTime().plusMonths(1).with(TemporalAdjusters.firstDayOfMonth())); + tBill.setEndTime(beforeBill.getEndTime().plusMonths(1).with(TemporalAdjusters.lastDayOfMonth())); + bills.add(tBill); + } - contract.setFirstPayTime(contract.getStartTime().plusDays(10)); - // 第一次应缴费日期 - LocalDateTime firstPayTime = contract.getStartTime().plusDays(10); - LocalDate localDate = contract.getStartTime().plusDays(10).toLocalDate(); - LocalDate now = LocalDate.now(); - switch (contract.getPayType()){ - case "1": - break; - case "2": - break; - case "3": - break; - } - if (!localDate.equals(now)) { - continue; - } - TBill rentBill = new TBill(); - rentBill.setContractId(contract.getId()); - rentBill.setContractNumber(contract.getContractNumber()); - rentBill.setPayableFeesMoney(contract.getMonthRent()); - rentBill.setPayableFeesTime(firstPayTime); - rentBill.setPayFeesStatus("1"); - rentBill.setBillType("1"); - rentBill.setStartTime(contract.getStartPayTime()); - if (contract.getEndTime().getYear() == contract.getStartTime().getYear() && contract.getEndTime().getMonth() == contract.getStartTime().getMonth()) { - // 如果同年同月 那么账单周期为合同结束时间 - rentBill.setEndTime(contract.getEndTime()); - } else { - // 否则 取当月最后一天 -// LocalDateTime endTime = contract.getStartTime().with(TemporalAdjusters.lastDayOfMonth()).withSecond(59).withHour(23).withMinute(59); - rentBill.setEndTime(endTime); - } - // 租金账单 - bills.add(rentBill); - // 押金账单 - TBill depositBill = new TBill(); - depositBill.setContractId(contract.getId()); - depositBill.setContractNumber(contract.getContractNumber()); - depositBill.setPayableFeesMoney(contract.getDeposit()); - depositBill.setPayableFeesTime(firstPayTime); - depositBill.setPayFeesStatus("1"); - depositBill.setBillType("2"); - bills.add(depositBill); } - contractService.updateBatchById(list); billService.saveBatch(bills); } catch (Exception e) { e.printStackTrace(); @@ -172,7 +163,11 @@ public static void main(String[] args) { - LocalDateTime now = LocalDateTime.now(); + LocalDateTime now = LocalDateTime.now().minusMonths(1).withDayOfMonth(31); + System.err.println(now); + LocalDateTime now2 = now.plusMonths(1); + System.err.println(now2); + LocalDateTime now1 = LocalDateTime.now(); long days = ChronoUnit.DAYS.between(now, now1); long days2 = ChronoUnit.DAYS.between(now.plusDays(1), now1); -- Gitblit v1.7.1