Files
xyzw_web_helper/MD说明文件夹/功能优化-运输中车辆算作已发车v3.11.2.md
2025-10-17 20:56:50 +08:00

7.8 KiB
Raw Blame History

功能优化 - 运输中车辆算作已发车 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() 函数(原始车辆数据)
  • 两者逻辑完全一致,只是数据结构不同

优化效果

场景14辆车全部运输中

  • 旧逻辑dailySendCount = 0,任务报告"所有车辆都在运输中,无需操作"
  • 新逻辑dailySendCount = 4,任务报告"发车完成今日已发车4/4 (全部运输中)"

场景22辆运输中2辆已到达

  • 旧逻辑dailySendCount = 0收获2辆发送2辆最终 dailySendCount = 2
  • 新逻辑dailySendCount = 2立即更新收获2辆发送2辆最终 dailySendCount = 4

场景31辆运输中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

优势

  1. 统计准确:运输中的车辆正确计入今日发车次数
  2. 逻辑合理:符合用户预期,运输中的车确实是今天发出去的
  3. 性能优化4辆车全部运输中时直接跳过后续步骤节省时间
  4. 日志清晰:明确显示车辆状态和发车次数的更新过程

测试建议

游戏功能模块测试

  1. 场景1在游戏功能模块查询4辆全部运输中的车确认

    • 日志显示 🚗 检测到 4 辆车正在运输中,更新今日发车次数: X → 4
    • 成功提示显示 成功查询到 4 辆车辆(今日已发车: 4/4
    • 右侧显示 发车: 4/4 今日已达上限
  2. 场景2在游戏功能模块查询部分运输中的车如2辆运输中2辆待发车确认

    • 日志显示 📊 车辆状态统计: 运输中2辆, 已到达0辆, 待发车2辆
    • dailySendCount 自动更新为 2
    • 可以继续发送剩余2辆车

批量自动化测试

  1. 场景1确保4辆车全部运输中时任务直接返回成功dailySendCount = 4
  2. 场景2:确保部分运输中时,dailySendCount 正确更新并累加后续发车
  3. 场景3:确保跨天后,新的一天 dailySendCount 正确重置为0
  4. 场景4:确保在 TaskProgressCard.vue 中,发车状态显示为 4/4