-- 对齐已创建的 t_pickup_order / t_pickup_order_line 与现表公共字段。 -- 适用于已执行旧版 20260803_pickup_order.sql 的环境;列已存在时对应语句会报错,可跳过。 -- 执行前请备份。 -- -- 注意:ConcurrencyStamp 勿写 DEFAULT (UUID()),在开启复制/GTID 时 ALTER 会报 1674。 -- 正确做法:先可空列 → UPDATE 回填 → 再改为 NOT NULL。 -- ===== t_pickup_order ===== ALTER TABLE `t_pickup_order` ADD COLUMN `RequestId` VARCHAR(64) NULL COMMENT '请求幂等ID' AFTER `PickupNo`, ADD COLUMN `OrganizationId` CHAR(36) NULL COMMENT '数据归属组织' AFTER `CustomerId`, ADD COLUMN `SecretLevel` TINYINT NOT NULL DEFAULT 2 COMMENT '数据密级 1-4' AFTER `OrganizationId`; ALTER TABLE `t_pickup_order` ADD COLUMN `SenderCountry` INT NULL COMMENT '国家 t_country.Id 快照' AFTER `SenderCompany`, ADD COLUMN `SenderStreetAddress3` VARCHAR(500) NULL COMMENT '地址3快照' AFTER `SenderStreetAddress2`, ADD COLUMN `SenderHouseNumber` VARCHAR(50) NULL COMMENT '门牌号快照' AFTER `SenderStreetAddress3`, ADD COLUMN `SenderTelePhone` VARCHAR(50) NULL COMMENT '电话快照' AFTER `SenderPhone`, ADD COLUMN `SenderEmail` VARCHAR(60) NULL COMMENT '邮箱快照' AFTER `SenderTelePhone`; -- 手机字段长度与现表对齐(若已是 50 可忽略报错) ALTER TABLE `t_pickup_order` MODIFY COLUMN `SenderPhone` VARCHAR(50) NULL COMMENT '手机快照'; -- ConcurrencyStamp(复制安全写法) ALTER TABLE `t_pickup_order` ADD COLUMN `ConcurrencyStamp` CHAR(36) NULL COMMENT '并发戳' AFTER `IsDeleted`; UPDATE `t_pickup_order` SET `ConcurrencyStamp` = UUID() WHERE `ConcurrencyStamp` IS NULL OR `ConcurrencyStamp` = ''; ALTER TABLE `t_pickup_order` MODIFY COLUMN `ConcurrencyStamp` CHAR(36) NOT NULL COMMENT '并发戳'; ALTER TABLE `t_pickup_order` ADD UNIQUE KEY `uk_pickup_request_id` (`RequestId`), ADD KEY `idx_pickup_org_secret_ctime` (`OrganizationId`, `SecretLevel`, `CreateTime`); -- ===== t_pickup_order_line ===== ALTER TABLE `t_pickup_order_line` ADD COLUMN `ServiceNo` VARCHAR(64) NULL COMMENT '运单号快照(便于列表)' AFTER `OrderId`, ADD COLUMN `ClientNo` VARCHAR(64) NULL COMMENT '客户单号快照' AFTER `ServiceNo`; ALTER TABLE `t_pickup_order_line` ADD COLUMN `ConcurrencyStamp` CHAR(36) NULL COMMENT '并发戳' AFTER `IsDeleted`; UPDATE `t_pickup_order_line` SET `ConcurrencyStamp` = UUID() WHERE `ConcurrencyStamp` IS NULL OR `ConcurrencyStamp` = ''; ALTER TABLE `t_pickup_order_line` MODIFY COLUMN `ConcurrencyStamp` CHAR(36) NOT NULL COMMENT '并发戳';