
深入Reaction订单生命周期从Cart到已支付订单的状态机完整剖析【免费下载链接】reactionProject has been discontinued ////// Mailchimp Open Commerce is an API-first, headless commerce platform built using Node.js, React, GraphQL. Deployed via Docker and Kubernetes.项目地址: https://gitcode.com/gh_mirrors/re/reactionReaction原 Mailchimp Open Commerce是一款基于 Node.js、React 和 GraphQL 的 API-first 无头电商headless commerce平台。理解它的订单生命周期与订单状态机是掌握 Reaction 后端运行机制的关键。本文将带你完整剖析一个订单如何从购物车Cart一步步变成已支付订单其中的workflow.status状态机如何流转、取消操作如何被状态守卫拦截以及多语言状态标签如何展示。订单状态机核心概念速览在 Reaction 中状态机并不复杂核心只有两个字段定义在 simpleSchemas.js 的Workflow模式中workflow.status订单的当前状态默认为new新建workflow数组状态历史轨迹每发生一次迁移就追加一个新状态例如[new, coreOrderWorkflow/canceled]这种当前状态 历史轨迹的双字段设计让 Reaction 既能快速判断订单现在处于哪个阶段又能完整回溯订单经历了哪些阶段。 关键点状态机是多层嵌套的——订单Order、履约分组OrderFulfillmentGroup、订单行OrderItem各自都有独立的workflow.status形成订单 → 分组 → 商品行三级状态体系。从 Cart 到 OrderplaceOrder 下单流水线购物车本身是一个独立的集合用户在购物车阶段添加商品、选择配送方式。当用户点击下单时GraphQL 的placeOrder变更mutation被触发其核心流程在 placeOrder.js 中只有短短几行但真正的工作发生在 prepareOrder.js 这条流水线里输入校验按orderInputSchema清洗并校验入参初始校验核对店铺、购物车、用户身份是否匹配计算折扣与附加费拉取促销折扣、构建履约分组shipping groups并汇总金额创建支付调用支付插件授权authorize全部支付组装订单对象生成订单 ID、referenceId订单编号、自定义字段流水线最后一步至关重要订单对象被写入数据库时状态机被初始化为workflow: { status: new, workflow: [new] }随后向事件总线发射afterOrderCreate事件通知邮件、通知等插件接管后续动作。订单此刻的status是new表示已创建、等待后续处理。值得一提的是Reaction 还提供了一个试运行模式validateOrder查询会以同样的流水线跑一遍校验但不落库、不创建支付非常适合前端在提交前做表单预检。状态流转谁能在什么时候改状态状态机的迁移规则分散在几个变更函数里这里是最核心的两条规则买家侧只允许在new状态下操作取消订单行cancelOrderItem.js下单人只有在订单状态为new时才能取消商品行状态也必须为new否则会抛出类似Order status (processing) is not one of: new的状态守卫错误移动订单行moveOrderItems.js同样的守卫逻辑订单离开new状态后买家就不能再调整商品归属分组了卖家侧updateOrder 驱动状态迁移更新订单updateOrder.js店铺运营可通过status参数把订单推进到新阶段如处理中、已发货等系统仅在状态确有变化时才写入数据库级联取消当履约分组下的所有商品行都被取消时该分组的workflow.status会级联置为coreOrderWorkflow/canceled若订单的所有分组都被取消订单整体状态也随之迁移为coreOrderWorkflow/canceled并在workflow历史数组中追加记录 注意状态值的命名空间coreOrderWorkflow/canceled这种带前缀的状态是 Reaction 多租户架构下为各店铺/插件隔离状态命名空间的设计避免不同业务流的状态互相冲突。为了支撑后台按状态筛选订单index.js 还在workflow.status字段上专门建了数据库索引c2_workflow.status。状态如何展示多语言 orderDisplayStatus数据库里存的是new、coreOrderWorkflow/canceled这样的原始值但用户看到的是友好文案。这由 orderDisplayStatus.js 解析器完成根据订单所属店铺读取orderStatusLabels店铺级状态标签配置按请求语言匹配翻译返回人类可读文案如已取消若无翻译配置则回退显示原始状态值履约分组有完全对应的 fulfillmentGroupDisplayStatus.js保证前端展示的粒度与数据层一致。状态驱动的邮件通知状态机的变化还会自动驱动用户沟通。sendOrderEmail.js 会按当前状态动态选择邮件模板例如orders/new对应下单确认邮件、orders/canceled对应取消通知邮件——状态即模板名这是状态机设计与业务逻辑解耦的漂亮体现。扩展指南给你的订单状态机加规则Reaction 的订单状态机是为插件设计的。在 registration.js 中第三方插件可以注册自定义订单校验器customOrderValidators它们会在placeOrder流水线落库前执行让你在不修改核心代码的前提下插入自己的业务规则如风控拦截、会员等级校验。完整的数据模型可参考 GraphQL 模式定义 schema.graphql支付侧的状态流转则在 packages/api-plugin-payments/src/ 目录下继续延伸——订单状态已支付本质上是支付集合的授权/捕获状态与订单状态的联合呈现。总结阶段状态触发者购物车Cart 集合未成单买家下单workflow.status newplaceOrder流水线取消coreOrderWorkflow/canceled买家仅限new状态或运营后续推进自定义状态处理中/已发货等updateOrder一句话记住 Reaction 的订单状态机status表示现在在哪workflow数组记录走过了哪三级状态嵌套覆盖订单、分组、商品行所有迁移都有守卫规则。理解了这套机制你就掌握了 Reaction 从购物车到已支付订单的完整生命周期。【免费下载链接】reactionProject has been discontinued ////// Mailchimp Open Commerce is an API-first, headless commerce platform built using Node.js, React, GraphQL. Deployed via Docker and Kubernetes.项目地址: https://gitcode.com/gh_mirrors/re/reaction创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考