# 问题修复:部分任务失败触发重试 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.js` 的 `executeTokenTasks` 函数中: ```javascript // 旧逻辑(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` 函数的任务状态判断逻辑: ```javascript // 新逻辑(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. **失败任务统计**: - 在全局统计中增加"部分失败"和"完全失败"的细分统计 - 提供更详细的执行报告 ## 🔗 相关问题 - [功能更新-自动重试失败任务v3.7.0.md](./功能更新-自动重试失败任务v3.7.0.md) - [问题修复-批量任务统计计数错误v3.6.1.md](./问题修复-批量任务统计计数错误v3.6.1.md)