| | |
| | | package com.ruoyi.config; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.Instant; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.concurrent.TimeUnit; |
| | |
| | | private CollectorState collectorState(Object value) |
| | | { |
| | | JSONObject object = jsonObject(value); |
| | | return new CollectorState(requiredInteger(object, "collectorId"), object.getString("deviceCode"), |
| | | object.getString("ip"), object.getString("mac"), object.getString("name"), |
| | | object.getString("manufacturer"), object.getString("model"), |
| | | requiredInteger(object, "channelCount"), object.getBooleanValue("online")); |
| | | int collectorId = requiredInteger(object, "collectorId"); |
| | | String deviceCode = object.getString("deviceCode"); |
| | | String ip = object.getString("ip"); |
| | | String mac = object.getString("mac"); |
| | | String name = object.getString("name"); |
| | | String manufacturer = object.getString("manufacturer"); |
| | | String model = object.getString("model"); |
| | | int channelCount = requiredInteger(object, "channelCount"); |
| | | boolean online = object.getBooleanValue("online"); |
| | | // Ticket04 状态只包含发现配置;首次恢复时以演示默认值补齐采样状态。 |
| | | if (!object.containsKey("sampleIntervalMs")) |
| | | return new CollectorState(collectorId, deviceCode, ip, mac, name, manufacturer, model, |
| | | channelCount, online); |
| | | |
| | | List<CollectorChannelState> channels = new ArrayList<>(); |
| | | requiredArray(object, "channels").forEach(item -> channels.add(collectorChannelState(item))); |
| | | List<CollectorMeasurementRecord> history = new ArrayList<>(); |
| | | requiredArray(object, "history").forEach(item -> history.add(collectorMeasurementRecord(item))); |
| | | return new CollectorState(collectorId, deviceCode, ip, mac, name, manufacturer, model, |
| | | channelCount, online, requiredInteger(object, "sampleIntervalMs"), |
| | | requiredLong(object, "nextSequence"), optionalInstant(object, "lastSampledAt"), |
| | | channels, history, collectorHistoryFaults(object.get("historyFaults"))); |
| | | } |
| | | |
| | | private CollectorChannelState collectorChannelState(Object value) |
| | | { |
| | | JSONObject object = jsonObject(value); |
| | | List<CollectorMetricState> metrics = new ArrayList<>(); |
| | | requiredArray(object, "metrics").forEach(item -> metrics.add(collectorMetricState(item))); |
| | | return new CollectorChannelState(object.getString("channelCode"), metrics); |
| | | } |
| | | |
| | | private CollectorMetricState collectorMetricState(Object value) |
| | | { |
| | | JSONObject object = jsonObject(value); |
| | | BigDecimal measurement = object.getBigDecimal("value"); |
| | | if (measurement == null) throw new IllegalStateException("Missing BTS simulator state field: value"); |
| | | return new CollectorMetricState(object.getString("metricCode"), measurement, object.getString("unit")); |
| | | } |
| | | |
| | | private CollectorMeasurementRecord collectorMeasurementRecord(Object value) |
| | | { |
| | | JSONObject object = jsonObject(value); |
| | | BigDecimal measurement = object.getBigDecimal("value"); |
| | | if (measurement == null) throw new IllegalStateException("Missing BTS simulator state field: value"); |
| | | return new CollectorMeasurementRecord(object.getString("adapterCode"), object.getString("collectorCode"), |
| | | object.getString("channelCode"), requiredLong(object, "sequenceId"), |
| | | requiredInstant(object, "deviceTime"), object.getString("deviceTimeRaw"), |
| | | requiredInstant(object, "serverReceivedAt"), object.getString("metricCode"), |
| | | measurement, object.getString("unit")); |
| | | } |
| | | |
| | | private CollectorHistoryFaults collectorHistoryFaults(Object value) |
| | | { |
| | | if (value == null) return CollectorHistoryFaults.none(); |
| | | JSONObject object = jsonObject(value); |
| | | List<Long> missing = new ArrayList<>(); |
| | | JSONArray values = object.getJSONArray("missingSequences"); |
| | | if (values != null) values.forEach(item -> missing.add(Long.valueOf(item.toString()))); |
| | | return new CollectorHistoryFaults(missing, object.getLong("duplicateSequence"), |
| | | object.getLong("conflictingSequence"), object.getBooleanValue("outOfOrder")); |
| | | } |
| | | |
| | | private ChannelState channelState(Object value) |
| | |
| | | return new ChannelTombstone(requiredInteger(object, "deviceId"), object.getString("ip"), |
| | | requiredInteger(object, "channelId"), requiredInteger(object, "remainingDiscoveries")); |
| | | } |
| | | |
| | | private long requiredLong(JSONObject object, String field) |
| | | { |
| | | Long value = object.getLong(field); |
| | | if (value == null) throw new IllegalStateException("Missing BTS simulator state field: " + field); |
| | | return value; |
| | | } |
| | | |
| | | private Instant requiredInstant(JSONObject object, String field) |
| | | { |
| | | Instant value = optionalInstant(object, field); |
| | | if (value == null) throw new IllegalStateException("Missing BTS simulator state field: " + field); |
| | | return value; |
| | | } |
| | | |
| | | private Instant optionalInstant(JSONObject object, String field) |
| | | { |
| | | String value = object.getString(field); |
| | | return value == null ? null : Instant.parse(value); |
| | | } |
| | | } |