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模块的重要功能,专门用于处理失败订单的重新处理。它提供了一个简单有效的方式来应对临时故障,提高订单处理的成功率和系统的健壮性。