Files
xyzw_web_helper/MD说明文件夹/BUG修复-统计数据修复v3.13.5.6.md
2025-10-17 20:56:50 +08:00

238 lines
7.5 KiB
Markdown
Raw 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.

# 🐛 BUG修复 - 统计数据修复 v3.13.5.6
## 📋 修复的问题
### 1. 总计数统计不准确
**问题描述**
当选择"重新开始上一次进度"时如果用户在此期间增加或删除了Token总计数total会与实际Token数量不符。
**原因分析**
系统从保存的进度中恢复统计数据时,直接使用了保存时的`total`没有检查当前Token列表是否发生了变化。
**修复方案**
```javascript
// 🔧 修复检查当前token列表是否与保存的匹配
const currentAvailableTokenIds = tokenStore.gameTokens.map(t => t.id)
const stillExistTokens = targetTokens.filter(id => currentAvailableTokenIds.includes(id))
const stillExistCompleted = completedTokenIds.filter(id => currentAvailableTokenIds.includes(id))
// 如果token数量有变化更新列表并重新计算统计
if (stillExistTokens.length !== targetTokens.length) {
console.warn(`⚠️ Token列表已变化${targetTokens.length}个 → 现${stillExistTokens.length}个`)
targetTokens = stillExistTokens
completedTokenIds = stillExistCompleted
}
// 使用当前实际token数量作为total
executionStats.value = {
...executionStats.value,
total: targetTokens.length, // 🔧 修复使用当前实际token数量
success: savedProgress.value.stats.success,
failed: savedProgress.value.stats.failed,
skipped: savedProgress.value.stats.skipped
}
```
**修复效果**
- ✅ 总计数始终反映当前实际的Token数量
- ✅ 自动过滤已删除的Token
- ✅ 显示Token列表变化警告信息
---
### 2. 失败原因不显示
**问题描述**
任务执行过程中或刷新页面后继续执行时,失败原因统计不显示。
**原因分析**
失败原因统计只在`finishBatchExecution()`(任务完成时)才会收集。如果:
- 任务还在执行中
- 刷新页面后继续执行(之前的失败统计没保存)
- 失败的token进度被清理掉了
就会导致失败原因无法显示。
**修复方案**
#### 步骤1提取失败原因收集为独立函数
```javascript
/**
* 🔧 v3.13.5.6: 收集当前所有失败Token的原因统计
* 提取为独立函数,供保存进度和完成任务时使用
*/
const collectFailureReasons = () => {
const failureReasons = {}
Object.entries(taskProgress.value).forEach(([tokenId, progress]) => {
if (progress.status === 'failed') {
// ... 错误分类逻辑 ...
failureReasons[reason] = (failureReasons[reason] || 0) + 1
}
})
return failureReasons
}
```
#### 步骤2任务失败时实时更新统计
```javascript
// 在 updateTaskProgress 函数中
if (updates.status === 'failed' && updates.error) {
// 重新收集并更新失败原因统计
failureReasonsStats.value = collectFailureReasons()
}
```
#### 步骤3保存失败原因统计到localStorage
```javascript
const saveExecutionProgress = (completedTokenIds, allTokenIds, tasks) => {
// 🔧 实时收集失败原因(不等到任务结束)
const currentFailureReasons = collectFailureReasons()
const progress = {
// ... 其他字段 ...
// 🔧 新增:保存失败原因统计
failureReasons: currentFailureReasons
}
storageCache.set('batchTaskProgress', progress)
}
```
#### 步骤4恢复时加载失败原因统计
```javascript
// 在继续执行时恢复失败原因统计
if (savedProgress.value.failureReasons) {
failureReasonsStats.value = savedProgress.value.failureReasons
console.log(`📊 已恢复失败原因统计:${Object.keys(savedProgress.value.failureReasons).length}种原因`)
}
```
**修复效果**
- ✅ 任务失败时立即显示失败原因
- ✅ 刷新页面后能够显示之前的失败原因
- ✅ 执行过程中可以实时查看失败原因统计
- ✅ 代码更简洁提取公共逻辑减少重复代码100+行)
---
## 🎯 支持的错误类型
失败原因自动分类,支持以下错误类型:
| 错误类型 | 匹配规则 |
|---------|---------|
| WebSocket连接超时 | `WebSocket未在...内连接` |
| WebSocket连接失败 | `WebSocket未连接` / `连接失败` / `WebSocket is closed` |
| 服务器维护时间 | `服务器维护时间` |
| 请求超时 | `请求超时` / `timeout` |
| 服务器限流 (200400) | `200400` |
| 服务器限流 (200350) | `200350` |
| 未加入俱乐部 (2300070) | `2300070` |
| 未知错误 3100080 | `3100080` |
| 未知错误 2300190 | `2300190` |
| 其他错误 | 其他未分类错误 |
**智能提取任务名称**
如果错误信息包含任务名称,会自动提取并显示,例如:
- `领取挂机奖励: WebSocket连接超时`
- `一键补差: 服务器限流 (200400)`
---
## 📊 UI显示
修复后,失败原因统计会在以下情况显示:
1. **任务执行中**任何Token失败后立即显示
2. **任务完成后**:显示完整的失败原因汇总
3. **刷新页面后**:继续执行时恢复之前的失败原因
4. **定时重试时**:保留之前轮次的失败统计
显示位置:批量任务面板 - 统计信息下方
```
━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 失败原因统计
━━━━━━━━━━━━━━━━━━━━━━━━━━
WebSocket连接超时 3个Token
服务器限流 (200400) 2个Token
未加入俱乐部 (2300070) 1个Token
━━━━━━━━━━━━━━━━━━━━━━━━━━
```
---
## 🔍 调试信息
修复后会输出更详细的调试信息:
```
⚠️ Token列表已变化原300个 → 现295个
📊 已恢复失败原因统计3种原因
```
在控制台F12中可以查看
- Token列表变化警告
- 失败原因恢复确认
- 详细的失败统计数据
---
## 📂 修改的文件
- `src/stores/batchTaskStore.js`
- 修复total计数逻辑第487-517行
- 新增`collectFailureReasons()`函数第363-441行
- 修改`saveExecutionProgress()`函数第131-153行
- 修改`updateTaskProgress()`函数第3416-3445行
- 简化`finishBatchExecution()`函数第3490-3494行
---
## ✅ 测试建议
1. **测试总计数修复**
- 开始一个批量任务,执行到一半
- 删除/添加几个Token
- 刷新页面,选择"继续上一次进度"
- 检查总计数是否正确反映当前Token数量
2. **测试失败原因显示**
- 开始批量任务等待部分Token失败
- 检查是否立即显示失败原因统计
- 刷新页面,选择"继续上一次进度"
- 检查之前的失败原因是否正确显示
3. **测试多轮重试**
- 启用自动重试功能
- 让部分Token持续失败
- 检查每轮重试后失败原因是否累积正确
---
## 📌 版本信息
- **版本号**v3.13.5.6
- **修复日期**2025-10-11
- **影响范围**:批量任务执行统计功能
- **向后兼容**:是(旧版本保存的进度仍可继续)
---
## 💡 注意事项
1. **Token列表变化**如果继续执行时Token列表变化较大建议重新开始而不是继续上一次进度
2. **失败原因准确性**:失败原因分类依赖错误消息的关键词匹配,如遇到新的错误类型可能归为"其他错误"
3. **性能影响**:每次任务失败都会调用`collectFailureReasons()`但由于只处理失败的Token对性能影响极小
---
## 🚀 未来优化方向
1. 支持更多错误类型的自动分类
2. 失败原因可视化图表展示
3. 失败Token一键导出/重试
4. 按失败原因筛选Token列表