diff --git a/internal/domains/api/services/processors/qcxg/qcxg7k2n_processor.go b/internal/domains/api/services/processors/qcxg/qcxg7k2n_processor.go index dfffa2e..bcdba6a 100644 --- a/internal/domains/api/services/processors/qcxg/qcxg7k2n_processor.go +++ b/internal/domains/api/services/processors/qcxg/qcxg7k2n_processor.go @@ -34,5 +34,14 @@ func ProcessQCXG7K2NRequest(ctx context.Context, params []byte, deps *processors return nil, err } - return ProcessQCXGX2X6Request(ctx, reqParams, deps) + respBytes, err = ProcessQCXGX2X6Request(ctx, reqParams, deps) + if err != nil { + return nil, err + } + + transformed, err := transformX2X6To3M7Z(respBytes) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + return transformed, nil } diff --git a/internal/domains/api/services/processors/qcxg/qcxg7k2n_transform.go b/internal/domains/api/services/processors/qcxg/qcxg7k2n_transform.go new file mode 100644 index 0000000..779545c --- /dev/null +++ b/internal/domains/api/services/processors/qcxg/qcxg7k2n_transform.go @@ -0,0 +1,29 @@ +package qcxg + +import ( + "encoding/json" + "fmt" +) + +// transformX2X6To3M7Z 将行驶证信息核验V2响应转换为 ETC 人车关系核验格式。 +// checkResult: 00 姓名一致 -> status 1;01 姓名不一致 -> status 2。 +func transformX2X6To3M7Z(respBytes []byte) ([]byte, error) { + var raw map[string]interface{} + if err := json.Unmarshal(respBytes, &raw); err != nil { + return nil, err + } + + status := mapCheckResultToStatus(raw["checkResult"]) + return json.Marshal(map[string]string{"status": status}) +} + +func mapCheckResultToStatus(checkResult interface{}) string { + switch fmt.Sprint(checkResult) { + case "00": + return "1" + case "01": + return "2" + default: + return "2" + } +} diff --git a/internal/domains/api/services/processors/qcxg/qcxg7k2n_transform_test.go b/internal/domains/api/services/processors/qcxg/qcxg7k2n_transform_test.go new file mode 100644 index 0000000..a0b7a5b --- /dev/null +++ b/internal/domains/api/services/processors/qcxg/qcxg7k2n_transform_test.go @@ -0,0 +1,38 @@ +package qcxg + +import ( + "encoding/json" + "testing" +) + +func TestTransformX2X6To3M7Z(t *testing.T) { + tests := []struct { + name string + input string + wantStat string + }{ + {"姓名一致", `{"checkResult":"00","plate":"桂A12345"}`, "1"}, + {"姓名不一致", `{"checkResult":"01","plate":"桂A12345"}`, "2"}, + {"未知结果默认不一致", `{"checkResult":"99"}`, "2"}, + {"缺少checkResult默认不一致", `{"plate":"桂A12345"}`, "2"}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := transformX2X6To3M7Z([]byte(tt.input)) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + var out map[string]string + if err := json.Unmarshal(got, &out); err != nil { + t.Fatalf("invalid json: %v", err) + } + if len(out) != 1 { + t.Fatalf("expected only status field, got %v", out) + } + if out["status"] != tt.wantStat { + t.Fatalf("status = %q, want %q", out["status"], tt.wantStat) + } + }) + } +}