news 2026/9/1 10:01:10

Medusa订单处理:从pending到completed,订单要过哪3道关

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Medusa订单处理:从pending到completed,订单要过哪3道关

Medusa订单处理:从pending到completed,订单要过哪3道关

【免费下载链接】medusaThe world's most flexible commerce platform for agents and developers项目地址: https://gitcode.com/GitHub_Trending/me/medusa

一笔Medusa订单处理请求执行完,订单往往并不是"结束"了——后台里停在pending状态的订单是常态,关键在于分辨它是正常流转中还是真的卡住了。这篇文章跟着代码走一遍一笔订单的旅程,把它经过的3道关拆开看。

pending什么时候不算卡住?

OrderStatus在 common.ts 里只定义了6个值:pending、completed、draft、archived、canceled、requires_action。

pending表示订单已创建,但库存确认和履行还没发生。创建入口是createOrderWorkflow(工作流id叫create-orders,代码在 create-order.ts),内部依次做:定位region、找或建客户、校验行项目价格、确认库存足够,然后落库。落库后status就是pending——订单刚离开发令枪,"没被处理"本来就是它该有的样子,先别急着报警。

库存:履行环节最容易踩的坑

⚠️ create-order.ts 的注释里有一句很直白的提醒:这个workflow只校验库存"够不够",并不会为订单商品创建库存预留(reservation)。

后果是:如果变体开了manage_inventory,你直接拿createOrderWorkflow造出来的订单去履行,createOrderFulfillmentWorkflow会因为没有对应reservation而报错。正确姿势是先跑createReservationsWorkflow,给每个预留带上line_item_id,履行workflow靠它把预留找到。

履行workflow的校验逻辑写得相当"死板"(create-fulfillment.ts):订单不能是canceled、items必须真实存在于订单里、items要按shipping requirement分组,任何一条不满足直接抛错。通过后它会并行做几件事:调整库存水位(adjustInventoryLevelsStep)、清掉用掉的reservation,最后registerOrderFulfillmentStep把履行记录写进订单,行项目的fulfilled_quantity也是在这一步更新的。

要改订单,别直接改字段

订单的增删改查集中在OrderService(order-service.ts),但注意:它不会直接改动一笔已创建的订单。v2里改单走的是"订单变更"机制——用createOrderChangeWorkflow建一个order change,它的状态机OrderChangeStatus有5个值:requested、pending、confirmed、declined、canceled,只有confirmed之后变更才会真正落进订单,同时订单的version加一。

OrderDTO里那个version字段不是摆设:每次confirmed的变更都会递增它,对账和排查"这单怎么变成这样"时,靠它就能回溯到某一时刻的订单快照。

退货之后,数量去哪了?

客户退回商品,不是简单扣一个数字。退货有独立的一套workflow(在 packages/core/core-flows/src/order/workflows/return/ 目录下),而订单模块的action层把每个数量变化都拆成了专门的文件:fulfill-item.ts管fulfilled_quantity,deliver-item.ts管签收,ship-item.ts管发货——都放在 packages/modules/order/src/utils/actions/ 里,想核对某个字段何时变,去那里按文件名找就行。换货(exchange)同理,在旁边的exchange/目录。

接下来读哪3个地方

  • 状态与DTO定义:packages/core/types/src/order/common.ts
  • 全部订单workflow:packages/core/core-flows/src/order/workflows/,一个文件一个流程(create、fulfill、complete、cancel、return、exchange都在里面)
  • 订单模块服务与模型:packages/modules/order/src/services/ 和 models/

想本地跑起来验证,先克隆仓库:

git clone https://gitcode.com/GitHub_Trending/me/medusa

建议从 integration-tests/http/tests/order/ 下的用例入手,配合源码读create-fulfillment这个workflow——它的校验和预留逻辑理顺了,剩下那套状态机基本就是顺水推舟的事。

【免费下载链接】medusaThe world's most flexible commerce platform for agents and developers项目地址: https://gitcode.com/GitHub_Trending/me/medusa

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 10:01:10

STM32 HUB75E驱动设计:基于GPIO HAL的可移植方案与刷新优化

简介:这是一套专为STM32平台设计的HUB75E接口RGB LED矩阵屏驱动库,面向嵌入式开发工程师及物联网硬件项目开发者,解决LED点阵屏底层驱动复杂、移植困难、刷新控制低效等实际问题。资源包共20个文件,含9个C源文件(实现H…

作者头像 李华
网站建设 2026/9/1 10:00:25

C# WinForms + YoloV8:实现PCB二维码实时检测与识别

简介:本资源是一套面向工业视觉开发者的C# WinForms实战源码,聚焦PCB板二维码的实时检测与识别,适用于智能制造、SMT质检等产线视觉检测场景,适合具备基础C#和计算机视觉知识的中高级开发者快速上手YOLOv8模型部署。压缩包共146个…

作者头像 李华
网站建设 2026/9/1 9:58:35

macOS测试版计算器“走路”动画复现与系统验证指南

每次 macOS 测试版更新,我身边总有朋友问:新版本到底改了什么?其实很多新特性并不会出现在更新公告里,而是藏在系统自带的小应用里。比如计算器,这个看起来再普通不过的工具,在 macOS 27.0 Beta 7 中依然保…

作者头像 李华
网站建设 2026/9/1 9:57:28

OpenVoice语音克隆3分钟上手:本地配置与使用场景完整指南

OpenVoice语音克隆3分钟上手:本地配置与使用场景完整指南 【免费下载链接】OpenVoice Instant voice cloning by MIT and MyShell. Audio foundation model. 项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice OpenVoice 是 MIT 与 MyShell 联合开…

作者头像 李华
网站建设 2026/9/1 9:56:17

STM32F103C8T6 CAN总线通信实战:原理、配置与双机收发

简介:这是围绕STM32F103C8T6微控制器CAN总线收发功能的完整演示工程,主要面向嵌入式开发初学者,也适合需要快速接入工业控制网络的工程师参考,能够直观理解CAN多主通信、错误检测与自动重传机制。压缩包共110个文件,包…

作者头像 李华
网站建设 2026/9/1 9:56:10

包含安全阀消音器品牌解析:安全阀消声器产品优势详解

安全阀消音器品牌解析:安全阀消声器产品优势详解当前工业系统中,安全阀作为压力设备的核心安全附件,排放过程中产生的110-150dB高频噪声不仅会造成听力损伤,还可能引发设备共振风险,安全阀消音器已成为石化、电力、冶金…

作者头像 李华