1
This commit is contained in:
@@ -582,15 +582,10 @@ class TaskQueue {
|
||||
{ where: { id: task.id } }
|
||||
);
|
||||
|
||||
// 通知客户端任务状态变更
|
||||
await this.notifyTaskStatusChange(task.sn_code, {
|
||||
taskId: task.id,
|
||||
taskName: task.taskName,
|
||||
taskType: task.taskType,
|
||||
status: 'running',
|
||||
progress: 0,
|
||||
startTime: task.startTime
|
||||
});
|
||||
// 推送设备工作状态(任务开始执行)
|
||||
const deviceWorkStatusNotifier = require('./deviceWorkStatusNotifier');
|
||||
const summary = await this.getTaskStatusSummary(task.sn_code);
|
||||
await deviceWorkStatusNotifier.sendDeviceWorkStatus(task.sn_code, summary);
|
||||
|
||||
// 使用注册的任务处理器执行任务
|
||||
const handler = this.taskHandlers.get(task.taskType);
|
||||
@@ -627,15 +622,10 @@ class TaskQueue {
|
||||
{ where: { id: task.id } }
|
||||
);
|
||||
|
||||
// 通知客户端任务状态变更
|
||||
await this.notifyTaskStatusChange(task.sn_code, {
|
||||
taskId: task.id,
|
||||
taskName: task.taskName,
|
||||
taskType: task.taskType,
|
||||
status: 'completed',
|
||||
progress: 100,
|
||||
endTime: task.endTime
|
||||
});
|
||||
// 推送设备工作状态(任务完成)
|
||||
const deviceWorkStatusNotifier = require('./deviceWorkStatusNotifier');
|
||||
const summary = await this.getTaskStatusSummary(task.sn_code);
|
||||
await deviceWorkStatusNotifier.sendDeviceWorkStatus(task.sn_code, summary);
|
||||
|
||||
console.log(`[任务队列] 设备 ${task.sn_code} 任务执行成功: ${task.taskName} (耗时: ${task.duration}ms)`);
|
||||
|
||||
@@ -671,16 +661,10 @@ class TaskQueue {
|
||||
{ where: { id: task.id } }
|
||||
);
|
||||
|
||||
// 通知客户端任务状态变更
|
||||
await this.notifyTaskStatusChange(task.sn_code, {
|
||||
taskId: task.id,
|
||||
taskName: task.taskName,
|
||||
taskType: task.taskType,
|
||||
status: 'failed',
|
||||
progress: 0,
|
||||
errorMessage: task.errorMessage,
|
||||
endTime: task.endTime
|
||||
});
|
||||
// 推送设备工作状态(任务失败)
|
||||
const deviceWorkStatusNotifier = require('./deviceWorkStatusNotifier');
|
||||
const summary = await this.getTaskStatusSummary(task.sn_code);
|
||||
await deviceWorkStatusNotifier.sendDeviceWorkStatus(task.sn_code, summary);
|
||||
} catch (dbError) {
|
||||
console.error(`[任务队列] 更新任务失败状态到数据库失败:`, dbError);
|
||||
}
|
||||
@@ -1026,34 +1010,7 @@ class TaskQueue {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通知客户端任务状态变更
|
||||
* @param {string} sn_code - 设备SN码
|
||||
* @param {object} taskData - 任务数据
|
||||
*/
|
||||
async notifyTaskStatusChange(sn_code, taskData) {
|
||||
try {
|
||||
const mqttClient = await this.getMqttClient();
|
||||
if (!mqttClient) {
|
||||
return; // MQTT客户端不可用,静默失败
|
||||
}
|
||||
|
||||
// 通过MQTT发布任务状态变更通知
|
||||
// 主题格式: task_status_{sn_code}
|
||||
const topic = `task_status_${sn_code}`;
|
||||
const message = JSON.stringify({
|
||||
action: 'task_status_update',
|
||||
data: taskData,
|
||||
timestamp: new Date().toISOString()
|
||||
});
|
||||
|
||||
await mqttClient.publish(topic, message);
|
||||
console.log(`[任务队列] 已通知客户端任务状态变更: ${sn_code} - ${taskData.taskName || taskData.taskType || '未知任务'} (${taskData.status})`);
|
||||
} catch (error) {
|
||||
// 通知失败不影响任务执行,只记录日志
|
||||
console.warn(`[任务队列] 通知客户端任务状态变更失败:`, error.message);
|
||||
}
|
||||
}
|
||||
// notifyTaskStatusChange 方法已移除,统一使用 deviceWorkStatusNotifier.sendDeviceWorkStatus
|
||||
|
||||
/**
|
||||
* 获取任务状态摘要(用于同步到客户端)
|
||||
@@ -1260,74 +1217,12 @@ class TaskQueue {
|
||||
}
|
||||
|
||||
/**
|
||||
* 向客户端发送任务状态摘要
|
||||
* 发送设备工作状态(统一方法,包含任务和指令状态)
|
||||
* @param {string} sn_code - 设备SN码
|
||||
* @param {object} options - 可选参数
|
||||
* @param {object} options.currentCommand - 当前执行的指令信息(可选)
|
||||
*/
|
||||
async sendTaskStatusSummary(sn_code) {
|
||||
try {
|
||||
const mqttClient = await this.getMqttClient();
|
||||
if (!mqttClient) {
|
||||
return; // MQTT客户端不可用,静默失败
|
||||
}
|
||||
|
||||
const summary = await this.getTaskStatusSummary(sn_code);
|
||||
|
||||
// 通过MQTT发布任务状态摘要
|
||||
// 主题格式: task_status_{sn_code}
|
||||
const topic = `task_status_${sn_code}`;
|
||||
const message = JSON.stringify({
|
||||
action: 'task_status_summary',
|
||||
data: summary,
|
||||
timestamp: new Date().toISOString()
|
||||
});
|
||||
|
||||
await mqttClient.publish(topic, message);
|
||||
|
||||
// 改进日志输出,显示更详细的任务信息
|
||||
if (summary.currentTask) {
|
||||
const task = summary.currentTask;
|
||||
|
||||
// 构建任务标识信息
|
||||
let taskIdentifier = task.taskName || task.taskType || '未知任务';
|
||||
|
||||
// 如果是投递简历任务,显示具体的职位和公司信息
|
||||
if (task.jobTitle || task.companyName) {
|
||||
const jobInfo = [];
|
||||
if (task.jobTitle) {
|
||||
jobInfo.push(task.jobTitle);
|
||||
}
|
||||
if (task.companyName) {
|
||||
// 截断过长的公司名称
|
||||
const companyName = task.companyName.length > 20
|
||||
? task.companyName.substring(0, 20) + '...'
|
||||
: task.companyName;
|
||||
jobInfo.push(companyName);
|
||||
}
|
||||
if (jobInfo.length > 0) {
|
||||
taskIdentifier = `投递职位: ${jobInfo.join(' @ ')}`;
|
||||
}
|
||||
}
|
||||
|
||||
const progressInfo = task.progress !== null && task.progress !== undefined
|
||||
? `进度: ${task.progress}%`
|
||||
: '';
|
||||
const stepInfo = task.currentStep
|
||||
? `步骤: ${task.currentStep}`
|
||||
: '';
|
||||
const detailInfo = [progressInfo, stepInfo].filter(Boolean).join(', ');
|
||||
const detailStr = detailInfo ? ` (${detailInfo})` : '';
|
||||
|
||||
// 使用总待执行数(包括当前任务的剩余步骤)
|
||||
const totalCount = summary.totalPendingCount !== undefined ? summary.totalPendingCount : summary.pendingCount;
|
||||
console.log(`[任务队列] 已发送任务状态摘要到 ${sn_code}: 当前任务=${taskIdentifier}${detailStr}, 待执行=${totalCount}个`);
|
||||
} else {
|
||||
console.log(`[任务队列] 已发送任务状态摘要到 ${sn_code}: 当前任务=无, 待执行=${summary.pendingCount}个`);
|
||||
}
|
||||
} catch (error) {
|
||||
// 通知失败不影响任务执行,只记录日志
|
||||
console.warn(`[任务队列] 发送任务状态摘要失败:`, error.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 导出单例
|
||||
|
||||
Reference in New Issue
Block a user