- 新增 batch-create-logistics / batch-create-fulfill:按平台行建物流单并回写 LinkedOrderId,代发支持绑定冻结与失败回滚 - ParcelBuilder 支持无 SKU 映射的平台行申报;批量创建可指定 OrderSource=platform - 库存绑定候选接口支持 orderId=0 草稿选仓 - 店铺订单增加结构化收件人字段(db.sql + 迁移脚本),拉单回填;补充 customer9 店铺/揽收种子与 ConcurrencyStamp 修复脚本 Co-authored-by: Cursor <cursoragent@cursor.com>
307 lines
12 KiB
SQL
307 lines
12 KiB
SQL
-- 揽收订单种子(CustomerId = 9,OrderSource = pickup)
|
||
-- 可重复执行:已存在则跳过
|
||
-- 用法:mysql -u root -p oms < sql/seed_pickup_order_customer9.sql
|
||
--
|
||
-- 依赖:t_customer.Id=9 存在;仓库/销售产品尽量取库内已有,否则用占位编码
|
||
|
||
SET NAMES utf8mb4;
|
||
|
||
SET @customerId := 9;
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 0. 修复 t_order 脏 ConcurrencyStamp(空串无法绑 Guid)
|
||
-- ---------------------------------------------------------------------------
|
||
UPDATE `t_order`
|
||
SET `ConcurrencyStamp` = UUID()
|
||
WHERE `ConcurrencyStamp` IS NULL
|
||
OR TRIM(`ConcurrencyStamp`) = ''
|
||
OR LENGTH(TRIM(`ConcurrencyStamp`)) <> 36;
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 1. 发件地址簿(揽收创建依赖)
|
||
-- ---------------------------------------------------------------------------
|
||
INSERT INTO `t_customer_sender_address` (
|
||
`CustomerId`, `AddressType`, `AddressName`, `SenderName`, `Company`,
|
||
`Province`, `City`, `ZipCode`, `StreetAddress1`, `Phone`,
|
||
`IsDefault`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`
|
||
)
|
||
SELECT @customerId, 'sender', '种子-默认发件', '张三', '种子发件公司',
|
||
'广东省', '深圳市', '518000', '南山区科技园种子路 1 号', '13800000009',
|
||
1, 0, UUID(), 0, NOW()
|
||
WHERE NOT EXISTS (
|
||
SELECT 1 FROM `t_customer_sender_address`
|
||
WHERE `CustomerId` = @customerId
|
||
AND `AddressType` = 'sender'
|
||
AND `AddressName` = '种子-默认发件'
|
||
AND `IsDeleted` = 0
|
||
);
|
||
|
||
SET @senderAddressId := (
|
||
SELECT `Id` FROM `t_customer_sender_address`
|
||
WHERE `CustomerId` = @customerId
|
||
AND `AddressType` = 'sender'
|
||
AND `AddressName` = '种子-默认发件'
|
||
AND `IsDeleted` = 0
|
||
ORDER BY `Id`
|
||
LIMIT 1
|
||
);
|
||
|
||
-- 仓库:优先取已有;没有则插入一条种子仓
|
||
INSERT INTO `t_warehouse_address` (
|
||
`WarehouseName`, `WarehouseType`, `Recipient`, `ContactPhone`, `ShippingAddress`,
|
||
`IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`
|
||
)
|
||
SELECT '种子-深圳仓', 'main', '仓管员', '0755-80000009', '广东省深圳市南山区仓库大道 9 号',
|
||
0, UUID(), 0, NOW()
|
||
WHERE NOT EXISTS (
|
||
SELECT 1 FROM `t_warehouse_address` WHERE `IsDeleted` = 0 LIMIT 1
|
||
)
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM `t_warehouse_address` WHERE `WarehouseName` = '种子-深圳仓' AND `IsDeleted` = 0
|
||
);
|
||
|
||
SET @warehouseId := (
|
||
SELECT `Id` FROM `t_warehouse_address`
|
||
WHERE `IsDeleted` = 0
|
||
ORDER BY CASE WHEN `WarehouseName` = '种子-深圳仓' THEN 0 ELSE 1 END, `Id`
|
||
LIMIT 1
|
||
);
|
||
|
||
SET @productCode := (
|
||
SELECT `ProductCode` FROM `t_sales_product`
|
||
WHERE `IsDeleted` = 0
|
||
ORDER BY `Id`
|
||
LIMIT 1
|
||
);
|
||
SET @productCode := IFNULL(NULLIF(TRIM(@productCode), ''), 'SEED-PICKUP-PRODUCT');
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 2. 揽收订单 t_order(若干状态)
|
||
-- ---------------------------------------------------------------------------
|
||
|
||
-- draft
|
||
INSERT INTO `t_order` (
|
||
`RequestId`, `ServiceNo`, `ClientNo`, `ProductCode`, `ChannelCode`,
|
||
`ConsigneeCountry`, `ConsigneeCountryName`, `CargoAttribute`,
|
||
`OrderStatus`, `HandleStatus`, `WarehouseId`, `CustomerId`,
|
||
`OrderSource`, `PickupTime`, `CustomerSenderAddressId`,
|
||
`DeclaredCurrency`, `DeclaredSum`, `Quantity`,
|
||
`IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`
|
||
)
|
||
SELECT
|
||
'SEED9-PK-REQ-001', 'SEED9-PK-001', 'PK-CLIENT-001', @productCode, @productCode,
|
||
'CN', '中国', 'general',
|
||
'draft', 'pending', @warehouseId, @customerId,
|
||
'pickup', DATE_ADD(NOW(), INTERVAL 1 DAY), @senderAddressId,
|
||
'CNY', 1.0000, 1,
|
||
0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 2 DAY)
|
||
WHERE @warehouseId IS NOT NULL
|
||
AND NOT EXISTS (SELECT 1 FROM `t_order` WHERE `ServiceNo` = 'SEED9-PK-001');
|
||
|
||
-- pendingPayment
|
||
INSERT INTO `t_order` (
|
||
`RequestId`, `ServiceNo`, `ClientNo`, `ProductCode`, `ChannelCode`,
|
||
`ConsigneeCountry`, `ConsigneeCountryName`, `CargoAttribute`,
|
||
`OrderStatus`, `HandleStatus`, `WarehouseId`, `CustomerId`,
|
||
`OrderSource`, `PickupTime`, `CustomerSenderAddressId`,
|
||
`DeclaredCurrency`, `DeclaredSum`, `Quantity`,
|
||
`IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`
|
||
)
|
||
SELECT
|
||
'SEED9-PK-REQ-002', 'SEED9-PK-002', 'PK-CLIENT-002', @productCode, @productCode,
|
||
'CN', '中国', 'general',
|
||
'pendingPayment', 'pending', @warehouseId, @customerId,
|
||
'pickup', DATE_ADD(NOW(), INTERVAL 2 DAY), @senderAddressId,
|
||
'CNY', 1.0000, 1,
|
||
0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 1 DAY)
|
||
WHERE @warehouseId IS NOT NULL
|
||
AND NOT EXISTS (SELECT 1 FROM `t_order` WHERE `ServiceNo` = 'SEED9-PK-002');
|
||
|
||
-- pendingShip
|
||
INSERT INTO `t_order` (
|
||
`RequestId`, `ServiceNo`, `ClientNo`, `ProductCode`, `ChannelCode`,
|
||
`ConsigneeCountry`, `ConsigneeCountryName`, `CargoAttribute`,
|
||
`OrderStatus`, `HandleStatus`, `WarehouseId`, `CustomerId`,
|
||
`OrderSource`, `PickupTime`, `CustomerSenderAddressId`,
|
||
`DeclaredCurrency`, `DeclaredSum`, `Quantity`,
|
||
`IsPaid`, `PayTime`,
|
||
`IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`
|
||
)
|
||
SELECT
|
||
'SEED9-PK-REQ-003', 'SEED9-PK-003', 'PK-CLIENT-003', @productCode, @productCode,
|
||
'CN', '中国', 'electronics',
|
||
'pendingShip', 'pending', @warehouseId, @customerId,
|
||
'pickup', DATE_ADD(NOW(), INTERVAL 3 DAY), @senderAddressId,
|
||
'CNY', 1.0000, 1,
|
||
1, DATE_SUB(NOW(), INTERVAL 6 HOUR),
|
||
0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 12 HOUR)
|
||
WHERE @warehouseId IS NOT NULL
|
||
AND NOT EXISTS (SELECT 1 FROM `t_order` WHERE `ServiceNo` = 'SEED9-PK-003');
|
||
|
||
-- received
|
||
INSERT INTO `t_order` (
|
||
`RequestId`, `ServiceNo`, `ClientNo`, `ProductCode`, `ChannelCode`,
|
||
`ConsigneeCountry`, `ConsigneeCountryName`, `CargoAttribute`,
|
||
`OrderStatus`, `HandleStatus`, `WarehouseId`, `CustomerId`,
|
||
`OrderSource`, `PickupTime`, `CustomerSenderAddressId`,
|
||
`DeclaredCurrency`, `DeclaredSum`, `Quantity`,
|
||
`ReceiveTime`,
|
||
`IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`
|
||
)
|
||
SELECT
|
||
'SEED9-PK-REQ-004', 'SEED9-PK-004', 'PK-CLIENT-004', @productCode, @productCode,
|
||
'CN', '中国', 'general',
|
||
'received', 'processed', @warehouseId, @customerId,
|
||
'pickup', DATE_SUB(NOW(), INTERVAL 1 DAY), @senderAddressId,
|
||
'CNY', 1.0000, 1,
|
||
DATE_SUB(NOW(), INTERVAL 8 HOUR),
|
||
0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 3 DAY)
|
||
WHERE @warehouseId IS NOT NULL
|
||
AND NOT EXISTS (SELECT 1 FROM `t_order` WHERE `ServiceNo` = 'SEED9-PK-004');
|
||
|
||
-- pendingOnline
|
||
INSERT INTO `t_order` (
|
||
`RequestId`, `ServiceNo`, `ClientNo`, `ProductCode`, `ChannelCode`,
|
||
`ConsigneeCountry`, `ConsigneeCountryName`, `CargoAttribute`,
|
||
`OrderStatus`, `HandleStatus`, `WarehouseId`, `CustomerId`,
|
||
`OrderSource`, `PickupTime`, `CustomerSenderAddressId`,
|
||
`DeclaredCurrency`, `DeclaredSum`, `Quantity`,
|
||
`IsPaid`, `PayTime`, `ShipTime`,
|
||
`IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`
|
||
)
|
||
SELECT
|
||
'SEED9-PK-REQ-005', 'SEED9-PK-005', 'PK-CLIENT-005', @productCode, @productCode,
|
||
'CN', '中国', 'general',
|
||
'pendingOnline', 'processed', @warehouseId, @customerId,
|
||
'pickup', DATE_SUB(NOW(), INTERVAL 2 DAY), @senderAddressId,
|
||
'CNY', 1.0000, 1,
|
||
1, DATE_SUB(NOW(), INTERVAL 2 DAY), DATE_SUB(NOW(), INTERVAL 1 DAY),
|
||
0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 4 DAY)
|
||
WHERE @warehouseId IS NOT NULL
|
||
AND NOT EXISTS (SELECT 1 FROM `t_order` WHERE `ServiceNo` = 'SEED9-PK-005');
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 3. 子表:发件人 / 收件人 / 申报 / 件重尺
|
||
-- ---------------------------------------------------------------------------
|
||
|
||
-- 发件人
|
||
INSERT INTO `t_order_sender` (
|
||
`OrderId`, `SenderName`, `Company`, `Province`, `City`, `ZipCode`,
|
||
`StreetAddress1`, `Phone`, `IsDeleted`, `CreateUserId`, `CreateTime`
|
||
)
|
||
SELECT o.`Id`, '张三', '种子发件公司', '广东省', '深圳市', '518000',
|
||
'南山区科技园种子路 1 号', '13800000009', 0, 0, NOW()
|
||
FROM `t_order` o
|
||
WHERE o.`ServiceNo` IN ('SEED9-PK-001','SEED9-PK-002','SEED9-PK-003','SEED9-PK-004','SEED9-PK-005')
|
||
AND o.`CustomerId` = @customerId
|
||
AND o.`OrderSource` = 'pickup'
|
||
AND NOT EXISTS (SELECT 1 FROM `t_order_sender` s WHERE s.`OrderId` = o.`Id` AND s.`IsDeleted` = 0);
|
||
|
||
-- 收件人(仓库)
|
||
INSERT INTO `t_order_recipient` (
|
||
`OrderId`, `RecipientsName`, `Phone`, `ZipCode`, `StreetAddress1`,
|
||
`IsDeleted`, `CreateUserId`, `CreateTime`
|
||
)
|
||
SELECT o.`Id`,
|
||
IFNULL(NULLIF(TRIM(w.`Recipient`), ''), IFNULL(w.`WarehouseName`, '种子仓')),
|
||
w.`ContactPhone`,
|
||
'000000',
|
||
IFNULL(NULLIF(TRIM(w.`ShippingAddress`), ''), IFNULL(w.`WarehouseName`, '种子仓地址')),
|
||
0, 0, NOW()
|
||
FROM `t_order` o
|
||
LEFT JOIN `t_warehouse_address` w ON w.`Id` = o.`WarehouseId`
|
||
WHERE o.`ServiceNo` IN ('SEED9-PK-001','SEED9-PK-002','SEED9-PK-003','SEED9-PK-004','SEED9-PK-005')
|
||
AND o.`CustomerId` = @customerId
|
||
AND o.`OrderSource` = 'pickup'
|
||
AND NOT EXISTS (SELECT 1 FROM `t_order_recipient` r WHERE r.`OrderId` = o.`Id` AND r.`IsDeleted` = 0);
|
||
|
||
-- 申报行(货物名称)
|
||
INSERT INTO `t_order_declaration` (
|
||
`OrderId`, `CnName`, `EnName`, `UnitPrice`, `UnitWeight`, `Quantity`, `Amount`, `Weight`,
|
||
`IsDeleted`, `CreateUserId`, `CreateTime`
|
||
)
|
||
SELECT o.`Id`,
|
||
CASE o.`ServiceNo`
|
||
WHEN 'SEED9-PK-001' THEN '日用百货样品'
|
||
WHEN 'SEED9-PK-002' THEN '服装配件'
|
||
WHEN 'SEED9-PK-003' THEN '蓝牙耳机'
|
||
WHEN 'SEED9-PK-004' THEN '家居收纳盒'
|
||
ELSE '办公文具套装'
|
||
END,
|
||
CASE o.`ServiceNo`
|
||
WHEN 'SEED9-PK-001' THEN 'Daily Sample Goods'
|
||
WHEN 'SEED9-PK-002' THEN 'Apparel Accessories'
|
||
WHEN 'SEED9-PK-003' THEN 'Bluetooth Earbuds'
|
||
WHEN 'SEED9-PK-004' THEN 'Storage Box'
|
||
ELSE 'Stationery Set'
|
||
END,
|
||
1.00,
|
||
CASE o.`ServiceNo`
|
||
WHEN 'SEED9-PK-001' THEN 0.500
|
||
WHEN 'SEED9-PK-002' THEN 1.200
|
||
WHEN 'SEED9-PK-003' THEN 0.350
|
||
WHEN 'SEED9-PK-004' THEN 2.000
|
||
ELSE 0.800
|
||
END,
|
||
1,
|
||
1.00,
|
||
CASE o.`ServiceNo`
|
||
WHEN 'SEED9-PK-001' THEN 0.500
|
||
WHEN 'SEED9-PK-002' THEN 1.200
|
||
WHEN 'SEED9-PK-003' THEN 0.350
|
||
WHEN 'SEED9-PK-004' THEN 2.000
|
||
ELSE 0.800
|
||
END,
|
||
0, 0, NOW()
|
||
FROM `t_order` o
|
||
WHERE o.`ServiceNo` IN ('SEED9-PK-001','SEED9-PK-002','SEED9-PK-003','SEED9-PK-004','SEED9-PK-005')
|
||
AND o.`CustomerId` = @customerId
|
||
AND o.`OrderSource` = 'pickup'
|
||
AND NOT EXISTS (SELECT 1 FROM `t_order_declaration` d WHERE d.`OrderId` = o.`Id` AND d.`IsDeleted` = 0);
|
||
|
||
-- 预报件重尺
|
||
INSERT INTO `t_order_weight` (
|
||
`OrderId`, `Type`, `Length`, `Width`, `Height`, `ActualWeight`, `VolumetricWeight`, `ChargeableWeight`,
|
||
`IsDeleted`, `CreateUserId`, `CreateTime`
|
||
)
|
||
SELECT o.`Id`, 'forecast', 1.00, 1.00, 1.00,
|
||
CASE o.`ServiceNo`
|
||
WHEN 'SEED9-PK-001' THEN 0.500
|
||
WHEN 'SEED9-PK-002' THEN 1.200
|
||
WHEN 'SEED9-PK-003' THEN 0.350
|
||
WHEN 'SEED9-PK-004' THEN 2.000
|
||
ELSE 0.800
|
||
END,
|
||
0.001,
|
||
CASE o.`ServiceNo`
|
||
WHEN 'SEED9-PK-001' THEN 0.500
|
||
WHEN 'SEED9-PK-002' THEN 1.200
|
||
WHEN 'SEED9-PK-003' THEN 0.350
|
||
WHEN 'SEED9-PK-004' THEN 2.000
|
||
ELSE 0.800
|
||
END,
|
||
0, 0, NOW()
|
||
FROM `t_order` o
|
||
WHERE o.`ServiceNo` IN ('SEED9-PK-001','SEED9-PK-002','SEED9-PK-003','SEED9-PK-004','SEED9-PK-005')
|
||
AND o.`CustomerId` = @customerId
|
||
AND o.`OrderSource` = 'pickup'
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM `t_order_weight` w
|
||
WHERE w.`OrderId` = o.`Id` AND w.`Type` = 'forecast' AND w.`IsDeleted` = 0
|
||
);
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 4. 摘要
|
||
-- ---------------------------------------------------------------------------
|
||
SELECT 'pickup_orders' AS tbl, COUNT(*) AS cnt
|
||
FROM `t_order`
|
||
WHERE `CustomerId` = @customerId AND `OrderSource` = 'pickup' AND `IsDeleted` = 0
|
||
UNION ALL
|
||
SELECT 'sender_address', COUNT(*)
|
||
FROM `t_customer_sender_address`
|
||
WHERE `CustomerId` = @customerId AND `AddressType` = 'sender' AND `IsDeleted` = 0
|
||
UNION ALL
|
||
SELECT 'warehouse_used', IF(@warehouseId IS NULL, 0, 1)
|
||
UNION ALL
|
||
SELECT 'product_code', IF(@productCode IS NULL OR @productCode = '', 0, 1);
|