From 3fb472886583b2c709e05b39ca565b2d49181be8 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 16:08:34 +0800 Subject: [PATCH 1/2] =?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 的透传。 --- services/big-data/get_user_profile.go | 10 ++++++++++ 1 file changed, 10 insertions(+) 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, From ef8d969bdd43d9170325dcf7aefb15ddc51c50d3 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 16:08:34 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat(big-data):=20=E6=96=B0=E5=A2=9E=20get?= =?UTF-8?q?=5Fuser=5Fdevice=20=E7=94=A8=E6=88=B7=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=8F=B7=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 此前“查询设备号”功能的 SDK(GetUserDeviceParam / Request / Response + client.GetUserDevice 方法)仅手工存在于 center-api 的 vendor 中,未合入 golib, 导致每次 go mod vendor 都会被冲掉。此处正式补入 golib,与 vendor 内容保持一致。 --- services/big-data/client.go | 7 ++ services/big-data/get_user_device.go | 96 ++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 services/big-data/get_user_device.go diff --git a/services/big-data/client.go b/services/big-data/client.go index 7ff5e3d..84c1ae0 100644 --- a/services/big-data/client.go +++ b/services/big-data/client.go @@ -51,6 +51,13 @@ func (c *Client) GetRoleCreateLog(req *GetRoleCreateLogRequest) (response *GetRo return } +// GetUserDevice 用户设备号查询 +func (c *Client) GetUserDevice(req *GetUserDeviceRequest) (response *GetUserDeviceResponse, err error) { + response = CreateGetUserDeviceResponse() + err = c.DoAction(req, response) + return +} + // GetUserLoginLogOsOptions 登录日志 OS 选项查询 func (c *Client) GetUserLoginLogOsOptions(req *GetUserLoginLogOsOptionsRequest) (response *GetUserLoginLogOsOptionsResponse, err error) { response = CreateGetUserLoginLogOsOptionsResponse() diff --git a/services/big-data/get_user_device.go b/services/big-data/get_user_device.go new file mode 100644 index 0000000..a6c68d7 --- /dev/null +++ b/services/big-data/get_user_device.go @@ -0,0 +1,96 @@ +package big_data + +import ( + "bytes" + "encoding/json" + "io" + "strings" + + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" +) + +// GetUserDeviceParam 用户设备号查询参数(全部为数组,空数组表示不限定该条件) +type GetUserDeviceParam struct { + Uid []string `json:"uid"` + DeviceId []string `json:"device_id"` + Ip []string `json:"ip"` + LoginDate []string `json:"login_date"` // 登录日期区间 [开始, 结束] + Page int `json:"page"` + PageSize int `json:"page_size"` + XDebug string `json:"x_debug"` // 测试环境调试头,正式调用可留空 +} + +// GetUserDeviceRequest 用户设备号查询请求 +type GetUserDeviceRequest struct { + *requests.JsonRequest + Uid []string `position:"Json" field:"uid"` + DeviceId []string `position:"Json" field:"device_id"` + Ip []string `position:"Json" field:"ip"` + LoginDate []string `position:"Json" field:"login_date"` + Page int `position:"Json" field:"page"` + PageSize int `position:"Json" field:"page_size"` + Authorization string `position:"Header" field:"Authorization"` + XDebug string `position:"Header" field:"x-debug"` +} + +// getUserDeviceBody 自定义请求体序列化:切片统一为非 nil 空数组 [],避免 nil→null 触发 DMS 类型校验失败 +type getUserDeviceBody struct { + Uid []string `json:"uid"` + DeviceId []string `json:"device_id"` + Ip []string `json:"ip"` + LoginDate []string `json:"login_date"` + Page int `json:"page"` + PageSize int `json:"page_size"` +} + +// GetBodyReader 覆盖 JsonRequest 默认实现,使用自定义结构序列化 body +func (request *GetUserDeviceRequest) GetBodyReader() io.Reader { + body := getUserDeviceBody{ + Uid: emptyStrSlice(request.Uid), + DeviceId: emptyStrSlice(request.DeviceId), + Ip: emptyStrSlice(request.Ip), + LoginDate: emptyStrSlice(request.LoginDate), + Page: request.Page, + PageSize: request.PageSize, + } + b, err := json.Marshal(body) + if err != nil { + return strings.NewReader("") + } + return bytes.NewReader(b) +} + +// GetUserDeviceResponse 用户设备号查询响应(data 原样透出) +type GetUserDeviceResponse struct { + *responses.BaseResponse + Code int `json:"code"` + Message string `json:"message"` + Data json.RawMessage `json:"data"` +} + +// CreateGetUserDeviceRequest 创建用户设备号查询请求 +func CreateGetUserDeviceRequest(token string, param GetUserDeviceParam) *GetUserDeviceRequest { + req := &GetUserDeviceRequest{ + JsonRequest: &requests.JsonRequest{}, + Uid: param.Uid, + DeviceId: param.DeviceId, + Ip: param.Ip, + LoginDate: param.LoginDate, + Page: param.Page, + PageSize: param.PageSize, + Authorization: token, + XDebug: param.XDebug, + } + req.InitWithApiInfo(HOST, VERSION, "/api/internal/v1/get_user_device") + req.Method = requests.POST + req.Scheme = requests.HTTPS + return req +} + +// CreateGetUserDeviceResponse 创建用户设备号查询响应 +func CreateGetUserDeviceResponse() *GetUserDeviceResponse { + return &GetUserDeviceResponse{ + BaseResponse: &responses.BaseResponse{}, + } +}