fix(stocktake): 修复盘库重复记录 — 去重条件去掉 user_id
根因: draft/add 用 (user_id, uuid, session_id) 匹配去重, 同一盘点单多个用户(手机/平板不同账号)操作同一物料时, 每个用户各建一条 → 重复记录。 修复: - 去重改为 (session_id, uuid) 唯一,不按 user_id 隔离 - 已存在则更新数量并记录最后操作用户 - 清理现有重复数据(保留每组最小id) - 新增唯一索引 uq_stocktake_draft_session_uuid 防未来再重复 数据库需执行: DELETE FROM stocktake_draft a USING stocktake_draft b WHERE a.session_id=b.session_id AND a.uuid=b.uuid AND a.id>b.id; CREATE UNIQUE INDEX IF NOT EXISTS uq_stocktake_draft_session_uuid ON stocktake_draft(session_id, uuid);
This commit is contained in:
@ -602,8 +602,10 @@ def add_draft():
|
||||
# 调整后的账面可用库存 = 账面总库存 - 借出未还数量
|
||||
adjusted_stock_qty = stock_qty - total_borrowed
|
||||
|
||||
# 查找是否已存在
|
||||
draft = StocktakeDraft.query.filter_by(user_id=user_id, uuid=uuid, session_id=session_id).first()
|
||||
# ★ 查找是否已存在:按 (session_id, uuid) 去重,不按 user_id 隔离
|
||||
# 修复: 同一盘点单多个用户(手机/平板不同账号)操作同一物料时,
|
||||
# 之前按 user_id 匹配导致每个用户各建一条 → 重复记录
|
||||
draft = StocktakeDraft.query.filter_by(uuid=uuid, session_id=session_id).first()
|
||||
|
||||
if draft:
|
||||
# 如果已存在,更新数量和时间
|
||||
@ -613,6 +615,8 @@ def add_draft():
|
||||
draft.diff_qty = quantity - adjusted_stock_qty
|
||||
draft.source_table = source_table
|
||||
draft.stock_id = stock_id
|
||||
# 更新操作用户(最后操作者)
|
||||
draft.user_id = user_id
|
||||
# ★ 新增: 保存备注
|
||||
if remark is not None:
|
||||
draft.remark = remark.strip() if isinstance(remark, str) else remark
|
||||
|
||||
Reference in New Issue
Block a user