@@ -0,0 +1,409 @@
-- 夜间停机:计费/应收/应付 UUID(varchar36) -> bigint AUTO_INCREMENT
-- 执行前:1)停 BMS 应用与异步任务 2)全库或至少关键表备份 3)建议先在从库/备份库干跑
-- 范围 PK: prc_order_bill.bill_id / prc_income_bill.income_bill_id / prc_income_bill_fee.fee_id / prc_pay_bill.pay_bill_id / prc_pay_bill_fee.fee_id
-- 范围 FK/引用:prc_order_bill_ext、income/pay 上 bill_id、prc_billing_task、ar_bill_detail*、ar_bill_generate_task、pay_bill_line/log/diff
-- 不动:ar_bill 等已 bigint; prc_quote* 报价 UUID;任务 taskId
-- 回滚:见文末;更稳妥为整库备份恢复 + 旧后端包
--
-- FK盘点: fk_income_bill_order_bill, fk_income_bill_fee_order, fk_order_bill_ext_bill, fk_pay_bill_order_bill, fk_pay_bill_fee_order
SET NAMES utf8mb4 ;
SET FOREIGN_KEY_CHECKS = 0 ;
-- ========== 0. 前置检查 ==========
SELECT ' prc_order_bill ' AS tbl , COUNT ( * ) AS cnt FROM prc_order_bill
UNION ALL SELECT ' prc_order_bill_ext ' , COUNT ( * ) FROM prc_order_bill_ext
UNION ALL SELECT ' prc_income_bill ' , COUNT ( * ) FROM prc_income_bill
UNION ALL SELECT ' prc_income_bill_fee ' , COUNT ( * ) FROM prc_income_bill_fee
UNION ALL SELECT ' prc_pay_bill ' , COUNT ( * ) FROM prc_pay_bill
UNION ALL SELECT ' prc_pay_bill_fee ' , COUNT ( * ) FROM prc_pay_bill_fee
UNION ALL SELECT ' ar_bill_detail ' , COUNT ( * ) FROM ar_bill_detail
UNION ALL SELECT ' ar_bill_detail_fee ' , COUNT ( * ) FROM ar_bill_detail_fee ;
SELECT CONSTRAINT_NAME , TABLE_NAME , COLUMN_NAME , REFERENCED_TABLE_NAME , REFERENCED_COLUMN_NAME
FROM information_schema . KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = DATABASE ( )
AND REFERENCED_TABLE_NAME IN ( ' prc_order_bill ' , ' prc_income_bill ' , ' prc_income_bill_fee ' , ' prc_pay_bill ' , ' prc_pay_bill_fee ' )
ORDER BY TABLE_NAME , CONSTRAINT_NAME ;
-- ========== 1. 备份关键表 ==========
DROP TABLE IF EXISTS ` prc_order_bill_bak_uuid ` ;
CREATE TABLE ` prc_order_bill_bak_uuid ` AS SELECT * FROM ` prc_order_bill ` ;
DROP TABLE IF EXISTS ` prc_order_bill_ext_bak_uuid ` ;
CREATE TABLE ` prc_order_bill_ext_bak_uuid ` AS SELECT * FROM ` prc_order_bill_ext ` ;
DROP TABLE IF EXISTS ` prc_income_bill_bak_uuid ` ;
CREATE TABLE ` prc_income_bill_bak_uuid ` AS SELECT * FROM ` prc_income_bill ` ;
DROP TABLE IF EXISTS ` prc_income_bill_fee_bak_uuid ` ;
CREATE TABLE ` prc_income_bill_fee_bak_uuid ` AS SELECT * FROM ` prc_income_bill_fee ` ;
DROP TABLE IF EXISTS ` prc_pay_bill_bak_uuid ` ;
CREATE TABLE ` prc_pay_bill_bak_uuid ` AS SELECT * FROM ` prc_pay_bill ` ;
DROP TABLE IF EXISTS ` prc_pay_bill_fee_bak_uuid ` ;
CREATE TABLE ` prc_pay_bill_fee_bak_uuid ` AS SELECT * FROM ` prc_pay_bill_fee ` ;
-- ========== 2. 映射表 ==========
DROP TABLE IF EXISTS ` mig_map_order_bill ` ;
CREATE TABLE ` mig_map_order_bill ` (
` old_id ` varchar ( 36 ) NOT NULL ,
` new_id ` bigint NOT NULL AUTO_INCREMENT ,
PRIMARY KEY ( ` old_id ` ) ,
UNIQUE KEY ` uk_new_id ` ( ` new_id ` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
INSERT INTO ` mig_map_order_bill ` ( ` old_id ` )
SELECT ` bill_id ` FROM ` prc_order_bill ` ORDER BY IFNULL ( ` create_time ` , ' 1970-01-01 ' ) , ` bill_id ` ;
DROP TABLE IF EXISTS ` mig_map_income_bill ` ;
CREATE TABLE ` mig_map_income_bill ` (
` old_id ` varchar ( 36 ) NOT NULL ,
` new_id ` bigint NOT NULL AUTO_INCREMENT ,
PRIMARY KEY ( ` old_id ` ) ,
UNIQUE KEY ` uk_new_id ` ( ` new_id ` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
INSERT INTO ` mig_map_income_bill ` ( ` old_id ` )
SELECT ` income_bill_id ` FROM ` prc_income_bill ` ORDER BY IFNULL ( ` create_time ` , ' 1970-01-01 ' ) , ` income_bill_id ` ;
DROP TABLE IF EXISTS ` mig_map_income_fee ` ;
CREATE TABLE ` mig_map_income_fee ` (
` old_id ` varchar ( 36 ) NOT NULL ,
` new_id ` bigint NOT NULL AUTO_INCREMENT ,
PRIMARY KEY ( ` old_id ` ) ,
UNIQUE KEY ` uk_new_id ` ( ` new_id ` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
INSERT INTO ` mig_map_income_fee ` ( ` old_id ` )
SELECT ` fee_id ` FROM ` prc_income_bill_fee ` ORDER BY IFNULL ( ` create_time ` , ' 1970-01-01 ' ) , ` fee_id ` ;
DROP TABLE IF EXISTS ` mig_map_pay_bill ` ;
CREATE TABLE ` mig_map_pay_bill ` (
` old_id ` varchar ( 36 ) NOT NULL ,
` new_id ` bigint NOT NULL AUTO_INCREMENT ,
PRIMARY KEY ( ` old_id ` ) ,
UNIQUE KEY ` uk_new_id ` ( ` new_id ` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
INSERT INTO ` mig_map_pay_bill ` ( ` old_id ` )
SELECT ` pay_bill_id ` FROM ` prc_pay_bill ` ORDER BY IFNULL ( ` create_time ` , ' 1970-01-01 ' ) , ` pay_bill_id ` ;
DROP TABLE IF EXISTS ` mig_map_pay_fee ` ;
CREATE TABLE ` mig_map_pay_fee ` (
` old_id ` varchar ( 36 ) NOT NULL ,
` new_id ` bigint NOT NULL AUTO_INCREMENT ,
PRIMARY KEY ( ` old_id ` ) ,
UNIQUE KEY ` uk_new_id ` ( ` new_id ` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 ;
INSERT INTO ` mig_map_pay_fee ` ( ` old_id ` )
SELECT ` fee_id ` FROM ` prc_pay_bill_fee ` ORDER BY IFNULL ( ` create_time ` , ' 1970-01-01 ' ) , ` fee_id ` ;
-- ========== 3. 重建核心表(动态列) ==========
DROP TABLE IF EXISTS ` prc_order_bill_new ` ;
CREATE TABLE ` prc_order_bill_new ` LIKE ` prc_order_bill ` ;
ALTER TABLE ` prc_order_bill_new ` MODIFY COLUMN ` bill_id ` bigint NOT NULL AUTO_INCREMENT ;
SELECT GROUP_CONCAT ( CONCAT ( ' ` ' , COLUMN_NAME , ' ` ' ) ORDER BY ORDINAL_POSITION SEPARATOR ' , ' ) INTO @ cols_rest
FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_order_bill ' AND COLUMN_NAME NOT IN ( ' bill_id ' ) ;
SELECT GROUP_CONCAT ( CONCAT ( ' t.` ' , COLUMN_NAME , ' ` ' ) ORDER BY ORDINAL_POSITION SEPARATOR ' , ' ) INTO @ sels_rest
FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_order_bill ' AND COLUMN_NAME NOT IN ( ' bill_id ' ) ;
SET @ sql : = CONCAT (
' INSERT INTO `prc_order_bill_new` (`bill_id` ' ,
IF ( @ cols_rest IS NULL OR @ cols_rest = ' ' , ' ' , CONCAT ( ' , ' , @ cols_rest ) ) , ' ) ' ,
' SELECT mo.new_id ' ,
IF ( @ sels_rest IS NULL OR @ sels_rest = ' ' , ' ' , CONCAT ( ' , ' , @ sels_rest ) ) , ' ' ,
' FROM `prc_order_bill` t ' ,
' JOIN `mig_map_order_bill` mo ON mo.old_id = t.`bill_id` '
) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
DROP TABLE IF EXISTS ` prc_income_bill_new ` ;
CREATE TABLE ` prc_income_bill_new ` LIKE ` prc_income_bill ` ;
ALTER TABLE ` prc_income_bill_new ` MODIFY COLUMN ` income_bill_id ` bigint NOT NULL AUTO_INCREMENT ;
ALTER TABLE ` prc_income_bill_new ` MODIFY COLUMN ` bill_id ` bigint NOT NULL ;
SELECT GROUP_CONCAT ( CONCAT ( ' ` ' , COLUMN_NAME , ' ` ' ) ORDER BY ORDINAL_POSITION SEPARATOR ' , ' ) INTO @ cols_rest
FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_income_bill ' AND COLUMN_NAME NOT IN ( ' income_bill_id ' , ' bill_id ' ) ;
SELECT GROUP_CONCAT ( CONCAT ( ' t.` ' , COLUMN_NAME , ' ` ' ) ORDER BY ORDINAL_POSITION SEPARATOR ' , ' ) INTO @ sels_rest
FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_income_bill ' AND COLUMN_NAME NOT IN ( ' income_bill_id ' , ' bill_id ' ) ;
SET @ sql : = CONCAT (
' INSERT INTO `prc_income_bill_new` (`income_bill_id`, `bill_id` ' ,
IF ( @ cols_rest IS NULL OR @ cols_rest = ' ' , ' ' , CONCAT ( ' , ' , @ cols_rest ) ) , ' ) ' ,
' SELECT mi.new_id, mo.new_id ' ,
IF ( @ sels_rest IS NULL OR @ sels_rest = ' ' , ' ' , CONCAT ( ' , ' , @ sels_rest ) ) , ' ' ,
' FROM `prc_income_bill` t ' ,
' JOIN `mig_map_income_bill` mi ON mi.old_id = t.`income_bill_id` '
, ' JOIN `mig_map_order_bill` mo ON mo.old_id = t.`bill_id` '
) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
DROP TABLE IF EXISTS ` prc_income_bill_fee_new ` ;
CREATE TABLE ` prc_income_bill_fee_new ` LIKE ` prc_income_bill_fee ` ;
ALTER TABLE ` prc_income_bill_fee_new ` MODIFY COLUMN ` fee_id ` bigint NOT NULL AUTO_INCREMENT ;
ALTER TABLE ` prc_income_bill_fee_new ` MODIFY COLUMN ` bill_id ` bigint NOT NULL ;
ALTER TABLE ` prc_income_bill_fee_new ` MODIFY COLUMN ` income_bill_id ` bigint NULL ;
SELECT GROUP_CONCAT ( CONCAT ( ' ` ' , COLUMN_NAME , ' ` ' ) ORDER BY ORDINAL_POSITION SEPARATOR ' , ' ) INTO @ cols_rest
FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_income_bill_fee ' AND COLUMN_NAME NOT IN ( ' fee_id ' , ' bill_id ' , ' income_bill_id ' ) ;
SELECT GROUP_CONCAT ( CONCAT ( ' t.` ' , COLUMN_NAME , ' ` ' ) ORDER BY ORDINAL_POSITION SEPARATOR ' , ' ) INTO @ sels_rest
FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_income_bill_fee ' AND COLUMN_NAME NOT IN ( ' fee_id ' , ' bill_id ' , ' income_bill_id ' ) ;
SET @ sql : = CONCAT (
' INSERT INTO `prc_income_bill_fee_new` (`fee_id`, `bill_id`, `income_bill_id` ' ,
IF ( @ cols_rest IS NULL OR @ cols_rest = ' ' , ' ' , CONCAT ( ' , ' , @ cols_rest ) ) , ' ) ' ,
' SELECT mf.new_id, mo.new_id, mi.new_id ' ,
IF ( @ sels_rest IS NULL OR @ sels_rest = ' ' , ' ' , CONCAT ( ' , ' , @ sels_rest ) ) , ' ' ,
' FROM `prc_income_bill_fee` t ' ,
' JOIN `mig_map_income_fee` mf ON mf.old_id = t.`fee_id` '
, ' JOIN `mig_map_order_bill` mo ON mo.old_id = t.`bill_id` '
, ' LEFT JOIN `mig_map_income_bill` mi ON mi.old_id = t.`income_bill_id` '
) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
DROP TABLE IF EXISTS ` prc_pay_bill_new ` ;
CREATE TABLE ` prc_pay_bill_new ` LIKE ` prc_pay_bill ` ;
ALTER TABLE ` prc_pay_bill_new ` MODIFY COLUMN ` pay_bill_id ` bigint NOT NULL AUTO_INCREMENT ;
ALTER TABLE ` prc_pay_bill_new ` MODIFY COLUMN ` bill_id ` bigint NOT NULL ;
SELECT GROUP_CONCAT ( CONCAT ( ' ` ' , COLUMN_NAME , ' ` ' ) ORDER BY ORDINAL_POSITION SEPARATOR ' , ' ) INTO @ cols_rest
FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_pay_bill ' AND COLUMN_NAME NOT IN ( ' pay_bill_id ' , ' bill_id ' ) ;
SELECT GROUP_CONCAT ( CONCAT ( ' t.` ' , COLUMN_NAME , ' ` ' ) ORDER BY ORDINAL_POSITION SEPARATOR ' , ' ) INTO @ sels_rest
FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_pay_bill ' AND COLUMN_NAME NOT IN ( ' pay_bill_id ' , ' bill_id ' ) ;
SET @ sql : = CONCAT (
' INSERT INTO `prc_pay_bill_new` (`pay_bill_id`, `bill_id` ' ,
IF ( @ cols_rest IS NULL OR @ cols_rest = ' ' , ' ' , CONCAT ( ' , ' , @ cols_rest ) ) , ' ) ' ,
' SELECT mp.new_id, mo.new_id ' ,
IF ( @ sels_rest IS NULL OR @ sels_rest = ' ' , ' ' , CONCAT ( ' , ' , @ sels_rest ) ) , ' ' ,
' FROM `prc_pay_bill` t ' ,
' JOIN `mig_map_pay_bill` mp ON mp.old_id = t.`pay_bill_id` '
, ' JOIN `mig_map_order_bill` mo ON mo.old_id = t.`bill_id` '
) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
DROP TABLE IF EXISTS ` prc_pay_bill_fee_new ` ;
CREATE TABLE ` prc_pay_bill_fee_new ` LIKE ` prc_pay_bill_fee ` ;
ALTER TABLE ` prc_pay_bill_fee_new ` MODIFY COLUMN ` fee_id ` bigint NOT NULL AUTO_INCREMENT ;
ALTER TABLE ` prc_pay_bill_fee_new ` MODIFY COLUMN ` bill_id ` bigint NOT NULL ;
ALTER TABLE ` prc_pay_bill_fee_new ` MODIFY COLUMN ` pay_bill_id ` bigint NULL ;
SELECT GROUP_CONCAT ( CONCAT ( ' ` ' , COLUMN_NAME , ' ` ' ) ORDER BY ORDINAL_POSITION SEPARATOR ' , ' ) INTO @ cols_rest
FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_pay_bill_fee ' AND COLUMN_NAME NOT IN ( ' fee_id ' , ' bill_id ' , ' pay_bill_id ' ) ;
SELECT GROUP_CONCAT ( CONCAT ( ' t.` ' , COLUMN_NAME , ' ` ' ) ORDER BY ORDINAL_POSITION SEPARATOR ' , ' ) INTO @ sels_rest
FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_pay_bill_fee ' AND COLUMN_NAME NOT IN ( ' fee_id ' , ' bill_id ' , ' pay_bill_id ' ) ;
SET @ sql : = CONCAT (
' INSERT INTO `prc_pay_bill_fee_new` (`fee_id`, `bill_id`, `pay_bill_id` ' ,
IF ( @ cols_rest IS NULL OR @ cols_rest = ' ' , ' ' , CONCAT ( ' , ' , @ cols_rest ) ) , ' ) ' ,
' SELECT mf.new_id, mo.new_id, mp.new_id ' ,
IF ( @ sels_rest IS NULL OR @ sels_rest = ' ' , ' ' , CONCAT ( ' , ' , @ sels_rest ) ) , ' ' ,
' FROM `prc_pay_bill_fee` t ' ,
' JOIN `mig_map_pay_fee` mf ON mf.old_id = t.`fee_id` '
, ' JOIN `mig_map_order_bill` mo ON mo.old_id = t.`bill_id` '
, ' LEFT JOIN `mig_map_pay_bill` mp ON mp.old_id = t.`pay_bill_id` '
) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
-- --- prc_order_bill_ext 阴影列 ---
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_order_bill_ext ' AND COLUMN_NAME = ' bill_id_bi ' ) = 0 ,
' ALTER TABLE `prc_order_bill_ext` ADD COLUMN `bill_id_bi` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
UPDATE ` prc_order_bill_ext ` e JOIN ` mig_map_order_bill ` m ON m . old_id = e . bill_id SET e . bill_id_bi = m . new_id ;
-- ========== 4. 引用表阴影列 ==========
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' ar_bill_detail ' AND COLUMN_NAME = ' prc_order_bill_id ' ) > 0
AND ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' ar_bill_detail ' AND COLUMN_NAME = ' prc_order_bill_id_bi ' ) = 0 ,
' ALTER TABLE `ar_bill_detail` ADD COLUMN `prc_order_bill_id_bi` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' ar_bill_detail ' AND COLUMN_NAME = ' prc_order_bill_id ' ) > 0 ,
' UPDATE `ar_bill_detail` x JOIN `mig_map_order_bill` m ON m.old_id = x.`prc_order_bill_id` SET x.`prc_order_bill_id_bi` = m.new_id ' ,
' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' ar_bill_detail_fee ' AND COLUMN_NAME = ' prc_income_bill_fee_id ' ) > 0
AND ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' ar_bill_detail_fee ' AND COLUMN_NAME = ' prc_income_bill_fee_id_bi ' ) = 0 ,
' ALTER TABLE `ar_bill_detail_fee` ADD COLUMN `prc_income_bill_fee_id_bi` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' ar_bill_detail_fee ' AND COLUMN_NAME = ' prc_income_bill_fee_id ' ) > 0 ,
' UPDATE `ar_bill_detail_fee` x JOIN `mig_map_income_fee` m ON m.old_id = x.`prc_income_bill_fee_id` SET x.`prc_income_bill_fee_id_bi` = m.new_id ' ,
' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' ar_bill_generate_task ' AND COLUMN_NAME = ' last_source_bill_id ' ) > 0
AND ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' ar_bill_generate_task ' AND COLUMN_NAME = ' last_source_bill_id_bi ' ) = 0 ,
' ALTER TABLE `ar_bill_generate_task` ADD COLUMN `last_source_bill_id_bi` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' ar_bill_generate_task ' AND COLUMN_NAME = ' last_source_bill_id ' ) > 0 ,
' UPDATE `ar_bill_generate_task` x JOIN `mig_map_order_bill` m ON m.old_id = x.`last_source_bill_id` SET x.`last_source_bill_id_bi` = m.new_id WHERE x.`last_source_bill_id` IS NOT NULL AND x.`last_source_bill_id` <> \ ' \ ' ' ,
' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_billing_task ' AND COLUMN_NAME = ' bill_id ' ) > 0
AND ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_billing_task ' AND COLUMN_NAME = ' bill_id_bi ' ) = 0 ,
' ALTER TABLE `prc_billing_task` ADD COLUMN `bill_id_bi` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_billing_task ' AND COLUMN_NAME = ' bill_id ' ) > 0 ,
' UPDATE `prc_billing_task` x JOIN `mig_map_order_bill` m ON m.old_id = x.`bill_id` SET x.`bill_id_bi` = m.new_id WHERE x.`bill_id` IS NOT NULL AND x.`bill_id` <> \ ' \ ' ' ,
' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_line ' AND COLUMN_NAME = ' order_bill_id ' ) > 0
AND ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_line ' AND COLUMN_NAME = ' order_bill_id_bi ' ) = 0 ,
' ALTER TABLE `pay_bill_line` ADD COLUMN `order_bill_id_bi` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_line ' AND COLUMN_NAME = ' order_bill_id ' ) > 0 ,
' UPDATE `pay_bill_line` x JOIN `mig_map_order_bill` m ON m.old_id = x.`order_bill_id` SET x.`order_bill_id_bi` = m.new_id WHERE x.`order_bill_id` IS NOT NULL AND x.`order_bill_id` <> \ ' \ ' ' ,
' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_line ' AND COLUMN_NAME = ' fee_id ' ) > 0
AND ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_line ' AND COLUMN_NAME = ' fee_id_bi ' ) = 0 ,
' ALTER TABLE `pay_bill_line` ADD COLUMN `fee_id_bi` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_line ' AND COLUMN_NAME = ' fee_id ' ) > 0 ,
' UPDATE `pay_bill_line` x JOIN `mig_map_pay_fee` m ON m.old_id = x.`fee_id` SET x.`fee_id_bi` = m.new_id WHERE x.`fee_id` IS NOT NULL AND x.`fee_id` <> \ ' \ ' ' ,
' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_log ' AND COLUMN_NAME = ' fee_id ' ) > 0
AND ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_log ' AND COLUMN_NAME = ' fee_id_bi ' ) = 0 ,
' ALTER TABLE `pay_bill_log` ADD COLUMN `fee_id_bi` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_log ' AND COLUMN_NAME = ' fee_id ' ) > 0 ,
' UPDATE `pay_bill_log` x JOIN `mig_map_pay_fee` m ON m.old_id = x.`fee_id` SET x.`fee_id_bi` = m.new_id WHERE x.`fee_id` IS NOT NULL AND x.`fee_id` <> \ ' \ ' ' ,
' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_diff ' AND COLUMN_NAME = ' fee_id ' ) > 0
AND ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_diff ' AND COLUMN_NAME = ' fee_id_bi ' ) = 0 ,
' ALTER TABLE `pay_bill_diff` ADD COLUMN `fee_id_bi` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_diff ' AND COLUMN_NAME = ' fee_id ' ) > 0 ,
' UPDATE `pay_bill_diff` x JOIN `mig_map_pay_fee` m ON m.old_id = x.`fee_id` SET x.`fee_id_bi` = m.new_id WHERE x.`fee_id` IS NOT NULL AND x.`fee_id` <> \ ' \ ' ' ,
' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_diff ' AND COLUMN_NAME = ' adjust_fee_id ' ) > 0
AND ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_diff ' AND COLUMN_NAME = ' adjust_fee_id_bi ' ) = 0 ,
' ALTER TABLE `pay_bill_diff` ADD COLUMN `adjust_fee_id_bi` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_diff ' AND COLUMN_NAME = ' adjust_fee_id ' ) > 0 ,
' UPDATE `pay_bill_diff` x JOIN `mig_map_pay_fee` m ON m.old_id = x.`adjust_fee_id` SET x.`adjust_fee_id_bi` = m.new_id WHERE x.`adjust_fee_id` IS NOT NULL AND x.`adjust_fee_id` <> \ ' \ ' ' ,
' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
-- ========== 5. 校验(bad 必须为 0,行数必须一致) ==========
SELECT ' ar_detail_orphan ' AS chk , COUNT ( * ) AS bad FROM ar_bill_detail WHERE prc_order_bill_id_bi IS NULL ;
SELECT ' ar_fee_orphan ' AS chk , COUNT ( * ) AS bad FROM ar_bill_detail_fee WHERE prc_income_bill_fee_id_bi IS NULL ;
SELECT ' ext_orphan ' AS chk , COUNT ( * ) AS bad FROM prc_order_bill_ext WHERE bill_id_bi IS NULL ;
SELECT ' order_cnt ' AS chk , ( SELECT COUNT ( * ) FROM mig_map_order_bill ) m , ( SELECT COUNT ( * ) FROM prc_order_bill ) s , ( SELECT COUNT ( * ) FROM prc_order_bill_new ) n ;
SELECT ' income_cnt ' AS chk , ( SELECT COUNT ( * ) FROM mig_map_income_bill ) m , ( SELECT COUNT ( * ) FROM prc_income_bill ) s , ( SELECT COUNT ( * ) FROM prc_income_bill_new ) n ;
SELECT ' income_fee_cnt ' AS chk , ( SELECT COUNT ( * ) FROM mig_map_income_fee ) m , ( SELECT COUNT ( * ) FROM prc_income_bill_fee ) s , ( SELECT COUNT ( * ) FROM prc_income_bill_fee_new ) n ;
SELECT ' pay_cnt ' AS chk , ( SELECT COUNT ( * ) FROM mig_map_pay_bill ) m , ( SELECT COUNT ( * ) FROM prc_pay_bill ) s , ( SELECT COUNT ( * ) FROM prc_pay_bill_new ) n ;
SELECT ' pay_fee_cnt ' AS chk , ( SELECT COUNT ( * ) FROM mig_map_pay_fee ) m , ( SELECT COUNT ( * ) FROM prc_pay_bill_fee ) s , ( SELECT COUNT ( * ) FROM prc_pay_bill_fee_new ) n ;
-- 若校验失败:STOP,不执行第 6 步
-- ========== 6. 掉旧 FK 后换表 ==========
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_income_bill ' AND CONSTRAINT_NAME = ' fk_income_bill_order_bill ' ) > 0 ,
' ALTER TABLE `prc_income_bill` DROP FOREIGN KEY `fk_income_bill_order_bill` ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_income_bill_fee ' AND CONSTRAINT_NAME = ' fk_income_bill_fee_order ' ) > 0 ,
' ALTER TABLE `prc_income_bill_fee` DROP FOREIGN KEY `fk_income_bill_fee_order` ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_order_bill_ext ' AND CONSTRAINT_NAME = ' fk_order_bill_ext_bill ' ) > 0 ,
' ALTER TABLE `prc_order_bill_ext` DROP FOREIGN KEY `fk_order_bill_ext_bill` ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_pay_bill ' AND CONSTRAINT_NAME = ' fk_pay_bill_order_bill ' ) > 0 ,
' ALTER TABLE `prc_pay_bill` DROP FOREIGN KEY `fk_pay_bill_order_bill` ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_pay_bill_fee ' AND CONSTRAINT_NAME = ' fk_pay_bill_fee_order ' ) > 0 ,
' ALTER TABLE `prc_pay_bill_fee` DROP FOREIGN KEY `fk_pay_bill_fee_order` ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
RENAME TABLE
` prc_order_bill ` TO ` prc_order_bill_old_uuid ` ,
` prc_order_bill_new ` TO ` prc_order_bill ` ,
` prc_income_bill ` TO ` prc_income_bill_old_uuid ` ,
` prc_income_bill_new ` TO ` prc_income_bill ` ,
` prc_income_bill_fee ` TO ` prc_income_bill_fee_old_uuid ` ,
` prc_income_bill_fee_new ` TO ` prc_income_bill_fee ` ,
` prc_pay_bill ` TO ` prc_pay_bill_old_uuid ` ,
` prc_pay_bill_new ` TO ` prc_pay_bill ` ,
` prc_pay_bill_fee ` TO ` prc_pay_bill_fee_old_uuid ` ,
` prc_pay_bill_fee_new ` TO ` prc_pay_bill_fee ` ;
-- --- ext / AR / task 引用列落地 ---
ALTER TABLE ` prc_order_bill_ext ` DROP PRIMARY KEY ;
ALTER TABLE ` prc_order_bill_ext ` DROP COLUMN ` bill_id ` ;
ALTER TABLE ` prc_order_bill_ext ` CHANGE COLUMN ` bill_id_bi ` ` bill_id ` bigint NOT NULL ;
ALTER TABLE ` prc_order_bill_ext ` ADD PRIMARY KEY ( ` bill_id ` ) ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . STATISTICS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' ar_bill_detail ' AND INDEX_NAME = ' uk_ar_bill_detail_source ' ) > 0 ,
' ALTER TABLE `ar_bill_detail` DROP INDEX `uk_ar_bill_detail_source` ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . STATISTICS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' ar_bill_detail ' AND INDEX_NAME = ' idx_ar_bill_detail_source ' ) > 0 ,
' ALTER TABLE `ar_bill_detail` DROP INDEX `idx_ar_bill_detail_source` ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
ALTER TABLE ` ar_bill_detail ` DROP COLUMN ` prc_order_bill_id ` ;
ALTER TABLE ` ar_bill_detail ` CHANGE COLUMN ` prc_order_bill_id_bi ` ` prc_order_bill_id ` bigint NOT NULL ;
ALTER TABLE ` ar_bill_detail ` ADD UNIQUE KEY ` uk_ar_bill_detail_source ` ( ` ar_bill_id ` , ` prc_order_bill_id ` ) ;
ALTER TABLE ` ar_bill_detail ` ADD KEY ` idx_ar_bill_detail_source ` ( ` prc_order_bill_id ` ) ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . STATISTICS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' ar_bill_detail_fee ' AND INDEX_NAME = ' uk_ar_detail_prc_income_fee ' ) > 0 ,
' ALTER TABLE `ar_bill_detail_fee` DROP INDEX `uk_ar_detail_prc_income_fee` ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . STATISTICS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' ar_bill_detail_fee ' AND INDEX_NAME = ' idx_ar_detail_prc_income_fee ' ) > 0 ,
' ALTER TABLE `ar_bill_detail_fee` DROP INDEX `idx_ar_detail_prc_income_fee` ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
ALTER TABLE ` ar_bill_detail_fee ` DROP COLUMN ` prc_income_bill_fee_id ` ;
ALTER TABLE ` ar_bill_detail_fee ` CHANGE COLUMN ` prc_income_bill_fee_id_bi ` ` prc_income_bill_fee_id ` bigint NOT NULL ;
ALTER TABLE ` ar_bill_detail_fee ` ADD UNIQUE KEY ` uk_ar_detail_prc_income_fee ` ( ` detail_id ` , ` prc_income_bill_fee_id ` ) ;
ALTER TABLE ` ar_bill_detail_fee ` ADD KEY ` idx_ar_detail_prc_income_fee ` ( ` prc_income_bill_fee_id ` ) ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' ar_bill_generate_task ' AND COLUMN_NAME = ' last_source_bill_id_bi ' ) > 0 ,
' ALTER TABLE `ar_bill_generate_task` DROP COLUMN `last_source_bill_id`, CHANGE COLUMN `last_source_bill_id_bi` `last_source_bill_id` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' prc_billing_task ' AND COLUMN_NAME = ' bill_id_bi ' ) > 0 ,
' ALTER TABLE `prc_billing_task` DROP COLUMN `bill_id`, CHANGE COLUMN `bill_id_bi` `bill_id` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_line ' AND COLUMN_NAME = ' order_bill_id_bi ' ) > 0 ,
' ALTER TABLE `pay_bill_line` DROP COLUMN `order_bill_id`, CHANGE COLUMN `order_bill_id_bi` `order_bill_id` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_line ' AND COLUMN_NAME = ' fee_id_bi ' ) > 0 ,
' ALTER TABLE `pay_bill_line` DROP COLUMN `fee_id`, CHANGE COLUMN `fee_id_bi` `fee_id` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_log ' AND COLUMN_NAME = ' fee_id_bi ' ) > 0 ,
' ALTER TABLE `pay_bill_log` DROP COLUMN `fee_id`, CHANGE COLUMN `fee_id_bi` `fee_id` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_diff ' AND COLUMN_NAME = ' fee_id_bi ' ) > 0 ,
' ALTER TABLE `pay_bill_diff` DROP COLUMN `fee_id`, CHANGE COLUMN `fee_id_bi` `fee_id` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ sql : = IF ( ( SELECT COUNT ( * ) FROM information_schema . COLUMNS WHERE TABLE_SCHEMA = DATABASE ( ) AND TABLE_NAME = ' pay_bill_diff ' AND COLUMN_NAME = ' adjust_fee_id_bi ' ) > 0 ,
' ALTER TABLE `pay_bill_diff` DROP COLUMN `adjust_fee_id`, CHANGE COLUMN `adjust_fee_id_bi` `adjust_fee_id` bigint NULL ' , ' SELECT 1 ' ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
-- ========== 7. 重建 FK + AUTO_INCREMENT ==========
ALTER TABLE ` prc_order_bill_ext ` ADD CONSTRAINT ` fk_order_bill_ext_bill ` FOREIGN KEY ( ` bill_id ` ) REFERENCES ` prc_order_bill ` ( ` bill_id ` ) ON DELETE CASCADE ;
ALTER TABLE ` prc_income_bill ` ADD CONSTRAINT ` fk_income_bill_order_bill ` FOREIGN KEY ( ` bill_id ` ) REFERENCES ` prc_order_bill ` ( ` bill_id ` ) ON DELETE CASCADE ;
ALTER TABLE ` prc_income_bill_fee ` ADD CONSTRAINT ` fk_income_bill_fee_order ` FOREIGN KEY ( ` bill_id ` ) REFERENCES ` prc_order_bill ` ( ` bill_id ` ) ON DELETE CASCADE ;
ALTER TABLE ` prc_pay_bill ` ADD CONSTRAINT ` fk_pay_bill_order_bill ` FOREIGN KEY ( ` bill_id ` ) REFERENCES ` prc_order_bill ` ( ` bill_id ` ) ON DELETE CASCADE ;
ALTER TABLE ` prc_pay_bill_fee ` ADD CONSTRAINT ` fk_pay_bill_fee_order ` FOREIGN KEY ( ` bill_id ` ) REFERENCES ` prc_order_bill ` ( ` bill_id ` ) ON DELETE CASCADE ;
SET @ ai : = ( SELECT IFNULL ( MAX ( ` bill_id ` ) , 0 ) + 1 FROM ` prc_order_bill ` ) ;
SET @ sql : = CONCAT ( ' ALTER TABLE `prc_order_bill` AUTO_INCREMENT= ' , @ ai ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ ai : = ( SELECT IFNULL ( MAX ( ` income_bill_id ` ) , 0 ) + 1 FROM ` prc_income_bill ` ) ;
SET @ sql : = CONCAT ( ' ALTER TABLE `prc_income_bill` AUTO_INCREMENT= ' , @ ai ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ ai : = ( SELECT IFNULL ( MAX ( ` fee_id ` ) , 0 ) + 1 FROM ` prc_income_bill_fee ` ) ;
SET @ sql : = CONCAT ( ' ALTER TABLE `prc_income_bill_fee` AUTO_INCREMENT= ' , @ ai ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ ai : = ( SELECT IFNULL ( MAX ( ` pay_bill_id ` ) , 0 ) + 1 FROM ` prc_pay_bill ` ) ;
SET @ sql : = CONCAT ( ' ALTER TABLE `prc_pay_bill` AUTO_INCREMENT= ' , @ ai ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET @ ai : = ( SELECT IFNULL ( MAX ( ` fee_id ` ) , 0 ) + 1 FROM ` prc_pay_bill_fee ` ) ;
SET @ sql : = CONCAT ( ' ALTER TABLE `prc_pay_bill_fee` AUTO_INCREMENT= ' , @ ai ) ;
PREPARE stmt FROM @ sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ;
SET FOREIGN_KEY_CHECKS = 1 ;
-- ========== 8. 抽查 ==========
SELECT d . detail_id , d . prc_order_bill_id , o . order_no FROM ar_bill_detail d JOIN prc_order_bill o ON o . bill_id = d . prc_order_bill_id LIMIT 5 ;
SELECT f . detail_fee_id , f . prc_income_bill_fee_id , i . fee_type FROM ar_bill_detail_fee f JOIN prc_income_bill_fee i ON i . fee_id = f . prc_income_bill_fee_id LIMIT 5 ;
-- ========== 9. 回滚说明(勿自动执行) ==========
-- 推荐:整库从备份恢复 + 部署旧后端包
-- 或:SET FOREIGN_KEY_CHECKS=0; RENAME 把 *_bak_uuid 换回主表名(引用列需另外恢复)
--
-- ========== 10. 次日清理 ==========
-- DROP TABLE IF EXISTS prc_order_bill_old_uuid, prc_order_bill_bak_uuid, prc_income_bill_old_uuid, prc_income_bill_bak_uuid,
-- prc_income_bill_fee_old_uuid, prc_income_bill_fee_bak_uuid, prc_pay_bill_old_uuid, prc_pay_bill_bak_uuid,
-- prc_pay_bill_fee_old_uuid, prc_pay_bill_fee_bak_uuid, prc_order_bill_ext_bak_uuid;
-- DROP TABLE IF EXISTS mig_map_order_bill, mig_map_income_bill, mig_map_income_fee, mig_map_pay_bill, mig_map_pay_fee;
--
-- 冒烟:1)新建/重计费 2)出应收 3)查应付费用 4)旧 AR 明细关联订单