无关风月
2025-03-07 68ca7bdcebed980fcab33d9bff3d720f30371eb6
账单
2个文件已修改
1个文件已添加
321 ■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java 188 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TBill.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/task/utils/TaskUtil.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java
@@ -1,93 +1,101 @@
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<TBill> 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);
//package com.ruoyi.web.controller.task;
//
//        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);
//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.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;
//
//        System.err.println(endTime);
    }
}
//import javax.annotation.Resource;
//import java.math.BigDecimal;
//import java.time.LocalDate;
//import java.time.LocalDateTime;
//import java.time.LocalTime;
//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 TBillMapper billMapper;
//    // 用于更新违约金账单
//    // 每分钟执行一次的定时任务
//
////    @Scheduled(cron = "0 0 0 * * ?")
//    @Scheduled(cron = "0 * * * * ?")
//    public void dayOfProportionBill() {
//        try {
//            // 查询所有未缴费账单
//            List<TBill> list = billMapper.selectList(new LambdaQueryWrapper<TBill>().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);
//                    tBill.setPayableFeesPenalty((tBill.getPayableFeesPenalty()!=null?tBill.getPayableFeesPenalty():BigDecimal.ZERO).add(money));
//                    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);
//
//    }
//
//}
ruoyi-system/src/main/java/com/ruoyi/system/model/TBill.java
@@ -1,18 +1,16 @@
package com.ruoyi.system.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ruoyi.common.core.domain.BaseModel;
import com.ruoyi.common.core.domain.BasePage;
import io.swagger.annotations.ApiModel;
@@ -34,10 +32,43 @@
@EqualsAndHashCode(callSuper = false)
@TableName("t_bill")
@ApiModel(value="TBill对象", description="租金账单")
public class TBill extends BaseModel {
public class TBill implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 新增执行
     */
    @ApiModelProperty(value = "记录创建人,前端忽略")
    @JsonIgnore
    @TableField(value = "create_by", fill = FieldFill.INSERT)
    private String createBy;
    /**
     * 新增和更新执行
     */
    @ApiModelProperty(value = "记录修改人,前端忽略")
    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
    private String updateBy;
    /**
     * 删除  未删除
     */
    @JsonIgnore
    @TableField("`disabled`")
    @TableLogic
    private Boolean disabled;
    @ApiModelProperty(value = "记录创建时间,前端忽略")
    @TableField("create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;
    /**
     * 最后修改时间
     */
    @ApiModelProperty(value = "记录修改时间,前端忽略")
    @TableField("update_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime updateTime;
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private String id;
ruoyi-system/src/main/java/com/ruoyi/system/task/utils/TaskUtil.java
New file
@@ -0,0 +1,92 @@
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 * * ?")
    @Scheduled(cron = "0 * * * * ?")
    public void dayOfProportionBill() {
        try {
            // 查询所有未缴费账单
            List<TBill> list = billMapper.selectList(new LambdaQueryWrapper<TBill>().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);
    }
}