From 500ea3269b6f922470cc2bc02e793d42d2dfc822 Mon Sep 17 00:00:00 2001 From: zhaolei <256168157@qq.com> Date: Wed, 21 Oct 2026 17:00:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=20inspectionScheduler?= =?UTF-8?q?Api.start=20=E4=B8=AD=E6=AF=8F=E6=AC=A1=E9=83=BD=E8=A7=A6?= =?UTF-8?q?=E5=8F=91=20scanAllNow=20=E7=9A=84=E9=87=8D=E5=A4=8D=E5=B7=A1?= =?UTF-8?q?=E6=A3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:renderer 多个页面(MonitoringPage、ReportPage、useReportAutoScheduler) mount 时各自调一次 inspectionSchedulerApi.start() 同步 hostConfigs。主进程 start handler 里 scheduler 已在运行时每次都 setImmediate(() => scanAllNow()), 导致短时间内同一批设备被巡检 N 次。 修复:去掉 scanAllNow 立即触发。start 只负责同步 hostConfigs。 InspectionScheduler 自身 30s tick 会按设备 effective_interval 正常调度。 --- electron/bridges/inspection/index.cjs | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/electron/bridges/inspection/index.cjs b/electron/bridges/inspection/index.cjs index de755a2..c0a117b 100644 --- a/electron/bridges/inspection/index.cjs +++ b/electron/bridges/inspection/index.cjs @@ -2018,19 +2018,15 @@ function registerInspectionHandlers(ipcMain, options) { _scheduler._hostInfo = hostInfo; console.log("[Inspection] 更新 hostConfigs:", Object.keys(_hostConfigs || {}).length, "台设备"); } - // start() 幂等:已 running 时直接返回;这里调 scanAllNow 让新 hostConfigs 立即生效, - // 不用等下一个 30 秒 tick + // start() 幂等:已 running 时直接返回。 + // 不再每次 start 都 scanAllNow —— renderer 可能在多个页面 mount 时反复调 start + // (MonitoringPage、ReportPage、useReportAutoScheduler 各调一次),每次都 scanAllNow + // 会导致短时间内同一批设备被巡检 N 次。 + // InspectionScheduler 本身有 30s tick,到点自然会把到期设备加入队列。 const wasRunning = _scheduler.isRunning(); _scheduler.start(); - if (wasRunning && Object.keys(_hostConfigs || {}).length > 0) { - // 已在跑 → 立即触发一次 scanAllNow,把新 hostConfigs 对应的设备加入队列 - setImmediate(() => { - try { - _scheduler.scanAllNow(); - } catch (e) { - console.log("[Inspection] 触发立即巡检失败:", e.message); - } - }); + if (!wasRunning) { + console.log("[Inspection] scheduler 已启动,首次 hostConfigs=", Object.keys(_hostConfigs || {}).length); } return _scheduler.getStatus(); });