Appearance
概述
本文档详细说明 EBAOZU 系统中商贸及租赁订单的全生命周期流转流程,涵盖订单确认、金额计算、订单创建、支付回调、发货、确认收货、退款售后及核销自提等核心业务逻辑。
订单状态流转模型
┌──────────────┐
│ 用户下单 │
└──────┬───────┘
│
┌──────▼───────┐
│ 待支付 paid=0 │ ──── 超时未付 ──→ 自动取消/回退库存
└──────┬───────┘
│ 支付成功
┌──────▼───────┐
│ 待发货 stat=0 │ ──── 申请退款 ──→ 退款售后流程
└──────┬───────┘
│ 商家发货
┌──────▼───────┐
│ 待收货 stat=1 │ ──── 申请退款 ──→ 退款售后流程
└──────┬───────┘
│ 确认收货 / 自动收货
┌──────▼───────┐
│ 已收货 stat=2 │ ──→ 佣金结算 / 积分赠送
└──────┬───────┘
│ 用户评价
┌──────▼───────┐
│ 订单完成 stat=3│
└──────────────┘核心服务类结构
app/services/order/
├── StoreOrderServices.php # 订单主服务(CRUD、状态查询、详情组装)
├── StoreOrderCreateServices.php # 订单创建服务(下单主流程)
├── StoreOrderComputedServices.php # 订单价格与优惠计算服务
├── StoreOrderDeliveryServices.php # 订单发货服务(快递、自提、配送)
├── StoreOrderTakeServices.php # 订单收货服务
├── StoreOrderRefundServices.php # 订单退款与售后审核服务
├── StoreOrderWriteOffServices.php # 自提核销服务
├── StoreCartServices.php # 购物车服务
└── ...关键流程实现详解
下单与创建订单 (StoreOrderCreateServices)
下单过程必须在数据库事务内严格执行:
- 校验缓存与参数:校验结算 Key、收货地址合法性、商品上架状态与限购策略;
- 校验并原子扣减库存:扣减商品 SKU 表与主表库存,防止超卖;
- 计算实际应付金额:计算商品总价、运费、优惠券抵扣、积分抵扣、会员折扣等;
- 生成订单主表与快照表:写入
eb_store_order及eb_store_order_cart_info; - 派发创建事件:触发
order.create事件,异步清理购物车、推入延迟取消队列任务(UnpaidOrderCancelJob)。
支付成功后处理 (StoreOrderSuccessServices)
支付回调验签通过后,标记 paid = 1,记录支付时间并触发 order.pay 事件:
- 异步计算分销佣金;
- 处理会员经验升级与积分返还;
- 发送支付成功短信/模板消息通知。
发货处理 (StoreOrderDeliveryServices)
支持多种发货方式:
- 快递发货 (
express):录入快递公司与快递单号,更新状态为待收货并开启自动收货倒计时任务; - 同城/自提配送 (
send/city):指定配送员或核销码; - 虚拟发货 (
fictitious):无需物流自动履约。
售后退款处理 (StoreOrderRefundServices)
- 用户申请退款生成
eb_store_order_refund记录; - 商家审核同意后调用支付渠道原路退款(
wechatRefund/alipayRefund/yueRefund); - 退款成功后回退对应商品库存,并退还使用的优惠券和积分。
订单主要字段状态值
| 字段 | 取值 | 含义 |
|---|---|---|
paid | 0 / 1 | 未支付 / 已支付 |
status | 0 | 待发货(已支付待处理) |
status | 1 | 待收货(已发货在途中) |
status | 2 | 已收货(用户已确认或系统自动确认) |
status | 3 | 待评价 / 已完成 |
refund_status | 0 | 未申请退款 |
refund_status | 1 | 申请退款中 |
refund_status | 2 | 部分退款 |
refund_status | 3 | 全部退款 |
二开注意事项
- 事务保护:所有涉及订单创建、支付流转、发货与退款的操作必须使用
$this->transaction(function(){ ... })。 - 幂等校验:订单支付回调与退款操作必须进行幂等性检查,防止重复扣款或重复回退库存。
- 分层规范:禁止在 Controller 中编写复杂的订单金额计算与状态变更逻辑,一律委托给对应的
StoreOrder*Services。