feat(bom): BOM 子件引用版本与归档 数据库迁移
- bom_table/bom_draft_table 加 child_bom_no/child_bom_version(子件引用的自制BOM版本) - bom_table 加 is_archived 归档标记(仍启用可查看/编辑,但不再作为子件版本候选) - 回填 60 行自制件子件引用版本,4 个多版本自制件按业务口径(79/92/226/1905) - 3 套占位/废弃配方改标归档并恢复启用
This commit is contained in:
72
db_migrations/add_bom_child_version_columns.sql
Normal file
72
db_migrations/add_bom_child_version_columns.sql
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
-- =============================================================================
|
||||||
|
-- 一次性迁移:BOM 自制件子件"选版本"落库
|
||||||
|
-- -----------------------------------------------------------------------------
|
||||||
|
-- 目标:
|
||||||
|
-- 1. bom_table / bom_draft_table 增加 child_bom_no、child_bom_version 两列
|
||||||
|
-- (子件引用的自制 BOM 配方版本,外购件子件为 NULL)
|
||||||
|
-- 2. 停用 3 套"占位/废弃"配方(is_enabled=false),使其退出版本下拉候选:
|
||||||
|
-- - parent_id=79 (四代16线激光雷达安装套件V1J) ULR16-B2 V1.0 (仅1行: 侧面壳, 已被 ULR16-B2V1J V1.0 覆盖)
|
||||||
|
-- - parent_id=226 (物联智能电源控制器V1J) TF-A4 V1.0 (挂占位件 Too9999)
|
||||||
|
-- - parent_id=92 (机载SUC控制器-四代一体机V1J) UHRL-B8V1J V2.0 (挂占位件 OS9999, 未维护完)
|
||||||
|
-- 3. 回填 bom_table 中所有"自制件子件引用行"的 child_bom_* 两列,
|
||||||
|
-- 值 = 该子件作为父件时"最新启用配方"(version 倒序取第一条)。
|
||||||
|
-- 停用占位后: 79→ULR16-B2V1J V1.0, 226→TF-A4V1J V1.0, 92→UHRL-B8V1J V1.1;
|
||||||
|
-- 1905 两版本仍启用 → 取 V1.1 (业务确认: 父件 LTFJ1-A2 V1.0/V2.0 两处引用均用子件 V1.1)。
|
||||||
|
-- 随后以 4 个多版本自制件的人工确认值显式覆盖,作为兜底与可读性依据。
|
||||||
|
--
|
||||||
|
-- 执行方式: docker exec -i inventory_db psql -U test -d inventory_system < 本文件
|
||||||
|
-- 注意: 一次性迁移,勿在生产重复执行。若后端启用 Redis 缓存(bom:tree:*),
|
||||||
|
-- 部署后需清缓存或重启后端,避免 12h 内命中旧推导值。
|
||||||
|
-- =============================================================================
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
-- 1. 加列(幂等,可容忍重复执行)
|
||||||
|
ALTER TABLE bom_table ADD COLUMN IF NOT EXISTS child_bom_no varchar(100);
|
||||||
|
ALTER TABLE bom_table ADD COLUMN IF NOT EXISTS child_bom_version varchar(50);
|
||||||
|
ALTER TABLE bom_draft_table ADD COLUMN IF NOT EXISTS child_bom_no varchar(100);
|
||||||
|
ALTER TABLE bom_draft_table ADD COLUMN IF NOT EXISTS child_bom_version varchar(50);
|
||||||
|
|
||||||
|
-- 2. 停用占位/废弃配方(仅退出启用,不删除数据)
|
||||||
|
UPDATE bom_table SET is_enabled = FALSE
|
||||||
|
WHERE is_enabled = TRUE AND (
|
||||||
|
(parent_id = 79 AND bom_no = 'ULR16-B2' AND version = 'V1.0')
|
||||||
|
OR (parent_id = 226 AND bom_no = 'TF-A4' AND version = 'V1.0')
|
||||||
|
OR (parent_id = 92 AND bom_no = 'UHRL-B8V1J' AND version = 'V2.0')
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 3a. 通用回填:引用行(child_id 作为父件存在启用配方) → 该 child 的最新启用配方
|
||||||
|
UPDATE bom_table b
|
||||||
|
SET child_bom_no = t.bom_no,
|
||||||
|
child_bom_version = t.version
|
||||||
|
FROM (
|
||||||
|
SELECT parent_id, bom_no, version
|
||||||
|
FROM (
|
||||||
|
SELECT parent_id, bom_no, version,
|
||||||
|
row_number() OVER (
|
||||||
|
PARTITION BY parent_id
|
||||||
|
ORDER BY version DESC, bom_no DESC
|
||||||
|
) AS rn
|
||||||
|
FROM (
|
||||||
|
SELECT DISTINCT parent_id, bom_no, version
|
||||||
|
FROM bom_table
|
||||||
|
WHERE is_enabled = TRUE
|
||||||
|
) d
|
||||||
|
) x
|
||||||
|
WHERE rn = 1
|
||||||
|
) t
|
||||||
|
WHERE b.child_bom_no IS NULL
|
||||||
|
AND b.child_bom_version IS NULL
|
||||||
|
AND b.child_id = t.parent_id;
|
||||||
|
|
||||||
|
-- 3b. 人工确认值显式覆盖(业务口径,与 3a 结果一致,作兜底/留痕)
|
||||||
|
UPDATE bom_table SET child_bom_no = 'ULR16-B2V1J', child_bom_version = 'V1.0'
|
||||||
|
WHERE child_id = 79;
|
||||||
|
UPDATE bom_table SET child_bom_no = 'TF-A4V1J', child_bom_version = 'V1.0'
|
||||||
|
WHERE child_id = 226;
|
||||||
|
UPDATE bom_table SET child_bom_no = 'UHRL-B8V1J', child_bom_version = 'V1.1'
|
||||||
|
WHERE child_id = 92;
|
||||||
|
UPDATE bom_table SET child_bom_no = 'TFJ1-A2V1J', child_bom_version = 'V1.1'
|
||||||
|
WHERE child_id = 1905;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
36
db_migrations/archive_bom_placeholder_recipes.sql
Normal file
36
db_migrations/archive_bom_placeholder_recipes.sql
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
-- =============================================================================
|
||||||
|
-- 修正:占位配方"停用"改为"归档"(恢复 is_enabled 的启停语义)
|
||||||
|
-- -----------------------------------------------------------------------------
|
||||||
|
-- 背景: 上一版把 3 套占位配方 is_enabled=false 以退出候选,但那会影响 BOM
|
||||||
|
-- 自身的启停/编辑体验。现改为独立"归档"标记 is_archived:
|
||||||
|
-- 1) 加 bom_table.is_archived 列(默认 false)
|
||||||
|
-- 2) 撤销对 3 套占位配方的停用(is_enabled 恢复 TRUE,可查看/编辑/启停)
|
||||||
|
-- 3) 将该 3 套标记 is_archived=TRUE:仍启用,但不再作为其它 BOM
|
||||||
|
-- 子件的"版本候选"与可引用版本(候选/校验/回退读取均排除归档)
|
||||||
|
-- 被归档配方:
|
||||||
|
-- parent_id=79 (四代16线激光雷达安装套件V1J) ULR16-B2 V1.0
|
||||||
|
-- parent_id=226 (物联智能电源控制器V1J) TF-A4 V1.0
|
||||||
|
-- parent_id=92 (机载SUC控制器-四代一体机V1J) UHRL-B8V1J V2.0
|
||||||
|
-- 执行: docker exec -i inventory_db psql -U test -d inventory_system < 本文件
|
||||||
|
-- =============================================================================
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
-- 1) 加归档列(幂等)
|
||||||
|
ALTER TABLE bom_table ADD COLUMN IF NOT EXISTS is_archived boolean NOT NULL DEFAULT false;
|
||||||
|
|
||||||
|
-- 2) 撤销停用:恢复 is_enabled(仅作用于我们上次停用的这 3 行)
|
||||||
|
UPDATE bom_table SET is_enabled = TRUE
|
||||||
|
WHERE is_enabled = FALSE AND (
|
||||||
|
(parent_id = 79 AND bom_no = 'ULR16-B2' AND version = 'V1.0')
|
||||||
|
OR (parent_id = 226 AND bom_no = 'TF-A4' AND version = 'V1.0')
|
||||||
|
OR (parent_id = 92 AND bom_no = 'UHRL-B8V1J' AND version = 'V2.0')
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 3) 标记归档(幂等,重复执行无副作用)
|
||||||
|
UPDATE bom_table SET is_archived = TRUE
|
||||||
|
WHERE (parent_id = 79 AND bom_no = 'ULR16-B2' AND version = 'V1.0')
|
||||||
|
OR (parent_id = 226 AND bom_no = 'TF-A4' AND version = 'V1.0')
|
||||||
|
OR (parent_id = 92 AND bom_no = 'UHRL-B8V1J' AND version = 'V2.0');
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
Reference in New Issue
Block a user