wujianwei
2 天以前 d14994e10797ce5bc0d29668d358f7c5274dcc5b
quartz/src/main/java/com/ruoyi/quartz/task/ReceivableBillAgingTask.java
@@ -27,71 +27,15 @@
    /**
     * 更新应收账单账龄分析数据
     * 每天凌晨执行,更新所有应收账单的账龄分段数据
     * 每天凌晨执行,使用数据库层面批量更新,性能最优
     */
    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++;
                }
            }
            // 使用数据库层面批量更新,避免查询数据到应用层
            int updatedCount = receivableBillManagementService.batchUpdateAgingAnalysisData();
            
            logger.info("应收账单账龄分析数据更新任务完成,共更新 {} 条记录", updatedCount);