package com.ruoyi.system.task.utils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.system.mapper.TBillMapper; import com.ruoyi.system.model.TBill; import com.ruoyi.system.model.TContract; import com.ruoyi.system.service.TContractService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.temporal.ChronoUnit; import java.util.List; /** * @author zhibing.pu * @date 2023/7/11 8:39 */ @Component public class TaskUtil { @Autowired private TContractService contractService; @Autowired private TBillMapper billMapper; // 用于更新违约金账单 // 每分钟执行一次的定时任务 @Scheduled(cron = "0 0 0 * * ?") public void dayOfProportionBill() { try { // 查询所有未缴费账单 List list = billMapper.selectList(new LambdaQueryWrapper().eq(TBill::getPayFeesStatus, 1) .le(TBill::getPayableFeesTime,LocalDate.now())); for (TBill tBill : list) { tBill.setPayFeesStatus("4"); TContract contract = contractService.getById(tBill.getContractId()); LocalDate payableFeesTime = tBill.getPayableFeesTime(); // 将LocalDate转化为LocalDateTime LocalDateTime payableFeesTime1 = LocalDateTime.of(payableFeesTime, LocalTime.of(0, 0, 0)); LocalDateTime now = LocalDateTime.now(); // 计算两个时间相差多少个小时 long hours = ChronoUnit.HOURS.between(payableFeesTime1, now); long l = hours / 24; if (l>=3){ // 违约金比例 BigDecimal proportion = contract.getProportion(); // 按每天 待缴费金额 * XX% 增加违约金费用 if (tBill.getOutstandingMoney().compareTo(new BigDecimal("0"))==0){ tBill.setPayFeesStatus("3"); billMapper.updateById(tBill); continue; } BigDecimal money = tBill.getOutstandingMoney().multiply(new BigDecimal(100).add(proportion)).divide(new BigDecimal(100),2, BigDecimal.ROUND_DOWN); tBill.setOverDays((int) l); BigDecimal bigDecimal = tBill.getOutstandingMoney().multiply(proportion).setScale(2, BigDecimal.ROUND_DOWN); tBill.setPayableFeesPenalty(tBill.getPayableFeesPenalty()!=null?tBill.getPayableFeesPenalty():new BigDecimal("0").add(bigDecimal)); tBill.setOutstandingMoney(money); billMapper.updateById(tBill); } } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { // 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); } }