From f3e6413bfe0f5da94d04014c456413c84d971a67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=88=90?= Date: Tue, 16 Dec 2025 14:52:27 +0800 Subject: [PATCH] 1 --- api/middleware/schedule/taskQueue.js | 45 ++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/api/middleware/schedule/taskQueue.js b/api/middleware/schedule/taskQueue.js index 13ab9ee..a9323dd 100644 --- a/api/middleware/schedule/taskQueue.js +++ b/api/middleware/schedule/taskQueue.js @@ -1167,12 +1167,35 @@ class TaskQueue { } } + // 计算总待执行数:队列中的任务数 + 当前任务中剩余的步骤数 + let totalPendingCount = queue ? queue.size() : 0; + + // 如果当前任务存在且有进度信息,计算剩余步骤数 + if (currentTask && currentTask.progress !== null && currentTask.progress !== undefined) { + // 根据进度计算剩余步骤(假设每个步骤占一定百分比) + // 如果进度是 45%,剩余就是 55%,可以估算剩余步骤数 + const remainingProgress = 100 - currentTask.progress; + // 如果进度是整数百分比,可以估算剩余步骤 + // 例如:如果进度是 45%,剩余 55%,假设每步 10%,则剩余约 5-6 步 + // 这里简化处理:如果有进度且小于 100%,至少还有 1 个步骤在执行 + if (remainingProgress > 0) { + // 估算剩余步骤数(基于进度百分比,假设每步约 10-20%) + // 更准确的方式是从任务参数中获取步骤信息 + const estimatedRemainingSteps = Math.max(1, Math.ceil(remainingProgress / 10)); + totalPendingCount += estimatedRemainingSteps; + } + } else if (currentTask && currentTask.currentStep) { + // 如果只有步骤信息但没有进度,至少还有 1 个步骤在执行 + totalPendingCount += 1; + } + return { sn_code, currentTask, pendingTasks, nextTaskTime, - pendingCount: queue ? queue.size() : 0, + pendingCount: queue ? queue.size() : 0, // 队列中的任务数 + totalPendingCount: totalPendingCount, // 总待执行数(包括当前任务的剩余步骤) mqttTopic: `task_status_${sn_code}`, timestamp: new Date().toISOString() }; @@ -1184,6 +1207,7 @@ class TaskQueue { pendingTasks: [], nextTaskTime: null, pendingCount: 0, + totalPendingCount: 0, mqttTopic: `task_status_${sn_code}`, timestamp: new Date().toISOString() }; @@ -1213,7 +1237,24 @@ class TaskQueue { }); await mqttClient.publish(topic, message); - console.log(`[任务队列] 已发送任务状态摘要到 ${sn_code}: 当前任务=${summary.currentTask ? '有' : '无'}, 待执行=${summary.pendingCount}个`); + + // 改进日志输出,显示更详细的任务信息 + if (summary.currentTask) { + const task = summary.currentTask; + 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}: 当前任务=${task.taskName || task.taskType || '未知任务'}${detailStr}, 待执行=${totalCount}个`); + } else { + console.log(`[任务队列] 已发送任务状态摘要到 ${sn_code}: 当前任务=无, 待执行=${summary.pendingCount}个`); + } } catch (error) { // 通知失败不影响任务执行,只记录日志 console.warn(`[任务队列] 发送任务状态摘要失败:`, error.message);