| | |
| | | } |
| | | String testStatus = test.getTestStatus(); |
| | | TestPlanSnapshot testPlan = detectorTestPlan(test); |
| | | return new LiveState(testId, testStatus, test.getReceptionStatus(), Instant.now(), sources, exceptions, testPlan); |
| | | return new LiveState(testId, testStatus, test.getReceptionStatus(), Instant.now().toEpochMilli(), sources, exceptions, testPlan); |
| | | } |
| | | |
| | | private TestPlanSnapshot detectorTestPlan(TTest test) |
| | |
| | | Map<String, Object> value = new LinkedHashMap<>(); |
| | | if (channel.latestSnapshot() == null) return value; |
| | | value.put("source", "检测柜"); |
| | | value.put("observedAt", channel.latestSnapshot().receivedAt()); |
| | | value.put("observedAt", channel.latestSnapshot().receivedAt().toEpochMilli()); |
| | | // BTS 核心采样字段是快照的一等事实,不能只依赖动态 measurements 展示。 |
| | | value.put("currentA", channel.latestSnapshot().currentA()); |
| | | value.put("voltageV", channel.latestSnapshot().voltageV()); |
| | |
| | | { |
| | | Map<String, Object> value = new LinkedHashMap<>(); |
| | | value.put("source", "采集器"); value.put("sampleIntervalMs", collector.sampleIntervalMs()); |
| | | value.put("measurements", collector.latestMeasurements()); |
| | | value.put("measurements", collector.latestMeasurements().stream().map(item -> { |
| | | Map<String, Object> measurement = new LinkedHashMap<>(); |
| | | measurement.put("metricCode", item.metricCode()); |
| | | measurement.put("channelCode", item.channelCode()); |
| | | measurement.put("value", item.value()); |
| | | measurement.put("unit", item.unit()); |
| | | measurement.put("deviceTime", item.deviceTime().toEpochMilli()); |
| | | measurement.put("serverReceivedAt", item.serverReceivedAt().toEpochMilli()); |
| | | return measurement; |
| | | }).toList()); |
| | | value.put("units", collector.latestMeasurements().stream().map(item -> item.unit()).distinct().toList()); |
| | | collector.latestMeasurements().stream().map(item -> item.serverReceivedAt()).max(Instant::compareTo) |
| | | .ifPresent(observedAt -> value.put("observedAt", observedAt)); |
| | | .ifPresent(observedAt -> value.put("observedAt", observedAt.toEpochMilli())); |
| | | return new LiveSource("COLLECTOR", (long) collector.collectorId(), battery.getBatteryNo(), |
| | | collector.online() ? "ONLINE" : "OFFLINE", collector.online() ? value : Map.of()); |
| | | } |