Files
xyzw_web_helper/MD说明文件夹/问题分析-发车失败错误12000050v3.9.9.md
2025-10-17 20:56:50 +08:00

6.9 KiB
Raw Permalink Blame History

问题分析 - 发车失败错误12000050 (v3.9.9测试)

📋 测试结果

v3.9.9修复生效

  1. 3秒等待日志正常显示

    🎁 [token_xxx] 收获完成成功0次跳过4次
    ⏳ [token_xxx] 等待服务器状态同步3秒...  ← 新增的日志
    🔍 [token_xxx] 重新查询车辆状态...          ← 新增的日志
    🚀 [token_xxx] 待发车: 4辆剩余额度: 4个将发送: 4辆
    
  2. 发车流程顺利执行

    • 账号激活成功
    • 查询车辆成功4辆
    • 刷新车辆成功1辆成功3辆跳过
    • 收获车辆跳过4辆都未到达
    • 3秒等待完成
    • 重新查询车辆状态成功

新问题:错误码变化

之前v3.9.8及之前)

  • 错误码:200020
  • 错误信息:"出了点小问题,请尝试重启游戏解决~"
  • 原因:服务器状态同步延迟

现在v3.9.9

  • 错误码:12000050
  • 错误信息:"今日发车次数已达上限"
  • 原因:服务器端已有发车记录

🔍 详细分析

日志对比

📊 [token_xxx] 今日已发车次数: 0/4  ← 客户端认为今天没发过车
🚀 [token_xxx] 待发车: 4辆剩余额度: 4个将发送: 4辆
❌ [token_xxx] 发送车辆失败: PNSp-70822640 - 服务器错误: 12000050 - 今日发车次数已达上限
❌ [token_xxx] 发送车辆失败: edch-70822675 - 服务器错误: 12000050 - 今日发车次数已达上限
❌ [token_xxx] 发送车辆失败: f3Kc-70822621 - 服务器错误: 12000050 - 今日发车次数已达上限
❌ [token_xxx] 发送车辆失败: zo3e-70822655 - 服务器错误: 12000050 - 今日发车次数已达上限
🚀 [token_xxx] 发送完成成功0次跳过0次

矛盾点

位置 今日发车次数 是否达到上限
客户端localStorage 0/4
服务器端 /4 是(已达上限)

可能的原因

  1. 服务器端已有发车记录(最可能):

    • 之前的测试中(游戏功能页面或其他批量任务)已经发过车
    • 服务器端的发车计数还没重置(通常在服务器日切时重置)
    • 客户端 localStorage 中的记录可能不准确或已清除
  2. 时区问题

    • 客户端使用的 new Date().toLocaleDateString('zh-CN') 获取日期
    • 服务器端可能使用不同的时区或日期判断逻辑
    • 导致客户端认为是"今天",但服务器认为还是"昨天"的发车次数
  3. localStorage 清除

    • 用户可能清除了浏览器缓存或 localStorage
    • 导致客户端的发车记录丢失
    • 但服务器端的记录依然存在

💡 验证方法

方法1检查服务器端发车记录

在"游戏功能" → "俱乐部赛车"页面:

  1. 点击"查询车辆"
  2. 观察每辆车的状态和 sendCount
  3. 服务器返回的 roleCar.sendCount 字段会显示今日已发车次数

方法2等待服务器日切

等到服务器的"日切"时间通常是凌晨0点或5点服务器会重置每日发车次数然后再测试。

方法3使用新账号测试

使用一个今天完全没有发过车的账号来测试批量发车功能。

📝 建议优化

1. 增强错误处理

为错误码 12000050 添加特殊处理让用户知道这不是bug而是服务器端的限制

catch (error) {
  const errorMsg = error.message || String(error)
  if (errorMsg.includes('12000050')) {
    console.log(`⚠️ [${tokenId}] 车辆 ${carId} 今日发车次数已达上限(服务器端限制)`)
  } else if (errorMsg.includes('200020')) {
    console.log(`⚠️ [${tokenId}] 车辆 ${carId} 处于冷却期或状态未同步`)
  } else {
    console.log(`❌ [${tokenId}] 发送车辆失败: ${carId} - ${errorMsg}`)
  }
  // ...
}

2. 同步服务器端的发车次数

在查询车辆时,如果服务器返回了 sendCount 字段,应该更新到客户端的 localStorage

// 查询车辆后
const serverSendCount = queryResponse.roleCar?.sendCount || 0
const localSendCount = parseInt(localStorage.getItem(dailySendKey) || '0')

// 以服务器端的值为准
if (serverSendCount > localSendCount) {
  console.log(`🔄 [${tokenId}] 同步服务器发车次数: ${localSendCount}${serverSendCount}`)
  localStorage.setItem(dailySendKey, serverSendCount.toString())
  dailySendCount = serverSendCount
}

3. 提前检查发车次数

在尝试发车之前,先检查服务器端的 sendCount,避免不必要的发送请求:

// 第3步检查每日发车次数限制使用服务器端的值
const serverSendCount = queryResponse.roleCar?.sendCount || 0
const dailySendKey = getTodayKey(tokenId)
let dailySendCount = parseInt(localStorage.getItem(dailySendKey) || '0')

// 同步服务器端的发车次数
if (serverSendCount > dailySendCount) {
  console.log(`🔄 [${tokenId}] 同步服务器发车次数: ${dailySendCount}${serverSendCount}`)
  localStorage.setItem(dailySendKey, serverSendCount.toString())
  dailySendCount = serverSendCount
}

console.log(`📊 [${tokenId}] 今日已发车次数: ${dailySendCount}/4 (服务器: ${serverSendCount})`)

if (dailySendCount >= 4) {
  console.warn(`⚠️ [${tokenId}] 今日发车次数已达上限: ${dailySendCount}/4`)
  return {
    task: '发车',
    taskId: 'send_car',
    success: true,
    data: sendCarResults,
    message: `今日发车次数已达上限(${dailySendCount}/4)`
  }
}

🎯 结论

v3.9.9 修复效果

3秒等待修复生效

  • 200020(状态未同步)变成 12000050(服务器限制)
  • 说明状态同步问题已解决

新问题不是bug

  • 错误码 12000050 是服务器端的正常限制
  • 说明服务器端确实已有发车记录
  • 需要等待服务器日切或使用新账号测试

下一步行动

  1. 立即可做

    • 实施"建议优化"中的错误处理增强
    • 添加服务器端发车次数同步逻辑
  2. 需要用户配合

    • 等待服务器日切后重新测试
    • 或使用一个今天完全没有发过车的新账号测试
    • 确认服务器端的 sendCount 字段是否正确返回
  3. 长期优化

    • 考虑完全依赖服务器端的 sendCount,而不是客户端 localStorage
    • 这样可以避免客户端和服务器端不一致的问题

📊 测试记录

版本 错误码 错误信息 原因 状态
v3.9.8及之前 200020 出了点小问题 状态同步延迟 已修复
v3.9.9 12000050 今日发车次数已达上限 服务器端限制 非bug需验证

日期: 2025-10-08
测试账号: 809服-0-705492847-悦809-one
客户端发车次数: 0/4
服务器端发车次数: 未知(需要查询)
测试时间: 02:50 (凌晨,可能接近或已过服务器日切时间)