25 lines
2.4 KiB
SQL
25 lines
2.4 KiB
SQL
-- 退货以包裹/箱为最小出库实物单位;部分数量必须先合箱生成新标签箱。
|
|||
|
|
-- 可重复执行,目标库 baiyue_lastleg。
|
||
|
|
USE baiyue_lastleg;
|
||
|
|
|
||
|
|
-- 合箱后的新箱与原包裹共用同一箱唛、标签和来源追溯模型。
|
||
|
|
-- 流水约束允许部分合箱/拆分只扣件数,不虚减箱数。
|
||
|
|
SET @ddl = IF(EXISTS(SELECT 1 FROM information_schema.table_constraints
|
||
|
|
WHERE constraint_schema=DATABASE() AND table_name='ll_return_inventory_outbound_movement'
|
||
|
|
AND constraint_name='chk_ll_return_outbound_movement_delta'),
|
||
|
|
'ALTER TABLE ll_return_inventory_outbound_movement DROP CHECK chk_ll_return_outbound_movement_delta, ADD CONSTRAINT chk_ll_return_outbound_movement_delta CHECK(quantity>0 AND total_after>=0 AND available_after>=0 AND total_before-total_after=quantity AND available_before-available_after=quantity AND cartons_after>=0 AND cartons_before-cartons_after IN (0,1) AND total_after>=available_after)',
|
||
|
|
'ALTER TABLE ll_return_inventory_outbound_movement ADD CONSTRAINT chk_ll_return_outbound_movement_delta CHECK(quantity>0 AND total_after>=0 AND available_after>=0 AND total_before-total_after=quantity AND available_before-available_after=quantity AND cartons_after>=0 AND cartons_before-cartons_after IN (0,1) AND total_after>=available_after)');
|
||
|
|
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
|
|
||
|
|
-- 同一包裹可分批合箱/出库,重复提交仍由 outbound_pick_id + SKU 幂等约束保护。
|
||
|
|
SET @ddl = IF(EXISTS(SELECT 1 FROM information_schema.statistics
|
||
|
|
WHERE table_schema=DATABASE() AND table_name='ll_return_inventory_outbound_movement'
|
||
|
|
AND index_name='uk_ll_return_outbound_carton_sku'),
|
||
|
|
'ALTER TABLE ll_return_inventory_outbound_movement DROP INDEX uk_ll_return_outbound_carton_sku, ADD INDEX idx_ll_return_outbound_carton_sku(customer_id,carton_id,sku_code)',
|
||
|
|
'SELECT 1');
|
||
|
|
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
|
|
||
|
|
-- 新签收及新合箱必须打印并扫码确认标签;既有实物按原状态继续作业。
|
||
|
|
SET @ddl = IF(EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='ll_return_inventory_carton' AND column_name='label_status'), 'SELECT 1', 'ALTER TABLE ll_return_inventory_carton ADD COLUMN label_status VARCHAR(32) NULL COMMENT ''WAIT_LABEL待贴标 CONFIRMED已扫码确认标签''');
|
||
|
|
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|