From 914999c9fca2c784d9fbcee224108c574efbbee1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=88=90?= Date: Tue, 30 Dec 2025 16:45:09 +0800 Subject: [PATCH] 1 --- api/middleware/mqtt/mqttDispatcher.js | 3 -- .../schedule/infrastructure/config.js | 2 +- .../schedule/tasks/autoActiveTask.js | 1 - api/middleware/schedule/tasks/autoChatTask.js | 1 - .../schedule/tasks/autoDeliverTask.js | 3 +- .../schedule/tasks/autoSearchTask.js | 1 - api/middleware/schedule/tasks/baseTask.js | 53 ++++++++++++++++--- 7 files changed, 47 insertions(+), 17 deletions(-) diff --git a/api/middleware/mqtt/mqttDispatcher.js b/api/middleware/mqtt/mqttDispatcher.js index 64fbd04..1081c7a 100644 --- a/api/middleware/mqtt/mqttDispatcher.js +++ b/api/middleware/mqtt/mqttDispatcher.js @@ -212,8 +212,6 @@ class MqttDispatcher { return; } - console.log(`[MQTT心跳] 收到设备 ${sn_code} 的心跳消息`); - // 移除 device_status 模型依赖 // const device_status = db.getModel('device_status'); // let device = await device_status.findByPk(sn_code); @@ -286,7 +284,6 @@ class MqttDispatcher { }, { where: { sn_code } } ); - console.log(`[MQTT心跳] 设备 ${sn_code} 状态已更新到数据库 - 在线: true, 登录: ${updateData.isLoggedIn || false}`); } catch (error) { console.error(`[MQTT心跳] 更新数据库状态失败:`, error); } diff --git a/api/middleware/schedule/infrastructure/config.js b/api/middleware/schedule/infrastructure/config.js index 086ad8e..949c6ac 100644 --- a/api/middleware/schedule/infrastructure/config.js +++ b/api/middleware/schedule/infrastructure/config.js @@ -49,7 +49,7 @@ class ScheduleConfig { dailyReset: '0 0 * * *', // 每天凌晨重置统计 monitoringInterval: '*/1 * * * *', // 监控检查间隔:1分钟 autoSearch: '0 0 */1 * * *', // 自动搜索任务:每1小时执行一次 - autoDeliver: '0 */1 * * * *', // 自动投递任务:每1分钟执行一次 + autoDeliver: '0 */2 * * * *', // 自动投递任务:每2分钟执行一次 autoChat: '0 */15 * * * *', // 自动沟通任务:每15分钟执行一次 autoActive: '0 0 */2 * * *' // 自动活跃任务:每2小时执行一次 }; diff --git a/api/middleware/schedule/tasks/autoActiveTask.js b/api/middleware/schedule/tasks/autoActiveTask.js index f649f61..b8447a3 100644 --- a/api/middleware/schedule/tasks/autoActiveTask.js +++ b/api/middleware/schedule/tasks/autoActiveTask.js @@ -131,7 +131,6 @@ class AutoActiveTask extends BaseTask { // 5. 执行所有层级的冲突检查 const conflictCheck = await this.canExecuteTask(sn_code, taskQueue); if (!conflictCheck.allowed) { - console.log(`[自动活跃] 设备 ${sn_code} 冲突检查未通过: ${conflictCheck.reason}`); return { success: false, reason: conflictCheck.reason }; } diff --git a/api/middleware/schedule/tasks/autoChatTask.js b/api/middleware/schedule/tasks/autoChatTask.js index f6991da..b403095 100644 --- a/api/middleware/schedule/tasks/autoChatTask.js +++ b/api/middleware/schedule/tasks/autoChatTask.js @@ -130,7 +130,6 @@ class AutoChatTask extends BaseTask { // 5. 执行所有层级的冲突检查 const conflictCheck = await this.canExecuteTask(sn_code, taskQueue); if (!conflictCheck.allowed) { - console.log(`[自动沟通] 设备 ${sn_code} 冲突检查未通过: ${conflictCheck.reason}`); return { success: false, reason: conflictCheck.reason }; } diff --git a/api/middleware/schedule/tasks/autoDeliverTask.js b/api/middleware/schedule/tasks/autoDeliverTask.js index 7801207..d1d1e78 100644 --- a/api/middleware/schedule/tasks/autoDeliverTask.js +++ b/api/middleware/schedule/tasks/autoDeliverTask.js @@ -238,7 +238,6 @@ class AutoDeliverTask extends BaseTask { // 5. 执行所有层级的冲突检查 const conflictCheck = await this.canExecuteTask(sn_code, taskQueue); if (!conflictCheck.allowed) { - console.log(`[自动投递] 设备 ${sn_code} 冲突检查未通过: ${conflictCheck.reason}`); return { success: false, reason: conflictCheck.reason }; } @@ -305,7 +304,7 @@ class AutoDeliverTask extends BaseTask { */ async notifyWaitingStatus(sn_code, intervalCheck, taskQueue) { try { - const deviceWorkStatusNotifier = require('../deviceWorkStatusNotifier'); + const deviceWorkStatusNotifier = require('../notifiers/deviceWorkStatusNotifier'); // 获取当前任务状态摘要 const taskStatusSummary = taskQueue.getTaskStatusSummary(sn_code); diff --git a/api/middleware/schedule/tasks/autoSearchTask.js b/api/middleware/schedule/tasks/autoSearchTask.js index 8c37b78..e72681d 100644 --- a/api/middleware/schedule/tasks/autoSearchTask.js +++ b/api/middleware/schedule/tasks/autoSearchTask.js @@ -176,7 +176,6 @@ class AutoSearchTask extends BaseTask { // 5. 执行所有层级的冲突检查 const conflictCheck = await this.canExecuteTask(sn_code, taskQueue); if (!conflictCheck.allowed) { - console.log(`[自动搜索] 设备 ${sn_code} 冲突检查未通过: ${conflictCheck.reason}`); return { success: false, reason: conflictCheck.reason }; } diff --git a/api/middleware/schedule/tasks/baseTask.js b/api/middleware/schedule/tasks/baseTask.js index 2181df0..4b4af44 100644 --- a/api/middleware/schedule/tasks/baseTask.js +++ b/api/middleware/schedule/tasks/baseTask.js @@ -61,16 +61,53 @@ class BaseTask { * 检查设备是否在线、是否登录、是否忙碌 */ async checkDeviceStatus(sn_code) { - // 1. 检查设备是否在线 - const device = deviceManager.devices.get(sn_code); + // 1. 优先检查内存中的设备状态 + let device = deviceManager.devices.get(sn_code); + + // 2. 如果内存中没有,降级到数据库查询(可能是刚启动还没收到心跳) if (!device) { - return { - allowed: false, - reason: `设备 ${sn_code} 离线(从未发送心跳)` - }; + try { + const pla_account = db.getModel('pla_account'); + const dbDevice = await pla_account.findOne({ + where: { sn_code, is_delete: 0 }, + attributes: ['sn_code', 'is_online', 'is_logged_in'] + }); + + if (!dbDevice) { + return { + allowed: false, + reason: `设备 ${sn_code} 不存在` + }; + } + + // 检查数据库中的在线状态 + if (!dbDevice.is_online) { + return { + allowed: false, + reason: `设备 ${sn_code} 离线(数据库状态)` + }; + } + + // 检查数据库中的登录状态 + if (this.config.requiresLogin && !dbDevice.is_logged_in) { + return { + allowed: false, + reason: `设备 ${sn_code} 未登录平台账号(数据库状态)` + }; + } + + // 数据库检查通过,允许执行 + return { allowed: true }; + } catch (error) { + console.error(`[${this.taskType}] 查询设备状态失败:`, error); + return { + allowed: false, + reason: `设备 ${sn_code} 状态查询失败` + }; + } } - // 2. 检查心跳超时 + // 3. 检查心跳超时 const offlineThreshold = 3 * 60 * 1000; // 3分钟 const now = Date.now(); const lastHeartbeat = device.lastHeartbeat || 0; @@ -84,7 +121,7 @@ class BaseTask { }; } - // 3. 检查登录状态(如果任务需要) + // 4. 检查登录状态(如果任务需要) if (this.config.requiresLogin && !device.isLoggedIn) { return { allowed: false,