Skip to content

库存对账

库存对账 页面截图

这是整个系统的「体检表」:把每个商品(用 6 位 WMS 编号)排成一行,左边是仓库实际有几件,往右是系统算出来「要广播给平台的数字」,再往右是各平台(Takealot/Amazon/Makro)目前实际收到的数字。一眼抓出哪个商品对不上——缺对照、平台没跟上、还是已经卖超了。默认只显示有问题的,不让正常商品洗版。(广播=系统主动把可卖库存数推送给电商平台。)

谁会用到:仓库/营运操作员每天巡检用;管理员(admin)身分才能按「立即重算」。Nate 上线测试时会看这页确认广播值算对。

🧠 这一页的原理(白话)

这页每一格数字的来源就是一条铁则公式(从表头左到右一一对应):广播量 = max(0, WMS物理 − Pending订单 − DC预留 − 安全库存)。意思是「一批实物库存,扣掉所有已被占用的(已下单未出货的、已预留要送大仓补货的、刻意保留不上架的),剩下的才敢拿去各平台重复曝光卖」。四个减项缺一不可,这是 PDA 扫码有几小时延迟下避免超卖的核心。「先卖先扣」不是靠一段分配程式,而是这条公式的自然结果:同一批库存同时广播给三个平台,谁先卖掉、那张订单就立刻进 Pending、下次重算时广播值对所有平台同步下降,谁先吃谁先把池子吃小。max(0,…) 保证广播永不为负。各平台栏显示的是「我上次推给平台、平台现在收到的值」(不是即时去平台问的现况),所以正常情况这几格应该都等于 Ledger 广播。来源:cc-wms/src/services/ledger.ts computeLedgerUpdate;公式实作 max(0, wmsPhysical - pendingOrders - dcReserved - safetyBuffer)。

🖱️ 画面上的东西(分页 / 按钮 / 栏位)

类型名称是什么点了 / 用了会怎样⚠️ 注意
field大标题「库存对账」+ 副标题副标显示「实际 vs 平台广播 vs Pending — 共 N 个 SKU · 默认仅显示异常」,N 是符合目前分页+搜索条件的笔数,会随筛选变动纯文字显示,不可点
GET /api/recon 回传的 total
button导出对账表(下载图示)永远显示纯前端:把「目前画面上这张表(已套用搜索+差异类型+平台筛选后)看得到的那些列」整理成 CSV 表格档,直接下载到电脑,档名像 对账表_2026-06-16.csv。栏位有 WMS Code、商品、WMS物理、Pending(订单)、DC预留(补货)、Ledger广播、Takealot、Amz FBM、Amz FBA、Amz SF、Makro、状态、异常类型
无(纯前端 Blob 下载,不打后端)
安全。只是把已经看到的资料存成档案,不连线、不改任何东西。注意导出的是当下筛选后的范围,不是全量——要全量先把分页切到「全部」、清掉筛选再导
button立即重算(同步/转圈图示)永远显示呼叫后端重新计算每个 SKU 的广播值(重跑公式:物理−Pending−DC预留−安全库存),一次处理一万七千多个 SKU。按下当下按钮文字变「重算中…」并变灰防连点;完成跳提示「重算完成,处理 N 个 SKU」,整张表自动刷新。失败时右边出现红字(预设「重算失败,请稍后再试」)
POST /api/recon/recalculate(仅 admin)→ services/ledger.ts recalculateLedger
中-高(上线后)。这个动作会顺带把有变动的 SKU 推到平台(后端会触发推送队列)。关键安全阀:系统若设在「手动模式」(manual,ADR-037),重算照算但不自动推、变动留在帐本成为待推清单;只有「自动模式」(auto)才真的推。6/21 之前是安全的;6/21 起在自动模式下按它=可能真的改线上平台库存。无二次确认。仅管理员可用,每次都写 audit_log
tab异常预设选中。只看有问题的:差异、缺 map、超卖、或被冻结的(排除已停售)。右边小徽章=目前这批资料里「异常或冻结」的笔数点了下面表格只显示这一类,会重新打 API
GET /api/recon?filter=exception
tab已停售已下架商品的帐本残留(实际 0 件、没有任何平台对照、也没人订/没预留、广播 0),零超卖风险,独立归到这里免得淹没真问题。徽章=这批里「已停售」的笔数点了只看 discontinued 残留
GET /api/recon?filter=discontinued
tab已冻结被人手动冻结、暂停推送的 SKU。徽章=这批里被冻结的笔数点了只看 frozen=1 的 SKU
GET /api/recon?filter=frozen
tab全部全部 SKU 都列出来。徽章=后端回传的 total(全量)点了列出所有 SKU
GET /api/recon?filter=all
field搜索框(放大镜,占位字「搜索 WMS code 或商品名…」)永远显示输入字送到后端,依 WMS 编号或商品名过滤(不分大小写),即时生效、自动重新抓资料
GET /api/recon?search=…
field下拉「差异类型 (全部)」三个选项:差异—推送中 / 缺 map / 超卖纯前端在已载入资料上再筛一层。「差异—推送中」只看 exception=diff;「缺 map」同时筛 nomap 与 nomap_makro;「超卖」只看 exception=oversell(且都排除已冻结)
无(前端 filter)
field下拉「平台 (全部)」选项 Takealot / Amazon FBM / Amazon SF / Makro纯前端筛:选了只留「在那个平台有挂值(不是空的)」的列
无(前端 filter)
field右侧灰字「显示 X / N」X=目前画面表格实际显示几列;N=后端 total纯显示
columnWMS Code / 商品左边粗体等宽字是 6 位 WMS 编号,右边灰字是商品名(太长会用…截断)纯显示
columnWMS 物理仓库实际有几件(最近一次上传 xlsx 的数字)纯显示
columnPending (订单)已收单还没扣库存的数量。大于 0 时显示橙色「−数字」(例 −3),是 0 显示一个灰点「·」纯显示。这是公式第二项,会从可卖数先扣掉防超卖
columnDC 预留 (补货)DC 补货出货单预留的件数。大于 0 显示橙色「−数字」,否则灰点「·」纯显示。公式第三项,2026-06(ADR-040)才补上的第 4 项减项,含未取走草稿
columnLedger 广播系统算出来、要广播给平台的值。粗体;这个值是 0 时整个数字变红色(代表没货可卖,警示)纯显示。这是这页的核心数字。为 0 时点开抽屉看公式逐项即知是哪一项把它扣到 0
columnTakealot / Amz FBM / Amz SF / Makro这四个平台目前各自挂的库存值(上次推过去的值)。颜色规则:没对照→灰字「无 map」;平台值跟 Ledger 广播不一样→数字标橙色(提醒还没追平、可能推送中);一致→正常黑字纯显示
showCell 比对 broadcast
columnAmz FBA (只读)Amazon FBA 的值,标题就写「(只读)」。这栏永远灰色、不参与对账比较(FBA 货在亚马逊仓不归本地池管,只看不动)。空值显示「·」纯显示,不套用橙色对账配色
column状态显示一颗状态徽章纯显示,点不了
badgeFROZEN(红,带圆点)这个 SKU 被手动冻结、库存停止自动推送给平台想恢复就用该列的「解冻」钮
badge差异 推送中(橙,带圆点)平台收到的值跟广播对不上、平台还没追上(exception=diff)多半自己会好;久不消才查。这是正常现象(推送异步排队),不是 bug
badge缺 map(橙,带圆点)这商品还没建任何平台对照,所以不广播(nomap/nomap_makro)补好对照前这商品在所有平台都不会更新库存——去「映射管理」补对照
badge已超卖(红,带圆点)广播算出来是负的、占用超过实际库存(oversell)最优先处理:先冻结止血,再查订单/补货
badge已停售(灰,无圆点)0 件+无对照+全 0 的下架残留(discontinued),零风险一般忽略,它有自己的分页
badge正常(绿,带圆点)各平台收到的值都等于广播量,对得上不用管
button眼睛图示(详情)永远显示打开右侧 SKU 详情抽屉(看占用明细/平台分布/近期推送,并可在抽屉里做冻结/设安全库存/立即推送/新增覆写)
openSkuDetail → GET /api/ledger/:wmsCode/detail
安全(只是打开来看)
button雪花/冻结图示(冻结)只有「没被冻结」的列才显示点了也是打开同一个 SKU 详情抽屉(不会直接冻结)。真正的冻结要在抽屉底部再操作一次:先填冻结原因(必填)→ 点红色「确认冻结」
openFreeze(开抽屉)→ 抽屉确认 POST /api/sku/:wmsCode/freeze
按钮本身安全(只开抽屉)。抽屉里的「确认冻结」才是破坏性动作:停止该 SKU 自动推送
button同步/转圈图示(解冻)只有「已被冻结」的列才显示(跟冻结钮二选一)直接呼叫后端解冻这个 SKU,成功跳「已解冻 XXXXXX」,失败跳「解冻失败,请稍后再试」。解冻后系统会立刻只针对这个 SKU 重算一次广播量
POST /api/sku/:wmsCode/unfreeze(会触发 RECALCULATE_LEDGER 只重算这一个 SKU)
中。点下去立刻执行、没有二次确认弹窗。解冻=让这个 SKU 恢复被系统自动推送库存(恢复后下次重算/推送才会动平台,不直接写平台)
field空状态「无符合条件的 SKU」表格没有任何符合条件的列时显示纯显示
field错误横幅 / 「加载中…」抓资料失败时工具列下方出现红底红字中文错误(预设「对账数据加载失败,请稍后重试」);资料还在抓时表格位置显示「加载中…」纯显示,平时不出现

⚠️ 注意事项 / 别踩的坑

  • 本页「库存对账」≠「每日对账报告」,两者完全不同别混淆。本页是逐个 SKU 的「现况对照表」,比的是『我手上几件 vs 我现在告诉各平台几件 vs 各平台收到几件』(单一时钟,即时算);「每日对账」在『数据导入→同步中心→生成对账报告』里,比的是『昨天仓库快照 vs 今天仓库快照(物理库存守恒,找盘亏盘盈)』(两个时钟)。本页没有「忽略此笔」按钮——手册 03 讲的「忽略此笔」是那个每日对账,不要互相矛盾。
  • 看到 Takealot/平台那格跟 Ledger 广播不一样(橙色「差异 推送中」)不是 bug。橙色只代表平台收到的值暂时还没追上系统最新算出的广播值(推送是异步排队、不是即时)。过几分钟或按一次「立即重算」后会跟上变正常。短暂橙色差异是正常的,长时间不消才要查(点开抽屉看「近期推送」有没有 fail)。
  • 「缺 map」不等于「东西不见了」。缺 map 只是没绑平台对照,商品和库存都在,只是系统不知道要更新平台上哪个 listing。去「映射管理」补对照即可,别去动库存。补好对照前,这商品在所有平台都不会更新库存。
  • 「已停售」那一堆不用处理。它们是早就下架商品的帐本残留(0 件+无对照+全 0),零超卖零少卖风险。系统特地把它们踢出「异常」分页、独立放「已停售」,就是怕淹没真异常。平常忽略。
  • 四颗分页徽章里的『异常/已停售/已冻结』三颗,是用『目前抓回来的这一批资料』当场数的,所以切换分页时数字可能会变——这是计数口径,不是 bug。
  • Ledger 广播显示红色 0 要留意:代表系统现在告诉所有平台『这商品 0 件、别卖了』(可能真卖完、被 Pending/预留扣光、或安全库存设太高)。点开抽屉看公式逐项即知原因。
  • 本页这些动作里,会改资料库但不直接写平台的:设 Safety Buffer(影响该 SKU 之后广播多少)、解冻(恢复自动推送,下次才动平台)。真正会写线上平台的只有『立即重算』(自动模式下顺带推变动 SKU)和抽屉里的『立即推送』。
  • 抽屉底部的「编辑 mapping」按钮目前没接任何动作(点了不会发生事),是占位按钮。

✅ 怎么操作(步骤)

  1. 任务A 每天巡检抓真问题:左栏点「库存对账」,页面默认停在「异常」分页(只显示有问题的)。看每行最右的状态标签,按严重度处理——先看红色「已超卖」,再看橙色「缺 map」,最后看橙色「差异 推送中」。
  2. 缩小范围:用工具列「差异类型」下拉选超卖/缺 map/差异—推送中,或「平台」下拉只看某个平台;右上角会显示「显示 X / 总数」。要找特定商品就用搜索框输入 WMS 编号或商品名。
  3. 任务B 看懂某商品广播值为什么是这个数:在该行最右点眼睛图标,右侧滑出抽屉。顶部三个大数 WMS物理/Pending/Broadcast,Broadcast 下面直接写出算式「= 实际 − Pending − DC预留 − 安全库存」,一眼看到是哪一项把数字压低。
  4. 往下看「占用明细 · Pending 订单」(每张未结算订单逐张列出;标「不扣库存」的是 Amazon FBA 真实销售单,从亚马逊仓发货不占本地池)和「占用明细 · DC 预留」(补货出货单,标未取走/已取走)。每一项占用都能追到具体单据。
  5. 任务C 止血——冻结出问题的商品:该行点眼睛打开抽屉(或点雪花/冻结图标,也会开同一个抽屉)→ 抽屉底部点「冻结」→ 出现输入框,必填冻结原因(例:等盘点确认数量)→ 点红色「确认冻结」。该行状态变 FROZEN,库存停止自动推送。
  6. 解冻:问题解决后,回列表该行点「解冻」(循环箭头图标),看到「已解冻 XXX」即恢复自动同步。提醒:冻结清单在「已冻结」分页,记得定期回看,别忘了解冻(忘了解冻=实际进了新货平台也不会更新,等于一直少卖)。
  7. 任务D 给商品保留库存不上架:打开该商品抽屉 → 找「Safety Buffer」卡片 → 输入要保留的件数(预设 0,填正整数)→ 点「保存」。下方预览「广播值将从 X 降至 Y,保留 N 件不上架」,看到「Safety Buffer 已更新为 N 件」即生效。
  8. 任务E 导出 Excel:先用分页+筛选+搜索把想要的范围调好 → 右上角点「导出对账表」→ 浏览器下载一个 CSV(Excel 打得开),档名含当天日期。注意导出的就是当下筛选后那些行,不是全部。
  9. 任务F(高风险,看清楚再做)手动重算/手动推送:整体重算用右上角「立即重算」(全量重算并把有变动的 SKU 重新推平台);单个商品推送用抽屉底部「立即推送」(只把这一个商品的当前广播值排队推给它有对照的平台)。6/21 起在自动模式下这两个会真的改线上平台库存,慎用。

与 6/21 上线测试有关

本页有「唯二」会真正写入线上平台库存的按钮:①整页右上「立即重算」(自动模式下会把有变动的 SKU 重新推平台)、②点开某商品后抽屉底部的「立即推送」(直接把该 SKU 广播值排队推平台)。两者都无二次确认。6/21 之前推到沙盒/影子环境是安全的;6/21 上线测试当天,按下去=真的改 Takealot/Amazon/Makro 上的可卖数量。关键安全阀:系统设在「手动模式(manual)」时,「立即重算」只算不推(变动留成待推清单);只有「自动模式(auto)」才真推。建议上线测试当天先用单个商品的「立即推送」小范围验证,确认数字对了再考虑整体「立即重算」。「立即重算」仅管理员可用且每次写 audit_log。本页其余都是看板/导出/本地设定,不写平台。