```mermaid
---
title: 12.客户端订单流程
---
flowchart TD
    开始((开始))
    --> 客户登录[客户登录并进入资产购买页面]

    客户登录 --> 资产可购校验{资产状态是否允许购买?}
    资产可购校验 -->|否| 不可购买结束[当前资产不可购买 流程终止]
    资产可购校验 -->|是| 选择套餐[查看并选择可购买套餐]

    选择套餐 --> 套餐类型校验{本次购买主套餐还是加油包?}
    套餐类型校验 -->|主套餐| 主套餐购买准备[主套餐可继续下单]
    套餐类型校验 -->|加油包| 加油包前置校验{当前是否已有主套餐?}
    加油包前置校验 -->|否| 无主套餐结束[无主套餐不可购买加油包]
    加油包前置校验 -->|是| 加油包购买准备[加油包可继续下单]

    主套餐购买准备 --> 实名策略判断{当前资产实名认证策略是什么?}
    加油包购买准备 --> 实名策略判断
    实名策略判断 -->|无需实名| 下单前校验
    实名策略判断 -->|先实名后购买| 实名状态校验{当前是否已实名?}
    实名状态校验 -->|否| 先去实名[先完成实名认证]
    先去实名 --> 选择套餐
    实名状态校验 -->|是| 下单前校验
    实名策略判断 -->|先购买后实名| 下单前校验[允许先下单购买]

    下单前校验 --> 强充判断{是否命中强充规则?}
    强充判断 -->|否| 直接下单[创建套餐订单并支付]
    强充判断 -->|是| 强充下单[先创建充值单并完成充值]

    subgraph 强充购买链路
        强充下单 --> 强充支付结果{充值支付是否成功?}
        强充支付结果 -->|否| 强充失败处理[充值失败可重试]
        强充失败处理 --> 强充下单
        强充支付结果 -->|是| 自动续购[按充值结果继续完成套餐购买]
    end

    subgraph 直接购买链路
        直接下单 --> 套餐支付结果{套餐支付是否成功?}
        套餐支付结果 -->|否| 直接失败处理[支付失败可重试]
        直接失败处理 --> 直接下单
        套餐支付结果 -->|是| 直接支付成功[套餐订单支付成功]
    end

    自动续购 --> 强充购包结果{套餐购买是否成功?}
    强充购包结果 -->|否| 强充购包失败[记录失败并进入人工处理]
    强充购包失败 --> 异常处理
    强充购包结果 -->|是| 强充购包成功[套餐购买成功]

    直接支付成功 --> 套餐处理{本次是主套餐还是加油包?}
    强充购包成功 --> 套餐处理

    套餐处理 -->|主套餐| 主套餐处理判断{当前是否已有生效主套餐?}
    主套餐处理判断 -->|是| 主套餐排队处理[新主套餐进入排队 待当前主套餐结束后生效]
    主套餐处理判断 -->|否| 主套餐立即生效处理[主套餐立即生效]
    套餐处理 -->|加油包| 加油包立即生效处理[加油包立即生效 有效期与当前主套餐一致]

    主套餐排队处理 --> 进入验收[进入订单验收]
    主套餐立即生效处理 --> 进入验收
    加油包立即生效处理 --> 进入验收

    subgraph 验收阶段
        进入验收 --> 后置实名核查{是否需要购买后补实名?}
        后置实名核查 -->|否| 核对订单状态[核对订单状态和金额明细]
        后置实名核查 -->|是| 补实名校验{当前是否已完成实名认证?}
        补实名校验 -->|否| 引导补实名[引导客户完成实名认证]
        引导补实名 --> 补实名校验
        补实名校验 -->|是| 核对订单状态
        核对订单状态 --> 核对生效方式[核对本单是立即生效还是进入排队]
        核对生效方式 --> 核对加油包有效期[若为加油包 核对有效期与当前主套餐一致]
        核对加油包有效期 --> 核对套餐生效[核对套餐已生效并可使用]
        核对套餐生效 --> 验收结果{验收是否通过?}
        验收结果 -->|否| 异常处理[记录异常并返回订单处理]
        异常处理 --> 选择套餐
        验收结果 -->|是| 结束([流程结束])
    end

    %% ==================== 样式美化 ====================
    style 开始 fill:#90EE90,stroke:#2E7D32,stroke-width:2px
    style 结束 fill:#FF9999,stroke:#C62828,stroke-width:2px
    style 不可购买结束 fill:#FFCDD2,stroke:#D32F2F
    style 无主套餐结束 fill:#FFCDD2,stroke:#D32F2F
    style 强充失败处理 fill:#FFCCBC,stroke:#E64A19
    style 直接失败处理 fill:#FFCCBC,stroke:#E64A19
    style 强充购包失败 fill:#FFCCBC,stroke:#E64A19
    style 异常处理 fill:#FFCCBC,stroke:#E64A19

    classDef decision fill:#FFF3E0,stroke:#F57C00,stroke-width:2px
    class 资产可购校验,套餐类型校验,加油包前置校验,实名策略判断,实名状态校验,强充判断,强充支付结果,套餐支付结果,强充购包结果,套餐处理,主套餐处理判断,后置实名核查,补实名校验,验收结果 decision
```
