wujianwei
2026-03-20 6df8411e720cfef1b474f178825bdee32ef71a59
service/src/main/resources/mapper/cwgl/ReceivableBillManagementMapper.xml
@@ -372,4 +372,75 @@
        ORDER BY customer_name, bill_due_date
    </select>
    <!-- 批量更新应收账单账龄分析数据 -->
    <update id="batchUpdateAgingAnalysisData">
        UPDATE receivable_bill_management
        SET
            -- 只更新当前时段的数据,其他时段保留原值
            due_in_30_days = CASE
                WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
                     AND bill_due_date > CURDATE()
                     AND DATEDIFF(bill_due_date, CURDATE()) <= 30
                THEN pending_amount
                ELSE due_in_30_days  -- 保留历史数据
            END,
            overdue_amount = CASE
                WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
                     AND bill_due_date &lt;= CURDATE()
                THEN pending_amount
                ELSE overdue_amount  -- 保留历史数据
            END,
            -- 只更新当前逾期时段的金额,其他时段保留历史数据
            overdue_1_to_30_days = CASE
                WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
                     AND bill_due_date &lt;= CURDATE()
                     AND DATEDIFF(CURDATE(), bill_due_date) BETWEEN 1 AND 30
                THEN pending_amount
                ELSE overdue_1_to_30_days  -- 保留历史数据
            END,
            overdue_31_to_60_days = CASE
                WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
                     AND bill_due_date &lt;= CURDATE()
                     AND DATEDIFF(CURDATE(), bill_due_date) BETWEEN 31 AND 60
                THEN pending_amount
                ELSE overdue_31_to_60_days  -- 保留历史数据
            END,
            overdue_61_to_90_days = CASE
                WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
                     AND bill_due_date &lt;= CURDATE()
                     AND DATEDIFF(CURDATE(), bill_due_date) BETWEEN 61 AND 90
                THEN pending_amount
                ELSE overdue_61_to_90_days  -- 保留历史数据
            END,
            overdue_91_to_180_days = CASE
                WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
                     AND bill_due_date &lt;= CURDATE()
                     AND DATEDIFF(CURDATE(), bill_due_date) BETWEEN 91 AND 180
                THEN pending_amount
                ELSE overdue_91_to_180_days  -- 保留历史数据
            END,
            overdue_181_to_365_days = CASE
                WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
                     AND bill_due_date &lt;= CURDATE()
                     AND DATEDIFF(CURDATE(), bill_due_date) BETWEEN 181 AND 365
                THEN pending_amount
                ELSE overdue_181_to_365_days  -- 保留历史数据
            END,
            overdue_over_1_year = CASE
                WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
                     AND bill_due_date &lt;= CURDATE()
                     AND DATEDIFF(CURDATE(), bill_due_date) &gt; 365
                THEN pending_amount
                ELSE overdue_over_1_year  -- 保留历史数据
            END,
            overdue_days = CASE
                WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
                     AND bill_due_date &lt;= CURDATE()
                THEN DATEDIFF(CURDATE(), bill_due_date)
                ELSE overdue_days  -- 保留历史数据
            END,
            update_time = NOW()
        WHERE pending_amount > 0
    </update>
</mapper>