后端与接口
在 Saleor 后端排查折扣叠加/订单级折扣分摊/库存可售…
当你在 Saleor 上开发或调试折扣、促销、礼品行、库存可售性、Dashboard 文案或相关 webhook 时,按优先级查阅源码派生的规则文件来还原真实行为。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
在 Saleor 后端排查折扣叠加/订单特定
解决思路
- 按优先级顺序查阅两类规则:先 Discounts(前缀 `discount-`,CRITICAL),再 Stock(前缀 `stock-`,CRITICAL)。
- 折扣相关问题读取 `rules/discount-precedence.md`,获取完整优先级层级、叠加规则、manual vs voucher vs promotion 的交互、反规范化字段语义以及已知的 Dashboard bug。
- 订单级折扣分摊问题读取 `rules/order-discount-allocation.md`,理解两遍计算:Pass A 把所有记录塌缩成单个 subtotal_discount,Pass B 按比例分摊到各 line 并由最后一行吸收舍入误差。
- 厘清 API 的暴露边界:它暴露 per-line totals 和 per-record-at-order 金额,但不暴露 per-record-per-line 的分解;需要该粒度时由消费方自行重建。
- 避开礼品行(gift line)形状陷阱:当 `OrderLine.isGift = true` 时,`OrderLine.discounts[]` 上会出现 `ORDER_PROMOTION`。
- 库存可售性问题读取 `rules/stock-availability-modes.md`,覆盖 `Shop.useLegacyShippingZoneStockAvailability`(3.23+)、purchasability 与 shippability 的区别、服务端 queryset 分发、按模式条件触发的 webhook、Dashboard 的 UI/文案/severity 规则、迁移陷阱与测试夹具。
- 排查 `PRODUCT_VARIANT_*_IN_CHANNEL` webhook 不触发时,对照库存可用性模式的按模式触发条件来判断,而非只看订阅配置。
- 审计或编写 Dashboard 文案时,按 Dashboard 规则检查 “available” / “in stock” / “purchasable” 的用词与 severity,避免用词与实际可售性语义不符。
- 依赖每个规则文件中给出的源码级证据:来自 `saleor/` 的函数名与文件路径、优先级层级或计算规则、反模式与已知 bug,用它们验证结论而不是只看公开 API 文档。
- 构建价格解释/瀑布流工具或诊断(doctor)工具时,以确认订单上的 `OrderDiscount` / `OrderLineDiscount` 对象与 `OrderLine.unit_discount_value` 为准,先确认折扣层级再重建分摊过程。
适用边界 · 注意事项
- 不适用于非 Saleor 的电商或订单系统,其折扣与库存语义完全不同。
- 关于 `useLegacyShippingZoneStockAvailability` 的模式判断不适用于 3.23 之前的版本。
- 公开 API 参考文档已完整覆盖的行为无需查阅本技能,它只补充未充分文档化的内部机制。