/** * 走查前置只读探针:真实后端各设备的 预警/报警/工单 条数。 * 为什么不用 PowerShell:`@($null).Count` 恒为 1,会把"没有这一段"读成"有 1 条"(票 17 的教训)。 */ const BASE = 'http://192.168.110.96:8301/api/cockpit/v1' const unwrap = (payload) => (payload && payload.data && (payload.code !== undefined || payload.requestId) ? payload.data : payload) const devices = ['21119740', 'TEST-CBYYL5432168', 'TEST-CNXHS0000001', 'TEST-TCLLJ002215', 'TC-PS-WS-202609020012'] for (const code of devices) { try { const res = await fetch(`${BASE}/equipments/${encodeURIComponent(code)}/detail-aggregate`, { cache: 'no-store' }) const json = await res.json() const data = unwrap(json) const pick = (name) => { const section = data && data[name] const list = section && Array.isArray(section.data) ? section.data : null return `${String((section && section.state) || '-')}/${list ? list.length : '-'}` } console.log(`${code} http=${res.status} code=${json.code} warnings=${pick('warnings')} alarms=${pick('alarms')} workOrders=${pick('workOrders')} archive=${pick('archive')}`) } catch (error) { console.log(`${code} ERR ${error.message}`) } } // 未关联设备清单(真实快照里 kind=unassociated 的编码),找一台事件最多的进详情。 try { const res = await fetch(`${BASE}/map-snapshot?page=1&pageSize=200&pointStatus=UNASSOCIATED`, { cache: 'no-store' }) const json = unwrap(await res.json()) const list = (json && json.unassociatedEquipment) || [] console.log(`unassociated-in-snapshot=${list.length}`) const codes = list.slice(0, 12).map((item) => item.equipmentCode || item.code).filter(Boolean) for (const code of codes) { const r = await fetch(`${BASE}/equipments/${encodeURIComponent(code)}/detail-aggregate`, { cache: 'no-store' }) const data = unwrap(await r.json()) const n = (name) => (data && Array.isArray(data[name]?.data) ? data[name].data.length : 0) console.log(` ${code} warnings=${n('warnings')} alarms=${n('alarms')} workOrders=${n('workOrders')}`) } } catch (error) { console.log(`snapshot probe ERR ${error.message}`) }