From 96e9382d73e0bb710533df251310ad42ab4c45e8 Mon Sep 17 00:00:00 2001 From: lingniu Date: Fri, 3 Jul 2026 14:42:10 +0800 Subject: [PATCH] fix(go): normalize history parsed field names --- go/vehicle-gateway/internal/realtime/kv.go | 7 +--- .../internal/realtime/kv_test.go | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/go/vehicle-gateway/internal/realtime/kv.go b/go/vehicle-gateway/internal/realtime/kv.go index 67d427fe..1cbc13ef 100644 --- a/go/vehicle-gateway/internal/realtime/kv.go +++ b/go/vehicle-gateway/internal/realtime/kv.go @@ -27,7 +27,7 @@ func BuildFieldsEnvelope(env envelope.FrameEnvelope) (envelope.FrameEnvelope, bo return envelope.FrameEnvelope{}, false } rows := realtimeKVFields(env, env.Parsed) - fields := make(map[string]any, len(rows)+len(env.Fields)) + fields := make(map[string]any, len(rows)) for _, row := range rows { key := row.Domain if strings.TrimSpace(row.Field) != "" { @@ -35,11 +35,6 @@ func BuildFieldsEnvelope(env envelope.FrameEnvelope) (envelope.FrameEnvelope, bo } fields[key] = row.Value } - for key, value := range env.Fields { - if strings.TrimSpace(key) != "" { - fields[key] = value - } - } if len(fields) == 0 { return envelope.FrameEnvelope{}, false } diff --git a/go/vehicle-gateway/internal/realtime/kv_test.go b/go/vehicle-gateway/internal/realtime/kv_test.go index 94cb6ef3..d10b2b35 100644 --- a/go/vehicle-gateway/internal/realtime/kv_test.go +++ b/go/vehicle-gateway/internal/realtime/kv_test.go @@ -39,6 +39,48 @@ func TestRealtimeKVFieldsFromGB32960ParsedDomains(t *testing.T) { } } +func TestBuildFieldsEnvelopeUsesOnlyMappedFieldNames(t *testing.T) { + fieldsEnv, ok := BuildFieldsEnvelope(envelope.FrameEnvelope{ + Protocol: envelope.ProtocolGB32960, + VIN: "VIN001", + MessageID: "0x02", + EventTimeMS: 1000, + ReceivedAtMS: 1100, + EventID: "event-1", + Fields: map[string]any{ + "charge_status": 1, + envelope.FieldSOCPercent: 88.0, + envelope.FieldTotalMileageKM: 100.1, + }, + Parsed: map[string]any{ + "data_units": []any{ + map[string]any{"type": "0x01", "name": "vehicle", "value": map[string]any{ + "charge_status": 1, + "soc_percent": 88.0, + "total_mileage_km": 100.1, + }}, + }, + }, + }) + if !ok { + t.Fatal("BuildFieldsEnvelope() should emit mapped fields") + } + for _, bareKey := range []string{"charge_status", "soc_percent", "total_mileage_km"} { + if _, exists := fieldsEnv.Fields[bareKey]; exists { + t.Fatalf("fields envelope should not expose bare env.Fields key %q: %#v", bareKey, fieldsEnv.Fields) + } + } + for _, mappedKey := range []string{ + "gb32960.vehicle.charge_status", + "gb32960.vehicle.soc_percent", + "gb32960.vehicle.total_mileage_km", + } { + if _, exists := fieldsEnv.Fields[mappedKey]; !exists { + t.Fatalf("fields envelope missing mapped key %q: %#v", mappedKey, fieldsEnv.Fields) + } + } +} + func TestRealtimeKVFieldsFromJT808ParsedFields(t *testing.T) { jtRows := realtimeKVFields(envelope.FrameEnvelope{ Protocol: envelope.ProtocolJT808,