-- 揽收单(独立履约/结算)+ 与物流单 1:N 关联;物流单冗余到仓方式与揽收 FK。 -- 文档:前端 docs/揽收单与物流单串联方案.md -- 执行前请备份。 CREATE TABLE IF NOT EXISTS `t_pickup_order` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `PickupNo` VARCHAR(32) NOT NULL COMMENT '揽收单号', `CustomerId` INT NOT NULL COMMENT '客户Id', `SenderAddressId` INT NOT NULL COMMENT '发件地址簿Id', `SenderName` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '取件联系人快照', `SenderPhone` VARCHAR(32) NULL COMMENT '取件电话快照', `SenderCompany` VARCHAR(255) NULL COMMENT '公司快照', `SenderCountryCode` VARCHAR(8) NULL COMMENT '国家码快照', `SenderProvince` VARCHAR(50) NULL COMMENT '省快照', `SenderCity` VARCHAR(50) NULL COMMENT '市快照', `SenderZipCode` VARCHAR(50) NULL COMMENT '邮编快照', `SenderStreetAddress1` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '地址1快照', `SenderStreetAddress2` VARCHAR(500) NULL COMMENT '地址2快照', `WarehouseId` INT NOT NULL COMMENT '送到仓库Id', `CarrierCode` VARCHAR(64) NULL COMMENT '承运商编码(draft可空)', `CarrierService` VARCHAR(64) NULL COMMENT '承运服务(draft可空)', `CarrierWaybillNo` VARCHAR(64) NULL COMMENT '承运商回执单号', `ExpectPickupTime` DATETIME NOT NULL COMMENT '期望揽收时间', `PickupWindowStart` DATETIME NULL COMMENT '时间窗起', `PickupWindowEnd` DATETIME NULL COMMENT '时间窗止', `ActualPickupTime` DATETIME NULL COMMENT '实际取件时间', `Status` VARCHAR(32) NOT NULL DEFAULT 'draft' COMMENT 'draft/scheduled/dispatched/picked/inbound/cancelled/failed', `ParcelCount` INT NOT NULL DEFAULT 0 COMMENT '关联票数', `TotalActualWeight` DECIMAL(18,3) NULL COMMENT '汇总实重', `ChargeableWeight` DECIMAL(18,3) NULL COMMENT '计费重', `Currency` VARCHAR(8) NOT NULL DEFAULT 'CNY' COMMENT '币种', `FreightAmount` DECIMAL(18,2) NULL COMMENT '对客揽收运费', `OtherFeeAmount` DECIMAL(18,2) NULL COMMENT '对客其他费', `ReceivableAmount` DECIMAL(18,2) NULL COMMENT '对客应收合计', `PayStatus` VARCHAR(16) NOT NULL DEFAULT 'unpaid' COMMENT 'unpaid/paid', `PayTime` DATETIME NULL COMMENT '支付时间', `PayMode` VARCHAR(16) NOT NULL DEFAULT 'prepaid' COMMENT 'prepaid/collect', `CarrierPayableAmount` DECIMAL(18,2) NULL COMMENT '应付承运商', `SettlementStatus` VARCHAR(16) NOT NULL DEFAULT 'none' COMMENT 'none/pending/settled', `SettlementBatchNo` VARCHAR(64) NULL COMMENT '结算批次号', `SettledAt` DATETIME NULL COMMENT '结算时间', `Remark` VARCHAR(512) NULL COMMENT '备注', `IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除', `CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人', `CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `UpdateUserId` INT NULL COMMENT '更新人', `UpdateTime` DATETIME NULL COMMENT '更新时间', PRIMARY KEY (`Id`), UNIQUE KEY `uk_pickup_no` (`PickupNo`), KEY `idx_pickup_customer_status` (`CustomerId`, `Status`, `CreateTime`), KEY `idx_pickup_warehouse_time` (`WarehouseId`, `ExpectPickupTime`), KEY `idx_pickup_pay` (`PayStatus`), KEY `idx_pickup_settle` (`SettlementStatus`) ) COMMENT='揽收单(上门取件履约+对客收款+承运结算)'; CREATE TABLE IF NOT EXISTS `t_pickup_order_line` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `PickupOrderId` INT NOT NULL COMMENT '揽收单Id', `OrderId` INT NOT NULL COMMENT '物流订单Id', `SortNo` INT NOT NULL DEFAULT 0 COMMENT '展示序', `IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除', `CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人', `CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `UpdateUserId` INT NULL COMMENT '更新人', `UpdateTime` DATETIME NULL COMMENT '更新时间', PRIMARY KEY (`Id`), UNIQUE KEY `uk_pickup_line_order` (`OrderId`), UNIQUE KEY `uk_pickup_line_pair` (`PickupOrderId`, `OrderId`), KEY `idx_pickup_line_header` (`PickupOrderId`, `IsDeleted`) ) COMMENT='揽收单关联物流订单(1揽收:N物流)'; ALTER TABLE `t_order` ADD COLUMN `InboundMethod` VARCHAR(16) NULL COMMENT '到仓方式 selfShip/doorPickup' AFTER `CustomerSenderAddressId`, ADD COLUMN `PickupOrderId` INT NULL COMMENT '关联揽收单Id(冗余)' AFTER `InboundMethod`; ALTER TABLE `t_order` ADD KEY `idx_order_pickup` (`PickupOrderId`), ADD KEY `idx_order_inbound_method` (`InboundMethod`);