账单bug修复,以及加入转单号功能

This commit is contained in:
caojia
2026-09-21 17:59:09 +08:00
parent 81bc69c268
commit 6e07d9a98b
18 changed files with 366 additions and 53 deletions
@@ -0,0 +1,49 @@
-- 应收账单转单号快照迁移
-- 适用于已经执行过 ar/ar_bill.sql 的存量数据库。
-- 本脚本可重复执行,不删除账单明细,不覆盖已经存在的转单号快照。
SET NAMES utf8mb4;
SET @db_name := DATABASE();
-- 1. 账单明细保存生成账单时的转单号快照。
SET @has_transfer_no := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
AND TABLE_NAME = 'ar_bill_detail'
AND COLUMN_NAME = 'transfer_no'
);
SET @sql := IF(@has_transfer_no = 0,
'ALTER TABLE ar_bill_detail ADD COLUMN transfer_no VARCHAR(64) DEFAULT NULL COMMENT ''转单号快照'' AFTER tracking_no',
'SELECT 1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 2. 详情按账单查询转单号时使用组合索引。
SET @has_transfer_index := (
SELECT COUNT(*)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @db_name
AND TABLE_NAME = 'ar_bill_detail'
AND INDEX_NAME = 'idx_ar_bill_detail_bill_transfer_no'
);
SET @sql := IF(@has_transfer_index = 0,
'ALTER TABLE ar_bill_detail ADD KEY idx_ar_bill_detail_bill_transfer_no (ar_bill_id, transfer_no)',
'SELECT 1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 3. 历史数据尽力回填,仅填充空值,不覆盖账单生成时已经保存的快照。
-- 如果来源订单后续修改过转单号,回填值仅代表当前来源表值,不能视为严格历史值。
UPDATE ar_bill_detail d
JOIN prc_order_bill p ON p.bill_id = d.prc_order_bill_id
SET d.transfer_no = p.transfer_no
WHERE d.transfer_no IS NULL
AND p.transfer_no IS NOT NULL;
-- 4. 执行后核验字段和回填数量。
SELECT
COUNT(*) AS detail_count,
SUM(CASE WHEN transfer_no IS NOT NULL AND TRIM(transfer_no) <> '' THEN 1 ELSE 0 END) AS transfer_no_count
FROM ar_bill_detail;