|
|
@ -43,6 +43,11 @@ public class CommonOpt { |
|
|
|
|
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(CommonOpt.class); |
|
|
private static Logger logger = LoggerFactory.getLogger(CommonOpt.class); |
|
|
|
|
|
|
|
|
|
|
|
public enum ExtractStrategy { |
|
|
|
|
|
FIRST, |
|
|
|
|
|
LAST |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
private static final String SUFFIX_85 = "_85"; |
|
|
private static final String SUFFIX_85 = "_85"; |
|
|
private static final String SUFFIX_85_9003 = "_85_9003"; |
|
|
private static final String SUFFIX_85_9003 = "_85_9003"; |
|
|
private static final String SUFFIX_111 = "_111"; |
|
|
private static final String SUFFIX_111 = "_111"; |
|
|
@ -181,6 +186,26 @@ public class CommonOpt { |
|
|
return ""; |
|
|
return ""; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public String extractLastValue(ObjectMapper mapper, String rawData) { |
|
|
|
|
|
if (StringUtils.isBlank(rawData)) { |
|
|
|
|
|
return ""; |
|
|
|
|
|
} |
|
|
|
|
|
try { |
|
|
|
|
|
JsonNode node = mapper.readTree(rawData); |
|
|
|
|
|
Iterator<Map.Entry<String, JsonNode>> fields = node.fields(); |
|
|
|
|
|
|
|
|
|
|
|
JsonNode lastValue = null; |
|
|
|
|
|
while (fields.hasNext()) { |
|
|
|
|
|
lastValue = fields.next().getValue(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return lastValue != null ? lastValue.asText() : ""; |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
logger.error("Failed to parse rawData JSON: " + rawData, e); |
|
|
|
|
|
} |
|
|
|
|
|
return ""; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
public List<String> extractAllValues(ObjectMapper mapper, String rawData) { |
|
|
public List<String> extractAllValues(ObjectMapper mapper, String rawData) { |
|
|
List<String> result = new ArrayList<>(); |
|
|
List<String> result = new ArrayList<>(); |
|
|
|
|
|
|
|
|
@ -539,24 +564,53 @@ public class CommonOpt { |
|
|
return mapFirstValue(objectMapper, dataMapping111, realtime111); |
|
|
return mapFirstValue(objectMapper, dataMapping111, realtime111); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public String mapFirstValue(ObjectMapper mapper, |
|
|
public String mapFirstValue(ObjectMapper mapper, String dataMapping, DeviceRawdataRealtime deviceRawdataRealtime) { |
|
|
String dataMapping, |
|
|
return mapValue(mapper, dataMapping, deviceRawdataRealtime, ExtractStrategy.FIRST); |
|
|
DeviceRawdataRealtime deviceRawdataRealtime) { |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public String mapLastValue(ObjectMapper mapper, String dataMapping, DeviceRawdataRealtime deviceRawdataRealtime) { |
|
|
|
|
|
return mapValue(mapper, dataMapping, deviceRawdataRealtime, ExtractStrategy.LAST); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public String mapValue( |
|
|
|
|
|
ObjectMapper mapper, |
|
|
|
|
|
String dataMapping, |
|
|
|
|
|
DeviceRawdataRealtime deviceRawdataRealtime, |
|
|
|
|
|
ExtractStrategy strategy) { |
|
|
|
|
|
|
|
|
if (StringUtils.isBlank(dataMapping) || deviceRawdataRealtime == null) { |
|
|
if (StringUtils.isBlank(dataMapping) || deviceRawdataRealtime == null) { |
|
|
return null; |
|
|
return null; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
try { |
|
|
try { |
|
|
String statusValue = extractFirstValue(mapper, deviceRawdataRealtime.getRawData()); |
|
|
String statusValue; |
|
|
|
|
|
|
|
|
|
|
|
if (strategy == ExtractStrategy.FIRST) { |
|
|
|
|
|
statusValue = extractFirstValue(mapper, deviceRawdataRealtime.getRawData()); |
|
|
|
|
|
} else { |
|
|
|
|
|
statusValue = extractLastValue(mapper, deviceRawdataRealtime.getRawData()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
JsonNode root = mapper.readTree(dataMapping); |
|
|
JsonNode root = mapper.readTree(dataMapping); |
|
|
return root.path("default").path(statusValue).asText(null); |
|
|
JsonNode mappedNode = root.path("default").path(statusValue); |
|
|
|
|
|
|
|
|
|
|
|
// default 里有映射值 → 返回映射值
|
|
|
|
|
|
if (!mappedNode.isMissingNode() && !mappedNode.isNull()) { |
|
|
|
|
|
String mappedValue = mappedNode.asText(); |
|
|
|
|
|
if (StringUtils.isNotBlank(mappedValue)) { |
|
|
|
|
|
return mappedValue; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// default 里取不到 → 返回原始值
|
|
|
|
|
|
return statusValue; |
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
|
logger.error("dataMapping parse error, mapping={}", dataMapping, e); |
|
|
logger.error("dataMapping parse error, mapping={}", dataMapping, e); |
|
|
return null; |
|
|
return null; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public String buildRawFirstValue(String deviceId, Map<String, String> deviceId85To111Map, |
|
|
public String buildRawFirstValue(String deviceId, Map<String, String> deviceId85To111Map, |
|
|
Map<String, DeviceRawdataRealtime> realtime111Map, ObjectMapper mapper) { |
|
|
Map<String, DeviceRawdataRealtime> realtime111Map, ObjectMapper mapper) { |
|
|
return Optional.ofNullable(deviceId85To111Map.get(deviceId)) |
|
|
return Optional.ofNullable(deviceId85To111Map.get(deviceId)) |
|
|
|