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

251 lines
7.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 问题修复:部分任务失败触发重试 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)