package com.ruoyi.quartz.task;
|
|
import com.ruoyi.cwgl.domain.ReceivableBillManagement;
|
import com.ruoyi.cwgl.service.IReceivableBillManagementService;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import java.math.BigDecimal;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* 应收账单账龄分析定时任务
|
* 每天更新应收账单的账龄分析数据
|
*
|
* @author ruoyi
|
*/
|
@Component("receivableBillAgingTask")
|
public class ReceivableBillAgingTask
|
{
|
private static Logger logger = LoggerFactory.getLogger(ReceivableBillAgingTask.class);
|
|
@Autowired
|
private IReceivableBillManagementService receivableBillManagementService;
|
|
/**
|
* 更新应收账单账龄分析数据
|
* 每天凌晨执行,更新所有应收账单的账龄分段数据
|
*/
|
public void updateAgingAnalysisData()
|
{
|
try {
|
logger.info("开始执行应收账单账龄分析数据更新任务");
|
|
// 查询所有需要更新账龄数据的应收账单
|
ReceivableBillManagement query = new ReceivableBillManagement();
|
List<ReceivableBillManagement> billList = receivableBillManagementService.selectReceivableBillManagementList(query);
|
|
int updatedCount = 0;
|
Date currentDate = new Date();
|
|
for (ReceivableBillManagement bill : billList) {
|
if (bill.getBillDueDate() != null && bill.getPendingAmount() != null &&
|
bill.getPendingAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
// 计算逾期天数
|
long diffInMillies = Math.abs(currentDate.getTime() - bill.getBillDueDate().getTime());
|
long diffInDays = diffInMillies / (1000 * 60 * 60 * 24);
|
|
// 重置所有账龄字段
|
bill.setDueIn30Days(BigDecimal.ZERO);
|
bill.setOverdueAmount(BigDecimal.ZERO);
|
bill.setOverdue1To30Days(BigDecimal.ZERO);
|
bill.setOverdue31To60Days(BigDecimal.ZERO);
|
bill.setOverdue61To90Days(BigDecimal.ZERO);
|
bill.setOverdue91To180Days(BigDecimal.ZERO);
|
bill.setOverdue181To365Days(BigDecimal.ZERO);
|
bill.setOverdueOver1Year(BigDecimal.ZERO);
|
bill.setOverdueDays(0);
|
|
// 计算30天内到期金额
|
if (bill.getBillDueDate().after(currentDate)) {
|
long daysUntilDue = diffInDays;
|
if (daysUntilDue <= 30) {
|
bill.setDueIn30Days(bill.getPendingAmount());
|
}
|
} else {
|
// 账单已逾期
|
bill.setOverdueAmount(bill.getPendingAmount());
|
bill.setOverdueDays((int) diffInDays);
|
|
// 根据逾期天数分配到不同的账龄分段
|
if (diffInDays <= 30) {
|
bill.setOverdue1To30Days(bill.getPendingAmount());
|
} else if (diffInDays <= 60) {
|
bill.setOverdue31To60Days(bill.getPendingAmount());
|
} else if (diffInDays <= 90) {
|
bill.setOverdue61To90Days(bill.getPendingAmount());
|
} else if (diffInDays <= 180) {
|
bill.setOverdue91To180Days(bill.getPendingAmount());
|
} else if (diffInDays <= 365) {
|
bill.setOverdue181To365Days(bill.getPendingAmount());
|
} else {
|
bill.setOverdueOver1Year(bill.getPendingAmount());
|
}
|
}
|
|
// 更新账单记录
|
receivableBillManagementService.updateReceivableBillManagement(bill);
|
updatedCount++;
|
}
|
}
|
|
logger.info("应收账单账龄分析数据更新任务完成,共更新 {} 条记录", updatedCount);
|
|
} catch (Exception e) {
|
logger.error("应收账单账龄分析数据更新任务执行失败", e);
|
}
|
}
|
}
|