SuperAPI AI 工具集

spree-order-totals

通用与其它

查看项目

更新于 10-16 08:09

技能介绍

用途:用于在 Spree 6 的购物车或订单上处理金额,理解 total 如何组合,以及各类金额行(Spree::TaxLine、Spree::Discount、Spree::Fee)的归属与写入规则。

主要能力与公式:total = item_total + delivery_total + adjustment_total;adjustment_total = 折扣行 + fee_total + additional_tax_total。item_total 为行项目金额之和(价格×数量,未扣折扣/税);delivery_total 为所选配送费率成本之和;discount_total 为促销折扣行之和(负值,不含手动折扣);fee_total 为费用行之和(≥0,含关税);additional_tax_total 为 included: false 的税行;included_tax_total 为已含在价格内的税行(信息性);payment_total 为已收款减退款;amount_due = max(total − payment_total − 已用店铺信用, 0)。

使用方式:所有改变金额的操作都汇入 Spree::Carts::RecalculateTotals 工作流,快捷方式为 cart.recalculate_totals!。触发点为写操作而非步骤:加/改/删商品、地址或市场变更、选择配送费率、优惠券/礼品卡/店铺信用、支付、购物车合并,以及结算锁内再算一次。每次 Store API 写操作返回带最新 total 的完整购物车。金额以字符串加 display_* 展示;自行计算小计时只加 additional_tax_total,不要加 included_tax_total。

限制:订单完成后(或 resum_only: true)跳过行重生成,仅重算已有行,今日促销与税率不会改写已下单订单;装运后金额变更须走显式服务(如 Spree::Orders::Discounts::Create),并调用 order.update_statuses!。不可直接写 totals 列或手工创建 TaxLine。discount_total 只计促销行,手动折扣不在此列。自定义调整器需幂等并避免抛错,否则会中断整个重算。