From 6ba20fa3db628f91ce8621947f35badb85e0bd09 Mon Sep 17 00:00:00 2001 From: yueli Date: Mon, 31 Aug 2026 15:18:47 +0800 Subject: [PATCH] =?UTF-8?q?fix(stocktake):=20=E4=BF=AE=E5=A4=8D=E7=9B=98?= =?UTF-8?q?=E5=BA=93=E9=87=8D=E5=A4=8D=E8=AE=B0=E5=BD=95=20=E2=80=94=20?= =?UTF-8?q?=E5=8E=BB=E9=87=8D=E6=9D=A1=E4=BB=B6=E5=8E=BB=E6=8E=89=20user?= =?UTF-8?q?=5Fid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: 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); --- inventory-backend/app/api/v1/inbound/stock.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/inventory-backend/app/api/v1/inbound/stock.py b/inventory-backend/app/api/v1/inbound/stock.py index 5b683ec..bcd9084 100644 --- a/inventory-backend/app/api/v1/inbound/stock.py +++ b/inventory-backend/app/api/v1/inbound/stock.py @@ -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