aeb852c64d9ef4a2238b854a4b809955ffe353f5
盘点原本只有 stocktake_draft(草稿行),没有会话实体,导致三个问题: 1. 盲盘/明盘、全盘/抽盘这类**会话级配置**无处存放,塞进草稿表就要每行 冗余一份,改一次配置得 UPDATE 上万行; 2. 「空会话」无法表示 —— 会话开了但还没扫码时草稿表里没有行,旧实现只能 靠 max(scan_time) 猜哪个会话活跃,于是新开的空会话会被其他 PDA 忽略、 反而加入上一轮的旧会话,多端协同直接分裂; 3. 没有状态字段,generate-missing 跑完后旧会话仍被当成活跃。 本表把活跃会话判定变成 company_name + status='active' 的精确查询。 迁移的要点: - 唯一部分索引 uq_stocktake_session_one_active 保证「一个公司同时只有一个 活跃会话」,从数据库层挡住多台 PDA 并发开启导致的进度分裂; 因此 /draft/start-new 必须先把原有活跃会话置为 finished 再插入新记录。 - CHECK 约束限定 mode/scope_type/status 的取值域。 - 不回填存量:旧草稿没有对应会话行,部署后显示「无进行中的盘点」,数据不丢。 执行: docker exec -i inventory_db psql -U test -d inventory_system < db_migrations/add_stocktake_session.sql
Description
No description provided
Languages
Python
70.2%
CSS
14.9%
Vue
7.6%
HTML
4.2%
TypeScript
3.1%