Files
KCGL/inventory-backend/app/api/v1
yueli 3f964614e3 feat(stocktake): start-new 落库会话配置,active-session 改查会话表
- /draft/start-new 接收 mode / scope_type / scope_config,插入一条
  StocktakeSession(status='active')。同一公司原有活跃会话先置为 finished
  (同一事务),否则会撞 uq_stocktake_session_one_active。
  公司取值:普通用户强制本公司;跨域角色必须显式指定,否则 400。
  scope_type 目前只放行 'full' —— 抽盘的范围过滤尚未实现,此时放行会导致
  结束盘点时 generate-missing 把抽盘范围外的库存批量标成盘亏。

- /draft/active-session 改为直接查 stocktake_session
  (company_name + status='active'),并返回 mode / scope_type 供前端展示。
  旧实现靠 max(scan_time) 从草稿行猜,空会话识别不了。

- /stocktake/generate-missing 漏盘比对完成后把会话置为 finished,
  否则 active-session 会继续把它当活跃会话,其他 PDA 会加入一个已结束的盘点。

实测:
  ① 超管+IRIS 创建 blind/full 会话 → 200
  ② SALES/IRIS 查活跃会话 → 拿到同一 session_id 与 mode=blind
     (scanned=0 的空会话也能查到,旧实现此处返回 null)
  ③ 再开一轮 → superseded_count=1,旧的转 finished
  ④ scope_type=active → 400「活跃库位抽盘尚未实现」
  ⑤ DB 层验证唯一索引拒绝重复活跃会话
2026-09-11 13:28:49 +08:00
..
2026-01-26 13:47:53 +08:00
2026-01-26 13:47:53 +08:00