This commit is contained in:
2025-10-17 20:56:50 +08:00
commit 90094ccd5a
342 changed files with 144988 additions and 0 deletions

View File

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