Files
KCGL/db_migrations/add_bom_remark.sql
yueli cc80fdd9c9 fix(bom): 增加 bom_remark 列,为 BOM 级备注提供存储位置
bom_table 是子件明细表(一行 = 一个子件),表里只有子件级的 remark 列,
BOM 级备注没有任何地方可存。前端一直有备注输入框、提交时也确实放进了
payload,但后端 save_bom 收到后无处可写,只能静默丢弃。

沿用 parent_id / is_enabled 既有的冗余写法:同一 BOM 版本的每一行存同一
份值,读取时取首行。bom_draft_table 同步加列,保证草稿暂存与发布期间
不丢失。与既有 remark(子件级)语义分离,互不干扰。

存量数据无法回填——历史上填过的备注从未入库,只能从本迁移之后开始记录。

执行方式: docker exec -i inventory_db psql -U test -d inventory_system < db_migrations/add_bom_remark.sql
2026-09-21 14:13:13 +08:00

37 lines
2.0 KiB
PL/PgSQL
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.

-- =============================================================================
-- 一次性迁移BOM 级备注落库
-- -----------------------------------------------------------------------------
-- 背景:
-- 前端 BomManage.vue 一直有"备注"输入框v-model="form.remark"),提交时也
-- 确实放进了 payloadBomManage.vue:1273但后端 BomService.save_bom() 从
-- 未读取 data['remark'],父件级备注被**静默丢弃**——填了、保存、再打开必为空。
--
-- 根因是数据模型缺位bom_table 是子件明细表(一行 = 一个子件),表里只有
-- 子件级的 remark 列,没有任何位置存放 BOM 级备注。
-- 连带 bug读取侧 get_bom_detail() 用 first.BomTable.remark第一个子件行的
-- 备注)冒充主表备注,所以查看时会显示某个子件的备注(如"白色")或空。
--
-- 方案:
-- bom_table / bom_draft_table 各增加 bom_remark 列,沿用 parent_id、is_enabled
-- 既有的冗余写法:同一 BOM 版本的每一行存同一份值,读取时取首行。
-- 与既有 remark子件级语义分离互不干扰。
--
-- 存量数据:
-- 无法回填 —— 历史上填过的备注从未入库,任何位置都找不到,只能从本迁移
-- 之后开始记录。这是本次修复的已知代价。
--
-- 执行方式: docker exec -i inventory_db psql -U test -d inventory_system < 本文件
-- 注意: 若后端启用 Redis 缓存(bom:tree:*),部署后需清缓存或重启后端,
-- 避免 12h 内命中旧值。
-- =============================================================================
BEGIN;
ALTER TABLE bom_table ADD COLUMN IF NOT EXISTS bom_remark text;
ALTER TABLE bom_draft_table ADD COLUMN IF NOT EXISTS bom_remark text;
COMMENT ON COLUMN bom_table.bom_remark IS 'BOM级备注(父件级,冗余存于每行,读取取首行)';
COMMENT ON COLUMN bom_draft_table.bom_remark IS 'BOM级备注(父件级,冗余存于每行,读取取首行)';
COMMIT;