后台看到 Quantity 大于 0,并不代表商品一定可销售。启用 Multi-Source Inventory 后,前台判断使用的是 Salable Quantity,它会综合 Source 数量、Stock 与销售渠道关系、缺货阈值和未结算预留。

先回答一个问题:你看到的是哪种数量?

Quantity 是来源中的实际数量;Salable Quantity 是当前 Stock 还能承诺销售的数量。订单创建后会产生 reservation,抵扣可售数量,但来源数量通常在发货环节才扣减。因此两者短时间不一致是设计行为。

商品只有一个来源也要检查 MSI

确认商品已分配到启用的 Source,Source 状态为启用,数量大于阈值。然后检查该 Source 是否属于正确的 Stock,以及 Stock 是否分配给当前 Website。

bin/magento inventory:reservation:list-inconsistencies

这个命令用于列出预留不一致,不会自动修复。先阅读输出并核对订单状态,再考虑补偿操作,避免人为制造新的库存偏差。

缺货阈值会改变结果

如果 Out-of-Stock Threshold 设为 5,而数量只有 3,即使后台显示正数,商品也可能不可售。允许延期交货时,阈值还可能使用负数。不要只查看商品级配置,还要看它是否继承全局库存设置。

可配置商品需要看子商品

父商品没有可售子项时会显示缺货。检查每个子商品的状态、网站分配、Source、可售数量以及可配置属性组合。只给父商品增加数量不会解决子商品不可售的问题。

索引和消费者

bin/magento indexer:status inventory
bin/magento indexer:reindex inventory
bin/magento cache:clean full_page

实际索引器名称以 bin/magento indexer:info 输出为准。手动重建后如果下一次库存变化又不同步,继续检查 Cron 和消息消费者,而不是把 reindex 设为人工日常操作。

处理这类问题时,最好选一个具体 SKU,记录 Source Quantity、Salable Quantity、Stock、Website 和 reservations。把这五项放在一起看,通常比反复切换“有货/缺货”状态更快找到原因。