fix: converge dropship development schema

This commit is contained in:
2026-09-08 17:38:43 +08:00
parent 0a9c798580
commit 751bdbf880
3 changed files with 145 additions and 0 deletions
@@ -17494,6 +17494,140 @@ CREATE TABLE IF NOT EXISTS fl_dropship_pallet_carton (
CONSTRAINT fk_dropship_carton_label FOREIGN KEY (carton_label_id) REFERENCES fl_inbound_carton_label(id)
) ENGINE=InnoDB COMMENT='一件代发托盘内逐箱SKU和入仓单明细';
-- 已存在开发库直接收敛到逐箱清点与整托分柜结构;新建库由上面的最新定义一次完成。
DROP PROCEDURE IF EXISTS converge_dropship_palletization_schema;
DELIMITER $$
CREATE PROCEDURE converge_dropship_palletization_schema()
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
WHERE table_schema='baiyue_firstleg' AND table_name='fl_inbound_carton_label'
AND column_name='units_per_carton') THEN
ALTER TABLE fl_inbound_carton_label
ADD COLUMN units_per_carton INT UNSIGNED NULL
COMMENT '每箱SKU数量快照;一件代发必须为正数' AFTER sku_code;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
WHERE table_schema='baiyue_firstleg' AND table_name='fl_dropship_pallet_task'
AND column_name='counted_cartons') THEN
ALTER TABLE fl_dropship_pallet_task
ADD COLUMN counted_cartons INT UNSIGNED NOT NULL DEFAULT 0
COMMENT '已逐箱确认实收数量的箱数' AFTER total_cartons;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
WHERE table_schema='baiyue_firstleg' AND table_name='fl_dropship_pallet_task'
AND column_name='discrepancy_cartons') THEN
ALTER TABLE fl_dropship_pallet_task
ADD COLUMN discrepancy_cartons INT UNSIGNED NOT NULL DEFAULT 0
COMMENT '已确认差异箱数' AFTER allocated_cartons;
END IF;
UPDATE fl_dropship_pallet_task
SET counted_cartons=GREATEST(counted_cartons,allocated_cartons);
IF EXISTS (SELECT 1 FROM information_schema.table_constraints
WHERE constraint_schema='baiyue_firstleg' AND table_name='fl_dropship_pallet_task'
AND constraint_name='chk_dropship_task_cartons') THEN
ALTER TABLE fl_dropship_pallet_task DROP CHECK chk_dropship_task_cartons;
END IF;
ALTER TABLE fl_dropship_pallet_task
ADD CONSTRAINT chk_dropship_task_cartons
CHECK (allocated_cartons<=counted_cartons AND counted_cartons<=total_cartons);
IF EXISTS (SELECT 1 FROM information_schema.columns
WHERE table_schema='baiyue_firstleg' AND table_name='fl_dropship_pallet_carton'
AND column_name='operation_id')
AND NOT EXISTS (SELECT 1 FROM information_schema.columns
WHERE table_schema='baiyue_firstleg' AND table_name='fl_dropship_pallet_carton'
AND column_name='count_operation_id') THEN
ALTER TABLE fl_dropship_pallet_carton
CHANGE COLUMN operation_id count_operation_id VARCHAR(128) NOT NULL
COMMENT '逐箱清点幂等操作ID';
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
WHERE table_schema='baiyue_firstleg' AND table_name='fl_dropship_pallet_carton'
AND column_name='expected_sku_quantity') THEN
ALTER TABLE fl_dropship_pallet_carton
ADD COLUMN expected_sku_quantity INT UNSIGNED NULL AFTER box_code,
ADD COLUMN actual_sku_quantity INT UNSIGNED NULL AFTER expected_sku_quantity,
ADD COLUMN discrepancy_status VARCHAR(24) NULL AFTER actual_sku_quantity,
ADD COLUMN discrepancy_remark VARCHAR(500) NULL AFTER discrepancy_status,
ADD COLUMN bind_operation_id VARCHAR(128) NULL AFTER count_operation_id,
ADD COLUMN last_operation_id VARCHAR(128) NULL AFTER bind_operation_id,
ADD COLUMN counted_by BIGINT UNSIGNED NULL AFTER last_operation_id,
ADD COLUMN counted_by_name VARCHAR(64) NULL AFTER counted_by,
ADD COLUMN counted_at DATETIME(3) NULL AFTER counted_by_name;
END IF;
UPDATE fl_dropship_pallet_carton carton
LEFT JOIN fl_inbound_carton_label label ON label.id=carton.carton_label_id
SET carton.expected_sku_quantity=COALESCE(carton.expected_sku_quantity,label.units_per_carton,1),
carton.actual_sku_quantity=COALESCE(carton.actual_sku_quantity,label.units_per_carton,1),
carton.discrepancy_status=COALESCE(carton.discrepancy_status,'MATCH'),
carton.bind_operation_id=COALESCE(carton.bind_operation_id,carton.count_operation_id),
carton.last_operation_id=COALESCE(carton.last_operation_id,carton.count_operation_id),
carton.counted_by=COALESCE(carton.counted_by,carton.bound_by),
carton.counted_by_name=COALESCE(carton.counted_by_name,carton.bound_by_name),
carton.counted_at=COALESCE(carton.counted_at,carton.bound_at);
ALTER TABLE fl_dropship_pallet_carton
MODIFY COLUMN pallet_id BIGINT UNSIGNED NULL COMMENT '所属组托托盘ID;已清点待绑托时为空',
MODIFY COLUMN box_code VARCHAR(80) NOT NULL COMMENT '稳定箱码',
MODIFY COLUMN expected_sku_quantity INT UNSIGNED NOT NULL COMMENT '箱唛冻结的应收SKU数量',
MODIFY COLUMN actual_sku_quantity INT UNSIGNED NOT NULL COMMENT 'PDA确认的实收SKU数量',
MODIFY COLUMN discrepancy_status VARCHAR(24) NOT NULL COMMENT '差异状态:MATCH或ACCEPTED_VARIANCE',
MODIFY COLUMN last_operation_id VARCHAR(128) NOT NULL COMMENT '最后一次绑托或换托操作幂等号',
MODIFY COLUMN counted_by BIGINT UNSIGNED NOT NULL COMMENT '清点操作人ID',
MODIFY COLUMN counted_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '清点时间',
MODIFY COLUMN bound_by BIGINT UNSIGNED NULL COMMENT '上托操作人ID',
MODIFY COLUMN bound_at DATETIME(3) NULL COMMENT '上托时间';
IF NOT EXISTS (SELECT 1 FROM information_schema.statistics
WHERE table_schema='baiyue_firstleg' AND table_name='fl_dropship_pallet_carton'
AND index_name='uk_dropship_carton_count_operation') THEN
ALTER TABLE fl_dropship_pallet_carton
ADD UNIQUE KEY uk_dropship_carton_count_operation (count_operation_id);
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.statistics
WHERE table_schema='baiyue_firstleg' AND table_name='fl_dropship_pallet_carton'
AND index_name='idx_dropship_carton_bind_operation') THEN
ALTER TABLE fl_dropship_pallet_carton
ADD KEY idx_dropship_carton_bind_operation (task_id,bind_operation_id);
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_plan_item'
AND column_name='unit_type') THEN
ALTER TABLE fl_loading_plan_item
ADD COLUMN unit_type VARCHAR(24) NOT NULL DEFAULT 'PACKAGE' AFTER product_quantity,
ADD COLUMN pallet_id BIGINT UNSIGNED NULL AFTER unit_type,
ADD COLUMN pallet_no VARCHAR(32) NULL AFTER pallet_id,
ADD COLUMN indivisible TINYINT(1) NOT NULL DEFAULT 0 AFTER pallet_no;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_plan_item'
AND column_name='active_assignment_key') THEN
ALTER TABLE fl_loading_plan_item
ADD COLUMN active_assignment_key VARCHAR(96)
GENERATED ALWAYS AS (CASE WHEN deleted=0 THEN CONCAT(CASE WHEN pallet_id IS NULL THEN 'D:0' ELSE CONCAT('P:',pallet_id) END,':',inbound_detail_id) ELSE NULL END) STORED
COMMENT '普通明细或已封托托盘明细的有效唯一锁' AFTER active_inbound_detail_id;
END IF;
IF EXISTS (SELECT 1 FROM information_schema.statistics
WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_plan_item'
AND index_name='uk_loading_item_plan_detail') THEN
ALTER TABLE fl_loading_plan_item DROP INDEX uk_loading_item_plan_detail;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.statistics
WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_plan_item'
AND index_name='uk_loading_item_plan_assignment') THEN
ALTER TABLE fl_loading_plan_item
ADD UNIQUE KEY uk_loading_item_plan_assignment (loading_plan_id,active_assignment_key);
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.statistics
WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_plan_item'
AND index_name='idx_loading_item_pallet') THEN
ALTER TABLE fl_loading_plan_item ADD KEY idx_loading_item_pallet (pallet_id,deleted);
END IF;
END$$
DELIMITER ;
CALL converge_dropship_palletization_schema();
DROP PROCEDURE IF EXISTS converge_dropship_palletization_schema;
-- Auth 登录手机号只从 IAM 中唯一归属的中国大陆手机号回填;存量重复号保持 NULL。
USE baiyue_auth;
DROP PROCEDURE IF EXISTS auth_add_login_phone;