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] =?UTF-8?q?feat(big-data):=20=E6=96=B0=E5=A2=9E=20get=5Fus?= =?UTF-8?q?er=5Fdevice=20=E7=94=A8=E6=88=B7=E8=AE=BE=E5=A4=87=E5=8F=B7?= =?UTF-8?q?=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{}, + } +}