diff --git a/xiaoqu-agent-service/src/main/java/me/iiv/agent/es/ElectricityMessageEsGatewayImpl.java b/xiaoqu-agent-service/src/main/java/me/iiv/agent/es/ElectricityMessageEsGatewayImpl.java index 94280a5..4309b07 100644 --- a/xiaoqu-agent-service/src/main/java/me/iiv/agent/es/ElectricityMessageEsGatewayImpl.java +++ b/xiaoqu-agent-service/src/main/java/me/iiv/agent/es/ElectricityMessageEsGatewayImpl.java @@ -12,8 +12,10 @@ import org.springframework.stereotype.Component; import java.io.IOException; import java.time.Instant; +import java.time.OffsetDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.util.ArrayList; import java.util.List; @@ -93,23 +95,48 @@ public class ElectricityMessageEsGatewayImpl implements ElectricityMessageEsGate } /** - * createTime 在索引里是 date 类型,_source 里可能是 ISO 文本也可能是 epoch 毫秒数; - * 两种形态都归一为 Asia/Shanghai yyyy-MM-dd HH:mm:ss 文本输出。 + * createTime 在 _source 里是 ISO 文本(如 2026-09-21T10:00:00.000+08:00)或 epoch 毫秒数; + * 两种形态都归一为 Asia/Shanghai yyyy-MM-dd HH:mm:ss 文本输出(对齐老系统 Date 格式化口径)。 */ private static String createTimeText(JsonNode value) { if (value == null || value.isNull()) { return null; } - if (value.isTextual()) { - return value.asText(); - } if (value.isNumber()) { return TIME_FORMATTER.format(Instant.ofEpochMilli(value.longValue())); } + if (value.isTextual()) { + String text = value.asText(); + if (text.indexOf('T') >= 0) { + try { + return TIME_FORMATTER.format(OffsetDateTime.parse(text)); + } catch (DateTimeParseException e) { + return text; + } + } + return text; + } return null; } + /** + * value 在 _source 里可能是数字也可能是字符串(索引实际为 "28"/"100" 文本), + * 统一解析为 Integer;非数值文本返回 null。 + */ private static Integer integerValue(JsonNode value) { - return value != null && value.isNumber() ? value.intValue() : null; + if (value == null || value.isNull()) { + return null; + } + if (value.isNumber()) { + return value.intValue(); + } + if (value.isTextual()) { + try { + return Integer.valueOf(value.asText().trim()); + } catch (NumberFormatException e) { + return null; + } + } + return null; } } diff --git a/xiaoqu-agent-service/src/test/java/me/iiv/agent/es/ElectricityMessageEsGatewayImplTest.java b/xiaoqu-agent-service/src/test/java/me/iiv/agent/es/ElectricityMessageEsGatewayImplTest.java index ec530a0..f0173c7 100644 --- a/xiaoqu-agent-service/src/test/java/me/iiv/agent/es/ElectricityMessageEsGatewayImplTest.java +++ b/xiaoqu-agent-service/src/test/java/me/iiv/agent/es/ElectricityMessageEsGatewayImplTest.java @@ -37,7 +37,7 @@ class ElectricityMessageEsGatewayImplTest { + "\"hits\":{\"total\":{\"value\":2,\"relation\":\"eq\"}," + "\"hits\":[" + "{\"_index\":\"electricitymessage_202609\"," - + "\"_source\":{\"createTime\":\"2026-09-21 10:00:00\",\"messageType\":0,\"value\":88}}," + + "\"_source\":{\"createTime\":\"2026-09-21T10:00:00.000+08:00\",\"messageType\":0,\"value\":\"88\"}}," + "{\"_index\":\"electricitymessage_202609\"," + "\"_source\":{\"createTime\":" + EPOCH_MILLIS + ",\"messageType\":4,\"value\":3700}}" + "]}}";