fix: enrich xinda raw frame metadata

This commit is contained in:
lingniu
2026-06-30 10:34:53 +08:00
parent 68cd3d0d06
commit b6cb661869
4 changed files with 116 additions and 7 deletions

View File

@@ -1,5 +1,7 @@
package com.lingniu.ingest.eventhistory;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.lingniu.ingest.tdenginehistory.TdengineHistoryReader;
import com.lingniu.ingest.tdenginehistory.TdenginePage;
import com.lingniu.ingest.tdenginehistory.TdenginePageCursor;
@@ -22,6 +24,7 @@ import java.io.IOException;
import java.time.Instant;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@RestController
@ConditionalOnProperty(prefix = "lingniu.ingest.event-history", name = "enabled", havingValue = "true")
@@ -30,6 +33,9 @@ import java.util.Locale;
@Tag(name = "Raw Frame API", description = "原始帧索引分页查询接口。")
public final class RawFrameHistoryController {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final TypeReference<Map<String, Object>> MAP_TYPE = new TypeReference<>() {};
private final TdengineHistoryReader reader;
public RawFrameHistoryController(TdengineHistoryReader reader) {
@@ -165,6 +171,7 @@ public final class RawFrameHistoryController {
String parseError,
String peer,
String metadataJson,
Map<String, Object> metadata,
String protocol,
String vehicleKey,
String vin,
@@ -185,10 +192,22 @@ public final class RawFrameHistoryController {
row.parseError(),
row.peer(),
row.metadataJson(),
metadata(row.metadataJson()),
row.protocol(),
row.vehicleKey(),
row.vin(),
row.phone());
}
private static Map<String, Object> metadata(String metadataJson) {
if (metadataJson == null || metadataJson.isBlank()) {
return Map.of();
}
try {
return OBJECT_MAPPER.readValue(metadataJson, MAP_TYPE);
} catch (Exception ignored) {
return Map.of("_raw", metadataJson);
}
}
}
}

View File

@@ -57,6 +57,10 @@ class RawFrameHistoryControllerTest {
assertThat(item.messageIdHex()).isEqualTo("0x0200");
assertThat(item.rawUri()).contains("XINDA_PUSH");
assertThat(item.metadataJson()).contains("rawArchiveUri");
assertThat(item.metadata())
.containsEntry("rawArchiveUri", item.rawUri())
.containsEntry("plateNo", "粤BD12345")
.containsEntry("rawJson", "{\"carName\":\"粤BD12345\"}");
assertThat(response.nextCursor()).isEqualTo(new RawFrameHistoryController.CursorResponse(
"2026-06-29T12:00:01Z", "frame-1"));
}
@@ -98,7 +102,8 @@ class RawFrameHistoryControllerTest {
"NOT_PARSED",
"",
"xinda",
"{\"rawArchiveUri\":\"archive://2026/06/29/XINDA_PUSH/unknown/" + frameId + ".bin\"}",
"{\"rawArchiveUri\":\"archive://2026/06/29/XINDA_PUSH/unknown/" + frameId
+ ".bin\",\"plateNo\":\"粤BD12345\",\"rawJson\":\"{\\\"carName\\\":\\\"粤BD12345\\\"}\"}",
"XINDA_PUSH",
"LB9A32A24P0LS1270",
"LB9A32A24P0LS1270",