JooLun Plus 百科 ⬇ 源码下载

08.12 商城订单流程图

102353 于 2026-10-17 14:14:33 +08:00 修改了此页面

# 商城订单流程图

说明:

  1. 本文档基于当前系统代码。
  2. 商城主订单状态、订单明细退款状态、平台供应商履约状态是三套不同状态机,不能混为一张“单线流程图”理解。
  3. 主订单状态以 OrderInfoEnum 为准,退款状态以 OrderRefundsEnum 和 OrderItemEnum 为准。

关联代码:

  1. OrderInfoEnum.java
  2. OrderRefundsEnum.java
  3. OrderItemEnum.java
  4. OrderInfoServiceImpl.java
  5. OrderRefundsServiceImpl.java

1. 商城主订单状态流

主订单状态只有以下几种:

  1. 待付款
  2. 待发货
  3. 待收货
  4. 已完成
  5. 已取消
  6. 退款中
  7. 待成团

注意:

  1. 用户确认收货后,主订单直接进入“已完成”。
  2. “退款中”是主订单聚合状态,不代表整单所有明细都在同一退款阶段。
  3. 系统存在评价附加字段 appraises_status,用于标记“未评 / 已评 / 已追评”,但它与主订单 status 是两套字段,不单独作为主订单流转节点。
flowchart TD
    A["用户下单"] --> B["待付款"]
    B --> C{"30 分钟内支付?"}
    C -->|否| D["已取消"]
    C -->|是| E["待发货"]
    E --> F{"是否全部进入已发货或退款中?"}
    F -->|是| G["待收货"]
    F -->|否| E
    G --> H["用户确认收货 / 自动确认收货"]
    H --> I["已完成"]

    E --> J["部分明细申请退款"]
    J --> K["主订单可能变为退款中"]

    K --> E
    K --> G
    K --> D

2. 订单关闭与自动收货

2.1 未支付订单关闭

  1. 普通订单创建后进入待付款。
  2. 30 分钟未支付,消息队列触发自动取消。
  3. 用户也可以在待付款阶段主动取消。
  4. 取消后会回滚商城库存。
  5. 如果是平台供应商商品,还会释放供应商侧锁库。

2.2 已发货订单自动收货

  1. 主订单进入待收货后,会写入 Redis 自动收货倒计时。
  2. 到期后走自动确认收货逻辑。
  3. 自动确认收货和用户手动确认收货,最终都进入“已完成”。

2.3 评价状态字段说明

当前系统中,订单评价状态由 order_info.appraises_status 表示:

  1. 0 未评
  2. 1 已评
  3. 2 已追评

说明:

  1. appraises_status 是订单评价附加状态,不替代主订单 status。
  2. 订单确认收货后,主订单 status 直接进入“已完成”。
  3. 订单是否已评价,需要结合 appraises_status 判断,不能把“已完成”等同于“已评价”。

3. 订单明细退款状态流

退款是按订单明细处理,不是按整单处理。

退款申请状态:

  1. 1 退款申请中
  2. 11 同意退款
  3. 12 拒绝退款
  4. 2 退货退款申请中
  5. 21 退货中
  6. 22 拒绝退货退款
  7. 211 收到退货同意退款
  8. 212 收到退货拒绝退款

退款完成后的订单明细状态:

  1. 3 完成退款
  2. 4 完成退货退款
flowchart TD
    A["订单明细正常"] --> B{"用户申请哪种售后?"}
    B -->|仅退款| C["退款申请中"]
    B -->|退货退款| D["退货退款申请中"]

    C --> E{"后台审核"}
    E -->|同意退款| F["退款执行"]
    E -->|拒绝退款| G["拒绝退款"]

    D --> H{"后台审核"}
    H -->|拒绝退货退款| I["拒绝退货退款"]
    H -->|同意退货| J["退货中"]

    J --> K{"后台收到退货后审核"}
    K -->|同意退款| L["退款执行"]
    K -->|拒绝退款| M["收到退货拒绝退款"]

    F --> N["完成退款 / 完成退货退款"]

4. 退款成功后的主订单状态变化

退款成功后,不一定直接整单关闭,系统会按“剩余未退款明细”重新判断主订单状态。

规则:

  1. 如果订单下所有明细都已退款成功,则主订单改为“已取消”。
  2. 如果还有未退款明细,但这些未退款明细都已经发货,则主订单改为“待收货”。
  3. 如果还有未退款且未发货明细,则主订单仍可能保持“待发货”或“退款中”。
flowchart TD
    A["退款成功"] --> B{"是否所有明细都已退款?"}
    B -->|是| C["主订单改为已取消"]
    B -->|否| D{"剩余未退款明细是否都已发货?"}
    D -->|是| E["主订单改为待收货"]
    D -->|否| F["主订单保持待发货 / 退款中"]

5. 平台供应商履约回写链路

当前系统已支持平台供应商履约,这一部分是旧版流程图没有体现的。

规则:

  1. 商城支付成功后,会按供应商拆分生成平台供应商履约单。
  2. 平台供应商发货后,会回写商城订单明细发货信息。
  3. 当商城订单下所有“正常明细”都已发货或已进入退款中,主订单进入待收货。
  4. 平台供应商拒单后,会自动为对应商城订单明细生成退款申请。
  5. 如果正常明细全部转成退款申请中,主订单会改为退款中。
flowchart TD
    A["商城订单支付成功"] --> B["按供应商拆分创建履约单"]
    B --> C{"供应商履约结果"}

    C -->|发货| D["回写商城订单明细发货信息"]
    D --> E{"全部正常明细已发货或退款中?"}
    E -->|是| F["主订单进入待收货"]
    E -->|否| G["主订单保持待发货"]

    C -->|拒单| H["生成商城退款申请"]
    H --> I{"正常明细是否全部转退款申请?"}
    I -->|是| J["主订单进入退款中"]
    I -->|否| K["主订单保留原状态并等待其他明细处理"]

6. 排查建议

如果线上订单状态与预期不符,建议按下面顺序排查:

  1. 先看主订单状态 order_info.status
  2. 再看订单明细状态 order_item.status 和 is_refund
  3. 再看退款单状态 order_refunds.status
  4. 如果是平台供应商商品,再看平台供应商履约单与发货单状态
  5. 如果是待收货自动流转,再看 Redis 自动收货倒计时键是否存在

7. 结论

当前系统的正确理解方式是:

  1. 主订单状态负责展示整单所在阶段。
  2. 退款状态以订单明细和退款单为准。
  3. 平台供应商履约状态会反向影响商城主订单状态。
  4. 不建议继续使用旧版静态订单流程图作为开发和测试依据。