8
0
gaore-common-sdk-go/services/big-data/get_user_profile.go

193 lines
8.0 KiB
Go
Raw Permalink Normal View History

package big_data
import (
2026-06-09 17:24:30 +08:00
"bytes"
"encoding/json"
2026-06-09 17:24:30 +08:00
"io"
"strings"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
)
// GetUserProfileParam 用户筛选/圈选查询参数
2026-06-09 17:24:30 +08:00
// 说明:金额类筛选用 *int64未设置(nil)时不参与筛选;切片为空表示不限定该条件
type GetUserProfileParam struct {
UserName []string `json:"user_name"`
UserName2 []string `json:"user_name2"`
Uid []string `json:"uid"`
RoleId []string `json:"role_id"`
RoleName []string `json:"role_name"`
RoleNameLike string `json:"role_name_like"`
LabelId []int `json:"label_id"`
WeworkTag []string `json:"wework_tag"`
OrderId []string `json:"order_id"`
TradeOrderId []string `json:"trade_order_id"`
GameSign []string `json:"game_sign"`
GameId []string `json:"game_id"`
2026-06-09 17:24:30 +08:00
RegisterDate []string `json:"register_date"` // 区间 [开始, 结束]
LastLoginDate []string `json:"last_login_date"` // 区间 [开始, 结束]
LastPayDate []string `json:"last_pay_date"` // 区间 [开始, 结束]
2026-06-10 14:42:05 +08:00
PayAmtAccMin *float64 `json:"pay_amt_acc_min"`
PayAmtAccMax *float64 `json:"pay_amt_acc_max"`
LastPayAmountMin *float64 `json:"last_pay_amount_min"`
LastPayAmountMax *float64 `json:"last_pay_amount_max"`
Page int `json:"page"`
PageSize int `json:"page_size"`
XDebug string `json:"x_debug"` // 测试环境调试头,正式调用可留空
}
// GetUserProfileRequest 用户筛选/圈选查询请求
type GetUserProfileRequest struct {
*requests.JsonRequest
UserName []string `position:"Json" field:"user_name"`
UserName2 []string `position:"Json" field:"user_name2"`
Uid []string `position:"Json" field:"uid"`
RoleId []string `position:"Json" field:"role_id"`
RoleName []string `position:"Json" field:"role_name"`
RoleNameLike string `position:"Json" field:"role_name_like"`
LabelId []int `position:"Json" field:"label_id"`
WeworkTag []string `position:"Json" field:"wework_tag"`
OrderId []string `position:"Json" field:"order_id"`
TradeOrderId []string `position:"Json" field:"trade_order_id"`
GameSign []string `position:"Json" field:"game_sign"`
GameId []string `position:"Json" field:"game_id"`
RegisterDate []string `position:"Json" field:"register_date"`
LastLoginDate []string `position:"Json" field:"last_login_date"`
LastPayDate []string `position:"Json" field:"last_pay_date"`
2026-06-10 14:42:05 +08:00
PayAmtAccMin *float64 `position:"Json" field:"pay_amt_acc_min"`
PayAmtAccMax *float64 `position:"Json" field:"pay_amt_acc_max"`
LastPayAmountMin *float64 `position:"Json" field:"last_pay_amount_min"`
LastPayAmountMax *float64 `position:"Json" field:"last_pay_amount_max"`
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"`
}
2026-06-09 17:24:30 +08:00
// getUserProfileBody 自定义请求体序列化结构,绕开 core 的反射序列化(JsonParams)
2026-06-10 14:42:05 +08:00
// - 金额字段 *float64 + omitempty未设置(nil)时该字段不出现在 JSON 中,避免 0 被 DMS 当成真实筛选条件;
2026-06-09 17:24:30 +08:00
// - 切片字段统一为非 nil 空数组 []:避免 nil 被序列化成 null 触发 DMS 类型校验失败。
type getUserProfileBody struct {
UserName []string `json:"user_name"`
UserName2 []string `json:"user_name2"`
Uid []string `json:"uid"`
RoleId []string `json:"role_id"`
RoleName []string `json:"role_name"`
RoleNameLike string `json:"role_name_like,omitempty"`
LabelId []int `json:"label_id"`
WeworkTag []string `json:"wework_tag"`
OrderId []string `json:"order_id"`
TradeOrderId []string `json:"trade_order_id"`
GameSign []string `json:"game_sign"`
GameId []string `json:"game_id"`
RegisterDate []string `json:"register_date"`
LastLoginDate []string `json:"last_login_date"`
LastPayDate []string `json:"last_pay_date"`
2026-06-10 14:42:05 +08:00
PayAmtAccMin *float64 `json:"pay_amt_acc_min,omitempty"`
PayAmtAccMax *float64 `json:"pay_amt_acc_max,omitempty"`
LastPayAmountMin *float64 `json:"last_pay_amount_min,omitempty"`
LastPayAmountMax *float64 `json:"last_pay_amount_max,omitempty"`
2026-06-09 17:24:30 +08:00
Page int `json:"page"`
PageSize int `json:"page_size"`
}
// GetBodyReader 覆盖 JsonRequest 默认实现,使用自定义结构序列化 body。
// 鉴权头(Authorization / x-debug)仍由 core 的 InitParam 按 Header 字段设置,不受影响。
func (request *GetUserProfileRequest) GetBodyReader() io.Reader {
body := getUserProfileBody{
UserName: emptyStrSlice(request.UserName),
UserName2: emptyStrSlice(request.UserName2),
Uid: emptyStrSlice(request.Uid),
RoleId: emptyStrSlice(request.RoleId),
RoleName: emptyStrSlice(request.RoleName),
RoleNameLike: request.RoleNameLike,
LabelId: emptyIntSlice(request.LabelId),
WeworkTag: emptyStrSlice(request.WeworkTag),
OrderId: emptyStrSlice(request.OrderId),
TradeOrderId: emptyStrSlice(request.TradeOrderId),
GameSign: emptyStrSlice(request.GameSign),
GameId: emptyStrSlice(request.GameId),
RegisterDate: emptyStrSlice(request.RegisterDate),
LastLoginDate: emptyStrSlice(request.LastLoginDate),
LastPayDate: emptyStrSlice(request.LastPayDate),
PayAmtAccMin: request.PayAmtAccMin,
PayAmtAccMax: request.PayAmtAccMax,
LastPayAmountMin: request.LastPayAmountMin,
LastPayAmountMax: request.LastPayAmountMax,
Page: request.Page,
PageSize: request.PageSize,
}
b, err := json.Marshal(body)
if err != nil {
return strings.NewReader("")
}
return bytes.NewReader(b)
}
// emptyStrSlice 将 nil 切片转成非 nil 空切片,避免序列化成 JSON null
func emptyStrSlice(s []string) []string {
if s == nil {
return []string{}
}
return s
}
// emptyIntSlice 同 emptyStrSlice针对 label_id 等 []int 字段
func emptyIntSlice(s []int) []int {
if s == nil {
return []int{}
}
return s
}
// GetUserProfileResponse 用户筛选/圈选查询响应返回不做处理data 原样透出)
type GetUserProfileResponse struct {
*responses.BaseResponse
Code int `json:"code"`
Message string `json:"message"`
Data json.RawMessage `json:"data"`
}
// CreateGetUserProfileRequest 创建用户筛选/圈选查询请求
// token 为 GetToken 返回的 data.token直接放入 Authorization 头
func CreateGetUserProfileRequest(token string, param GetUserProfileParam) *GetUserProfileRequest {
req := &GetUserProfileRequest{
JsonRequest: &requests.JsonRequest{},
UserName: param.UserName,
UserName2: param.UserName2,
Uid: param.Uid,
RoleId: param.RoleId,
RoleName: param.RoleName,
RoleNameLike: param.RoleNameLike,
LabelId: param.LabelId,
WeworkTag: param.WeworkTag,
OrderId: param.OrderId,
TradeOrderId: param.TradeOrderId,
GameSign: param.GameSign,
GameId: param.GameId,
RegisterDate: param.RegisterDate,
LastLoginDate: param.LastLoginDate,
LastPayDate: param.LastPayDate,
PayAmtAccMin: param.PayAmtAccMin,
PayAmtAccMax: param.PayAmtAccMax,
LastPayAmountMin: param.LastPayAmountMin,
LastPayAmountMax: param.LastPayAmountMax,
Page: param.Page,
PageSize: param.PageSize,
Authorization: token,
XDebug: param.XDebug,
}
req.InitWithApiInfo(HOST, VERSION, "/api/internal/v1/get_user_profile")
req.Method = requests.POST
req.Scheme = requests.HTTPS
return req
}
// CreateGetUserProfileResponse 创建用户筛选/圈选查询响应
func CreateGetUserProfileResponse() *GetUserProfileResponse {
return &GetUserProfileResponse{
BaseResponse: &responses.BaseResponse{},
}
}