Files
KCGL/db_migrations/add_stocktake_draft_company_name.sql
yueli 6586d3cb75 feat(stocktake): 盘点草稿表增加公司隔离字段
stocktake_draft 原本没有任何公司维度,导致开启新盘点清空整表时会误删
其他公司的进度,扫码时也无法区分不同公司的同码物料。

- StocktakeDraft 增加 company_name(带索引),to_dict 同步输出
- 新增迁移 add_stocktake_draft_company_name.sql:加列 + (company_name,
  session_id) 复合索引;存量行保持 NULL(超管仍可见),不做删除

执行: docker exec -i inventory_db psql -U test -d inventory_system < db_migrations/add_stocktake_draft_company_name.sql
2026-09-11 11:33:04 +08:00

33 lines
1.6 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.

-- =============================================================================
-- 一次性迁移:盘点草稿表增加公司隔离键
-- stocktake_draft.company_name varchar(255)
--
-- 背景
-- 改造前 stocktake_draft 没有任何公司维度,导致三个跨公司污染问题:
-- 1. /draft/start-new 调用 StocktakeDraft.query.all() 清空**整张表**
-- 任一库管开启新盘点会删掉其他公司所有人的盘点进度;
-- 2. get_stock_info() 全局按 barcode/sku 匹配三张库存表,不同公司同码
-- 物料会互相串货;
-- 3. 去重键 (session_id, uuid) 不含公司,跨公司同码记录互相覆盖。
--
-- 取值来源
-- material_base.company_name公司的真实载体是字符串不是 id
-- 普通用户由 get_current_company_filter() 从 JWT 强制取本公司;
-- 超管/跨域用户未显式指定公司时为 NULL —— NULL 表示「不过滤公司」。
--
-- 存量数据
-- 保留不动(本脚本不做 DELETE。存量行 company_name 为 NULL
-- 普通用户按公司过滤后看不到,超管仍可见。
--
-- 执行: docker exec -i inventory_db psql -U test -d inventory_system < 本文件
-- =============================================================================
BEGIN;
ALTER TABLE stocktake_draft ADD COLUMN IF NOT EXISTS company_name varchar(255);
-- 盘点会话的所有查询都会带上 company_name 过滤,故建复合索引而非单列索引
CREATE INDEX IF NOT EXISTS ix_stocktake_draft_company_session
ON stocktake_draft(company_name, session_id);
COMMIT;