7.5 KiB
7.5 KiB
🐛 BUG修复 - 统计数据修复 v3.13.5.6
📋 修复的问题
1. 总计数统计不准确
问题描述:
当选择"重新开始上一次进度"时,如果用户在此期间增加或删除了Token,总计数(total)会与实际Token数量不符。
原因分析:
系统从保存的进度中恢复统计数据时,直接使用了保存时的total值,没有检查当前Token列表是否发生了变化。
修复方案:
// 🔧 修复:检查当前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:提取失败原因收集为独立函数
/**
* 🔧 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:任务失败时实时更新统计
// 在 updateTaskProgress 函数中
if (updates.status === 'failed' && updates.error) {
// 重新收集并更新失败原因统计
failureReasonsStats.value = collectFailureReasons()
}
步骤3:保存失败原因统计到localStorage
const saveExecutionProgress = (completedTokenIds, allTokenIds, tasks) => {
// 🔧 实时收集失败原因(不等到任务结束)
const currentFailureReasons = collectFailureReasons()
const progress = {
// ... 其他字段 ...
// 🔧 新增:保存失败原因统计
failureReasons: currentFailureReasons
}
storageCache.set('batchTaskProgress', progress)
}
步骤4:恢复时加载失败原因统计
// 在继续执行时恢复失败原因统计
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显示
修复后,失败原因统计会在以下情况显示:
- 任务执行中:任何Token失败后立即显示
- 任务完成后:显示完整的失败原因汇总
- 刷新页面后:继续执行时恢复之前的失败原因
- 定时重试时:保留之前轮次的失败统计
显示位置:批量任务面板 - 统计信息下方
━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 失败原因统计
━━━━━━━━━━━━━━━━━━━━━━━━━━
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行)
✅ 测试建议
-
测试总计数修复:
- 开始一个批量任务,执行到一半
- 删除/添加几个Token
- 刷新页面,选择"继续上一次进度"
- 检查总计数是否正确反映当前Token数量
-
测试失败原因显示:
- 开始批量任务,等待部分Token失败
- 检查是否立即显示失败原因统计
- 刷新页面,选择"继续上一次进度"
- 检查之前的失败原因是否正确显示
-
测试多轮重试:
- 启用自动重试功能
- 让部分Token持续失败
- 检查每轮重试后失败原因是否累积正确
📌 版本信息
- 版本号:v3.13.5.6
- 修复日期:2025-10-11
- 影响范围:批量任务执行统计功能
- 向后兼容:是(旧版本保存的进度仍可继续)
💡 注意事项
- Token列表变化:如果继续执行时Token列表变化较大,建议重新开始而不是继续上一次进度
- 失败原因准确性:失败原因分类依赖错误消息的关键词匹配,如遇到新的错误类型可能归为"其他错误"
- 性能影响:每次任务失败都会调用
collectFailureReasons(),但由于只处理失败的Token,对性能影响极小
🚀 未来优化方向
- 支持更多错误类型的自动分类
- 失败原因可视化图表展示
- 失败Token一键导出/重试
- 按失败原因筛选Token列表