33 lines
1.6 KiB
MySQL
33 lines
1.6 KiB
MySQL
|
|
-- =============================================================================
|
|||
|
|
-- 一次性迁移:盘点草稿表增加公司隔离键
|
|||
|
|
-- 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;
|