This commit is contained in:
张成
2026-02-27 17:33:39 +08:00
parent c1d812a80e
commit 1a011bcc01
12 changed files with 79 additions and 78 deletions

View File

@@ -84,10 +84,11 @@ class CommandManager {
const start_time = new Date();
let command_id = null;
let command_record = null;
let task = null;
try {
// 1. 获取任务信息
const task = await db.getModel('task_status').findByPk(task_id);
task = await db.getModel('task_status').findByPk(task_id);
if (!task) {
throw new Error(`任务不存在: ${task_id}`);
}
@@ -191,15 +192,16 @@ class CommandManager {
start_time
);
// 推送指令失败状态
try {
const deviceWorkStatusNotifier = require('../notifiers/deviceWorkStatusNotifier');
const taskQueue = require('./taskQueue');
const summary = await taskQueue.getTaskStatusSummary(task.sn_code);
await deviceWorkStatusNotifier.sendDeviceWorkStatus(task.sn_code, summary);
} catch (pushError) {
// 推送失败不影响错误处理
console.warn(`[指令管理] 推送设备工作状态失败:`, pushError.message);
// 推送指令失败状态(需有 task 或从 DB 取 sn_code
if (task && task.sn_code) {
try {
const deviceWorkStatusNotifier = require('../notifiers/deviceWorkStatusNotifier');
const taskQueue = require('./taskQueue');
const summary = await taskQueue.getTaskStatusSummary(task.sn_code);
await deviceWorkStatusNotifier.sendDeviceWorkStatus(task.sn_code, summary);
} catch (pushError) {
console.warn(`[指令管理] 推送设备工作状态失败:`, pushError.message);
}
}
}
@@ -210,21 +212,18 @@ class CommandManager {
/**
* 执行指令(带超时保护)
* command_type 与 job 层方法名一致,统一使用下划线命名
* @private
*/
async _execute_command_with_timeout(command_id, command_type, command_name, command_params, sn_code, mqttClient, start_time) {
// 获取指令超时时间从配置中获取默认5分钟
const timeout = ScheduleConfig.taskTimeouts[command_type] || 5 * 60 * 1000;
// 构建指令执行 Promise
const command_promise = (async () => {
// 直接使用 command_type 调用 jobManager 的方法,不做映射
// command_type 和 jobManager 的方法名保持一致
if (jobManager[command_type]) {
return await jobManager[command_type](sn_code, mqttClient, command_params);
} else {
const fn = jobManager[command_type];
if (!fn) {
throw new Error(`未知的指令类型: ${command_type}, jobManager 中不存在对应方法`);
}
return await fn(sn_code, mqttClient, command_params);
})();
// 使用超时机制包装