用户手册
帮助中心/用户手册/库存:查询、调整、盘点与调拨

库存:查询、调整、盘点与调拨

最后更新 2026-10-13

桌面/手机查库存、做直接调整、跑循环盘点(含 ABC 自动盘点)、做库间调拨。

WMS 库存以 append-only 台账(wms_inventory_ledger)为唯一真相源:一切库存变动都写台账行(正/负 qty_change),不直接改余额;余额投影由系统同步维护;台账在数据库层禁止 UPDATE/DELETE。

查库存#

  • 桌面端 WMS → Inventory:明细视图(支持 SKU/库位/状态/批次/序列号/渠道等过滤)和汇总视图(按商品+状态+类型汇总数量)。
  • 手机端库存页:SKU/产品名搜索,卡片展示 SKU/品名/库位/数量(纯查询)。
  • 批次库存按效期升序(FEFO)。临期预警(expiry-alerts?days=90):列出 available 状态、qty>0、效期 ≤ 今天+days 的批次,返回 days_to_expiry。

库存调整(直接调整模式)#

库存调整直接写台账——不存在"调整单"表头状态机,也没有审批流。当前入口只有 API(POST /api/wms/inventory/adjust),桌面端没有专用录入页;调用方需要显式持有 wms.inventory_adjust 权限点。

  1. 必填:warehouse_id / location_id / item_id / reason_code(自由文本,如 damage/lost/found;WMS 没有原因码主数据)。
  2. 数量二选一填 qty_after(调到目标值)或 qty_delta(增减量,非零);两个都填或都不填 → 校验失败;qty_after 且 delta=0 → 直接返回 {adjusted:false} 不写台账。
  3. 状态只能是 available / hold / damaged(默认 available)。负调整(扣减)先校验可用量(不足 → WMS_STOCK_001);盘点锁定库位 → LOCATION_LOCKED。
  4. 写一条 transaction_type='adjust' 台账行,qty_change = delta(正=调增,负=调减),reason_code 必填入库。

盘点#

  1. 建任务(桌面/API):scope 三选一——cycle(循环盘点,传 location_ids 或 lines[{location_id,item_id}])/ full(全盘:按仓库全部有库存的库位×商品自动生成,上限 5000 行)/ spot(抽查);count_type:blind 盲盘 / open 明盘(默认 open)。创建时按余额记 system_qty 快照;与已有未完成盘点任务库位重叠 → 拒绝创建(这就是锁定生效点)。
  2. 手机执行:按库位/产品逐行输入实盘数 → enter-count 单行提交(已盘行显示系统数/实盘数/差异;已盘过的行再次录入 → recounted)。任务 pending/assigned → in_progress。
  3. 桌面审批:approve 通过 → 行 counted/recounted → approved;驳回(重盘)→ 行 → pending 并清空实盘数/差异,任务保持进行中。
  4. 过账:post 仅处理 approved 行(variance_qty=0 的行跳过不写台账)。盘盈写 adjust(reason_code='found'),盘亏写 adjust(reason_code='lost'),reference_type='count_task'。全部 approved 行处理完 → 任务 completed,锁自动解除。
  5. ABC 自动盘点:POST /api/wms/count-tasks/abc,按商品 abc_class 的盘点间隔到期自动生成 cycle 任务。默认 A=7 天 / B=30 天 / C=90 天,可按仓库配置 abc_interval_{a,b,c}_days 覆盖,也可在 body 传 interval_days 覆盖;供 cron/运营手动触发。

库间调拨#

调拨是单据式流程(起草→提交→审批→发出→收货),当前只有 API 入口(桌面端暂无单据页)。单号 TRF-YYYYMMDD-XXXX。同仓调库位也允许(库位不同即可)。

  1. 建单 → draft;submit → submitted。
  2. approve:通过 → approved(逐行校验调出库位可用量,不足 → WMS_STOCK_001);驳回 → rejected。
  3. ship → in_transit:再次校验可用量(防审批后被他人领用)→ 写台账 transfer 双腿(调出库位 available −qty / 同库位 in_transit +qty)。
  4. receive → completed:调出库位 in_transit −qty / 调入库位 available +qty;明细行 pending → done。cancel 仅 draft/submitted/approved 可取消;in_transit 不可取消,只能收货完成。

库存状态#

available(可用)→ 出库/拣选占用 → allocated(已分配)→ 发运 → shipped;质检/异常 Hold → hold;破损 → damaged;调拨发出后调出库位记 in_transit(在途)。调整只能指定 available/hold/damaged。

盘点锁定:有未完成盘点任务覆盖的库位被锁定——调整/移动/补货上架都禁止(LOCATION_LOCKED)。任务 completed/cancelled 后锁自动解除。