7.8 KiB
7.8 KiB
功能优化 - 运输中车辆算作已发车 v3.11.2
修改日期
2025-01-09
问题描述
在批量自动化的发车任务中,如果检测到4辆车都在运输中(state === 1),系统并未将其计入今日发车次数,导致统计不准确。用户明确要求:如果识别出来赛车是4辆车正在运输中,也将其当作成功发车4次。
修改范围
- 批量自动化:
src/stores/batchTaskStore.js-sendCar任务 - 游戏功能模块:
src/components/CarManagement.vue-queryClubCars函数
修改内容
1. 车辆状态统计
在查询车辆后立即统计各状态的车辆数量:
// 统计各状态的车辆数量
const carsInTransit = carIds.filter(carId => getCarState(carDataMap[carId]) === 1) // 运输中
const carsArrived = carIds.filter(carId => getCarState(carDataMap[carId]) === 2) // 已到达
const carsReady = carIds.filter(carId => getCarState(carDataMap[carId]) === 0) // 待发车
console.log(`📊 [${tokenId}] 车辆状态统计: 运输中${carsInTransit.length}辆, 已到达${carsArrived.length}辆, 待发车${carsReady.length}辆`)
2. 自动更新发车次数
如果检测到有车正在运输中,自动更新 dailySendCount:
// 如果有车正在运输中,将其算作今日已发车
if (carsInTransit.length > 0) {
// 计算实际应该记录的发车数(考虑运输中的车辆)
const expectedSendCount = carsInTransit.length
// 如果客户端记录的发车数小于运输中的车辆数,更新为运输中的车辆数
if (dailySendCount < expectedSendCount) {
console.log(`🚗 [${tokenId}] 检测到 ${carsInTransit.length} 辆车正在运输中,更新今日发车次数: ${dailySendCount} → ${expectedSendCount}`)
dailySendCount = expectedSendCount
localStorage.setItem(dailySendKey, dailySendCount.toString())
}
}
3. 特殊场景处理:全部运输中
如果4辆车全部都在运输中,直接返回成功,跳过刷新、收获、发送步骤:
// 如果所有车辆都在运输中,且达到4辆,直接返回成功
if (carsInTransit.length === 4 && carsReady.length === 0 && carsArrived.length === 0) {
console.log(`✅ [${tokenId}] 全部4辆车都在运输中,视为今日发车任务已完成`)
// 添加跳过记录
sendCarResults.push({
task: '批量刷新',
success: true,
skipped: true,
message: '所有车辆都在运输中,跳过刷新'
})
sendCarResults.push({
task: '批量收获',
success: true,
skipped: true,
message: '所有车辆都在运输中,跳过收获'
})
sendCarResults.push({
task: '批量发送',
success: true,
message: `4辆车都在运输中,视为今日发车已完成`
})
return {
task: '发车',
taskId: 'send_car',
success: true,
data: sendCarResults,
message: `发车完成:今日已发车${dailySendCount}/4 (全部运输中)`
}
}
游戏功能模块(CarManagement.vue)的对应实现
在游戏功能模块的 queryClubCars() 函数中,添加了相同的逻辑:
// 统计各状态的车辆数量
const carsInTransit = carData.value.filter(car => car.state === 1) // 运输中
const carsArrived = carData.value.filter(car => car.state === 2) // 已到达
const carsReady = carData.value.filter(car => car.state === 0) // 待发车
console.log(`📊 车辆状态统计: 运输中${carsInTransit.length}辆, 已到达${carsArrived.length}辆, 待发车${carsReady.length}辆`)
// 如果有车正在运输中,将其算作今日已发车
if (carsInTransit.length > 0) {
// 计算实际应该记录的发车数(考虑运输中的车辆)
const expectedSendCount = carsInTransit.length
// 如果客户端记录的发车数小于运输中的车辆数,更新为运输中的车辆数
if (dailySendCount.value < expectedSendCount) {
console.log(`🚗 检测到 ${carsInTransit.length} 辆车正在运输中,更新今日发车次数: ${dailySendCount.value} → ${expectedSendCount}`)
dailySendCount.value = expectedSendCount
saveDailySendCount(dailySendCount.value)
}
}
message.success(`成功查询到 ${carData.value.length} 辆车辆(今日已发车: ${dailySendCount.value}/4)`)
说明:
- 游戏功能模块使用
carData.value数组(已解析完成的车辆数据) - 批量自动化使用
carIds数组和getCarState()函数(原始车辆数据) - 两者逻辑完全一致,只是数据结构不同
优化效果
场景1:4辆车全部运输中
- 旧逻辑:
dailySendCount = 0,任务报告"所有车辆都在运输中,无需操作" - 新逻辑:
dailySendCount = 4,任务报告"发车完成:今日已发车4/4 (全部运输中)"
场景2:2辆运输中,2辆已到达
- 旧逻辑:
dailySendCount = 0,收获2辆,发送2辆,最终dailySendCount = 2 - 新逻辑:
dailySendCount = 2(立即更新),收获2辆,发送2辆,最终dailySendCount = 4
场景3:1辆运输中,3辆待发车
- 旧逻辑:
dailySendCount = 0,发送3辆,最终dailySendCount = 3 - 新逻辑:
dailySendCount = 1(立即更新),发送3辆,最终dailySendCount = 4
日志示例
游戏功能模块(CarManagement.vue)
🚗 查询到 4 辆俱乐部车辆
📊 车辆状态统计: 运输中4辆, 已到达0辆, 待发车0辆
🚗 检测到 4 辆车正在运输中,更新今日发车次数: 3 → 4
✅ 成功查询到 4 辆车辆(今日已发车: 4/4)
批量自动化(batchTaskStore.js)
全部运输中的日志
✅ [token_xxx] 查询到 4 辆车(今日已发车: 0/4)
📊 [token_xxx] 车辆状态统计: 运输中4辆, 已到达0辆, 待发车0辆
🚗 [token_xxx] 检测到 4 辆车正在运输中,更新今日发车次数: 0 → 4
✅ [token_xxx] 全部4辆车都在运输中,视为今日发车任务已完成
📊 [token_xxx] 发车任务完成:查询车辆 ✓, 批量刷新 ⏭️ (跳过), 批量收获 ⏭️ (跳过), 批量发送 ✓ (4辆车都在运输中)
部分运输中的日志
✅ [token_xxx] 查询到 4 辆车(今日已发车: 0/4)
📊 [token_xxx] 车辆状态统计: 运输中2辆, 已到达2辆, 待发车0辆
🚗 [token_xxx] 检测到 2 辆车正在运输中,更新今日发车次数: 0 → 2
🎁 [token_xxx] 收获完成:成功 2, 失败 0
🚀 [token_xxx] 发送完成:成功 2, 失败 0
📊 [token_xxx] 发车任务完成:今日已发车4/4
优势
- 统计准确:运输中的车辆正确计入今日发车次数
- 逻辑合理:符合用户预期,运输中的车确实是今天发出去的
- 性能优化:4辆车全部运输中时,直接跳过后续步骤,节省时间
- 日志清晰:明确显示车辆状态和发车次数的更新过程
测试建议
游戏功能模块测试
-
场景1:在游戏功能模块查询4辆全部运输中的车,确认:
- 日志显示
🚗 检测到 4 辆车正在运输中,更新今日发车次数: X → 4 - 成功提示显示
成功查询到 4 辆车辆(今日已发车: 4/4) - 右侧显示
发车: 4/4 今日已达上限
- 日志显示
-
场景2:在游戏功能模块查询部分运输中的车(如2辆运输中,2辆待发车),确认:
- 日志显示
📊 车辆状态统计: 运输中2辆, 已到达0辆, 待发车2辆 dailySendCount自动更新为 2- 可以继续发送剩余2辆车
- 日志显示
批量自动化测试
- 场景1:确保4辆车全部运输中时,任务直接返回成功,
dailySendCount = 4 - 场景2:确保部分运输中时,
dailySendCount正确更新并累加后续发车 - 场景3:确保跨天后,新的一天
dailySendCount正确重置为0 - 场景4:确保在
TaskProgressCard.vue中,发车状态显示为4/4