Files
autoAiWorkSys/_doc/task.md
张成 735fa0c621 1
2025-12-17 17:30:03 +08:00

177 lines
4.9 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.
# task_status_${snCode} 主题推送位置分析
## 一、推送位置(服务端)
### 1. 任务状态变更推送 (`task_status_update`)
**位置**: `autoAiWorkSys/api/middleware/schedule/taskQueue.js`
**方法**: `notifyTaskStatusChange(sn_code, taskData)`
**推送时机**:
-**任务开始执行时** (第586行)
- 状态: `running`
- 进度: `0`
- 触发位置: `executeTask` 方法中,任务开始执行时
-**任务完成时** (第631行)
- 状态: `completed`
- 进度: `100`
- 触发位置: `executeTask` 方法中,任务成功完成后
-**任务失败时** (第675行)
- 状态: `failed`
- 进度: `0`
- 错误信息: `errorMessage`
- 触发位置: `executeTask` 方法中,任务执行失败时
**推送内容**:
```javascript
{
action: 'task_status_update',
data: {
taskId: task.id,
taskName: task.taskName,
taskType: task.taskType,
status: 'running' | 'completed' | 'failed',
progress: 0 | 100,
errorMessage?: string,
endTime?: Date
},
timestamp: string
}
```
### 2. 任务状态摘要推送 (`task_status_summary`)
**位置**: `autoAiWorkSys/api/middleware/schedule/taskQueue.js`
**方法**: `sendTaskStatusSummary(sn_code)`
**推送时机**:
-**定时推送** (每10秒一次)
- 位置: `autoAiWorkSys/api/middleware/schedule/scheduledJobs.js`
- 方法: `syncTaskStatusSummary()`
- 条件: 只向在线设备推送(最后心跳时间 < 3分钟
**推送内容**:
```javascript
{
action: 'task_status_summary',
data: {
sn_code: string,
currentTask: {
taskId: number,
taskName: string,
taskType: string,
status: 'running',
progress: number,
currentStep: string,
startTime: Date,
jobTitle?: string, // 新增:职位名称
companyName?: string // 新增:公司名称
} | null,
pendingTasks: Array<{
taskId: number,
taskName: string,
taskType: string,
status: 'pending',
scheduledTime: Date,
priority: number
}>,
nextTaskTime: Date | null,
pendingCount: number, // 队列中的任务数
totalPendingCount: number, // 总待执行数(包括当前任务的剩余步骤)
mqttTopic: string,
timestamp: string
},
timestamp: string
}
```
## 二、接收位置(客户端)
### 1. MQTT 订阅
**位置**: `boss-automation-nodejs/src/services/mqttService.js`
**订阅时机**: MQTT 连接成功后 (第360行)
**订阅代码**:
```javascript
const taskStatusTopic = `task_status_${this.config.snCode}`;
this.client.subscribe(taskStatusTopic, { qos: 1 });
```
### 2. 消息处理
**位置**: `boss-automation-nodejs/src/services/mqttService.js`
**处理方法**: `handleMessage` (第292行)
**处理逻辑**:
- 如果 `action === 'task_status_update'`:
- 发送到渲染进程: `task:status-update`
- 如果 `action === 'task_status_summary'`:
- 发送到渲染进程: `task:status-summary`
### 3. 渲染进程接收
**位置**: `boss-automation-nodejs/app/mixins/taskMixin.js`
**方法**:
- `onTaskStatusUpdate(taskData)` - 处理任务状态变更
- `onTaskStatusSummary(summary)` - 处理任务状态摘要
**事件监听**: `boss-automation-nodejs/app/mixins/eventListenerMixin.js`
## 三、当前推送策略分析
### ✅ 优点
1. **实时性**: 任务状态变更立即推送
2. **完整性**: 定时推送完整的状态摘要
3. **可靠性**: 只向在线设备推送,避免资源浪费
### ⚠️ 潜在问题
1. **推送频率**: 定时任务每10秒推送一次可能过于频繁
2. **重复推送**: 任务状态变更和定时摘要可能推送重复信息
3. **推送时机**: 某些关键状态变更可能没有及时推送(如进度更新)
## 四、建议的优化方案
### 方案1: 减少定时推送频率
- 当前: 每10秒推送一次
- 建议: 改为每30秒或60秒推送一次
- 理由: 任务状态变更已实时推送,定时推送主要用于同步完整状态
### 方案2: 只在关键时机推送摘要
- 任务队列变化时推送(新增/删除任务)
- 当前任务完成/失败时推送
- 定时推送作为兜底(频率降低)
### 方案3: 合并推送
- 将任务状态变更和摘要合并为一个消息
- 减少消息数量,提高效率
### 方案4: 添加进度更新推送
- 任务执行过程中,定期推送进度更新
- 例如每完成10%进度推送一次
## 五、需要推送的场景建议
### ✅ 必须推送的场景
1. **任务开始执行** - 立即推送状态变更
2. **任务完成** - 立即推送状态变更 + 状态摘要
3. **任务失败** - 立即推送状态变更 + 状态摘要
4. **任务队列变化** - 新增/删除任务时推送摘要
### ⚠️ 可选推送的场景
1. **进度更新** - 每10%或每完成一个步骤推送一次
2. **定时同步** - 作为兜底频率降低到30-60秒
### ❌ 不需要推送的场景
1. **任务状态未变化** - 避免重复推送相同状态
2. **设备离线** - 不向离线设备推送