-- 隧道物料流转:MySQL 增量补丁 -- 前置条件:已执行 20260922_test_data_batch_mysql.sql,且数据库中存在 biz_test_batch。 -- 本补丁只生成脚本,不在应用启动时自动执行;执行前请备份数据库并由 DBA 审核。 -- 业务层将新托盘/新装填固定为 100 包,数据库不增加 capacity_packages = 100 -- 约束,以兼容已有历史非 100 包托盘数据。 -- 隧道主数据:一个客户现场下的隧道编号唯一;current_trace_no 表示当前混批溯源号。 CREATE TABLE biz_tunnel ( tunnel_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '隧道ID', test_batch_id BIGINT NULL COMMENT '测试数据批次ID;NULL表示正式数据', site_id BIGINT NOT NULL COMMENT '现场ID', tunnel_code VARCHAR(64) NOT NULL COMMENT '隧道编号', tunnel_name VARCHAR(100) NOT NULL COMMENT '隧道名称', current_trace_no VARCHAR(64) NULL COMMENT '当前隧道物料溯源号', current_trace_started_at DATETIME NULL COMMENT '当前溯源批次开始时间', status CHAR(1) NOT NULL DEFAULT '0' COMMENT '状态(0正常 1停用)', create_by VARCHAR(64) NULL DEFAULT '' COMMENT '创建者', create_time DATETIME NULL COMMENT '创建时间', update_by VARCHAR(64) NULL DEFAULT '' COMMENT '更新者', update_time DATETIME NULL COMMENT '更新时间', remark VARCHAR(500) NULL COMMENT '备注', PRIMARY KEY (tunnel_id), KEY idx_biz_tunnel_test_batch_id (test_batch_id), CONSTRAINT uq_biz_tunnel_site_code UNIQUE (site_id, tunnel_code), CONSTRAINT fk_biz_tunnel_test_batch_id FOREIGN KEY (test_batch_id) REFERENCES biz_test_batch (batch_id), CONSTRAINT fk_biz_tunnel_site FOREIGN KEY (site_id) REFERENCES biz_customer_site (site_id), CONSTRAINT ck_biz_tunnel_status CHECK (status IN ('0', '1')) ) ENGINE=InnoDB COMMENT='客户现场隧道主数据表'; -- 使用记录:保留入隧隧道、溯源号和生产批次快照;产线改为可选。 ALTER TABLE biz_usage_record ADD COLUMN tunnel_id BIGINT NULL COMMENT '隧道ID;历史记录可能为空' AFTER site_id, ADD COLUMN trace_no VARCHAR(64) NULL COMMENT '隧道物料内部溯源号;历史记录可能为空' AFTER tunnel_id, ADD COLUMN batch_no_snapshot VARCHAR(64) NULL COMMENT '生产批次快照;历史记录可能为空' AFTER trace_no, MODIFY COLUMN line_id BIGINT NULL COMMENT '产线ID(可选)', ADD CONSTRAINT fk_biz_usage_record_tunnel FOREIGN KEY (tunnel_id) REFERENCES biz_tunnel (tunnel_id); -- 退回明细:保存申请时的隧道、溯源号和批次快照。 ALTER TABLE biz_return_item ADD COLUMN tunnel_id_snapshot BIGINT NULL COMMENT '申请时隧道ID快照' AFTER active_filling_id_snapshot, ADD COLUMN trace_no_snapshot VARCHAR(64) NULL COMMENT '申请时物料溯源号快照' AFTER tunnel_id_snapshot, ADD COLUMN batch_no_snapshot VARCHAR(64) NULL COMMENT '申请时生产批次快照' AFTER trace_no_snapshot, ADD CONSTRAINT fk_biz_return_item_tunnel FOREIGN KEY (tunnel_id_snapshot) REFERENCES biz_tunnel (tunnel_id); -- 当前库存:隧道归属和当前溯源号随托盘一起锁定维护。 ALTER TABLE biz_pallet_inventory ADD COLUMN tunnel_id BIGINT NULL COMMENT '当前隧道ID' AFTER site_id, ADD COLUMN trace_no VARCHAR(64) NULL COMMENT '当前隧道物料溯源号' AFTER tunnel_id, ADD CONSTRAINT fk_biz_pallet_inventory_tunnel FOREIGN KEY (tunnel_id) REFERENCES biz_tunnel (tunnel_id); -- 流转事件:为入隧、使用、退回保留隧道和溯源快照。 ALTER TABLE biz_pallet_event ADD COLUMN before_tunnel_id BIGINT NULL COMMENT '变更前隧道ID' AFTER before_site_id, ADD COLUMN after_tunnel_id BIGINT NULL COMMENT '变更后隧道ID' AFTER after_site_id, ADD COLUMN trace_no VARCHAR(64) NULL COMMENT '事件关联物料溯源号' AFTER after_remaining_packages, ADD COLUMN batch_no_snapshot VARCHAR(64) NULL COMMENT '事件生产批次快照' AFTER trace_no, ADD CONSTRAINT fk_biz_pallet_event_before_tunnel FOREIGN KEY (before_tunnel_id) REFERENCES biz_tunnel (tunnel_id), ADD CONSTRAINT fk_biz_pallet_event_after_tunnel FOREIGN KEY (after_tunnel_id) REFERENCES biz_tunnel (tunnel_id); ALTER TABLE biz_pallet_event DROP CHECK ck_biz_pallet_event_event_type, ADD CONSTRAINT ck_biz_pallet_event_event_type CHECK ( event_type IN ( 'INBOUND_CONFIRMED', 'FILLING_CONFIRMED', 'SHIPMENT_CONFIRMED', 'TUNNEL_ENTERED', 'USAGE_RECORDED', 'RETURN_REQUESTED', 'RETURN_CONFIRMED' ) ); -- 菜单:只提供隧道查询/新增/修改权限,不提供物理删除权限。 INSERT INTO sys_menu ( menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark ) SELECT 520, '隧道资料', 121, 7, 'tunnel', 'master/tunnel/index', '', '', 1, 0, 'C', '0', '0', 'master:tunnel:list', '#', 'admin', SYSDATE(), '', NULL, '隧道资料菜单' WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 520); INSERT INTO sys_menu ( menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark ) SELECT 1116, '隧道查询', 520, 1, '#', '', '', '', 1, 0, 'F', '0', '0', 'master:tunnel:query', '#', 'admin', SYSDATE(), '', NULL, '' WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 1116); INSERT INTO sys_menu ( menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark ) SELECT 1117, '隧道新增', 520, 2, '#', '', '', '', 1, 0, 'F', '0', '0', 'master:tunnel:add', '#', 'admin', SYSDATE(), '', NULL, '' WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 1117); INSERT INTO sys_menu ( menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark ) SELECT 1118, '隧道修改', 520, 3, '#', '', '', '', 1, 0, 'F', '0', '0', 'master:tunnel:edit', '#', 'admin', SYSDATE(), '', NULL, '' WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 1118); -- 重要:DDL 会隐式提交,不能依赖事务整体回滚;本文件未执行任何数据库操作。