1
This commit is contained in:
@@ -214,10 +214,10 @@ class MqttDispatcher {
|
||||
|
||||
console.log(`[MQTT心跳] 收到设备 ${sn_code} 的心跳消息`);
|
||||
|
||||
const device_status = db.getModel('device_status');
|
||||
|
||||
// 检查设备是否存在
|
||||
let device = await device_status.findByPk(sn_code);
|
||||
// 移除 device_status 模型依赖
|
||||
// const device_status = db.getModel('device_status');
|
||||
// let device = await device_status.findByPk(sn_code);
|
||||
let device = null; // device_status 已移除,暂时设为 null
|
||||
|
||||
const updateData = {
|
||||
isOnline: true, // 收到心跳,设备在线
|
||||
@@ -250,8 +250,8 @@ class MqttDispatcher {
|
||||
loginTime = new Date(platform_login_status.timestamp);
|
||||
}
|
||||
|
||||
// 更新登录状态
|
||||
const previousIsLoggedIn = device ? device.isLoggedIn : false;
|
||||
// 移除 device_status 依赖,previousIsLoggedIn 暂时设为 false
|
||||
const previousIsLoggedIn = false; // device_status 已移除
|
||||
|
||||
updateData.isLoggedIn = isLoggedIn;
|
||||
|
||||
@@ -276,16 +276,17 @@ class MqttDispatcher {
|
||||
}
|
||||
}
|
||||
|
||||
// 更新或创建设备记录
|
||||
if (device) {
|
||||
await device_status.update(updateData, { where: { sn_code } });
|
||||
console.log(`[MQTT心跳] 设备 ${sn_code} 状态已更新 - 在线: true, 登录: ${updateData.isLoggedIn}`);
|
||||
}
|
||||
else
|
||||
{
|
||||
logProxy.error('[MQTT心跳] 设备 ${sn_code} 不存在', { sn_code });
|
||||
return;
|
||||
}
|
||||
// 移除 device_status 更新逻辑
|
||||
// 如果需要在 pla_account 表中添加在线状态字段,可以在这里更新
|
||||
console.log(`[MQTT心跳] 设备 ${sn_code} 心跳已接收 - 登录: ${updateData.isLoggedIn || false}`);
|
||||
|
||||
// if (device) {
|
||||
// await device_status.update(updateData, { where: { sn_code } });
|
||||
// console.log(`[MQTT心跳] 设备 ${sn_code} 状态已更新 - 在线: true, 登录: ${updateData.isLoggedIn}`);
|
||||
// } else {
|
||||
// logProxy.error('[MQTT心跳] 设备 ${sn_code} 不存在', { sn_code });
|
||||
// return;
|
||||
// }
|
||||
|
||||
// 记录心跳到设备管理器
|
||||
await deviceManager.recordHeartbeat(sn_code, heartbeatData);
|
||||
|
||||
@@ -161,6 +161,12 @@ class ScheduledJobs {
|
||||
*/
|
||||
async cleanupOfflineDeviceTasks() {
|
||||
try {
|
||||
// 移除 device_status 依赖,离线任务清理功能暂时禁用
|
||||
// 如果需要在 pla_account 表中添加在线状态字段,可以重新实现此功能
|
||||
console.log('[清理离线任务] device_status 已移除,功能暂时禁用');
|
||||
return;
|
||||
|
||||
/* 原有代码已注释
|
||||
const Sequelize = require('sequelize');
|
||||
const { device_status, task_status, op } = db.models;
|
||||
|
||||
@@ -240,6 +246,7 @@ class ScheduledJobs {
|
||||
if (totalCancelled > 0) {
|
||||
console.log(`[清理离线任务] 共取消 ${totalCancelled} 个离线设备的任务`);
|
||||
}
|
||||
*/
|
||||
} catch (error) {
|
||||
console.error('[清理离线任务] 执行失败:', error);
|
||||
}
|
||||
@@ -361,27 +368,14 @@ class ScheduledJobs {
|
||||
}
|
||||
|
||||
try {
|
||||
// 从 device_status 查询所有在线且已登录的设备
|
||||
// 移除 device_status 依赖,改为直接从 pla_account 查询启用且开启自动投递的账号
|
||||
const models = db.models;
|
||||
const { device_status, pla_account, op } = models;
|
||||
const onlineDevices = await device_status.findAll({
|
||||
where: {
|
||||
isOnline: true,
|
||||
isLoggedIn: true
|
||||
},
|
||||
attributes: ['sn_code', 'accountName', 'platform']
|
||||
});
|
||||
|
||||
if (!onlineDevices || onlineDevices.length === 0) {
|
||||
console.log('[自动投递] 没有在线且已登录的设备');
|
||||
return;
|
||||
}
|
||||
|
||||
// 获取这些在线设备对应的账号配置(只获取启用且开启自动投递的账号)
|
||||
const snCodes = onlineDevices.map(device => device.sn_code);
|
||||
const { pla_account, op } = models;
|
||||
|
||||
// 直接从 pla_account 查询启用且开启自动投递的账号
|
||||
// 注意:不再检查在线状态,因为 device_status 已移除
|
||||
const pla_users = await pla_account.findAll({
|
||||
where: {
|
||||
sn_code: { [op.in]: snCodes },
|
||||
is_delete: 0,
|
||||
is_enabled: 1, // 只获取启用的账号
|
||||
auto_deliver: 1
|
||||
@@ -509,27 +503,14 @@ class ScheduledJobs {
|
||||
}
|
||||
|
||||
try {
|
||||
// 从 device_status 查询所有在线且已登录的设备
|
||||
// 移除 device_status 依赖,改为直接从 pla_account 查询启用且开启自动沟通的账号
|
||||
const models = db.models;
|
||||
const { device_status, pla_account, op } = models;
|
||||
const onlineDevices = await device_status.findAll({
|
||||
where: {
|
||||
isOnline: true,
|
||||
isLoggedIn: true
|
||||
},
|
||||
attributes: ['sn_code', 'accountName', 'platform']
|
||||
});
|
||||
|
||||
if (!onlineDevices || onlineDevices.length === 0) {
|
||||
console.log('[自动沟通] 没有在线且已登录的设备');
|
||||
return;
|
||||
}
|
||||
|
||||
// 获取这些在线设备对应的账号配置(只获取启用且开启自动沟通的账号)
|
||||
const snCodes = onlineDevices.map(device => device.sn_code);
|
||||
const { pla_account, op } = models;
|
||||
|
||||
// 直接从 pla_account 查询启用且开启自动沟通的账号
|
||||
// 注意:不再检查在线状态,因为 device_status 已移除
|
||||
const pla_users = await pla_account.findAll({
|
||||
where: {
|
||||
sn_code: { [op.in]: snCodes },
|
||||
is_delete: 0,
|
||||
is_enabled: 1, // 只获取启用的账号
|
||||
auto_chat: 1
|
||||
|
||||
@@ -59,9 +59,8 @@ class TaskQueue {
|
||||
order: [['priority', 'DESC'], ['id', 'ASC']]
|
||||
});
|
||||
|
||||
// 获取所有启用的账号和设备在线状态
|
||||
// 获取所有启用的账号(移除 device_status 依赖,不再检查在线状态)
|
||||
const pla_account = db.getModel('pla_account');
|
||||
const device_status = db.getModel('device_status');
|
||||
|
||||
const enabledAccounts = await pla_account.findAll({
|
||||
where: {
|
||||
@@ -72,21 +71,9 @@ class TaskQueue {
|
||||
});
|
||||
const enabledSnCodes = new Set(enabledAccounts.map(acc => acc.sn_code));
|
||||
|
||||
// 检查设备在线状态(需要同时满足:isOnline = true 且心跳未超时)
|
||||
const heartbeatTimeout = require('./config.js').monitoring.heartbeatTimeout; // 默认5分钟
|
||||
const now = new Date();
|
||||
const heartbeatThreshold = new Date(now.getTime() - heartbeatTimeout);
|
||||
|
||||
const onlineDevices = await device_status.findAll({
|
||||
where: {
|
||||
isOnline: true,
|
||||
lastHeartbeatTime: {
|
||||
[Sequelize.Op.gte]: heartbeatThreshold // 心跳时间在阈值内
|
||||
}
|
||||
},
|
||||
attributes: ['sn_code', 'lastHeartbeatTime']
|
||||
});
|
||||
const onlineSnCodes = new Set(onlineDevices.map(dev => dev.sn_code));
|
||||
// 移除 device_status 依赖,不再检查设备在线状态
|
||||
// 如果需要在线状态检查,可以在 pla_account 表中添加相应字段
|
||||
const onlineSnCodes = new Set(); // 暂时设为空,表示不再检查在线状态
|
||||
|
||||
|
||||
let restoredCount = 0;
|
||||
|
||||
Reference in New Issue
Block a user