From ab87f0b5ee685b9f998306fb7573d4c969af8d16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=8D=8E=E5=81=A5?= <971463584@qq.com> Date: Fri, 3 Jul 2026 15:36:20 +0800 Subject: [PATCH] =?UTF-8?q?feat(big-data):=20get=5Fuser=5Fprofile=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=20ip=20/=20device=5Fid=20=E7=AD=9B=E9=80=89?= =?UTF-8?q?=E9=80=8F=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前端可按 IP / 设备号查账号,但 SDK 的 GetUserProfileParam / Request / body 结构体缺少 ip、device_id 字段,导致这两个筛选条件被静默丢弃、发不到大数据。 补齐三处结构体字段及 GetBodyReader、CreateGetUserProfileRequest 的透传, 并新增 body 序列化测试锁定该行为。 --- services/big-data/get_user_profile.go | 10 +++++ .../big-data/get_user_profile_body_test.go | 38 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 services/big-data/get_user_profile_body_test.go diff --git a/services/big-data/get_user_profile.go b/services/big-data/get_user_profile.go index a9f6745..c71d181 100644 --- a/services/big-data/get_user_profile.go +++ b/services/big-data/get_user_profile.go @@ -25,6 +25,8 @@ type GetUserProfileParam struct { TradeOrderId []string `json:"trade_order_id"` GameSign []string `json:"game_sign"` GameId []string `json:"game_id"` + DeviceId []string `json:"device_id"` // 设备号集合,空表示不限定 + IP []string `json:"ip"` // IP 集合,空表示不限定 RegisterDate []string `json:"register_date"` // 区间 [开始, 结束] LastLoginDate []string `json:"last_login_date"` // 区间 [开始, 结束] LastPayDate []string `json:"last_pay_date"` // 区间 [开始, 结束] @@ -52,6 +54,8 @@ type GetUserProfileRequest struct { TradeOrderId []string `position:"Json" field:"trade_order_id"` GameSign []string `position:"Json" field:"game_sign"` GameId []string `position:"Json" field:"game_id"` + DeviceId []string `position:"Json" field:"device_id"` + IP []string `position:"Json" field:"ip"` RegisterDate []string `position:"Json" field:"register_date"` LastLoginDate []string `position:"Json" field:"last_login_date"` LastPayDate []string `position:"Json" field:"last_pay_date"` @@ -81,6 +85,8 @@ type getUserProfileBody struct { TradeOrderId []string `json:"trade_order_id"` GameSign []string `json:"game_sign"` GameId []string `json:"game_id"` + DeviceId []string `json:"device_id"` + IP []string `json:"ip"` RegisterDate []string `json:"register_date"` LastLoginDate []string `json:"last_login_date"` LastPayDate []string `json:"last_pay_date"` @@ -108,6 +114,8 @@ func (request *GetUserProfileRequest) GetBodyReader() io.Reader { TradeOrderId: emptyStrSlice(request.TradeOrderId), GameSign: emptyStrSlice(request.GameSign), GameId: emptyStrSlice(request.GameId), + DeviceId: emptyStrSlice(request.DeviceId), + IP: emptyStrSlice(request.IP), RegisterDate: emptyStrSlice(request.RegisterDate), LastLoginDate: emptyStrSlice(request.LastLoginDate), LastPayDate: emptyStrSlice(request.LastPayDate), @@ -166,6 +174,8 @@ func CreateGetUserProfileRequest(token string, param GetUserProfileParam) *GetUs TradeOrderId: param.TradeOrderId, GameSign: param.GameSign, GameId: param.GameId, + DeviceId: param.DeviceId, + IP: param.IP, RegisterDate: param.RegisterDate, LastLoginDate: param.LastLoginDate, LastPayDate: param.LastPayDate, diff --git a/services/big-data/get_user_profile_body_test.go b/services/big-data/get_user_profile_body_test.go new file mode 100644 index 0000000..4a5683e --- /dev/null +++ b/services/big-data/get_user_profile_body_test.go @@ -0,0 +1,38 @@ +package big_data + +import ( + "encoding/json" + "io" + "testing" +) + +// TestGetBodyReaderCarriesIPAndDeviceID 验证 ip / device_id 能被序列化进发往大数据的请求体。 +// 这两个字段此前在 SDK 里缺失,导致前端传的 IP/设备号被静默丢弃。 +func TestGetBodyReaderCarriesIPAndDeviceID(t *testing.T) { + req := CreateGetUserProfileRequest("token-x", GetUserProfileParam{ + IP: []string{"59.51.36.195"}, + DeviceId: []string{"dev-abc", "dev-def"}, + Page: 1, + PageSize: 50, + }) + + raw, err := io.ReadAll(req.GetBodyReader()) + if err != nil { + t.Fatalf("读取 body 失败: %v", err) + } + + var body struct { + IP []string `json:"ip"` + DeviceId []string `json:"device_id"` + } + if err := json.Unmarshal(raw, &body); err != nil { + t.Fatalf("反序列化 body 失败: %v, 原始=%s", err, raw) + } + + if len(body.IP) != 1 || body.IP[0] != "59.51.36.195" { + t.Errorf("ip 未正确透传, 期望 [59.51.36.195], 实际 %v, 原始=%s", body.IP, raw) + } + if len(body.DeviceId) != 2 || body.DeviceId[0] != "dev-abc" || body.DeviceId[1] != "dev-def" { + t.Errorf("device_id 未正确透传, 期望 [dev-abc dev-def], 实际 %v, 原始=%s", body.DeviceId, raw) + } +}