# 功能优化 - 运输中车辆算作已发车 v3.11.2 ## 修改日期 2025-01-09 ## 问题描述 在批量自动化的发车任务中,如果检测到4辆车都在运输中(state === 1),系统并未将其计入今日发车次数,导致统计不准确。用户明确要求:**如果识别出来赛车是4辆车正在运输中,也将其当作成功发车4次**。 ## 修改范围 - **批量自动化**:`src/stores/batchTaskStore.js` - `sendCar` 任务 - **游戏功能模块**:`src/components/CarManagement.vue` - `queryClubCars` 函数 ## 修改内容 ### 1. 车辆状态统计 在查询车辆后立即统计各状态的车辆数量: ```javascript // 统计各状态的车辆数量 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`: ```javascript // 如果有车正在运输中,将其算作今日已发车 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辆车全部都在运输中,直接返回成功,跳过刷新、收获、发送步骤: ```javascript // 如果所有车辆都在运输中,且达到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()` 函数中,添加了相同的逻辑: ```javascript // 统计各状态的车辆数量 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 ``` ## 优势 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`