182320-Transfer订单重试按钮功能说明.md 4.6 KB

Transfer订单重试按钮功能说明

任务概述

说明Transfer模块后台管理页面中"重试"按钮的作用和使用场景,解决用户对重试功能不明确的问题。

完成时间

2025-06-18 23:20

重试按钮的作用

🎯 主要功能

重试按钮用于重新处理失败状态的Transfer订单,给订单一个"重新开始"的机会。

📋 显示条件

重试按钮只在以下情况下显示:

  • 订单状态为 "失败" (status = -1)
  • 调用 canRetry() 方法返回 true

🔄 重试机制

1. 状态重置

  • 将订单状态从 "失败"(-1) 重置为 "已创建"(1)
  • 清除之前的错误信息
  • 重新开始处理流程

2. 处理逻辑

根据订单类型执行不同的重试逻辑:

转出订单重试

  • 重新调用外部API创建转出订单
  • 如果外部API配置正确,会重新发起转出请求
  • 适用于网络临时故障、外部系统临时不可用等情况

转入订单重试

  • 主要重新发送回调通知
  • 如果应用配置了回调URL,会重新发送回调
  • 如果没有配置回调URL,直接标记为完成
  • 适用于回调发送失败的情况

🎯 使用场景

1. 网络故障恢复

  • 场景: 创建订单时网络临时中断导致失败
  • 解决: 网络恢复后点击重试,重新发起请求

2. 外部系统故障恢复

  • 场景: 外部支付系统临时维护导致转出失败
  • 解决: 外部系统恢复后点击重试

3. 回调发送失败

  • 场景: 回调URL临时不可达导致通知失败
  • 解决: 目标系统恢复后点击重试重新发送回调

4. 配置错误修复

  • 场景: 应用配置错误(如URL配置错误)导致失败
  • 解决: 修复配置后点击重试

⚠️ 注意事项

1. 只能重试失败订单

  • 已完成、处理中、已创建状态的订单不显示重试按钮
  • 确保不会重复处理正常订单

2. 资金安全

  • 转入订单重试不会重复转账(资金已经到账)
  • 转出订单重试会检查外部系统状态,避免重复扣款

3. 重试次数限制

  • 系统内部有重试次数限制(通常3次)
  • 避免无限重试造成系统负担

🔧 技术实现

1. 前端实现

<a href="javascript:void(0)" 
   class="btn btn-xs btn-outline-warning retry-order" 
   data-id="订单ID">重试</a>

2. 后端逻辑

// 检查是否可以重试
public function canRetry(): bool
{
    return $this->status === TransferStatus::FAILED;
}

// 重试处理
public static function retryOrder(int $orderId): bool
{
    $order = TransferOrder::findOrFail($orderId);
    
    // 重置状态
    $order->updateStatus(TransferStatus::CREATED);
    
    // 重新处理
    if ($order->isTransferOut()) {
        OrderLogic::processTransferOut($order);
    } else {
        // 重新发送回调或直接完成
    }
}

📊 状态流转图

失败状态订单 → 点击重试 → 已创建状态 → 重新处理 → 成功/失败
    ↓              ↓           ↓           ↓
  显示重试按钮    状态重置    重新执行    最终结果

🎯 用户操作指南

1. 识别可重试订单

  • 在订单列表中查找状态为"失败"的订单
  • 这些订单在操作列会显示"重试"按钮

2. 执行重试操作

  • 点击"重试"按钮
  • 系统会自动重新处理订单
  • 观察订单状态变化

3. 重试结果判断

  • 成功: 订单状态变为"已完成"
  • 仍然失败: 订单状态重新变为"失败",可以再次重试
  • 处理中: 订单正在重新处理,等待结果

💡 最佳实践

1. 重试前检查

  • 确认导致失败的原因是否已解决
  • 检查相关配置是否正确
  • 确认外部系统是否正常

2. 重试时机

  • 网络故障恢复后
  • 外部系统维护完成后
  • 配置问题修复后

3. 监控重试结果

  • 关注重试后的订单状态
  • 如果多次重试仍失败,需要人工介入排查

🔍 故障排查

1. 重试仍然失败

  • 检查错误信息字段
  • 查看系统日志
  • 确认外部系统状态
  • 验证配置正确性

2. 重试按钮不显示

  • 确认订单状态是否为"失败"
  • 检查权限配置
  • 确认前端JavaScript正常加载

📈 统计信息

重试功能有助于提高订单成功率:

  • 减少因临时故障导致的订单失败
  • 提升用户体验
  • 降低人工处理成本
  • 提高系统可用性

总结

重试按钮是Transfer模块的重要功能,专门用于处理失败订单的重新处理。它提供了一个简单有效的方式来应对临时故障,提高订单处理的成功率和系统的健壮性。