1
This commit is contained in:
@@ -4,6 +4,8 @@ const config = require('./config.js');
|
||||
const deviceManager = require('./deviceManager.js');
|
||||
const command = require('./command.js');
|
||||
const db = require('../dbProxy');
|
||||
const authorizationService = require('../../services/authorization_service.js');
|
||||
|
||||
const Framework = require("../../../framework/node-core-framework.js");
|
||||
/**
|
||||
* 检查当前时间是否在指定的时间范围内
|
||||
@@ -111,7 +113,7 @@ class ScheduledJobs {
|
||||
|
||||
|
||||
// 执行自动投递任务
|
||||
const autoDeliverJob = node_schedule.scheduleJob(config.schedules.autoDeliver, () => {
|
||||
const autoDeliverJob = node_schedule.scheduleJob(config.schedules.autoDeliver, () => {
|
||||
this.autoDeliverTask();
|
||||
});
|
||||
|
||||
@@ -197,7 +199,7 @@ class ScheduledJobs {
|
||||
for (const account of accounts) {
|
||||
const sn_code = account.sn_code;
|
||||
const device = deviceManager.devices.get(sn_code);
|
||||
|
||||
|
||||
if (!device) {
|
||||
// 设备从未发送过心跳,视为离线
|
||||
offlineSnCodes.push(sn_code);
|
||||
@@ -250,7 +252,7 @@ class ScheduledJobs {
|
||||
{
|
||||
status: 'cancelled',
|
||||
endTime: new Date(),
|
||||
result: JSON.stringify({
|
||||
result: JSON.stringify({
|
||||
reason: '设备离线超过10分钟,任务已自动取消',
|
||||
offlineTime: deviceInfo?.lastHeartbeatTime
|
||||
})
|
||||
@@ -292,7 +294,7 @@ class ScheduledJobs {
|
||||
async syncTaskStatusSummary() {
|
||||
try {
|
||||
const { pla_account } = await Framework.getModels();
|
||||
|
||||
|
||||
// 获取所有启用的账号
|
||||
const accounts = await pla_account.findAll({
|
||||
where: {
|
||||
@@ -313,19 +315,19 @@ class ScheduledJobs {
|
||||
// 为每个在线设备发送任务状态摘要
|
||||
for (const account of accounts) {
|
||||
const sn_code = account.sn_code;
|
||||
|
||||
|
||||
// 检查设备是否在线
|
||||
const device = deviceManager.devices.get(sn_code);
|
||||
|
||||
|
||||
if (!device) {
|
||||
// 设备从未发送过心跳,视为离线,跳过
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// 检查最后心跳时间
|
||||
const lastHeartbeat = device.lastHeartbeat || 0;
|
||||
const isOnline = device.isOnline && (now - lastHeartbeat < offlineThreshold);
|
||||
|
||||
|
||||
if (!isOnline) {
|
||||
// 设备离线,跳过
|
||||
continue;
|
||||
@@ -355,7 +357,7 @@ class ScheduledJobs {
|
||||
try {
|
||||
const Sequelize = require('sequelize');
|
||||
const { task_status, op } = db.models;
|
||||
|
||||
|
||||
// 查询所有运行中的任务
|
||||
const runningTasks = await task_status.findAll({
|
||||
where: {
|
||||
@@ -374,7 +376,7 @@ class ScheduledJobs {
|
||||
for (const task of runningTasks) {
|
||||
const taskData = task.toJSON();
|
||||
const startTime = taskData.startTime ? new Date(taskData.startTime) : (taskData.create_time ? new Date(taskData.create_time) : null);
|
||||
|
||||
|
||||
if (!startTime) {
|
||||
continue;
|
||||
}
|
||||
@@ -424,9 +426,9 @@ class ScheduledJobs {
|
||||
deviceStatus.currentTask = null;
|
||||
deviceStatus.runningCount = Math.max(0, deviceStatus.runningCount - 1);
|
||||
this.taskQueue.globalRunningCount = Math.max(0, this.taskQueue.globalRunningCount - 1);
|
||||
|
||||
|
||||
console.log(`[任务超时检查] 已重置设备 ${taskData.sn_code} 的状态,可以继续执行下一个任务`);
|
||||
|
||||
|
||||
// 尝试继续处理该设备的队列
|
||||
setTimeout(() => {
|
||||
this.taskQueue.processQueue(taskData.sn_code).catch(error => {
|
||||
@@ -466,7 +468,7 @@ class ScheduledJobs {
|
||||
// 移除 device_status 依赖,改为直接从 pla_account 查询启用且开启自动投递的账号
|
||||
const models = db.models;
|
||||
const { pla_account, op } = models;
|
||||
|
||||
|
||||
// 直接从 pla_account 查询启用且开启自动投递的账号
|
||||
// 注意:不再检查在线状态,因为 device_status 已移除
|
||||
const pla_users = await pla_account.findAll({
|
||||
@@ -477,7 +479,7 @@ class ScheduledJobs {
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
if (!pla_users || pla_users.length === 0) {
|
||||
console.log('[自动投递] 没有启用且开启自动投递的账号');
|
||||
@@ -497,17 +499,29 @@ class ScheduledJobs {
|
||||
const offlineThreshold = 3 * 60 * 1000; // 3分钟
|
||||
const now = Date.now();
|
||||
const device = deviceManager.devices.get(userData.sn_code);
|
||||
|
||||
|
||||
|
||||
// 检查用户授权天数 是否够
|
||||
const authorization = await authorizationService.checkAuthorization(userData.sn_code);
|
||||
if (!authorization.is_authorized) {
|
||||
console.log(`[自动投递] 设备 ${userData.sn_code} 授权天数不足,跳过添加任务`);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if (!device) {
|
||||
// 设备从未发送过心跳,视为离线
|
||||
console.log(`[自动投递] 设备 ${userData.sn_code} 离线(从未发送心跳),跳过添加任务`);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 检查最后心跳时间
|
||||
const lastHeartbeat = device.lastHeartbeat || 0;
|
||||
const isOnline = device.isOnline && (now - lastHeartbeat < offlineThreshold);
|
||||
|
||||
|
||||
if (!isOnline) {
|
||||
const offlineMinutes = lastHeartbeat ? Math.round((now - lastHeartbeat) / (60 * 1000)) : '未知';
|
||||
console.log(`[自动投递] 设备 ${userData.sn_code} 离线(最后心跳: ${offlineMinutes}分钟前),跳过添加任务`);
|
||||
@@ -569,7 +583,7 @@ class ScheduledJobs {
|
||||
const lastDeliverTime = new Date(lastDeliverTask.endTime);
|
||||
|
||||
const elapsedTime = new Date().getTime() - lastDeliverTime.getTime();
|
||||
|
||||
|
||||
if (elapsedTime < interval_ms) {
|
||||
const remainingMinutes = Math.ceil((interval_ms - elapsedTime) / (60 * 1000));
|
||||
const elapsedMinutes = Math.round(elapsedTime / (60 * 1000));
|
||||
@@ -651,7 +665,7 @@ class ScheduledJobs {
|
||||
// 移除 device_status 依赖,改为直接从 pla_account 查询启用且开启自动沟通的账号
|
||||
const models = db.models;
|
||||
const { pla_account, op } = models;
|
||||
|
||||
|
||||
// 直接从 pla_account 查询启用且开启自动沟通的账号
|
||||
// 注意:不再检查在线状态,因为 device_status 已移除
|
||||
const pla_users = await pla_account.findAll({
|
||||
@@ -680,17 +694,17 @@ class ScheduledJobs {
|
||||
const offlineThreshold = 3 * 60 * 1000; // 3分钟
|
||||
const now = Date.now();
|
||||
const device = deviceManager.devices.get(userData.sn_code);
|
||||
|
||||
|
||||
if (!device) {
|
||||
// 设备从未发送过心跳,视为离线
|
||||
console.log(`[自动沟通] 设备 ${userData.sn_code} 离线(从未发送心跳),跳过添加任务`);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// 检查最后心跳时间
|
||||
const lastHeartbeat = device.lastHeartbeat || 0;
|
||||
const isOnline = device.isOnline && (now - lastHeartbeat < offlineThreshold);
|
||||
|
||||
|
||||
if (!isOnline) {
|
||||
const offlineMinutes = lastHeartbeat ? Math.round((now - lastHeartbeat) / (60 * 1000)) : '未知';
|
||||
console.log(`[自动沟通] 设备 ${userData.sn_code} 离线(最后心跳: ${offlineMinutes}分钟前),跳过添加任务`);
|
||||
@@ -740,7 +754,7 @@ class ScheduledJobs {
|
||||
if (lastChatTask && lastChatTask.endTime) {
|
||||
const lastChatTime = new Date(lastChatTask.endTime);
|
||||
const elapsedTime = now.getTime() - lastChatTime.getTime();
|
||||
|
||||
|
||||
if (elapsedTime < interval_ms) {
|
||||
const remainingMinutes = Math.ceil((interval_ms - elapsedTime) / (60 * 1000));
|
||||
console.log(`[自动沟通] 设备 ${userData.sn_code} 距离上次沟通仅 ${Math.round(elapsedTime / (60 * 1000))} 分钟,还需等待 ${remainingMinutes} 分钟(间隔: ${chat_interval} 分钟)`);
|
||||
|
||||
Reference in New Issue
Block a user