# 功能优化 - 运输中车辆算作已发车 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`

