Spree 6 售后技能,用于处理下单后的退货(退款)、换货(换商品并结算差价)与索赔(损坏、未送达、发错货,可退款或补发)三类记录。三者分开建模,均挂在已下单的 Spree::Order 上:退货用 ret_,换货用 exch_,索赔用 claim_。退货与换货引用已发货的履约项,索赔引用订单行项目。
主要能力:状态经 has_status 字符串列管理,无状态机,每个转换是 Spree::Workflow,通过 Spree 的依赖注入键解析;创建、批准、收货、退款、取消、补发等均有对应工作流与钩子。退货政策核心仅内置一条规则 Spree::Returns::EligibilityValidator,窗口取 market.preferred_return_window_days(默认 30,nil 表示不限),自下单时间起算;员工创建时跳过。可在初始化器中替换或扩展验证器。收货仅对可二次销售的数量回补库存。退款上限为 refundable_total,默认走原支付或店铺余额。
使用方式:通过 Ruby 工作流调用(如 Spree.return_create_workflow.call(...)),或经 Store API 与 Admin API 端点操作,另有 Admin SDK 与 TypeScript 客户端。事件如 return.requested 等可推送 webhook。
限制:不要用 update! 直接改状态,否则跳过回补、退款、事件与钩子;退货窗口按订单下单时间而非送达时间计算;换货客户欠款需自行收取,核心不会自动扣款。部分细节资料未展开。