199 lines
6.9 KiB
Markdown
199 lines
6.9 KiB
Markdown
|
|
# 问题分析 - 发车失败错误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,而是服务器端的限制:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
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:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 查询车辆后
|
|||
|
|
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`,避免不必要的发送请求:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 第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 (凌晨,可能接近或已过服务器日切时间)
|
|||
|
|
|