From de55d3d7d5aaeda336bb3f5251520a9fe69db229 Mon Sep 17 00:00:00 2001
From: liguanjie <kingson2011@126.com>
Date: Mon, 23 Jun 2025 17:19:50 +0800
Subject: [PATCH 1/3] =?UTF-8?q?=E3=80=90stat=E6=9C=8D=E5=8A=A1=E3=80=91=20?=
 =?UTF-8?q?1=E3=80=81=E6=9F=A5=E8=AF=A2=E7=94=A8=E6=88=B7=E8=A7=92?=
 =?UTF-8?q?=E8=89=B2=E6=B3=A8=E5=86=8C=E5=88=86=E9=A1=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 services/stat/client.go      | 10 +++++++
 services/stat/client_test.go | 20 +++++++++++++
 services/stat/user.go        | 56 ++++++++++++++++++++++++++++++++++++
 3 files changed, 86 insertions(+)

diff --git a/services/stat/client.go b/services/stat/client.go
index 288789d..5bc6065 100644
--- a/services/stat/client.go
+++ b/services/stat/client.go
@@ -49,3 +49,13 @@ func (c *Client) GetAgentList(req *GetAgentListReq) (resp *GetAgentListResp, err
 	}
 	return
 }
+
+// GetUserRoleRegPage 获取用户角色注册分页列表
+func (c *Client) GetUserRoleRegPage(req *UserRoleRegReq) (resp *UserRoleRegResp, err error) {
+	resp = CreateUserRoleRegPageResp()
+	err = c.DoAction(req, resp)
+	if err != nil {
+		return
+	}
+	return
+}
diff --git a/services/stat/client_test.go b/services/stat/client_test.go
index b1dbfc4..2479cdc 100644
--- a/services/stat/client_test.go
+++ b/services/stat/client_test.go
@@ -78,3 +78,23 @@ func TestClient_GetAgentList(t *testing.T) {
 		t.Log("GetAgentList test passed")
 	}
 }
+
+// TestClient_GetUserRoleRegPage 查询用户角色注册分页
+func TestClient_GetUserRoleRegPage(t *testing.T) {
+	client, err := NewClient()
+	if err != nil {
+		panic(err)
+	}
+	req := CreateUserRoleRegPageReq(UserRoleRegParam{
+		Page:     1,
+		PageSize: 10,
+		RoleId:   "-1",
+		RoleName: "",
+	})
+
+	resp, err := client.GetUserRoleRegPage(req)
+	if err != nil {
+		panic(err)
+	}
+	fmt.Println(resp.Code, resp.Msg, resp.Data)
+}
diff --git a/services/stat/user.go b/services/stat/user.go
index 2a531af..bdcd3d3 100644
--- a/services/stat/user.go
+++ b/services/stat/user.go
@@ -57,3 +57,59 @@ func CreateSetUserNewGameAuthResp() *SetUserNewGameAuthResp {
 		BaseResponse: &responses.BaseResponse{},
 	}
 }
+
+// ------------------------------------
+
+// UserRoleReg 玩家汇总角色创建记录
+type UserRoleReg struct {
+	UserName  string `json:"user_name"`
+	Uid       string `json:"uid"`
+	RoleId    string `json:"role_id"`
+	RoleName  string `json:"role_name"`
+	GameSign  string `json:"game_sign"`
+	Id        string `json:"id"`
+	CreatedAt string `json:"created_at"`
+}
+type UserRoleRegPage struct {
+	Page       int           `json:"page"`
+	TotalCount int           `json:"page_count"`
+	PageSize   int           `json:"page_size"`
+	Data       []UserRoleReg `json:"data"`
+}
+
+type UserRoleRegParam struct {
+	Page     int    `json:"page"`
+	PageSize int    `json:"page_size"`
+	RoleId   string `json:"role_id"`
+	RoleName string `json:"role_name"`
+}
+type UserRoleRegReq struct {
+	*requests.RpcRequest
+}
+type UserRoleRegResp struct {
+	*responses.BaseResponse
+	Code int             `json:"code"`
+	Msg  string          `json:"msg"`
+	Data UserRoleRegPage `json:"data"`
+}
+
+func CreateUserRoleRegPageReq(param UserRoleRegParam) *UserRoleRegReq {
+	req := &UserRoleRegReq{
+		&requests.RpcRequest{},
+	}
+	req.InitWithApiInfo(HOST, VERSION, "/user/getRoleRegPage")
+	req.Method = requests.POST
+	req.FormParams = map[string]string{
+		"page":      fmt.Sprintf("%v", param.Page),
+		"page_size": fmt.Sprintf("%v", param.PageSize),
+		"role_id":   param.RoleId,
+		"role_name": param.RoleName,
+	}
+
+	return req
+}
+func CreateUserRoleRegPageResp() *UserRoleRegResp {
+	return &UserRoleRegResp{
+		BaseResponse: &responses.BaseResponse{},
+	}
+}

From eea0eb790ea97c71b6638bc29aa37f59fe8383bd Mon Sep 17 00:00:00 2001
From: liguanjie <kingson2011@126.com>
Date: Tue, 24 Jun 2025 11:55:49 +0800
Subject: [PATCH 2/3] =?UTF-8?q?=E3=80=90ip=E6=9C=8D=E5=8A=A1=E3=80=91=201?=
 =?UTF-8?q?=E3=80=81=E6=96=B0=E5=A2=9E=E6=9F=A5=E8=AF=A2=E5=8D=95=E4=B8=AA?=
 =?UTF-8?q?=E3=80=81=E5=A4=9A=E4=B8=AAip=E5=9C=B0=E5=8C=BA=E4=BF=A1?=
 =?UTF-8?q?=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 services/ip/client.go      |  36 +++++++++++++
 services/ip/client_test.go |  48 ++++++++++++++++++
 services/ip/ip.go          | 100 +++++++++++++++++++++++++++++++++++++
 3 files changed, 184 insertions(+)
 create mode 100644 services/ip/client.go
 create mode 100644 services/ip/client_test.go
 create mode 100644 services/ip/ip.go

diff --git a/services/ip/client.go b/services/ip/client.go
new file mode 100644
index 0000000..f0cb56d
--- /dev/null
+++ b/services/ip/client.go
@@ -0,0 +1,36 @@
+package ip
+
+import (
+	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
+	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
+)
+
+const (
+	VERSION = "2025-06-24"
+)
+
+var HOST = requests.Host{
+	Default: "ip",
+}
+
+type Client struct {
+	sdk.Client
+}
+
+func NewClient() (client *Client, err error) {
+	client = new(Client)
+	err = client.Init()
+	return
+}
+
+func (client *Client) CreateGetIpRequest(req *IpRequest) (resp *IpResponse, err error) {
+	resp = CreateIpResponse()
+	err = client.DoAction(req, resp)
+	return
+}
+
+func (client *Client) CreateGetIpsRequest(req *IpsRequest) (resp *IpsResponse, err error) {
+	resp = CreateIpsResponse()
+	err = client.DoAction(req, resp)
+	return
+}
diff --git a/services/ip/client_test.go b/services/ip/client_test.go
new file mode 100644
index 0000000..21deb3a
--- /dev/null
+++ b/services/ip/client_test.go
@@ -0,0 +1,48 @@
+package ip
+
+import (
+	"fmt"
+	"testing"
+)
+
+// 测试获取单个ip地区信息
+func TestGetIp(t *testing.T) {
+	client, newErr := NewClient()
+	if newErr != nil {
+		panic(newErr)
+	}
+	req := CreateIpRequest(IpParam{
+		Ip: "114.234.202.136",
+	})
+	res, doErr := client.CreateGetIpRequest(req)
+	if doErr != nil {
+		panic(doErr)
+	}
+	if res.Code != 0 {
+		t.Error("查询多个ip失败")
+	}
+	fmt.Printf(fmt.Sprintf("%v", res))
+}
+
+// 测试获取多个ip地区信息
+func TestGetIps(t *testing.T) {
+	client, newErr := NewClient()
+	if newErr != nil {
+		panic(newErr)
+	}
+	req := CreateIpsRequest(IpsParam{
+		Ips: []string{
+			"2001:ee0:5208:e600:4c51:3189:28a4:b668",
+			"114.234.202.136",
+		},
+	})
+	res, err := client.CreateGetIpsRequest(req)
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	if res.Code != 0 {
+		t.Error("查询多个ip失败")
+	}
+	fmt.Printf(fmt.Sprintf("%v", res))
+}
diff --git a/services/ip/ip.go b/services/ip/ip.go
new file mode 100644
index 0000000..c8cac42
--- /dev/null
+++ b/services/ip/ip.go
@@ -0,0 +1,100 @@
+package ip
+
+import (
+	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
+	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
+)
+
+type IpInfo struct {
+	Ip        string `json:"ip"`
+	City      string `json:"city"`
+	Province  string `json:"province"`
+	Country   string `json:"country"`
+	Isp       string `json:"isp"`
+	Owner     string `json:"owner"`
+	Continent string `json:"continent"`
+	Accuracy  string `json:"accuracy"`
+	Adcode    string `json:"adcode"`
+	Areacode  string `json:"areacode"`
+	Asnumber  string `json:"asnumber"`
+	Radius    string `json:"radius"`
+	Latwgs    string `json:"latwgs"`
+	Lngwgs    string `json:"lngwgs"`
+	Source    string `json:"source"`
+	Timezone  string `json:"timezone"`
+	Zipcode   string `json:"zipcode"`
+	District  string `json:"district"`
+}
+
+// IpsParam
+// 单个ip请求参数
+type IpParam struct {
+	Ip string `json:"ip"`
+}
+type IpRequest struct {
+	*requests.JsonRequest
+	Ip string `position:"Json" field:"ip"`
+}
+
+// IpResponse
+// 单个ip返回参数
+type IpResponse struct {
+	*responses.BaseResponse
+	Code int    `json:"code"`
+	Msg  string `json:"msg"`
+	Data IpInfo `json:"data"`
+}
+
+// CreateIpRequest
+// 同时支持ipv4、ipv6格式查询
+func CreateIpRequest(param IpParam) (req *IpRequest) {
+	req = &IpRequest{
+		JsonRequest: &requests.JsonRequest{},
+		Ip:          param.Ip,
+	}
+	req.InitWithApiInfo(HOST, VERSION, "/v1/getIp")
+	req.Method = requests.POST
+	return
+}
+func CreateIpResponse() (resp *IpResponse) {
+	resp = &IpResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}
+
+// 多个ip请求参数
+type IpsParam struct {
+	Ips []string `json:"ips"`
+}
+type IpsRequest struct {
+	*requests.JsonRequest
+	Ips []string `position:"Json" field:"ips"`
+}
+
+// IpsResponse
+// 多个ip返回参数
+type IpsResponse struct {
+	*responses.BaseResponse
+	Code int               `json:"code"`
+	Msg  string            `json:"msg"`
+	Data map[string]IpInfo `json:"data"`
+}
+
+// CreateIpsRequest
+// 同时支持ipv4、ipv6格式查询
+func CreateIpsRequest(param IpsParam) (req *IpsRequest) {
+	req = &IpsRequest{
+		JsonRequest: &requests.JsonRequest{},
+		Ips:         param.Ips,
+	}
+	req.InitWithApiInfo(HOST, VERSION, "/v1/getIps")
+	req.Method = requests.POST
+	return
+}
+func CreateIpsResponse() (resp *IpsResponse) {
+	resp = &IpsResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

From a274190b0157f5913bde8e28efebe80e901beee6 Mon Sep 17 00:00:00 2001
From: liguanjie <kingson2011@126.com>
Date: Tue, 24 Jun 2025 18:00:55 +0800
Subject: [PATCH 3/3] =?UTF-8?q?=E3=80=90stat=E6=9C=8D=E5=8A=A1=E3=80=91=20?=
 =?UTF-8?q?1=E3=80=81=E6=9F=A5=E8=AF=A2=E7=94=A8=E6=88=B7=E8=A7=92?=
 =?UTF-8?q?=E8=89=B2=E6=B3=A8=E5=86=8C=E5=88=86=E9=A1=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 services/stat/user.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/services/stat/user.go b/services/stat/user.go
index bdcd3d3..5d59692 100644
--- a/services/stat/user.go
+++ b/services/stat/user.go
@@ -72,7 +72,7 @@ type UserRoleReg struct {
 }
 type UserRoleRegPage struct {
 	Page       int           `json:"page"`
-	TotalCount int           `json:"page_count"`
+	TotalCount int           `json:"total_count"`
 	PageSize   int           `json:"page_size"`
 	Data       []UserRoleReg `json:"data"`
 }