admin/sql/migrate_t_9610_align_order_nos.sql
zzh a70f6f2a87 feat: 接入 9610 汇总申报,字段按业务含义命名并对齐运单
含清单/报关单拉取、ITFX 转发配置、迁移脚本与拣货单号扩展。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-30 17:46:04 +08:00

119 lines
4.5 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 9610 单号命名对齐运单 t_order(幂等)
-- ReferenceNo → ClientNo(客户单号)
-- LogisticsNo 并入 ServiceNo(运单号)后删除 LogisticsNo
SET @db := DATABASE();
-- 1) ReferenceNo → ClientNo
SET @hasRef := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND COLUMN_NAME='ReferenceNo'
);
SET @hasClient := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND COLUMN_NAME='ClientNo'
);
SET @sql := IF(
@hasRef > 0 AND @hasClient = 0,
'ALTER TABLE `t_9610_order` CHANGE COLUMN `ReferenceNo` `ClientNo` VARCHAR(48) NOT NULL DEFAULT '''' COMMENT ''客户单号(对齐 t_order.ClientNo / 上游 referenceNo)''',
'SELECT ''skip ReferenceNo->ClientNo'' AS msg'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 索引名顺带调整(旧 idx_9610_ref → idx_9610_client_no)
SET @idxRef := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND INDEX_NAME='idx_9610_ref'
);
SET @idxClient := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND INDEX_NAME='idx_9610_client_no'
);
SET @sql := IF(
@idxRef > 0 AND @idxClient = 0,
'ALTER TABLE `t_9610_order` RENAME INDEX `idx_9610_ref` TO `idx_9610_client_no`',
'SELECT ''skip rename idx_9610_ref'' AS msg'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idxClient := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND INDEX_NAME='idx_9610_client_no'
);
SET @sql := IF(
@idxClient = 0,
'ALTER TABLE `t_9610_order` ADD KEY `idx_9610_client_no` (`ClientNo`)',
'SELECT ''skip add idx_9610_client_no'' AS msg'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 2) LogisticsNo → 回填 ServiceNo,再删列
SET @hasLog := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND COLUMN_NAME='LogisticsNo'
);
SET @sql := IF(
@hasLog > 0,
'UPDATE `t_9610_order` SET `ServiceNo` = NULLIF(TRIM(`LogisticsNo`), '''') WHERE (`ServiceNo` IS NULL OR TRIM(`ServiceNo`) = '''') AND `LogisticsNo` IS NOT NULL AND TRIM(`LogisticsNo`) <> ''''',
'SELECT ''skip backfill ServiceNo'' AS msg'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idxLog := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND INDEX_NAME='idx_9610_logistics'
);
SET @sql := IF(
@idxLog > 0,
'ALTER TABLE `t_9610_order` DROP INDEX `idx_9610_logistics`',
'SELECT ''skip drop idx_9610_logistics'' AS msg'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @hasLog := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND COLUMN_NAME='LogisticsNo'
);
SET @sql := IF(
@hasLog > 0,
'ALTER TABLE `t_9610_order` DROP COLUMN `LogisticsNo`',
'SELECT ''skip drop LogisticsNo'' AS msg'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ServiceNo 索引(检索)
SET @idxSvc := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND INDEX_NAME='idx_9610_service_no'
);
SET @sql := IF(
@idxSvc = 0,
'ALTER TABLE `t_9610_order` ADD KEY `idx_9610_service_no` (`ServiceNo`)',
'SELECT ''skip idx_9610_service_no'' AS msg'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- OrderNo 注释对齐:海关下游订单编号(非运单 DownstreamServiceNo)
SET @hasOrderNo := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND COLUMN_NAME='OrderNo'
);
SET @sql := IF(
@hasOrderNo > 0,
'ALTER TABLE `t_9610_order` MODIFY COLUMN `OrderNo` VARCHAR(32) NULL COMMENT ''海关下游订单编号(申报回写,非 t_order.DownstreamServiceNo)''',
'SELECT ''skip OrderNo comment'' AS msg'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- DownstreamRefNo 注释
SET @hasDr := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=@db AND TABLE_NAME='t_9610_order' AND COLUMN_NAME='DownstreamRefNo'
);
SET @sql := IF(
@hasDr > 0,
'ALTER TABLE `t_9610_order` MODIFY COLUMN `DownstreamRefNo` VARCHAR(32) NULL COMMENT ''申报回写的 referenceNo 快照''',
'SELECT ''skip DownstreamRefNo comment'' AS msg'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;