回滚代码

This commit is contained in:
wuweihua
2026-10-16 20:28:49 +08:00
parent 9ff89e36ee
commit 52f714c760
29 changed files with 505 additions and 1413 deletions
@@ -1,23 +0,0 @@
-- prc_order_bill.pickup_date from TAB_ORDER.PICKUP_DATE
SET NAMES utf8mb4;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_bill'
AND COLUMN_NAME = 'pickup_date'
LIMIT 1
);
SET @sql := IF(
@col IS NULL,
'ALTER TABLE prc_order_bill ADD COLUMN pickup_date datetime DEFAULT NULL COMMENT \'收货时间(TAB_ORDER.PICKUP_DATE)\' AFTER order_time, ADD KEY idx_order_bill_pickup_date (pickup_date)',
'SELECT 1'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- backfill from prc_order when order_id linked
UPDATE prc_order_bill b
INNER JOIN prc_order o ON o.order_id = b.order_id
SET b.pickup_date = o.pickup_date
WHERE b.pickup_date IS NULL
AND o.pickup_date IS NOT NULL;
-284
View File
@@ -1,284 +0,0 @@
-- ------------------------------------------------------------
-- REVIEW DRAFT: prc_order + rename ext -> prc_order_ext
-- Confirm schema before app code changes.
--
-- Target model:
-- prc_billing_task --transfer_no--> TAB_ORDER
-- -> upsert prc_order (UK transfer_no), delete task by transfer_no
-- -> prc_order 1:1 prc_order_ext (PK/FK = order_id)
-- -> prc_order_bill keeps bill_id; adds order_id + transfer_no
--
-- Naming:
-- order_id = BMS UUID PK (same rule as bill_id)
-- old prc_order_bill_ext renamed to prc_order_ext
-- columns moved to prc_order are DROPped from prc_order_ext
-- ------------------------------------------------------------
SET NAMES utf8mb4;
-- ============================================================
-- 1) New table: prc_order
-- ============================================================
-- TAB_ORDER mapping (core):
-- ORDER_ID -> order_no
-- ORG_ORDER_ID -> tracking_no
-- TRANSFER_ORDER_ID -> transfer_no
-- TRACK_ID -> track_id
-- CUSTOMER_CODE/NAME -> customer_code/name
-- PRODUCT_CODE/NAME -> product_code/name
-- PRODUCT_FLOOR_CODE -> product_floor_code
-- COUNTRY / COUNTRY_NAME -> country_code / country_name
-- CONSIGNEE_POSTCODE -> consignee_postcode
-- CONSIGNEE_NAME -> consignee_name
-- SHIPPER_NAME -> shipper_name
-- REGISTER_SITE_CODE -> warehouse_code
-- ORDER_PIECE/PACKAGE_NUM -> pieces
-- ACTUAL_WEIGHT -> actual_weight
-- VOLUME -> volume
-- VOLUME_WEIGHT -> volume_weight
-- LENGTH/WIDTH/HEIGHT -> pkg_length/width/height
-- DIMENSIONAL_WEIGHT_FACTOR -> dimensional_weight_factor
-- WEIGHT -> weight
-- BELONG_SALER* -> belong_saler / belong_saler_code
-- SETTLEMENT_MAN* -> settlement_man / settlement_man_code
-- SERVICE_MAN* -> service_man / service_man_code
-- TRACK_REMARK/... -> order_remark
-- ORDER_STATUS -> order_status
-- BL_PICKUP -> bl_pickup
-- PICKUP_DATE -> pickup_date
-- CREATE_DATE -> order_time
-- (task.bill_time) -> biz_date
-- ============================================================
CREATE TABLE IF NOT EXISTS `prc_order` (
`order_id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '订单ID(BMS主键,规则同 bill_id:UUID)',
`order_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户订单号(TAB_ORDER.ORDER_ID)',
`tracking_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '运单号(TAB_ORDER.ORG_ORDER_ID)',
`transfer_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '转单号(TAB_ORDER.TRANSFER_ORDER_ID,唯一)',
`track_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '轨迹ID(TAB_ORDER.TRACK_ID)',
`belong_saler` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '所属销售员(TAB_ORDER.BELONG_SALER*)',
`belong_saler_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '销售员编码(TAB_ORDER.BELONG_SALER_CODE)',
`settlement_man` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '结算员(TAB_ORDER.SETTLEMENT_MAN*)',
`settlement_man_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '结算员编码(TAB_ORDER.SETTLEMENT_MAN_CODE)',
`service_man` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客服员(TAB_ORDER.SERVICE_MAN*)',
`service_man_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客服员编码',
`customer_code` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户代码(TAB_ORDER.CUSTOMER_CODE)',
`customer_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户名称(TAB_ORDER.CUSTOMER_NAME)',
`pieces` int(11) DEFAULT NULL COMMENT '件数(TAB_ORDER.ORDER_PIECE/PACKAGE_NUM)',
`actual_weight` decimal(10,3) DEFAULT NULL COMMENT '实际重量KG(TAB_ORDER.ACTUAL_WEIGHT)',
`weight` decimal(10,3) DEFAULT NULL COMMENT '实重/收货重KG(TAB_ORDER.WEIGHT)',
`dimensional_weight_factor` decimal(10,3) DEFAULT NULL COMMENT '计费重KG(TAB_ORDER.DIMENSIONAL_WEIGHT_FACTOR)',
`volume` decimal(12,4) DEFAULT NULL COMMENT '体积m3(TAB_ORDER.VOLUME)',
`volume_weight` decimal(10,3) DEFAULT NULL COMMENT '体积重KG(TAB_ORDER.VOLUME_WEIGHT)',
`pkg_length` decimal(10,2) DEFAULT NULL COMMENT '长CM(TAB_ORDER.LENGTH)',
`pkg_width` decimal(10,2) DEFAULT NULL COMMENT '宽CM(TAB_ORDER.WIDTH)',
`pkg_height` decimal(10,2) DEFAULT NULL COMMENT '高CM(TAB_ORDER.HEIGHT)',
`shipper_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '发件人(TAB_ORDER.SHIPPER_NAME)',
`consignee_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '收件人(TAB_ORDER.CONSIGNEE_NAME)',
`consignee_postcode` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '收件人邮编(TAB_ORDER.CONSIGNEE_POSTCODE)',
`warehouse_code` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '仓库(TAB_ORDER.REGISTER_SITE_CODE)',
`order_time` datetime DEFAULT NULL COMMENT '下单时间(TAB_ORDER.CREATE_DATE)',
`order_remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '订单备注(TAB_ORDER.TRACK_REMARK/等)',
`product_code` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '产品代码(TAB_ORDER.PRODUCT_CODE)',
`product_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '产品名称(TAB_ORDER.PRODUCT_NAME)',
`product_floor_code` text COLLATE utf8mb4_unicode_ci COMMENT '产品底级/渠道编码(TAB_ORDER.PRODUCT_FLOOR_CODE)',
`country_code` char(2) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '国家二字码(TAB_ORDER.COUNTRY)',
`country_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '国家名称(TAB_ORDER.COUNTRY_NAME)',
`order_status` tinyint(4) DEFAULT NULL COMMENT '订单状态(TAB_ORDER.ORDER_STATUS)',
`bl_pickup` tinyint(4) DEFAULT NULL COMMENT '是否收货(0未收货 1已收货,TAB_ORDER.BL_PICKUP)',
`pickup_date` datetime DEFAULT NULL COMMENT '提货/收件时间(TAB_ORDER.PICKUP_DATE)',
`biz_date` datetime DEFAULT NULL COMMENT '计费时间(任务bill_time,非上游字段)',
`success_status` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'WAITING' COMMENT '计费成功状态:WAITING待处理 SUCCESS成功 FAILED失败',
`fail_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '计费失败码(同 prc_billing_task.fail_code / BillTaskFailCode)',
`created_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`updated_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`order_id`),
UNIQUE KEY `uk_prc_order_transfer_no` (`transfer_no`),
KEY `idx_prc_order_order_no` (`order_no`),
KEY `idx_prc_order_tracking_no` (`tracking_no`),
KEY `idx_prc_order_track_id` (`track_id`),
KEY `idx_prc_order_customer` (`customer_code`,`biz_date`),
KEY `idx_prc_order_pickup_date` (`pickup_date`),
KEY `idx_prc_order_success_status` (`success_status`,`create_time`),
KEY `idx_prc_order_fail_code` (`fail_code`),
KEY `idx_prc_order_product` (`product_code`,`country_code`),
KEY `idx_prc_order_bl_pickup` (`bl_pickup`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单主表(上游TAB_ORDER核心字段+计费状态)';
-- ============================================================
-- 2) prc_order_bill: add order_id (keep bill_id; keep transfer_no)
-- ============================================================
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_bill'
AND COLUMN_NAME = 'order_id'
LIMIT 1
);
SET @sql := IF(
@col IS NULL,
'ALTER TABLE prc_order_bill ADD COLUMN order_id varchar(36) DEFAULT NULL COMMENT \'订单ID,对应 prc_order.order_id\' AFTER bill_id, ADD KEY idx_order_bill_order_id (order_id)',
'SELECT 1'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- Optional FK (enable after data backfill):
-- ALTER TABLE prc_order_bill
-- ADD CONSTRAINT fk_order_bill_order
-- FOREIGN KEY (order_id) REFERENCES prc_order(order_id);
-- ============================================================
-- 3) prc_order_bill_ext -> prc_order_ext, rebind to prc_order
-- WARNING: prefer empty/dev env; production needs data migration.
-- ============================================================
-- 3.1 Drop old FK to prc_order_bill (table may still be old name)
SET @fk := (
SELECT CONSTRAINT_NAME FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_bill_ext'
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
AND CONSTRAINT_NAME = 'fk_order_bill_ext_bill'
LIMIT 1
);
SET @sql := IF(
@fk IS NOT NULL,
'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;
-- 3.2 Rename table bill_ext -> order_ext
SET @tbl := (
SELECT TABLE_NAME FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_bill_ext'
LIMIT 1
);
SET @sql := IF(
@tbl IS NOT NULL,
'RENAME TABLE prc_order_bill_ext TO prc_order_ext',
'SELECT 1'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 3.3 Rename PK column bill_id -> order_id
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_ext'
AND COLUMN_NAME = 'bill_id'
LIMIT 1
);
SET @sql := IF(
@col IS NOT NULL,
'ALTER TABLE prc_order_ext CHANGE COLUMN bill_id order_id varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT \'订单ID,对应 prc_order.order_id\'',
'SELECT 1'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 3.4 Drop columns moved onto prc_order
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_ext'
AND COLUMN_NAME = 'product_floor_code'
LIMIT 1
);
SET @sql := IF(
@col IS NOT NULL,
'ALTER TABLE prc_order_ext DROP COLUMN `product_floor_code`',
'SELECT 1'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_ext'
AND COLUMN_NAME = 'order_status'
LIMIT 1
);
SET @sql := IF(
@col IS NOT NULL,
'ALTER TABLE prc_order_ext DROP COLUMN `order_status`',
'SELECT 1'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_ext'
AND COLUMN_NAME = 'pickup_date'
LIMIT 1
);
SET @sql := IF(
@col IS NOT NULL,
'ALTER TABLE prc_order_ext DROP COLUMN `pickup_date`',
'SELECT 1'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_ext'
AND COLUMN_NAME = 'dimensional_weight_factor'
LIMIT 1
);
SET @sql := IF(
@col IS NOT NULL,
'ALTER TABLE prc_order_ext DROP COLUMN `dimensional_weight_factor`',
'SELECT 1'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_ext'
AND COLUMN_NAME = 'bl_pickup'
LIMIT 1
);
SET @sql := IF(
@col IS NOT NULL,
'ALTER TABLE prc_order_ext DROP COLUMN bl_pickup',
'SELECT 1'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 3.5 MUST empty ext before FK (old order_id values are former bill_id)
-- Run these 3 statements even if the rest of the script already succeeded.
TRUNCATE TABLE prc_order_ext;
-- 3.6 Add FK to prc_order (skip if already exists)
SET @fk := (
SELECT CONSTRAINT_NAME FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_ext'
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
AND CONSTRAINT_NAME = 'fk_order_ext_order'
LIMIT 1
);
SET @sql := IF(
@fk IS NULL,
'ALTER TABLE prc_order_ext ADD CONSTRAINT fk_order_ext_order FOREIGN KEY (order_id) REFERENCES prc_order (order_id) ON DELETE CASCADE',
'SELECT 1'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 3.7 Refresh table comment
ALTER TABLE prc_order_ext COMMENT = '订单扩展表(上游TAB_ORDER非主表字段,挂 prc_order)';
-- ============================================================
-- Review checklist
-- ------------------------------------------------------------
-- prc_order: identity + L/W/H + weights + staff + billing status
-- prc_order_ext: leftover TAB_ORDER only (no dup of moved cols)
-- prc_order_bill: pricing result; +order_id; still has bill_id
-- Dropped from ext (now on prc_order):
-- product_floor_code, order_status, pickup_date, dimensional_weight_factor
-- ============================================================
@@ -1,31 +0,0 @@
-- prc_order.bl_pickup from TAB_ORDER.BL_PICKUP (0/1)
SET NAMES utf8mb4;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order'
AND COLUMN_NAME = 'bl_pickup'
LIMIT 1
);
SET @sql := IF(
@col IS NULL,
'ALTER TABLE prc_order ADD COLUMN bl_pickup tinyint(4) DEFAULT NULL COMMENT \'是否收货(0未收货 1已收货,TAB_ORDER.BL_PICKUP)\' AFTER order_status, ADD KEY idx_prc_order_bl_pickup (bl_pickup)',
'SELECT 1'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- drop from ext if still present (moved to prc_order)
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_ext'
AND COLUMN_NAME = 'bl_pickup'
LIMIT 1
);
SET @sql := IF(
@col IS NOT NULL,
'ALTER TABLE prc_order_ext DROP COLUMN bl_pickup',
'SELECT 1'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
@@ -1,30 +0,0 @@
-- Fix 1452: empty orphan prc_order_ext then add FK to prc_order
-- Confirm DB = bms, then run in order.
SELECT DATABASE() AS current_db;
SELECT COUNT(*) AS ext_rows_before FROM prc_order_ext;
SELECT COUNT(*) AS order_rows FROM prc_order;
TRUNCATE TABLE prc_order_ext;
SELECT COUNT(*) AS ext_rows_after FROM prc_order_ext;
-- Drop failed/partial FK name if present (ignore error if missing)
SET @fk := (
SELECT CONSTRAINT_NAME FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_ext'
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
AND CONSTRAINT_NAME = 'fk_order_ext_order'
LIMIT 1
);
SET @sql := IF(
@fk IS NOT NULL,
'ALTER TABLE prc_order_ext DROP FOREIGN KEY fk_order_ext_order',
'SELECT 1'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
ALTER TABLE prc_order_ext
ADD CONSTRAINT fk_order_ext_order
FOREIGN KEY (order_id) REFERENCES prc_order (order_id) ON DELETE CASCADE;
@@ -0,0 +1,191 @@
-- Restore schema to pre-prc_order (code rollback).
-- Run on database bms. Safe to re-run.
--
-- DATA: prc_order_ext was TRUNCATE before the FK.
-- Those ext rows are gone. This script only restores table shape.
-- Row data needs a backup / binlog from before that TRUNCATE.
SET NAMES utf8mb4;
SELECT DATABASE() AS current_db;
-- 1) Drop FK from ext -> prc_order (table may still be prc_order_ext)
SET @fk := (
SELECT CONSTRAINT_NAME FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_ext'
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
AND CONSTRAINT_NAME = 'fk_order_ext_order'
LIMIT 1
);
SET @sql := IF(@fk IS NOT NULL,
'ALTER TABLE prc_order_ext DROP FOREIGN KEY fk_order_ext_order',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 2) Rename prc_order_ext -> prc_order_bill_ext
SET @new_tbl := (
SELECT TABLE_NAME FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prc_order_ext' LIMIT 1
);
SET @old_tbl := (
SELECT TABLE_NAME FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prc_order_bill_ext' LIMIT 1
);
SET @sql := IF(@new_tbl IS NOT NULL AND @old_tbl IS NULL,
'RENAME TABLE prc_order_ext TO prc_order_bill_ext',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 3) PK column order_id -> bill_id
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_bill_ext'
AND COLUMN_NAME = 'order_id'
LIMIT 1
);
SET @sql := IF(@col IS NOT NULL,
'ALTER TABLE prc_order_bill_ext CHANGE COLUMN order_id bill_id varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT \'计费订单ID,对应 prc_order_bill.bill_id\'',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 4) Put back columns that were moved off the ext table
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_bill_ext'
AND COLUMN_NAME = 'product_floor_code'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE prc_order_bill_ext ADD COLUMN product_floor_code text NULL COMMENT \'渠道编码\'',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_bill_ext'
AND COLUMN_NAME = 'order_status'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE prc_order_bill_ext ADD COLUMN order_status tinyint(4) DEFAULT NULL COMMENT \'订单状态\'',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_bill_ext'
AND COLUMN_NAME = 'pickup_date'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE prc_order_bill_ext ADD COLUMN pickup_date datetime DEFAULT NULL COMMENT \'收件时间\'',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_bill_ext'
AND COLUMN_NAME = 'bl_pickup'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE prc_order_bill_ext ADD COLUMN bl_pickup tinyint(4) DEFAULT NULL COMMENT \'是否收件 0未收件 1已收件\'',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_bill_ext'
AND COLUMN_NAME = 'dimensional_weight_factor'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE prc_order_bill_ext ADD COLUMN dimensional_weight_factor decimal(10,3) DEFAULT NULL COMMENT \'计费重\'',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 5) Drop orphan ext rows, then restore FK to prc_order_bill
DELETE e FROM prc_order_bill_ext e
LEFT JOIN prc_order_bill b ON b.bill_id = e.bill_id
WHERE b.bill_id IS NULL;
SET @fk := (
SELECT CONSTRAINT_NAME FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_bill_ext'
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
AND CONSTRAINT_NAME = 'fk_order_bill_ext_bill'
LIMIT 1
);
SET @sql := IF(@fk IS NULL,
'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',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
ALTER TABLE prc_order_bill_ext COMMENT = '订单计费扩展表';
-- 6) Drop prc_order_bill.order_id (and its index)
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_bill'
AND INDEX_NAME = 'idx_order_bill_order_id'
LIMIT 1
);
SET @sql := IF(@idx IS NOT NULL,
'ALTER TABLE prc_order_bill DROP INDEX idx_order_bill_order_id',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_bill'
AND COLUMN_NAME = 'order_id'
LIMIT 1
);
SET @sql := IF(@col IS NOT NULL,
'ALTER TABLE prc_order_bill DROP COLUMN order_id',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 7) Drop prc_order_bill.pickup_date added in the rolled-back change
-- Receive time stays on prc_order_bill_ext.pickup_date
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_bill'
AND INDEX_NAME = 'idx_order_bill_pickup_date'
LIMIT 1
);
SET @sql := IF(@idx IS NOT NULL,
'ALTER TABLE prc_order_bill DROP INDEX idx_order_bill_pickup_date',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_order_bill'
AND COLUMN_NAME = 'pickup_date'
LIMIT 1
);
SET @sql := IF(@col IS NOT NULL,
'ALTER TABLE prc_order_bill DROP COLUMN pickup_date',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 8) Drop new master table
SET @tbl := (
SELECT TABLE_NAME FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prc_order' LIMIT 1
);
SET @sql := IF(@tbl IS NOT NULL, 'DROP TABLE prc_order', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;