-- 待支付订单约束与超时扫描优化。执行前请确认不存在重复的 unpaid/processing 订单。 ALTER TABLE traffic_order MODIFY COLUMN pay_status VARCHAR(16) NOT NULL DEFAULT 'unpaid' COMMENT 'unpaid/processing/paid/cancelled/closed', ADD KEY idx_traffic_order_pending_expire (pay_status, created_at, id); ALTER TABLE sim_recharge_order ADD COLUMN closed_at DATETIME NULL COMMENT '关闭时间' AFTER paid_at, MODIFY COLUMN payment_status VARCHAR(16) NOT NULL DEFAULT 'unpaid' COMMENT 'unpaid/processing/paid/cancelled/closed', ADD KEY idx_sim_recharge_pending_expire (payment_status, created_at, id); ALTER TABLE payment_transaction MODIFY COLUMN status VARCHAR(16) NOT NULL DEFAULT 'unpaid' COMMENT 'unpaid/processing/paid/failed/cancelled/closed', ADD KEY idx_payment_business_status (business_type, business_order_id, status); ALTER TABLE traffic_order ADD COLUMN pending_user_id BIGINT GENERATED ALWAYS AS ( CASE WHEN pay_status IN ('unpaid', 'processing') THEN user_id ELSE NULL END ) STORED, ADD UNIQUE KEY uk_traffic_order_pending_user (pending_user_id); ALTER TABLE sim_recharge_order ADD COLUMN pending_sim_card_id BIGINT GENERATED ALWAYS AS ( CASE WHEN payment_status IN ('unpaid', 'processing') THEN sim_card_id ELSE NULL END ) STORED, ADD UNIQUE KEY uk_sim_recharge_pending_card (pending_sim_card_id);