fix(es): 电量消息 createTime range 改发 epoch 毫秒
electricitymessage 索引 createTime 是 date 类型 (format strict_date_optional_time||epoch_millis),yyyy-MM-dd HH:mm:ss 字符串会被 400 拒绝;对齐老系统 DateUtils.parseDate 转 Date 后由 transport 序列化为 epoch 毫秒的口径。
This commit is contained in:
+10
-4
@@ -54,9 +54,11 @@ public class ElectricityMessageEsGatewayImpl implements ElectricityMessageEsGate
|
||||
if (messageType != null) {
|
||||
filters.addObject().putObject("term").putObject("messageType").put("value", messageType);
|
||||
}
|
||||
// 老代码 rangeQuery from(start,true).to(end,true),闭区间
|
||||
// createTime 在索引里是 date 类型(format strict_date_optional_time||epoch_millis),
|
||||
// 老系统经 DateUtils.parseDate 转 Date 后由 transport 序列化为 epoch 毫秒——
|
||||
// 直接把 yyyy-MM-dd HH:mm:ss 字符串发过去会被 400 拒绝(format 不接受空格分隔)
|
||||
ObjectNode range = filters.addObject().putObject("range").putObject("createTime");
|
||||
range.put("gte", startTime).put("lte", endTime);
|
||||
range.put("gte", toEpochMillis(startTime)).put("lte", toEpochMillis(endTime));
|
||||
|
||||
ObjectNode body = mapper.createObjectNode();
|
||||
body.put("from", from).put("size", size);
|
||||
@@ -86,9 +88,13 @@ public class ElectricityMessageEsGatewayImpl implements ElectricityMessageEsGate
|
||||
}
|
||||
}
|
||||
|
||||
private long toEpochMillis(String timeText) {
|
||||
return TIME_FORMATTER.parse(timeText, Instant::from).toEpochMilli();
|
||||
}
|
||||
|
||||
/**
|
||||
* createTime 在索引里可能是 yyyy-MM-dd HH:mm:ss 文本(老 range 直接传字符串可证 ES 接受该格式),
|
||||
* 也可能是 epoch 毫秒数;两种形态都归一为 yyyy-MM-dd HH:mm:ss 文本输出。
|
||||
* createTime 在索引里是 date 类型,_source 里可能是 ISO 文本也可能是 epoch 毫秒数;
|
||||
* 两种形态都归一为 Asia/Shanghai yyyy-MM-dd HH:mm:ss 文本输出。
|
||||
*/
|
||||
private static String createTimeText(JsonNode value) {
|
||||
if (value == null || value.isNull()) {
|
||||
|
||||
+3
-3
@@ -98,10 +98,10 @@ class ElectricityMessageEsGatewayImplTest {
|
||||
// messageType 传了才加 term
|
||||
assertTrue(anyFilter(filters, f -> f.has("term")
|
||||
&& f.get("term").get("messageType").get("value").asInt() == 0));
|
||||
// createTime 闭区间 range
|
||||
// createTime 闭区间 range,date 类型字段必须发 epoch 毫秒(空格分隔字符串会被 ES 400 拒绝)
|
||||
assertTrue(anyFilter(filters, f -> f.has("range")
|
||||
&& f.get("range").get("createTime").get("gte").asText().equals("2026-09-21 00:00:00")
|
||||
&& f.get("range").get("createTime").get("lte").asText().equals("2026-09-21 23:59:59")));
|
||||
&& f.get("range").get("createTime").get("gte").asLong() == 1789920000000L
|
||||
&& f.get("range").get("createTime").get("lte").asLong() == 1790006399000L));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user