菜单

订单处理

相关源文件

目的与范围

本文档提供了mall电商平台订单处理系统的详细技术概述。它涵盖了从创建到支付处理再到完成或取消的完整订单生命周期。本文档侧重于处理面向客户的订单操作的mall-portal模块的实现。

相关功能请参阅购物车进行购物车管理,以及会员服务进行用户认证和个人资料管理。

来源:mall-portal/src/main/java/com/macro/mall/portal/service/OmsPortalOrderService.java1-76

订单生命周期和状态

系统中的订单会经历几个定义好的状态

系统中定义的订单状态码为:

  • 0: 待付款
  • 1: 待发货
  • 2: 已发货
  • 3: 已完成
  • 4: 已关闭
  • 5: 无效订单

支付方式定义为:

  • 0: 未支付
  • 1: 支付宝
  • 2: 微信支付

来源:mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java197-198 mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java193-194

核心组件

订单处理系统围绕以下关键组件构建:

  • 控制器OmsPortalOrderController - 提供订单操作的RESTful端点
  • 服务OmsPortalOrderServiceImpl - 实现订单业务逻辑
  • 支持服务OmsCartItemServiceOmsPromotionServiceUmsMemberService - 提供购物车、促销和用户功能
  • 数据访问PortalOrderDao、Mapper接口 - 处理数据库操作
  • 组件CancelOrderSender - 发送延迟消息以实现自动订单取消

来源:mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java36-69

订单处理流程

1. 订单确认

在创建订单之前,系统会生成订单确认信息,向客户展示他们将要购买的商品。

确认流程:

  1. 获取当前用户
  2. 检索带有促销信息的已选购物车商品
  3. 检索用户的收货地址
  4. 获取可用优惠券
  5. 计算初步金额(总计、促销、应付)

来源:mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java71-93 mall-portal/src/main/java/com/macro/mall/portal/controller/OmsPortalOrderController.java32-38

2. 订单生成

当用户确认订单时,系统会处理订单创建。

订单生成期间的关键操作:

  1. 库存可用性验证
  2. 优惠券应用和验证
  3. 积分计算和验证
  4. 价格计算(包括促销)
  5. 库存锁定
  6. 订单号生成
  7. 订单持久化
  8. 从购物车移除商品
  9. 调度自动取消(如果付款超时)

来源:mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java95-252 mall-portal/src/main/java/com/macro/mall/portal/controller/OmsPortalOrderController.java40-46

3. 支付处理

订单创建后,系统会处理支付。

支付处理步骤:

  1. 将订单状态更新为“待发货”(1)
  2. 记录支付时间和支付方式
  3. 将锁定的库存转换为实际库存减少
  4. 取消预定的自动取消任务

来源:mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java254-283 mall-portal/src/main/java/com/macro/mall/portal/controller/OmsPortalOrderController.java48-54

4. 订单取消

订单可以由用户手动取消,或因支付超时而自动取消。

取消流程:

  1. 将订单状态更新为“已关闭”(4)
  2. 释放锁定的库存
  3. 将使用的优惠券退回可用状态
  4. 退还使用的积分

来源:mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java314-348 mall-portal/src/main/java/com/macro/mall/portal/controller/OmsPortalOrderController.java92-98

库存管理

系统采用两阶段库存管理策略。

库存操作分为三个阶段:

  1. 锁定库存:在订单创建期间,增加lock_stock,而不更改stock
  2. 减少库存:付款后,减少lock_stockstock
  3. 释放库存:在取消期间,减少lock_stock,而不更改stock

来源:mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java750-759 mall-portal/src/main/resources/dao/PortalOrderDao.xml91-113

促销计算

该系统支持多种影响订单定价的促销类型。

促销计算过程:

  1. 按产品ID (SPU) 对购物车商品进行分组
  2. 检索每种产品的促销数据
  3. 根据类型应用相应的促销计算
    • 单品促销:原价 - 促销价
    • 销量折扣:原价 - (折扣 * 原价)
    • 满减:(商品单价 / 总价) * 满减金额
  4. 将促销信息存储在CartPromotionItem对象中

来源:mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPromotionServiceImpl.java28-110

自动订单取消

系统实现了自动订单取消机制。

实现细节

  1. 在订单创建期间,根据OmsOrderSetting.normalOrderOvertime计算超时时间。
  2. 向RabbitMQ发送包含orderId的延迟消息。
  3. 如果收到付款,订单正常进行。
  4. 如果付款超时,延迟消息将触发取消流程。

来源:mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java350-357 mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java285-312

订单号生成

系统生成独特的18位订单号,格式如下:

yyyyMMdd + source type (2 digits) + payment type (2 digits) + incremental sequence (6+ digits)

实现

  1. 获取当前日期的yyyyMMdd格式
  2. 附加2位来源类型(0表示PC,1表示App)
  3. 附加2位支付类型
  4. 从Redis获取增量序列,键格式为database:orderId{date}
  5. 附加序列并进行适当的填充

来源:mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java462-477

API 端点

端点方法描述
/order/generateConfirmOrderPOST生成订单确认信息
/order/generateOrderPOST创建新订单
/order/paySuccessPOST处理支付成功回调
/order/cancelOrderPOST调度订单取消
/order/cancelUserOrderPOST立即取消订单
/order/listGET列表显示用户订单(带分页)
/order/detail/{orderId}GET获取详细订单信息
/order/confirmReceiveOrderPOST确认收货
/order/deleteOrderPOST软删除订单

来源: mall-portal/src/main/java/com/macro/mall/portal/controller/OmsPortalOrderController.java32-114

数据模型

订单处理中使用的主要数据模型

模型描述
OrderParam创建订单的输入参数
ConfirmOrderResult前端显示的订单确认数据
OmsOrder订单主信息数据库实体
OmsOrderItem订单项数据库实体
CartPromotionItem包含促销信息的购物车项
OmsOrderDetail包含订单项的详细订单视图

来源: mall-portal/src/main/java/com/macro/mall/portal/domain/OrderParam.java1-26 mall-portal/src/main/java/com/macro/mall/portal/domain/CartPromotionItem.java1-27