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

7.5 KiB
Raw Blame History

🐛 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显示

修复后,失败原因统计会在以下情况显示:

  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列表