| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- import test from 'node:test'
- import assert from 'node:assert/strict'
- import {
- buildAlarmGisPoints,
- deriveAlarmGisStatus,
- filterAlarmGisPoints,
- summarizeAlarmGisPoints
- } from '../src/utils/waterAlarmGisModel.js'
- import { isActiveWorkOrderStatus } from '../src/utils/waterSupplyUiModel.js'
- test('alarm gis points take the highest-risk status by documented priority', () => {
- assert.equal(deriveAlarmGisStatus({}), 'normal')
- assert.equal(deriveAlarmGisStatus({ onlineStatus: 0 }), 'offline')
- assert.equal(deriveAlarmGisStatus({ currentStatus: 3 }), 'warning')
- assert.equal(deriveAlarmGisStatus({ deviceAlarmStatus: 1 }), 'alarm')
- assert.equal(deriveAlarmGisStatus({ orderNo: 'WO-1', orderStatus: 3 }), 'workOrder')
- assert.equal(deriveAlarmGisStatus({ orderNo: 'WO-1', orderStatus: 3, deviceAlarmStatus: 1, currentStatus: 3, onlineStatus: 0 }), 'workOrder')
- assert.equal(deriveAlarmGisStatus({ deviceAlarmStatus: 1, currentStatus: 3, onlineStatus: 0 }), 'alarm')
- assert.equal(deriveAlarmGisStatus({ currentStatus: 3, onlineStatus: 0 }), 'warning')
- assert.equal(deriveAlarmGisStatus({ onlineStatus: 0, deviceAlarmStatus: 0 }), 'offline')
- })
- test('a closed or cancelled work order no longer counts as an active related order', () => {
- assert.equal(isActiveWorkOrderStatus(0), true)
- assert.equal(isActiveWorkOrderStatus('2'), true)
- assert.equal(isActiveWorkOrderStatus(6), true)
- assert.equal(isActiveWorkOrderStatus(5), false)
- assert.equal(isActiveWorkOrderStatus('7'), false)
- assert.equal(isActiveWorkOrderStatus(undefined), false)
- assert.equal(deriveAlarmGisStatus({ orderNo: 'WO-5', orderStatus: 5, deviceAlarmStatus: 1 }), 'alarm')
- assert.equal(deriveAlarmGisStatus({ orderNo: 'WO-7', orderStatus: 7, onlineStatus: 0 }), 'offline')
- })
- test('renders every valid alarm point and drops points without coordinates', () => {
- const points = buildAlarmGisPoints({
- alarmPoints: [
- { alarmId: 'A-1', deviceCode: 'D-1', longitude: '110.1', latitude: '28.1', alarmLevel: 2 },
- { alarmId: 'A-2', deviceCode: 'D-2', longitude: '110.2', latitude: '28.2', alarmLevel: 3 },
- { alarmId: 'A-3', deviceCode: 'D-3', longitude: '', latitude: '28.3', alarmLevel: 1 }
- ]
- })
- assert.deepEqual(points.map(point => point.alarmId), ['A-1', 'A-2'])
- assert.deepEqual(points.map(point => point.lng), [110.1, 110.2])
- assert.deepEqual(points.map(point => point.lat), [28.1, 28.2])
- })
- test('merges the alarms of one device into a single highest-risk point', () => {
- const points = buildAlarmGisPoints({
- alarmPoints: [
- { alarmId: 'A-LOW', deviceCode: 'D-1', longitude: '110.1', latitude: '28.1', alarmLevel: 4, alarmTime: '2026-09-16 08:00:00' },
- { alarmId: 'A-HIGH', deviceCode: 'D-1', longitude: '110.1', latitude: '28.1', alarmLevel: 1, alarmTime: '2026-09-16 09:00:00' }
- ]
- })
- assert.equal(points.length, 1)
- assert.equal(points[0].alarmId, 'A-HIGH')
- assert.equal(points[0].alarmCount, 2)
- })
- test('enriches alarm points with independent device, record and work-order state', () => {
- const points = buildAlarmGisPoints({
- alarmPoints: [
- { alarmId: 'A-1', deviceCode: 'D-1', longitude: '110.1', latitude: '28.1', alarmLevel: 1, warningType: '压力预警' }
- ],
- ledgerRows: [
- {
- id: 'A-1',
- deviceCode: 'D-1',
- alarmStatus: 1,
- alarmStatusText: '已处理',
- deviceAlarmStatus: 1,
- deviceAlarmStatusText: '报警中',
- displayStatus: 2,
- displayStatusText: '已转工单',
- orderNo: 'WO-2026-1',
- orderStatus: 3
- }
- ],
- devicePoints: [
- { equipmentCode: 'D-1', onlineStatus: 1, currentStatus: 3, onlineStatusText: '在线', currentStatusText: '维修' }
- ]
- })
- assert.equal(points.length, 1)
- assert.equal(points[0].recordStatus, 1)
- assert.equal(points[0].deviceAlarmStatus, 1)
- assert.equal(points[0].displayStatus, 2)
- assert.equal(points[0].orderNo, 'WO-2026-1')
- assert.equal(points[0].orderStatus, 3)
- assert.equal(points[0].onlineStatus, 1)
- assert.equal(points[0].currentStatus, 3)
- assert.equal(points[0].onlineStatusText, '在线')
- assert.equal(points[0].currentStatusText, '维修')
- // 关联工单进行中时点位取最高风险语义;设备报警状态与记录状态仍各自保留
- assert.equal(points[0].statusKey, 'workOrder')
- })
- test('marks unavailable device and record state as unknown without substituting either one', () => {
- const [pending] = buildAlarmGisPoints({
- alarmPoints: [{ alarmId: 'A-1', deviceCode: 'D-1', longitude: '110.1', latitude: '28.1', alarmLevel: 1 }]
- })
- assert.equal(pending.deviceAlarmStatus, undefined)
- assert.equal(pending.deviceAlarmStatusText, '未获取')
- assert.equal(pending.recordStatus, undefined)
- assert.equal(pending.recordStatusText, '未获取')
- assert.equal(pending.statusKey, 'alarm')
- const [handled] = buildAlarmGisPoints({
- alarmPoints: [{ alarmId: 'A-2', deviceCode: 'D-2', longitude: '110.1', latitude: '28.1', alarmLevel: 4 }],
- ledgerRows: [{ id: 'A-2', deviceCode: 'D-2', alarmStatus: 1, alarmStatusText: '已处理' }]
- })
- assert.equal(handled.deviceAlarmStatus, undefined)
- assert.equal(handled.deviceAlarmStatusText, '未获取')
- assert.equal(handled.recordStatus, 1)
- assert.equal(handled.statusKey, 'normal')
- })
- test('keeps an offline or repairing device out of the alarm colour even when its order is closed', () => {
- const [offline, warning] = buildAlarmGisPoints({
- alarmPoints: [
- { alarmId: 'A-1', deviceCode: 'D-1', longitude: '110.1', latitude: '28.1' },
- { alarmId: 'A-2', deviceCode: 'D-2', longitude: '110.2', latitude: '28.2' }
- ],
- ledgerRows: [
- { id: 'A-1', deviceCode: 'D-1', deviceAlarmStatus: 0, orderNo: 'WO-1', orderStatus: 5 },
- { id: 'A-2', deviceCode: 'D-2', deviceAlarmStatus: 0 }
- ],
- devicePoints: [
- { equipmentCode: 'D-1', onlineStatus: 0, currentStatus: 1 },
- { equipmentCode: 'D-2', onlineStatus: 1, currentStatus: 3 }
- ]
- })
- assert.equal(offline.statusKey, 'offline')
- assert.equal(warning.statusKey, 'warning')
- })
- test('searches alarm points by device, alarm type and location', () => {
- const points = buildAlarmGisPoints({
- alarmPoints: [
- { alarmId: 'A-1', deviceCode: 'CN-GS-001', deviceName: '一号压力计', warningType: '压力预警', equipmentLocation: '迎宾路', longitude: '110.1', latitude: '28.1', alarmLevel: 1 },
- { alarmId: 'A-2', deviceCode: 'CN-GS-002', deviceName: '二号流量计', warningType: '流量预警', equipmentLocation: '沅水大道', longitude: '110.2', latitude: '28.2', alarmLevel: 3 }
- ]
- })
- assert.deepEqual(filterAlarmGisPoints(points, '').map(point => point.alarmId), ['A-1', 'A-2'])
- assert.deepEqual(filterAlarmGisPoints(points, '压力').map(point => point.alarmId), ['A-1'])
- assert.deepEqual(filterAlarmGisPoints(points, 'cn-gs-002').map(point => point.alarmId), ['A-2'])
- assert.deepEqual(filterAlarmGisPoints(points, '沅水').map(point => point.alarmId), ['A-2'])
- assert.deepEqual(filterAlarmGisPoints(points, '不存在的关键字'), [])
- })
- test('summarizes alarm points by the five documented map states', () => {
- const points = buildAlarmGisPoints({
- alarmPoints: [
- { alarmId: 'A-1', deviceCode: 'D-1', longitude: '110.1', latitude: '28.1', alarmLevel: 1 },
- { alarmId: 'A-2', deviceCode: 'D-2', longitude: '110.2', latitude: '28.2', alarmLevel: 4 },
- { alarmId: 'A-3', deviceCode: 'D-3', longitude: '110.3', latitude: '28.3', alarmLevel: 2 },
- { alarmId: 'A-4', deviceCode: 'D-4', longitude: '110.4', latitude: '28.4', alarmLevel: 3 }
- ],
- ledgerRows: [
- { id: 'A-1', deviceCode: 'D-1', deviceAlarmStatus: 1 },
- { id: 'A-2', deviceCode: 'D-2', deviceAlarmStatus: 0 },
- { id: 'A-3', deviceCode: 'D-3', deviceAlarmStatus: 0, orderNo: 'WO-1', orderStatus: 2 },
- { id: 'A-4', deviceCode: 'D-4', deviceAlarmStatus: 0 }
- ],
- devicePoints: [
- { equipmentCode: 'D-1', onlineStatus: 1, currentStatus: 1 },
- { equipmentCode: 'D-2', onlineStatus: 0, currentStatus: 1 },
- { equipmentCode: 'D-3', onlineStatus: 1, currentStatus: 1 },
- { equipmentCode: 'D-4', onlineStatus: 1, currentStatus: 3 }
- ]
- })
- const summary = summarizeAlarmGisPoints(points)
- assert.equal(summary.total, 4)
- assert.equal(summary.highLevel, 2)
- assert.deepEqual(summary.byStatus, { normal: 0, alarm: 1, warning: 1, workOrder: 1, offline: 1 })
- assert.deepEqual(summarizeAlarmGisPoints([]).byStatus, { normal: 0, alarm: 0, warning: 0, workOrder: 0, offline: 0 })
- })
|