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

183 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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