# 问题修复 - 发车失败错误200020 (v3.9.9) ## 📋 问题描述 ### 现象 在批量自动化的发车任务中,虽然车辆查询、刷新、收获都成功,但在发送车辆时全部失败,错误码为 `200020`。 ### 详细日志分析 #### ✅ 成功的部分 1. **账号激活**: 成功 2. **查询车辆**: 成功,查询到4辆车 3. **刷新车辆**: 部分执行 - 1辆车刷新失败(处于冷却期) - 3辆车跳过(已有刷新票,按设计跳过) 4. **收获车辆**: 全部成功,4辆车都收获成功 #### ❌ 失败的部分 5. **发送车辆**: 全部失败 ``` ❌ [token_xxx] 发送车辆失败: C2z8-70437522 - 服务器错误: 200020 - 未知错误 ❌ [token_xxx] 发送车辆失败: CpYM-70437533 - 服务器错误: 200020 - 未知错误 ❌ [token_xxx] 发送车辆失败: MH53-70437538 - 服务器错误: 200020 - 未知错误 ❌ [token_xxx] 发送车辆失败: UCED-70437551 - 服务器错误: 200020 - 未知错误 🚀 [token_xxx] 发送完成:成功0次,跳过0次 ``` ### 错误码含义 错误码 `200020` 是一个通用错误,在不同场景下有不同含义: - 刷新车辆时:冷却期未过/刷新次数已用完 - 发送车辆时:**服务器状态未同步/操作间隔过短** ## 🔍 问题原因 ### 根本原因 **服务器状态同步延迟**: 1. 车辆收获后,服务器需要时间将车辆状态从"已到达"更新为"待发车" 2. 原代码在收获和发送之间只等待了 **500ms** 3. 这个时间不足以让服务器完成状态同步 4. 导致发送请求时,服务器认为车辆状态不合法,返回错误码 `200020` ### 时序问题 ``` 收获车辆 → 等待500ms → 查询车辆 → 立即发送 ↑ 时间太短,服务器状态未同步 ``` ### 为什么游戏功能模块中没有这个问题? 在游戏功能的"俱乐部赛车"页面中: - 用户手动点击"一键发车" - 收获和发送之间有明显的UI交互延迟(查询、渲染、用户观察) - 实际间隔通常在1-2秒以上 - 足够服务器完成状态同步 ## 💡 解决方案 ### v3.9.9 修复 **增加服务器状态同步等待时间**: - 将收获后的等待时间从 **500ms** 增加到 **3000ms(3秒)** - 添加明确的日志提示,让用户知道在等待服务器同步 ### 代码修改 **位置**: `src/stores/batchTaskStore.js` - `sendCar` 任务 **修改前**: ```javascript console.log(`🎁 [${tokenId}] 收获完成:成功${claimSuccessCount}次,跳过${claimSkipCount}次`) sendCarResults.push({ task: '批量收获', success: true, message: `成功${claimSuccessCount},跳过${claimSkipCount}` }) // 第5步:批量发送 console.log(`🚀 [${tokenId}] 开始批量发送...`) let sendSuccessCount = 0 let sendSkipCount = 0 const remainingSendCount = 4 - dailySendCount // 重新查询车辆状态 await new Promise(resolve => setTimeout(resolve, 500)) // ❌ 500ms太短 ``` **修改后**: ```javascript console.log(`🎁 [${tokenId}] 收获完成:成功${claimSuccessCount}次,跳过${claimSkipCount}次`) sendCarResults.push({ task: '批量收获', success: true, message: `成功${claimSuccessCount},跳过${claimSkipCount}` }) // 第5步:批量发送 console.log(`🚀 [${tokenId}] 开始批量发送...`) let sendSuccessCount = 0 let sendSkipCount = 0 const remainingSendCount = 4 - dailySendCount // 等待服务器状态同步(收获→待发车需要时间) console.log(`⏳ [${tokenId}] 等待服务器状态同步(3秒)...`) // ✅ 新增日志 await new Promise(resolve => setTimeout(resolve, 3000)) // ✅ 增加到3秒 // 重新查询车辆状态 console.log(`🔍 [${tokenId}] 重新查询车辆状态...`) // ✅ 新增日志 ``` ## 📊 优化效果 ### 时序优化对比 #### 修改前 ``` 收获车辆(4辆) → 等待500ms → 查询车辆 → 发送失败(4辆) 总耗时: ~2秒 成功率: 0% ``` #### 修改后 ``` 收获车辆(4辆) → 等待3000ms → 查询车辆 → 发送成功(4辆) 总耗时: ~5秒 成功率: 预期100% ``` ### 性能影响 - **单token额外耗时**: +2.5秒 - **批量6个token(并发1)**: +2.5秒(每个token独立等待) - **用户体验**: 有明确的日志提示,用户知道在等待服务器同步 ## 🎯 验证建议 ### 验证步骤 1. 重新运行批量自动化,选择包含"发车"任务 2. 观察日志中是否有: ``` ✅ [token_xxx] 收获车辆成功: xxx ✅ [token_xxx] 收获车辆成功: xxx ... 🎁 [token_xxx] 收获完成:成功4次,跳过0次 ⏳ [token_xxx] 等待服务器状态同步(3秒)... ← 新增 🔍 [token_xxx] 重新查询车辆状态... ← 新增 🚀 [token_xxx] 待发车: 4辆,剩余额度: 4个,将发送: 4辆 ✅ [token_xxx] 发送车辆成功: xxx ← 期望成功 ``` ### 预期结果 - ✅ 所有车辆发送成功 - ✅ 日志中显示明确的等待提示 - ✅ 每日发车次数正确更新(如 `今日4/4`) ### 如果仍然失败 如果3秒等待后仍然失败,可能的原因: 1. **账号限制**: 该账号在俱乐部中没有发车权限 2. **服务器限制**: 服务器有更严格的防刷新机制 3. **车辆状态异常**: 车辆本身存在问题 **建议**: - 尝试在游戏功能的"俱乐部赛车"页面手动发车,确认是否能成功 - 如果手动也失败,说明是账号或车辆本身的问题 - 如果手动成功,批量自动化失败,可以考虑进一步增加等待时间到5秒 ## 📝 更新日志 **版本**: v3.9.9 **日期**: 2025-10-08 **类型**: 问题修复 **修改内容**: 1. 增加收获车辆后的等待时间(500ms → 3000ms) 2. 添加明确的日志提示,显示正在等待服务器状态同步 3. 优化发送前的查询日志,更清晰地显示流程 **影响范围**: - `src/stores/batchTaskStore.js` - `sendCar` 任务 **相关问题**: - 批量发车全部失败,错误码200020 - 服务器状态同步延迟导致的时序问题