```mermaid
---
title: 13.换货流程
---
flowchart TD
    开始((开始))
    --> 后台建单[后台发起换货申请]

    后台建单 --> 建单校验{旧资产是否满足换货条件?}
    建单校验 -->|否| 建单失败[不满足条件 流程终止]
    建单校验 -->|是| 换货建单成功[换货单创建成功 待客户填写信息]

    subgraph 客户处理
        换货建单成功 --> 客户通知[通知客户有待处理换货单]
        客户通知 --> 客户填写信息[客户填写收货信息]
        客户填写信息 --> 信息提交结果{提交是否成功?}
        信息提交结果 -->|否| 重新填写[修正信息后重新提交]
        重新填写 --> 客户填写信息
        信息提交结果 -->|是| 待发货[进入待发货状态]
    end

    subgraph 后台发货
        待发货 --> 选择新资产[选择新资产并填写物流信息]
        选择新资产 --> 发货校验{新旧资产类型和状态是否匹配?}
        发货校验 -->|否| 更换新资产[更换新资产后重试]
        更换新资产 --> 选择新资产
        发货校验 -->|是| 发货完成[完成发货并等待确认]
    end

    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:#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
```
