admin/sql/seed_pickup_order_customer9.sql
zzh 188aed1ee6 feat: 店铺订单创建物流/代发,并补齐收件人字段与种子数据
- 新增 batch-create-logistics / batch-create-fulfill:按平台行建物流单并回写 LinkedOrderId,代发支持绑定冻结与失败回滚
- ParcelBuilder 支持无 SKU 映射的平台行申报;批量创建可指定 OrderSource=platform
- 库存绑定候选接口支持 orderId=0 草稿选仓
- 店铺订单增加结构化收件人字段(db.sql + 迁移脚本),拉单回填;补充 customer9 店铺/揽收种子与 ConcurrencyStamp 修复脚本

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-19 22:33:55 +08:00

307 lines
12 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 揽收订单种子(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);