Files
xyzw_web_helper/MD说明文件夹/问题修复-部分任务失败触发重试v3.11.4.md
2025-10-17 20:56:50 +08:00

7.9 KiB
Raw Permalink Blame History

问题修复:部分任务失败触发重试 v3.11.4

📋 更新时间

2025-10-08

🎯 修复目标

解决批量自动化中当token的部分任务失败时,不被计入失败统计,无法触发自动重试机制的问题。

问题描述

现象

用户运行批量自动化9个token每个7个任务

  • 3个token显示"部分任务失败 (1/7)"
  • 6个token全部成功

期望结果:

  • 全局统计成功6失败3
  • 自动重试轮数1/3触发重试

实际结果:

  • 全局统计成功9失败0
  • 自动重试轮数0/3未触发重试

根本原因

src/stores/batchTaskStore.jsexecuteTokenTasks 函数中:

// 旧逻辑v3.11.3及之前)
if (allTasksFailed) {
  // 所有任务都失败 - 标记为失败
  status: 'failed'
  executionStats.value.failed++
} else if (hasAnyTaskFailed) {
  // 部分任务失败 - 标记为部分完成(视为完成但记录错误)
  status: 'completed'  // ⬅️ 问题:部分失败仍算成功
  executionStats.value.success++  // ⬅️ 问题:计入成功统计
} else {
  // 所有任务成功
  status: 'completed'
  executionStats.value.success++
}

问题分析:

  1. 只有所有任务都失败时,才会标记为 status: 'failed'
  2. 如果有部分任务失败,则标记为 status: 'completed'
  3. status: 'completed' 的token不会被 retryFailedTasks() 重试(它只重试 status: 'failed' 的)
  4. 导致有问题的token无法进入重试流程

解决方案

核心思路

任何任务失败(无论是部分还是全部),都应该标记为失败,触发自动重试机制。

实现逻辑

修改 executeTokenTasks 函数的任务状态判断逻辑:

// 新逻辑v3.11.4
if (hasAnyTaskFailed) {
  // 🔴 任何任务失败(包括部分或全部)- 统一标记为失败,触发重试机制
  updateTaskProgress(tokenId, {
    status: 'failed',
    progress: 100,
    currentTask: null,
    error: allTasksFailed 
      ? `所有任务执行失败 (${taskFailedCount}/${tasks.length})`
      : `部分任务失败 (${taskFailedCount}/${tasks.length})`,
    endTime: Date.now()
  })
  executionStats.value.failed++
  console.log(`❌ Token失败: ${token.name} (${taskFailedCount}/${tasks.length}个任务失败)`)
} else {
  // 🟢 所有任务成功 - 标记为完成
  updateTaskProgress(tokenId, {
    status: 'completed',
    progress: 100,
    currentTask: null,
    endTime: Date.now()
  })
  executionStats.value.success++
  console.log(`✅ Token完成: ${token.name}`)
}

关键改进点

  1. 简化判断逻辑

    • 移除了 else if (hasAnyTaskFailed) 分支
    • 将"部分失败"和"全部失败"合并为一个分支处理
  2. 统一失败标记

    • 只要 hasAnyTaskFailed === true(即 taskFailedCount > 0),就标记为 'failed'
    • 错误信息中仍然区分"所有任务失败"和"部分任务失败",便于调试
  3. 触发重试机制

    • status: 'failed' 的token会被 retryFailedTasks() 自动收集
    • 自动重试机制正常工作

🎉 优化效果

用户体验

修复前:

总计: 9, 成功: 9, 失败: 0
重试轮数: 0/3
❌ 有失败的任务但不会重试

修复后:

总计: 9, 成功: 6, 失败: 3
重试轮数: 1/3
✅ 失败的任务自动进入重试流程

技术优势

  1. 准确统计:失败数量准确反映实际情况
  2. 自动重试部分失败的token也能进入重试流程
  3. 明确状态token卡片显示为"失败"状态(红色),更直观
  4. 保留详情:错误信息仍然显示具体失败数量(如"部分任务失败 1/7"

📊 日志示例

部分任务失败

修复前:

⚠️ Token部分完成: 641服-2-6... (1个任务失败)
📊 统计信息: { total: 9, success: 9, failed: 0 }  ❌

修复后:

❌ Token失败: 641服-2-6... (1/7个任务失败)
📊 统计信息: { total: 9, success: 6, failed: 3 }  ✅
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔄 自动重试失败任务
📊 失败数量: 3
🔢 重试轮数: 1/3
⏳ 等待 1 秒后开始重试...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

所有任务失败

修复前:

❌ Token失败: 某token (所有任务都失败)
📊 统计信息: { total: 1, success: 0, failed: 1 }

修复后:

❌ Token失败: 某token (7/7个任务失败)
📊 统计信息: { total: 1, success: 0, failed: 1 }

🧪 测试建议

测试场景1部分任务失败

  1. 准备3个token其中1个token的某个任务会失败如发车任务未加入俱乐部
  2. 启用"自动重试失败任务"设置最大重试轮数为3轮
  3. 运行批量自动化
  4. 观察:
    • 全局统计应显示成功2失败1
    • 重试轮数应显示1/3
    • 失败的token会自动进入重试流程
    • token卡片显示为"失败"状态(红色)

测试场景2全部任务成功

  1. 准备3个token所有任务都能正常完成
  2. 运行批量自动化
  3. 观察:
    • 全局统计应显示成功3失败0
    • 重试轮数应显示0/3不触发重试
    • 所有token卡片显示为"已完成"状态(绿色)

测试场景3所有任务失败

  1. 准备1个token其所有任务都会失败如未连接WSS
  2. 运行批量自动化
  3. 观察:
    • 全局统计应显示成功0失败1
    • 重试轮数应显示1/3
    • 失败的token会自动进入重试流程
    • token卡片显示为"失败"状态(红色)

测试场景4重试后成功

  1. 准备1个token第一次某个任务失败重试后成功
  2. 运行批量自动化,启用自动重试
  3. 观察:
    • 第1轮成功0失败1触发重试
    • 第2轮成功1失败0完成所有任务
    • 最终状态成功1失败0

📝 相关文件

修改的文件

  • src/stores/batchTaskStore.js (第 418-445 行)
    • 修改了 executeTokenTasks 函数的任务状态判断逻辑
    • 将"部分任务失败"从成功统计改为失败统计

相关文件(无需修改)

  • src/components/BatchTaskPanel.vue - 批量任务面板(自动显示正确的统计)
  • src/components/TaskProgressCard.vue - 执行进度卡片(自动显示"失败"状态)
  • finishBatchExecution() - 自动重试逻辑自动检测失败token

🔄 版本历史

v3.11.4 (2025-10-08)

  • 🐛 修复:部分任务失败时不计入失败统计的问题
  • 新增:任何任务失败(包括部分或全部)都会触发自动重试机制
  • 🔄 重构:简化了任务状态判断逻辑

v3.11.3 (2025-10-08)

  • 新增:发车任务完成后的最终验证步骤

v3.11.2 (2025-10-08)

  • 🐛 修复:游戏功能模块的赛车管理也会统计运输中的车辆

v3.11.1 (2025-10-08)

  • 🐛 修复:俱乐部签到错误码 2300190已签到不应视为失败

💡 后续优化建议

  1. 可配置失败策略

    • 增加配置项,允许用户选择是否将"部分失败"也计为失败
    • 某些场景下,用户可能只关心关键任务(如发车、爬塔)是否成功
  2. 失败任务详情

    • 在重试日志中显示哪些具体任务失败了
    • 便于快速定位问题
  3. 智能重试

    • 仅重试失败的任务,跳过已成功的任务
    • 提高重试效率,减少服务器压力
  4. 失败任务统计

    • 在全局统计中增加"部分失败"和"完全失败"的细分统计
    • 提供更详细的执行报告

🔗 相关问题