package com.ruoyi.web.controller.task; 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; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Random; import java.util.stream.Collectors; /** * @author zhibing.pu * @date 2023/7/11 8:39 */ @Component public class TaskUtil { @Autowired private TContractService contractService; @Autowired private TBillService billService; // 用于更新违约金账单 @Scheduled(cron = "0 0 0 * * ?") public void dayOfProportionBill() { try { // 查询所有未缴费账单 List list = billService.lambdaQuery().eq(TBill::getPayFeesStatus, 1).list(); for (TBill tBill : list) { if (tBill.getPayableFeesTime().isAfter(LocalDate.now())){ tBill.setPayFeesStatus("4"); } 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)); } billService.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); } }