应收账单调整优化

This commit is contained in:
caojia
2026-09-16 16:27:29 +08:00
parent d660bfc69f
commit b1ceae4776
10 changed files with 198 additions and 14 deletions
@@ -0,0 +1,95 @@
-- 应收账单来源ID字段命名迁移
--
-- 将历史字段名迁移为与当前来源表一致的名称:
-- ar_bill_detail.prc_bill_id -> prc_order_bill_id
-- ar_bill_detail_fee.prc_fee_id -> prc_income_bill_fee_id
-- 脚本可重复执行,已完成迁移的字段和索引会自动跳过。
SET NAMES utf8mb4;
SET @db_name := DATABASE();
-- 1. 应收账单订单明细:来源计费订单ID。
SET @has_old_detail_column := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
AND TABLE_NAME = 'ar_bill_detail'
AND COLUMN_NAME = 'prc_bill_id'
);
SET @has_new_detail_column := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
AND TABLE_NAME = 'ar_bill_detail'
AND COLUMN_NAME = 'prc_order_bill_id'
);
SET @sql := IF(@has_old_detail_column > 0 AND @has_new_detail_column = 0,
'ALTER TABLE ar_bill_detail CHANGE COLUMN prc_bill_id prc_order_bill_id VARCHAR(36) NOT NULL COMMENT ''来源计费订单ID,对应 prc_order_bill.bill_id''',
'SELECT 1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 2. 应收账单费用明细:来源收入费用ID。
SET @has_old_fee_column := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
AND TABLE_NAME = 'ar_bill_detail_fee'
AND COLUMN_NAME = 'prc_fee_id'
);
SET @has_new_fee_column := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db_name
AND TABLE_NAME = 'ar_bill_detail_fee'
AND COLUMN_NAME = 'prc_income_bill_fee_id'
);
SET @sql := IF(@has_old_fee_column > 0 AND @has_new_fee_column = 0,
'ALTER TABLE ar_bill_detail_fee CHANGE COLUMN prc_fee_id prc_income_bill_fee_id VARCHAR(36) NOT NULL COMMENT ''来源收入费用ID,对应 prc_income_bill_fee.fee_id''',
'SELECT 1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 3. 费用明细索引同步改名,避免数据库中继续保留旧字段命名。
SET @has_old_fee_unique := (
SELECT COUNT(*)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @db_name
AND TABLE_NAME = 'ar_bill_detail_fee'
AND INDEX_NAME = 'uk_ar_detail_prc_fee'
);
SET @has_new_fee_unique := (
SELECT COUNT(*)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @db_name
AND TABLE_NAME = 'ar_bill_detail_fee'
AND INDEX_NAME = 'uk_ar_detail_prc_income_fee'
);
SET @sql := IF(@has_old_fee_unique > 0 AND @has_new_fee_unique = 0,
'ALTER TABLE ar_bill_detail_fee RENAME INDEX uk_ar_detail_prc_fee TO uk_ar_detail_prc_income_fee',
'SELECT 1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @has_old_fee_index := (
SELECT COUNT(*)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @db_name
AND TABLE_NAME = 'ar_bill_detail_fee'
AND INDEX_NAME = 'idx_ar_detail_prc_fee'
);
SET @has_new_fee_index := (
SELECT COUNT(*)
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @db_name
AND TABLE_NAME = 'ar_bill_detail_fee'
AND INDEX_NAME = 'idx_ar_detail_prc_income_fee'
);
SET @sql := IF(@has_old_fee_index > 0 AND @has_new_fee_index = 0,
'ALTER TABLE ar_bill_detail_fee RENAME INDEX idx_ar_detail_prc_fee TO idx_ar_detail_prc_income_fee',
'SELECT 1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;