From 835e495a985e7ab0f9f3a1a3882255280f1b8f04 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期四, 06 三月 2025 20:52:34 +0800 Subject: [PATCH] Merge branch 'master' of https://gitee.com/xiaochen991015/xizang --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java | 175 +++++++++++++--------------------------------------------- 1 files changed, 40 insertions(+), 135 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..1df47bd 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 @@ -3,7 +3,9 @@ import com.ruoyi.system.model.TBill; import com.ruoyi.system.model.TContract; +import com.ruoyi.system.model.TContractRentType; import com.ruoyi.system.service.TBillService; +import com.ruoyi.system.service.TContractRentTypeService; import com.ruoyi.system.service.TContractService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; @@ -32,153 +34,56 @@ private TContractService contractService; @Autowired private TBillService billService; - - - - - // 每天凌晨00点执行的定时任务 用于合同生成第一笔账单 + // 用于更新违约金账单 @Scheduled(cron = "0 0 0 * * ?") - public void dayOfFirstBill() { + public void dayOfProportionBill() { try { - // 查询所有已签订的合同并且未生成第一笔账单的 - List<TContract> list = contractService.lambdaQuery().eq(TContract::getStatus, 4).isNull(TContract::getFirstPayTime).list(); - List<TBill> bills = new ArrayList<>(); - for (TContract contract : list) { - contract.setFirstPayTime(contract.getStartTime().plusDays(10)); - // 第一次应缴费日期 - LocalDateTime firstPayTime = contract.getStartTime().plusDays(10); - LocalDate localDate = contract.getStartTime().plusDays(10).toLocalDate(); - LocalDate now = LocalDate.now(); - // 如果应缴费日期和当前时间不相同 跳过 - if (!localDate.equals(now)) { - continue; + // 查询所有未缴费账单 + List<TBill> list = billService.lambdaQuery().eq(TBill::getPayFeesStatus, 1).list(); + for (TBill tBill : list) { + if (tBill.getPayableFeesTime().isAfter(LocalDate.now())){ + tBill.setPayFeesStatus("4"); } - TBill rentBill = new TBill(); - rentBill.setContractId(contract.getId()); - rentBill.setContractNumber(contract.getContractNumber()); - LocalDateTime startPayTime = contract.getStartPayTime(); - LocalDateTime endTime1 = contract.getEndTime(); - // 计算两个时间相差多少天 - long days = ChronoUnit.DAYS.between(startPayTime, endTime1)+1L; - // 如果时间小于30天 需要计算每日租金 - if (days<30){ - rentBill.setPayableFeesMoney(contract.getMonthRent().divide(new BigDecimal("30"),2,BigDecimal.ROUND_DOWN).multiply(new BigDecimal(days))); - }else{ - rentBill.setPayableFeesMoney(contract.getMonthRent()); + TContract contract = contractService.getById(tBill.getContractId()); + LocalDate payableFeesTime = tBill.getPayableFeesTime(); + LocalDateTime now = LocalDateTime.now(); + // 计算两个时间相差多少个小时 + long hours = ChronoUnit.HOURS.between(payableFeesTime, now); + long l = hours / 24; + if (l>3){ + // 违约金比例 + BigDecimal proportion = contract.getProportion(); + // 按每天 待缴费金额 * XX% 增加违约金费用 + if (tBill.getOutstandingMoney().compareTo(new BigDecimal("0"))==0){ + tBill.setPayFeesStatus("3"); + billService.updateById(tBill); + continue; + } + BigDecimal money = tBill.getOutstandingMoney().multiply(proportion).setScale(2, BigDecimal.ROUND_DOWN); + tBill.setOverDays((int) l); + tBill.setPayableFeesPenalty((tBill.getPayableFeesPenalty()!=null?tBill.getPayableFeesPenalty():BigDecimal.ZERO).add(money)); } - 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); + billService.updateById(tBill); } - contractService.updateBatchById(list); - 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(); - List<TBill> bills = new ArrayList<>(); - for (TContract contract : list) { - TBill tBill = new TBill(); - LocalDateTime endTime = contract.getEndTime(); - if (endTime.isBefore(LocalDateTime.now())){ - // 最后缴费日期是当天 - tBill.setContractId(contract.getId()); - tBill.setContractNumber(contract.getContractNumber()); - - tBill.setPayableFeesMoney(contract.getMonthRent()); -// tBill.setPayableFeesTime(); - tBill.setPayFeesStatus("1"); - tBill.setBillType("1"); - tBill.setStartTime(contract.getStartPayTime()); - // 如果同年同月 那么账单周期为合同结束时间 - tBill.setEndTime(contract.getEndTime()); - } - 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(); - } - } - public static void main(String[] args) { - LocalDateTime now = LocalDateTime.now(); - LocalDateTime now1 = LocalDateTime.now(); - long days = ChronoUnit.DAYS.between(now, now1); - long days2 = ChronoUnit.DAYS.between(now.plusDays(1), now1); - System.err.println(days); - System.err.println(days2); +// 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); +// +// System.err.println(days); +// System.err.println(days2); // LocalDateTime endTime = now.with(TemporalAdjusters.lastDayOfMonth()).withSecond(59).withHour(23).withMinute(59); // // System.err.println(endTime); -- Gitblit v1.7.1