From a4a3e58f760617d433698db71122d92b31c09b92 Mon Sep 17 00:00:00 2001 From: wserver <1065498738@qq.com> Date: Tue, 21 Feb 2023 13:35:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=85=AC=E5=91=8A=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/game/custom.go | 44 +++++ api/v1/game/game.go | 13 ++ api/v1/game/manage.go | 57 ++++++- api/v1/game/notice.go | 52 ++++++ api/v1/game/order.go | 9 +- internal/controller/game_custom.go | 28 +++ internal/controller/game_manage.go | 33 ++++ internal/controller/game_notice.go | 32 ++++ internal/controller/game_order.go | 24 ++- internal/controller/game_pub.go | 30 ++++ internal/model/entity/base_info.go | 11 +- internal/router/router.go | 4 + internal/serviceGame/custom.go | 86 ++++++++++ internal/serviceGame/internal/basicinfo.go | 13 +- internal/serviceGame/internal/dbinit.go | 12 +- internal/serviceGame/internal/mail.go | 16 +- internal/serviceGame/internal/manage.go | 127 ++++++++++++++ internal/serviceGame/internal/mqtt_client.go | 7 + internal/serviceGame/internal/notice.go | 14 ++ internal/serviceGame/internal/order.go | 50 +++++- internal/serviceGame/mail.go | 2 +- internal/serviceGame/manage.go | 104 ++++++++++++ internal/serviceGame/notice.go | 169 +++++++++++++++++++ internal/serviceGame/order.go | 125 +++++++++++++- 24 files changed, 1036 insertions(+), 26 deletions(-) create mode 100644 api/v1/game/custom.go create mode 100644 api/v1/game/game.go create mode 100644 api/v1/game/notice.go create mode 100644 internal/controller/game_custom.go create mode 100644 internal/controller/game_manage.go create mode 100644 internal/controller/game_notice.go create mode 100644 internal/controller/game_pub.go create mode 100644 internal/serviceGame/custom.go create mode 100644 internal/serviceGame/internal/manage.go create mode 100644 internal/serviceGame/internal/notice.go create mode 100644 internal/serviceGame/manage.go create mode 100644 internal/serviceGame/notice.go diff --git a/api/v1/game/custom.go b/api/v1/game/custom.go new file mode 100644 index 0000000..c20fd3f --- /dev/null +++ b/api/v1/game/custom.go @@ -0,0 +1,44 @@ +package game + +import ( + "github.com/gogf/gf/v2/frame/g" + commonApi "tyj_admin/api/v1/common" + "tyj_admin/internal/model/entity" +) + +type BugAddReq struct { + g.Meta `path:"/custom/bugadd" tags:"增加BUG" method:"post" summary:"增加BUG"` + Uid int32 `p:"uid" v:"required#uid不能为空"` + Server int32 `p:"server" ` + Qq string `p:"qq" ` + Tel string `p:"tel" ` + Bug string `p:"bug"` + OccurrenceTime int64 `p:"occurrenceTime"` + CreateTime int64 `p:"createTime"` + State int32 `p:"state"` +} + +type BugAddRes struct { +} + +type BugListReq struct { + g.Meta `path:"/custom/buglist" tags:"BUG列表" method:"get" summary:"BUG列表"` + LowTime int64 `p:"lowTime"` + UpTime int64 `p:"upTime"` + State int64 `p:"state"` //0表示所有的,1表示没处理的,2表示处理完的 + commonApi.PageReq +} + +type BugListRes struct { + g.Meta `mime:"application/json"` + Bugs []*entity.GameBug `json:"list"` + commonApi.ListRes +} + +type OperateBugReq struct { + g.Meta `path:"/custom/operatebug" tags:"处理BUG" method:"post" summary:"处理BUG"` + Id int32 `p:"Id"` +} + +type OperateBugRes struct { +} diff --git a/api/v1/game/game.go b/api/v1/game/game.go new file mode 100644 index 0000000..c7756b7 --- /dev/null +++ b/api/v1/game/game.go @@ -0,0 +1,13 @@ +package game + +import "github.com/gogf/gf/v2/frame/g" + +type GetGameUpdateUrlReq struct { + g.Meta `path:"/updateurl/get" tags:"强更地址" method:"get" summary:"强更地址"` + Channel string `p:"channel"` +} + +type GetGameUpdateUrlRes struct { + g.Meta `mime:"application/json"` + Url string `json:"url"` +} diff --git a/api/v1/game/manage.go b/api/v1/game/manage.go index 415b118..980e8b4 100644 --- a/api/v1/game/manage.go +++ b/api/v1/game/manage.go @@ -1,6 +1,9 @@ package game -import "github.com/gogf/gf/v2/frame/g" +import ( + "github.com/gogf/gf/v2/frame/g" + "tyj_admin/internal/model/entity" +) // 修改GM权限 type ChangeGmReq struct { @@ -11,8 +14,6 @@ type ChangeGmReq struct { } type ChangeGmRes struct { - Account string `p:"account"` - ServerId int `p:"serverId"` //0,总服,其他分服 } type SearchGmReq struct { @@ -22,5 +23,53 @@ type SearchGmReq struct { } type SearchGmRes struct { - Result int `p:"result"` + g.Meta `mime:"application/json"` + Gm int `p:"gm"` +} + +type ResetPwdReq struct { + g.Meta `path:"/mange/resetpwd" tags:"修改登录密码" method:"post" summary:"修改登录密码"` + Account string `p:"account"` + Pwd string `p:"pwd"` +} + +type ResetPwdRes struct { +} + +type MigrateSearchReq struct { + g.Meta `path:"/mange/migratesearch" tags:"迁移查询" method:"get" summary:"迁移查询"` + SrcServerId int `json:"srcServerId"` + SrcUid int32 `json:"srcUid"` + DesServerId int `json:"desServerId"` + DrcUid int32 `json:"drcUid"` +} + +type MigrateSearchRes struct { + g.Meta `mime:"application/json"` + RoleList []*entity.RoleDetail `json:"list"` +} + +type MigrateReq struct { + g.Meta `path:"/mange/migrate" tags:"迁移" method:"get" summary:"迁移"` + SrcServerId int `json:"srcServerId"` + SrcUid int32 `json:"srcUid"` + DesServerId int `json:"desServerId"` + DesUid int32 `json:"desUid"` +} + +type MigrateRes struct { +} + +type StatisticsReq struct { + g.Meta `path:"/mange/statistics" tags:"统计数据" method:"get" summary:"统计数据"` + LowTime int64 `json:"lowTime"` + UpTime int64 `json:"upTime"` +} + +type StatisticsRes struct { + g.Meta `mime:"application/json"` + RegisterNum int64 `json:"registerNum"` + DepositNum int64 `json:"depositNum"` + Sum int32 `json:"sum"` //总充值 + Remain []*entity.Remain `json:"list"` } diff --git a/api/v1/game/notice.go b/api/v1/game/notice.go new file mode 100644 index 0000000..1059ccb --- /dev/null +++ b/api/v1/game/notice.go @@ -0,0 +1,52 @@ +package game + +import "github.com/gogf/gf/v2/frame/g" + +type AddNoticeReq struct { + g.Meta `path:"/notice/add" tags:"维护公告" method:"post" summary:"维护公告"` + Status int `p:"status"` + Content string `p:"content"` + Channel string `p:"channel"` + NoticeType int `p:"noticeType"` + Id int `p:"id"` +} + +type AddNoticeRes struct { +} + +type GetNoticeReq struct { + g.Meta `path:"/notice/get" tags:"维护公告" method:"get" summary:"维护公告"` + Channel string `p:"channel"` + NoticeType int `p:"noticeType"` +} + +type GetNoticeRes struct { + g.Meta `mime:"application/json"` + Status int `json:"status"` + Content string `json:"content"` + Id int `json:"id"` +} + +type PopReq struct { + g.Meta `path:"/notice/pop" tags:"弹窗公告" method:"post" summary:"弹窗公告"` + Type int `p:"popType"` + Uids string `p:"uids"` + ServerId int `p:"serverId"` + Content string `p:"content"` +} + +type PopRes struct { +} + +type GetGameNoticeReq struct { + g.Meta `path:"/gamenotice/get" tags:"维护公告" method:"get" summary:"维护公告"` + Channel string `p:"channel"` + NoticeType int `p:"noticeType"` +} + +type GetGameNoticeRes struct { + g.Meta `mime:"application/json"` + Status int `json:"status"` + Content string `json:"content"` + Id int `json:"id"` +} diff --git a/api/v1/game/order.go b/api/v1/game/order.go index b05f804..94413eb 100644 --- a/api/v1/game/order.go +++ b/api/v1/game/order.go @@ -42,8 +42,9 @@ type OrderCountRes struct { type OrderDepositReq struct { g.Meta `path:"/order/deposit" tags:"充值" method:"post" summary:"补单充值"` Account string `p:"account"` - DepositId int `p:"depositId"` - ServerId int `p:"serverId"` + DepositId int32 `p:"depositId"` + ServerId int32 `p:"serverId"` + Platform int `p:"platform"` } type OrderDepositRes struct { @@ -53,8 +54,8 @@ type OrderDepositRes struct { type AddCoinReq struct { g.Meta `path:"/order/addcoin" tags:"修改游戏币" method:"post" summary:"修改游戏币"` Uid string `p:"uid"` - Amount int `p:"amount"` - AmountType int `p:"amountType"` + Amount int32 `p:"amount"` + AmountType int32 `p:"amountType"` ServerId int `p:"serverId"` } diff --git a/internal/controller/game_custom.go b/internal/controller/game_custom.go new file mode 100644 index 0000000..e7c20b0 --- /dev/null +++ b/internal/controller/game_custom.go @@ -0,0 +1,28 @@ +package controller + +import ( + "context" + "tyj_admin/api/v1/game" + "tyj_admin/internal/serviceGame" +) + +var GameCustom = customController{} + +type customController struct { + BaseController +} + +// bug 列表 +func (c *customController) List(ctx context.Context, req *game.BugListReq) (res *game.BugListRes, err error) { + res, err = serviceGame.GameCustom().List(ctx, req) + return +} + +func (c *customController) Operate(ctx context.Context, req *game.OperateBugReq) (res *game.OperateBugRes, err error) { + res, err = serviceGame.GameCustom().UpdateState(ctx, req) + return +} +func (c *customController) Add(ctx context.Context, req *game.BugAddReq) (res *game.BugAddRes, err error) { + res, err = serviceGame.GameCustom().Add(ctx, req) + return +} diff --git a/internal/controller/game_manage.go b/internal/controller/game_manage.go new file mode 100644 index 0000000..c4ea629 --- /dev/null +++ b/internal/controller/game_manage.go @@ -0,0 +1,33 @@ +package controller + +import ( + "context" + "tyj_admin/api/v1/game" + "tyj_admin/internal/serviceGame" +) + +var GameManage = manageController{} + +type manageController struct { + BaseController +} + +func (c *manageController) ChangeGmAuthority(ctx context.Context, req *game.ChangeGmReq) (res *game.ChangeGmRes, err error) { + res, err = serviceGame.GameManage().ChangeGm(ctx, req) + return +} + +func (c *manageController) SearchGmAuthority(ctx context.Context, req *game.SearchGmReq) (res *game.SearchGmRes, err error) { + res, err = serviceGame.GameManage().SearchGm(ctx, req) + return +} + +func (c *manageController) ChangePwd(ctx context.Context, req *game.ResetPwdReq) (res *game.ResetPwdRes, err error) { + res, err = serviceGame.GameManage().ChangePwd(ctx, req) + return +} + +func (c *manageController) GetStatistics(ctx context.Context, req *game.StatisticsReq) (res *game.StatisticsRes, err error) { + res, err = serviceGame.GameManage().GetStatistics(ctx, req) + return +} diff --git a/internal/controller/game_notice.go b/internal/controller/game_notice.go new file mode 100644 index 0000000..3cdfc88 --- /dev/null +++ b/internal/controller/game_notice.go @@ -0,0 +1,32 @@ +package controller + +import ( + "context" + "fmt" + "tyj_admin/api/v1/game" + "tyj_admin/internal/serviceGame" + "tyj_admin/library/libUtils" +) + +var GameNotice = noticeController{} + +type noticeController struct { + BaseController +} + +func (c *noticeController) Add(ctx context.Context, req *game.AddNoticeReq) (res *game.AddNoticeRes, err error) { + res, err = serviceGame.GameNotice().AddNotice(ctx, req) + return +} + +func (c *noticeController) Get(ctx context.Context, req *game.GetNoticeReq) (res *game.GetNoticeRes, err error) { + ip := libUtils.GetClientIp(ctx) + fmt.Println(ip) + res, err = serviceGame.GameNotice().GetNotice(ctx, req) + return +} + +func (c *noticeController) PopNotice(ctx context.Context, req *game.PopReq) (res *game.PopRes, err error) { + res, err = serviceGame.GameNotice().PopNotice(ctx, req) + return +} diff --git a/internal/controller/game_order.go b/internal/controller/game_order.go index 4464a03..20c22cc 100644 --- a/internal/controller/game_order.go +++ b/internal/controller/game_order.go @@ -12,14 +12,32 @@ type orderController struct { BaseController } -// mail 列表 -func (c *mailController) OrderList(ctx context.Context, req *game.OrderSearchReq) (res *game.OrderSearchRes, err error) { +// order 列表 +func (c *orderController) OrderList(ctx context.Context, req *game.OrderSearchReq) (res *game.OrderSearchRes, err error) { res, err = serviceGame.GameOrder().GetOrders(ctx, req) return } // 订单统计数据 -func (c *mailController) OrderCount(ctx context.Context, req *game.OrderCountReq) (res *game.OrderCountRes, err error) { +func (c *orderController) OrderCount(ctx context.Context, req *game.OrderCountReq) (res *game.OrderCountRes, err error) { res, err = serviceGame.GameOrder().GetOrderCount(ctx, req) return } + +// 修改金币 +func (c *orderController) ChangeCoin(ctx context.Context, req *game.AddCoinReq) (res *game.AddCoinRes, err error) { + res, err = serviceGame.GameOrder().ChangeCoin(ctx, req) + return +} + +//充值 + +func (c *orderController) Deposit(ctx context.Context, req *game.OrderDepositReq) (res *game.OrderDepositRes, err error) { + if req.Platform == 1 { + res, err = serviceGame.GameOrder().AndroidDeposit(ctx, req) + } else { + res, err = serviceGame.GameOrder().IosDeposit(ctx, req) + } + + return +} diff --git a/internal/controller/game_pub.go b/internal/controller/game_pub.go new file mode 100644 index 0000000..6e8f7b3 --- /dev/null +++ b/internal/controller/game_pub.go @@ -0,0 +1,30 @@ +package controller + +import ( + "context" + "tyj_admin/api/v1/game" + "tyj_admin/internal/model/entity" + "tyj_admin/internal/service" + "tyj_admin/internal/serviceGame" +) + +var GamePub = pubController{} + +type pubController struct { + BaseController +} + +func (c *pubController) Get(ctx context.Context, req *game.GetGameNoticeReq) (res *game.GetGameNoticeRes, err error) { + res, err = serviceGame.GameNotice().GetGameNotice(ctx, req) + return +} + +func (c *pubController) GetUpdateUrl(ctx context.Context, req *game.GetGameUpdateUrlReq) (res *game.GetGameUpdateUrlRes, err error) { + config := new(entity.SysConfig) + res = new(game.GetGameUpdateUrlRes) + config, err = service.Config().GetByKey(ctx, req.Channel+"_url") + if err == nil && config != nil { + res.Url = config.ConfigValue + } + return +} diff --git a/internal/model/entity/base_info.go b/internal/model/entity/base_info.go index ecd4960..92ca1d0 100644 --- a/internal/model/entity/base_info.go +++ b/internal/model/entity/base_info.go @@ -9,7 +9,7 @@ type RolePost struct { TotalTime int64 `json:"totalTime" description:"总在线时间"` RechargeTotal int32 `json:"rechargeTotal" description:"累计充值"` CreateTime primitive.DateTime `json:"createTime" description:"创建时间"` - LastLeaveTime primitive.DateTime `json:"lastLeaveTime" description:"修改时间"` + LastLeaveTime primitive.DateTime `json:"lastLeaveTime" description:"离线时间"` } type RoleDetail struct { @@ -19,6 +19,7 @@ type RoleDetail struct { VillageScale int32 `json:"villageScale" description:"规模等级"` GiftIds []int32 `json:"giftIds" description:"礼包码"` Account string `json:"account" description:"账号名字"` + Gm int `json:"gm"` } type Mail struct { @@ -80,4 +81,12 @@ type AccountInfo struct { LastLeaveTime primitive.DateTime `json:"lastLeaveTime"` CreateTime primitive.DateTime `json:"createTime"` LeftPlayTime int64 `json:"leftPlayTime"` + Gm int `json:"gm"` +} + +type Remain struct { + Date int64 `json:"date"` + RemainRate float32 `json:"remainRate"` + RemainVal int32 `json:"remainVal"` + Total int32 `json:"total"` } diff --git a/internal/router/router.go b/internal/router/router.go index 33d7efc..520d0ec 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -89,6 +89,7 @@ func SystemBindController(group *ghttp.RouterGroup) { func GameBindController(group *ghttp.RouterGroup) { group.Group("/game", func(group *ghttp.RouterGroup) { + group.Bind(controller.GamePub) group.Middleware(service.Middleware().MiddlewareCORS) service.SysGfToken().Middleware(group) //context拦截器 @@ -97,6 +98,9 @@ func GameBindController(group *ghttp.RouterGroup) { controller.GameRole, controller.GameMail, controller.GameOrder, + controller.GameManage, + controller.GameNotice, + controller.GameCustom, ) }) } diff --git a/internal/serviceGame/custom.go b/internal/serviceGame/custom.go new file mode 100644 index 0000000..ebf2b0b --- /dev/null +++ b/internal/serviceGame/custom.go @@ -0,0 +1,86 @@ +package serviceGame + +import ( + "context" + "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/util/gconv" + "tyj_admin/api/v1/game" + "tyj_admin/internal/consts" + "tyj_admin/internal/dao" + "tyj_admin/internal/model/do" + "tyj_admin/library/liberr" +) + +type IGameCustom interface { + List(ctx context.Context, req *game.BugListReq) (res *game.BugListRes, err error) + Add(ctx context.Context, req *game.BugAddReq) (res *game.BugAddRes, err error) + UpdateState(ctx context.Context, req *game.OperateBugReq) (res *game.OperateBugRes, err error) +} + +type gameCustomImpl struct { +} + +func (c gameCustomImpl) UpdateState(ctx context.Context, req *game.OperateBugReq) (res *game.OperateBugRes, err error) { + err = g.DB().Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error { + err = g.Try(ctx, func(ctx context.Context) { + _, err = dao.GameBug.Ctx(ctx).TX(tx).WherePri(req.Id).Update(do.GameBug{State: 1}) + }) + return err + }) + return +} + +func (c gameCustomImpl) List(ctx context.Context, req *game.BugListReq) (res *game.BugListRes, err error) { + res = new(game.BugListRes) + g.Try(ctx, func(ctx context.Context) { + model := dao.GameBug.Ctx(ctx) + if req.State != 0 { + model = model.Where("state=", gconv.Int(req.State-1)) + } + if req.LowTime != 0 { + model = model.Where("occurrenceTime>", req.LowTime/1000) + } + if req.UpTime != 0 { + model = model.Where("occurrenceTime<", req.UpTime/1000) + } + res.Total, err = model.Count() + liberr.ErrIsNil(ctx, err, "获取BUG数据失败") + if req.PageNum == 0 { + req.PageNum = 1 + } + res.CurrentPage = req.PageNum + if req.PageSize == 0 { + req.PageSize = consts.PageSize + } + err = model.Page(res.CurrentPage, req.PageSize).Order("id asc").Scan(&res.Bugs) + liberr.ErrIsNil(ctx, err, "获取bug数据失败") + }) + return +} + +func (c gameCustomImpl) Add(ctx context.Context, req *game.BugAddReq) (res *game.BugAddRes, err error) { + err = g.DB().Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error { + err = g.Try(ctx, func(ctx context.Context) { + _, err = dao.GameBug.Ctx(ctx).TX(tx).InsertAndGetId(do.GameBug{ + Uid: req.Uid, + Server: req.Server, + Qq: req.Qq, + Tel: req.Tel, + Bug: req.Bug, + CreateTime: req.CreateTime, + OccurrenceTime: req.OccurrenceTime, + State: req.State, + }) + + }) + return err + }) + return +} + +var customMailService = gameCustomImpl{} + +func GameCustom() IGameCustom { + return &customMailService +} diff --git a/internal/serviceGame/internal/basicinfo.go b/internal/serviceGame/internal/basicinfo.go index 4cf1964..d40d04a 100644 --- a/internal/serviceGame/internal/basicinfo.go +++ b/internal/serviceGame/internal/basicinfo.go @@ -3,7 +3,6 @@ package internal import ( "context" "encoding/json" - "fmt" "github.com/gogf/gf/v2/errors/gerror" "go.mongodb.org/mongo-driver/bson" "tyj_admin/internal/model/entity" @@ -19,6 +18,17 @@ func GetServerList(account string, ctx context.Context) []int { } +func GetWhiteList(ctx context.Context) ([]string, error) { + rdbTop := RedisDbList[0] + rdbTop.Do(ctx, "select", 0) + var m []string + result := rdbTop.Get(ctx, "ipWhiteList") + + json.Unmarshal([]byte(result.Val()), &m) + return m, result.Err() + +} + func GetRoleList(ctx context.Context, account string) (RoleList []*entity.RolePost, err error) { serverList := GetServerList(account, ctx) for _, v := range serverList { @@ -30,7 +40,6 @@ func GetRoleList(ctx context.Context, account string) (RoleList []*entity.RolePo } one.Region = v RoleList = append(RoleList, one) - fmt.Println("one") } return RoleList, err diff --git a/internal/serviceGame/internal/dbinit.go b/internal/serviceGame/internal/dbinit.go index b8e1cbc..b798268 100644 --- a/internal/serviceGame/internal/dbinit.go +++ b/internal/serviceGame/internal/dbinit.go @@ -12,6 +12,7 @@ import ( var ( MongoDatabaseList []*qmgo.Database RedisDbList []*redis.Client + ServerConfig []map[string]interface{} ) func init() { @@ -28,16 +29,20 @@ func init() { return } RedisInit(redisCfg.Maps()) + svCfg, err := g.Cfg().Get(ctx, "game.server") + if err == nil { + ServerConfig = svCfg.Maps() + } } func MongoInit(config []map[string]interface{}) { ctx := context.Background() for _, v := range config { - client, err := qmgo.NewClient(ctx, &qmgo.Config{Uri: v["link"].(string)}) + mongoclient, err := qmgo.NewClient(ctx, &qmgo.Config{Uri: v["link"].(string)}) if err != nil { - panic(err) + continue } - db := client.Database(v["name"].(string)) + db := mongoclient.Database(v["name"].(string)) MongoDatabaseList = append(MongoDatabaseList, db) } @@ -52,6 +57,7 @@ func RedisInit(config []map[string]interface{}) { WriteTimeout: 30 * time.Second, PoolSize: 10, PoolTimeout: 30 * time.Second, + Password: v["pass"].(string), }) RedisDbList = append(RedisDbList, rdb) } diff --git a/internal/serviceGame/internal/mail.go b/internal/serviceGame/internal/mail.go index 4f2b52e..67098a1 100644 --- a/internal/serviceGame/internal/mail.go +++ b/internal/serviceGame/internal/mail.go @@ -43,25 +43,29 @@ type MqttMail struct { Body MailBody `json:"body"` } -func SendMqttMail(msg interface{}, c chan bool, server string) { - +func SendMqtt(msg interface{}, c chan bool, server string) { + closeC := false registerFunc := func(client mqtt.Client, qtmsg mqtt.Message) { - ss := string(msg.([]byte)) + ss := string(qtmsg.Payload()) fmt.Println(ss) - err := ClientSend("client", 0, false, ss) + err := ClientSend("client", 0, false, msg) if err != nil { c <- false } //ClientSend("client", 0, false, `{"reqId":3,"moduleId":"webadmin","body":{"uids":"lq0001","gm":1,"moduleType":"changeGM"}}`) } - mailFunc := func(client mqtt.Client, qtmsg mqtt.Message) { + callback := func(client mqtt.Client, qtmsg mqtt.Message) { + if closeC { + return + } res := &MqttResult{} client.Disconnect(1) ss := string(qtmsg.Payload()) ss = ss[1 : len(ss)-1] ss = strings.Replace(ss, "\\", "", -1) err := json.Unmarshal([]byte(ss), res) + closeC = true if err == nil && res.RespId == 1 { c <- true return @@ -70,7 +74,7 @@ func SendMqttMail(msg interface{}, c chan bool, server string) { c <- false } - if NewMqttClient(registerFunc, mailFunc, server) != nil { + if NewMqttClient(registerFunc, callback, server) != nil { c <- false } diff --git a/internal/serviceGame/internal/manage.go b/internal/serviceGame/internal/manage.go new file mode 100644 index 0000000..287e61a --- /dev/null +++ b/internal/serviceGame/internal/manage.go @@ -0,0 +1,127 @@ +package internal + +import ( + "context" + "github.com/qiniu/qmgo" + "go.mongodb.org/mongo-driver/bson" + "time" + "tyj_admin/api/v1/game" + "tyj_admin/internal/model/entity" +) + +func SearchGm(ctx context.Context, server int, account string) (gm int, err error) { + filter := bson.M{} + if server == 0 { + acc := entity.AccountInfo{} + filter["account"] = account + err = MongoDatabaseList[0].Collection("account").Find(ctx, filter).One(&acc) + if err == nil && acc.Gm > 0 { + gm = acc.Gm + return + } + gm = 0 + return + } else { + acc := entity.RoleDetail{} + filter["account"] = account + err = MongoDatabaseList[server].Collection("colony").Find(ctx, filter).One(&acc) + if err == nil && acc.Gm > 0 { + gm = acc.Gm + return + } + gm = 0 + return + } + +} + +func ChangeGm(ctx context.Context, account string, state int) (res *game.ChangeGmRes, err error) { + filter := bson.M{} + + filter["account"] = account + err = MongoDatabaseList[0].Collection("account").UpdateOne(ctx, filter, bson.M{"gm": state}) + return + +} + +type GmBody struct { + Uid string `json:"uid"` + Gm string `json:"gm"` + ModuleType string `json:"moduleType"` +} + +type MqttGm struct { + ReqId int64 `json:"reqId"` + ModuleId string `json:"moduleId"` + Body GmBody `json:"body"` +} + +//func SendMqttGm(msg interface{}, c chan bool, server string) { +// +// registerFunc := func(client mqtt.Client, qtmsg mqtt.Message) { +// ss := string(msg.([]byte)) +// fmt.Println(ss) +// err := ClientSend("client", 0, false, ss) +// if err != nil { +// c <- false +// } +// } +// +// callback := func(client mqtt.Client, qtmsg mqtt.Message) { +// res := &MqttResult{} +// client.Disconnect(1) +// ss := string(qtmsg.Payload()) +// ss = ss[1 : len(ss)-1] +// ss = strings.Replace(ss, "\\", "", -1) +// err := json.Unmarshal([]byte(ss), res) +// if err == nil && res.RespId == 1 && res.Error == nil { +// c <- true +// return +// } +// c <- false +// +// } +// if NewMqttClient(registerFunc, callback, server) != nil { +// c <- false +// } +// +//} + +func ChangePwd(ctx context.Context, account string, pwd string) (res *game.ResetPwdRes, err error) { + err = MongoDatabaseList[0].Collection("account").UpdateOne(ctx, bson.M{"acccount": account}, bson.M{"$set": bson.M{"password": pwd}}) + ss := make(map[string]interface{}) + err = MongoDatabaseList[2].Collection("colony").Find(ctx, bson.M{"account": "lq0001"}).One(&ss) + _, err = MongoDatabaseList[3].Collection("colony").InsertOne(ctx, ss) + return +} + +func MigrateRole(ctx context.Context, srcServer int, srcUid int32, dstServer int, dstUid int32) (res *game.MigrateRes, err error) { + ss := make(map[string]interface{}) + err = MongoDatabaseList[srcServer].Collection("colony").Find(ctx, bson.M{"uid": srcUid}).One(&ss) + if err != nil { + return + } + delete(ss, "_id") + delete(ss, "account") + delete(ss, "uid") + delete(ss, "friends") + delete(ss, "friendAsks") + delete(ss, "blacklist") + err = MongoDatabaseList[dstServer].Collection("colony").UpdateOne(ctx, bson.M{"uid": dstUid}, bson.M{"$set": ss}) + return +} + +func GetRegisterNum(ctx context.Context, lowTime int64, upTime int64) (num int64, err error) { + num, err = MongoDatabaseList[0].Collection("account").Find(ctx, bson.M{"createTime": bson.M{"$lte": time.UnixMilli(upTime), "$gte": time.UnixMilli(lowTime)}}).Count() + + return +} + +func GetDeposit(ctx context.Context, lowTime int64, upTime int64) (num int64, total int64, err error) { + ss := make(map[string]interface{}) + matchStage := bson.D{{"$match", bson.M{"createTime": bson.M{"$gte": time.UnixMilli(lowTime), "$lte": time.UnixMilli(upTime)}}}} + groupStage := bson.D{{"$group", bson.M{"totalMoney": bson.M{"$sum": "$money"}, "times": bson.M{"$sum": 1}}}} + err = MongoDatabaseList[0].Collection("rechargeOrder").Aggregate(ctx, qmgo.Pipeline{matchStage, groupStage}).One(&ss) + return + +} diff --git a/internal/serviceGame/internal/mqtt_client.go b/internal/serviceGame/internal/mqtt_client.go index e353f13..d1d4e1e 100644 --- a/internal/serviceGame/internal/mqtt_client.go +++ b/internal/serviceGame/internal/mqtt_client.go @@ -9,6 +9,13 @@ import ( var client mqtt.Client func NewMqttClient(registerCallback mqtt.MessageHandler, callback mqtt.MessageHandler, server string) error { + if client != nil { + if client.IsConnected() == true { + client.Disconnect(1) + } + client = nil + + } if client == nil { opts := mqtt.NewClientOptions() opts.AddBroker(server) // 这个中转服务器不需要任何账号密码 diff --git a/internal/serviceGame/internal/notice.go b/internal/serviceGame/internal/notice.go new file mode 100644 index 0000000..303d1a6 --- /dev/null +++ b/internal/serviceGame/internal/notice.go @@ -0,0 +1,14 @@ +package internal + +type NoticeBody struct { + Time int `json:"time"` + Type int `json:"type"` + Content string `json:"content"` + ModuleType string `json:"moduleType"` + Uid string `json:"uid"` +} +type MqttNotice struct { + ReqId int64 `json:"reqId"` + ModuleId string `json:"moduleId"` + Body NoticeBody `json:"body"` +} diff --git a/internal/serviceGame/internal/order.go b/internal/serviceGame/internal/order.go index 9bad4aa..07f2eab 100644 --- a/internal/serviceGame/internal/order.go +++ b/internal/serviceGame/internal/order.go @@ -2,8 +2,12 @@ package internal import ( "context" + "encoding/json" + "fmt" + mqtt "github.com/eclipse/paho.mqtt.golang" "github.com/qiniu/qmgo" "go.mongodb.org/mongo-driver/bson" + "strings" "tyj_admin/internal/model/entity" ) @@ -27,7 +31,7 @@ func GetOrdersByOrderId(ctx context.Context, orderId string) (orders []*entity.O return } -func GetorderCount(ctx context.Context, filter bson.M, serverId int) (Orders []*entity.OrderCount, err error) { +func GetOrderCount(ctx context.Context, filter bson.M, serverId int) (Orders []*entity.OrderCount, err error) { if serverId == 0 { for i := 1; i < len(MongoDatabaseList); i++ { orderCount := new(entity.OrderCount) @@ -61,3 +65,47 @@ func GetorderCount(ctx context.Context, filter bson.M, serverId int) (Orders []* } return } + +type MoneyBody struct { + Uids string `json:"uids"` + Money int32 `json:"money"` + Type int32 `json:"type"` + ModuleType string `json:"moduleType"` +} + +type MqttChangeMoney struct { + ReqId int64 `json:"reqId"` + ModuleId string `json:"moduleId"` + Body MoneyBody `json:"body"` +} + +func SendMqttMoney(msg interface{}, c chan bool, server string) { + + registerFunc := func(client mqtt.Client, qtmsg mqtt.Message) { + ss := string(msg.([]byte)) + fmt.Println(ss) + err := ClientSend("client", 0, false, ss) + if err != nil { + c <- false + } + } + + mailFunc := func(client mqtt.Client, qtmsg mqtt.Message) { + res := &MqttResult{} + client.Disconnect(1) + ss := string(qtmsg.Payload()) + ss = ss[1 : len(ss)-1] + ss = strings.Replace(ss, "\\", "", -1) + err := json.Unmarshal([]byte(ss), res) + if err == nil && res.RespId == 1 && res.Error == nil { + c <- true + return + } + c <- false + + } + if NewMqttClient(registerFunc, mailFunc, server) != nil { + c <- false + } + +} diff --git a/internal/serviceGame/mail.go b/internal/serviceGame/mail.go index fcdba82..a7835a9 100644 --- a/internal/serviceGame/mail.go +++ b/internal/serviceGame/mail.go @@ -61,7 +61,7 @@ func (m *gameMailImpl) SendMail(ctx context.Context, req *game.MailSendReq) (res connectCh := make(chan bool) server := "192.168.2.100:3005" defer close(connectCh) - internal.SendMqttMail(js, connectCh, server) + internal.SendMqtt(js, connectCh, server) var result bool for { select { diff --git a/internal/serviceGame/manage.go b/internal/serviceGame/manage.go new file mode 100644 index 0000000..1f4894c --- /dev/null +++ b/internal/serviceGame/manage.go @@ -0,0 +1,104 @@ +package serviceGame + +import ( + "context" + "encoding/json" + "github.com/gogf/gf/v2/crypto/gmd5" + "github.com/gogf/gf/v2/errors/gerror" + "tyj_admin/api/v1/game" + "tyj_admin/internal/serviceGame/internal" +) + +type IGameManage interface { + ChangeGm(ctx context.Context, req *game.ChangeGmReq) (res *game.ChangeGmRes, err error) + ChangePwd(ctx context.Context, req *game.ResetPwdReq) (res *game.ResetPwdRes, err error) + MigrateRole(ctx context.Context, req *game.MigrateReq) (res *game.MigrateRes, err error) + SearchGm(ctx context.Context, req *game.SearchGmReq) (res *game.SearchGmRes, err error) + GetStatistics(ctx context.Context, req *game.StatisticsReq) (res *game.StatisticsRes, err error) +} + +type gameManageImpl struct { +} + +var gameManageService = gameManageImpl{} + +func GameManage() IGameManage { + return &gameManageService +} + +func (g *gameManageImpl) ChangePwd(ctx context.Context, req *game.ResetPwdReq) (res *game.ResetPwdRes, err error) { + pwd := gmd5.MustEncryptString(req.Pwd + "sdsd") + res, err = internal.ChangePwd(ctx, req.Account, pwd) + return +} + +func (g *gameManageImpl) MigrateRole(ctx context.Context, req *game.MigrateReq) (res *game.MigrateRes, err error) { + res = new(game.MigrateRes) + res, err = internal.MigrateRole(ctx, req.SrcServerId, req.SrcUid, req.DesServerId, req.DesUid) + return +} + +func (g *gameManageImpl) MigrateSearch(ctx context.Context, req *game.MigrateSearchReq) (res *game.MigrateSearchRes, err error) { + res = new(game.MigrateSearchRes) + srcRole, srcErr := internal.GetRoleDetail(ctx, req.SrcUid, req.SrcServerId) + if srcErr != nil { + err = srcErr + return + } + res.RoleList = append(res.RoleList, srcRole) + desRole, desErr := internal.GetRoleDetail(ctx, req.SrcUid, req.SrcServerId) + if desErr != nil { + err = desErr + return + } + res.RoleList = append(res.RoleList, desRole) + return +} +func (g *gameManageImpl) SearchGm(ctx context.Context, req *game.SearchGmReq) (res *game.SearchGmRes, err error) { + res = new(game.SearchGmRes) + res.Gm, err = internal.SearchGm(ctx, req.ServerId, req.Account) + return +} + +func (g *gameManageImpl) ChangeGm(ctx context.Context, req *game.ChangeGmReq) (res *game.ChangeGmRes, err error) { + res = new(game.ChangeGmRes) + if req.ServerId == 0 { + res, err = internal.ChangeGm(ctx, req.Account, req.ChangeValue) + } else { + mqttGm := internal.MqttGm{} + mqttGm.Body.Uid = req.Account + mqttGm.Body.Gm = "gm" + mqttGm.Body.ModuleType = "changeGM" + mqttGm.ModuleId = "webadmin" + mqttGm.ReqId = 1 + var js []byte + js, err = json.Marshal(mqttGm) + connectCh := make(chan bool) + server := "192.168.2.100:3005" + defer close(connectCh) + internal.SendMqtt(js, connectCh, server) + var result bool + for { + select { + case result = <-connectCh: + if result == false { + err = gerror.New("失败") + return + } else { + return + } + } + } + } + return + +} + +func (g *gameManageImpl) GetStatistics(ctx context.Context, req *game.StatisticsReq) (res *game.StatisticsRes, err error) { + res = new(game.StatisticsRes) + + res.RegisterNum, err = internal.GetRegisterNum(ctx, req.LowTime, req.UpTime) + internal.GetDeposit(ctx, req.LowTime, req.UpTime) + + return +} diff --git a/internal/serviceGame/notice.go b/internal/serviceGame/notice.go new file mode 100644 index 0000000..9d2cd8e --- /dev/null +++ b/internal/serviceGame/notice.go @@ -0,0 +1,169 @@ +package serviceGame + +import ( + "context" + "encoding/json" + "github.com/gogf/gf/v2/errors/gerror" + "github.com/gogf/gf/v2/frame/g" + "tyj_admin/api/v1/game" + "tyj_admin/internal/dao" + "tyj_admin/internal/model/do" + "tyj_admin/internal/model/entity" + "tyj_admin/internal/serviceGame/internal" + "tyj_admin/library/libUtils" + "tyj_admin/library/liberr" +) + +type IGameNotice interface { + GetNotice(ctx context.Context, req *game.GetNoticeReq) (res *game.GetNoticeRes, err error) + AddNotice(ctx context.Context, req *game.AddNoticeReq) (res *game.AddNoticeRes, err error) + PopNotice(ctx context.Context, req *game.PopReq) (res *game.PopRes, err error) + GetGameNotice(ctx context.Context, req *game.GetGameNoticeReq) (res *game.GetGameNoticeRes, err error) +} + +type gameNoticeImpl struct { +} + +var gameNoticeService = gameNoticeImpl{} + +func GameNotice() IGameNotice { + return &gameNoticeService +} +func (c *gameNoticeImpl) GetNotice(ctx context.Context, req *game.GetNoticeReq) (res *game.GetNoticeRes, err error) { + internal.GetWhiteList(ctx) + res = new(game.GetNoticeRes) + g.Try(ctx, func(ctx context.Context) { + model := dao.GameNotice.Ctx(ctx) + model = model.Where("notice_type = ?", req.NoticeType) + model = model.Where("channel=? ", req.Channel) + var noticeList []*entity.GameNotice + + err = model.Scan(¬iceList) + if len(noticeList) >= 1 { + res.Content = noticeList[0].Content + res.Status = noticeList[0].Status + res.Id = noticeList[0].Id + } else { + return + } + if res.Status == 2 { + //ip := libUtils.GetClientIp(ctx) + //whiteIps := internal.GetWhiteList(ctx) + //res.Status = 3 + //for _, v := range whiteIps { + // if v == ip { + // res.Status = 1 + // break + // } + //} + } + + }) + return + +} + +func (c *gameNoticeImpl) GetGameNotice(ctx context.Context, req *game.GetGameNoticeReq) (res *game.GetGameNoticeRes, err error) { + res = new(game.GetGameNoticeRes) + g.Try(ctx, func(ctx context.Context) { + model := dao.GameNotice.Ctx(ctx) + model = model.Where("notice_type = ?", req.NoticeType) + model = model.Where("channel=? ", req.Channel) + var noticeList []*entity.GameNotice + var count int + count, err = model.Count() + if count == 0 { + model = dao.GameNotice.Ctx(ctx) + model = model.Where("notice_type = ?", req.NoticeType) + model = model.Where("channel=? ", 0) + } + err = model.Scan(¬iceList) + if len(noticeList) > 1 { + for _, v := range noticeList { + if v.Channel == req.Channel { + res.Content = v.Content + res.Status = v.Status + break + } + } + } else if len(noticeList) == 1 { + res.Content = noticeList[0].Content + res.Status = noticeList[0].Status + res.Id = noticeList[0].Id + } else if len(noticeList) == 0 { + res.Content = "" + res.Status = 1 + res.Id = 0 + } + if res.Status == 2 { + ip := libUtils.GetClientIp(ctx) + whiteIps, e := internal.GetWhiteList(ctx) + g.Log().Debugf(ctx, "ip"+ip, len(whiteIps), e) + for _, v := range whiteIps { + g.Log().Debugf(ctx, "whiteIps"+v) + } + res.Status = 3 + for _, v := range whiteIps { + if v == ip { + res.Status = 1 + break + } + } + } + + }) + return + +} + +func (c *gameNoticeImpl) AddNotice(ctx context.Context, req *game.AddNoticeReq) (res *game.AddNoticeRes, err error) { + if req.Id > 0 { + err = g.Try(ctx, func(ctx context.Context) { + _, e := dao.GameNotice.Ctx(ctx).Where("id=", req.Id).Data(&do.GameNotice{ + Status: req.Status, + Content: req.Content, + }).Update() + liberr.ErrIsNil(ctx, e, "修改通知失败") + }) + + } else { + err = g.Try(ctx, func(ctx context.Context) { + _, e := dao.GameNotice.Ctx(ctx).Where("id=", req.Id).Insert(&do.GameNotice{ + Status: req.Status, + Content: req.Content, + NoticeType: req.NoticeType, + Channel: req.Channel, + }) + liberr.ErrIsNil(ctx, e, "插入通知失败") + }) + } + return +} +func (c *gameNoticeImpl) PopNotice(ctx context.Context, req *game.PopReq) (res *game.PopRes, err error) { + mqttNotice := internal.MqttNotice{} + mqttNotice.Body.Uid = req.Uids + mqttNotice.Body.ModuleType = "broadcastMessage" + mqttNotice.Body.Content = req.Content + mqttNotice.Body.Time = 0 + mqttNotice.Body.Type = req.Type + mqttNotice.ModuleId = "webadmin" + mqttNotice.ReqId = 1 + var js []byte + js, err = json.Marshal(mqttNotice) + connectCh := make(chan bool) + server := "192.168.2.100:3005" + defer close(connectCh) + internal.SendMqtt(js, connectCh, server) + var result bool + for { + select { + case result = <-connectCh: + if result == false { + err = gerror.New("失败") + return + } else { + return + } + } + } +} diff --git a/internal/serviceGame/order.go b/internal/serviceGame/order.go index 5395f4d..5871708 100644 --- a/internal/serviceGame/order.go +++ b/internal/serviceGame/order.go @@ -2,8 +2,14 @@ package serviceGame import ( "context" + "crypto/md5" + "encoding/hex" + "encoding/json" + "fmt" + "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" "go.mongodb.org/mongo-driver/bson" + "math/rand" "time" "tyj_admin/api/v1/game" "tyj_admin/internal/model/entity" @@ -13,6 +19,9 @@ import ( type IGameOrder interface { GetOrders(ctx context.Context, req *game.OrderSearchReq) (res *game.OrderSearchRes, err error) GetOrderCount(ctx context.Context, req *game.OrderCountReq) (res *game.OrderCountRes, err error) + ChangeCoin(ctx context.Context, req *game.AddCoinReq) (res *game.AddCoinRes, err error) + AndroidDeposit(ctx context.Context, req *game.OrderDepositReq) (res *game.OrderDepositRes, err error) + IosDeposit(ctx context.Context, req *game.OrderDepositReq) (res *game.OrderDepositRes, err error) } type gameOrderImpl struct { @@ -24,6 +33,120 @@ func GameOrder() IGameOrder { return &gameOrderService } +func (o gameOrderImpl) ChangeCoin(ctx context.Context, req *game.AddCoinReq) (res *game.AddCoinRes, err error) { + res = new(game.AddCoinRes) + mqttMoney := internal.MqttChangeMoney{} + mqttMoney.Body.Money = req.Amount + mqttMoney.Body.Uids = req.Uid + mqttMoney.Body.Type = req.AmountType + mqttMoney.Body.ModuleType = "changeMoney" + mqttMoney.ModuleId = "webadmin" + mqttMoney.ReqId = 1 + js, err := json.Marshal(mqttMoney) + connectCh := make(chan bool) + server := "192.168.2.100:3005" + internal.SendMqttMoney(js, connectCh, server) + defer close(connectCh) + var result bool + for { + select { + case result = <-connectCh: + if result == false { + err = gerror.New("失败") + return + } else { + return + } + } + } + +} + +type AndroIdRecharge struct { + Server int32 `json:"server"` + RechargeId int32 `json:"rechargeId"` + CpOrderId string `json:"cpOrderId"` + OrderId string `json:"orderId"` + Timestamp int64 `json:"timestamp"` + Account string `json:"account"` + Channel int32 `json:"channel"` + Amount int32 `json:"amount"` +} + +type IosRecharge struct { + OrderId string `json:"orderId"` + Account string `json:"uid"` + Receipt string `json:"receipt"` + Server int32 `json:"server"` + TimeStamp int64 `json:"timeStamp"` + ItemId int32 `json:"itemId"` + Gm string `json:"gm"` + Token string `json:"token"` +} + +type DepositResult struct { + Status int `json:"status"` + Code interface{} `json:"code"` + Msg string `json:"msg"` +} + +func (o gameOrderImpl) AndroidDeposit(ctx context.Context, req *game.OrderDepositReq) (res *game.OrderDepositRes, err error) { + orderId := fmt.Sprintf("GM%v%v%v", req.Account, time.Now().UnixMilli(), rand.Int()) + recharge := AndroIdRecharge{} + recharge.Server = req.ServerId + recharge.RechargeId = req.DepositId + recharge.CpOrderId = orderId + recharge.OrderId = orderId + recharge.Timestamp = time.Now().Unix() + recharge.Account = req.Account + if req.DepositId == 1001 { + recharge.Amount = 6 + } else if req.DepositId == 1002 { + recharge.Amount = 30 + } else if req.DepositId == 1003 { + recharge.Amount = 68 + } + js, err := json.Marshal(recharge) + ip := internal.ServerConfig[0]["topServer"].(string) + rs, err := g.Client().Post(ctx, ip+"/recharge", js) + result := DepositResult{} + err = json.Unmarshal(rs.ReadAll(), &result) + if result.Status == 2 { + err = nil + return + } + err = gerror.New(result.Msg) + return +} + +func (o gameOrderImpl) IosDeposit(ctx context.Context, req *game.OrderDepositReq) (res *game.OrderDepositRes, err error) { + //orderId := "GM" + req.Account + time.Now().String() + strconv.Itoa(rand.Int()) + orderId := fmt.Sprintf("GM%v%v%v", req.Account, time.Now().UnixMilli(), rand.Int()) + recharge := IosRecharge{} + recharge.OrderId = orderId + recharge.Account = req.Account + recharge.Receipt = "receipt" + recharge.Server = req.ServerId + recharge.TimeStamp = time.Now().Unix() + recharge.ItemId = req.DepositId + recharge.Gm = "3EAB9E4B6F9CB7255A27D2084D78C2FB" + buf := fmt.Sprintf("%v%v%v%v%v%vdadf31fd9b66bd847609247800433e6c", recharge.OrderId, recharge.ItemId, recharge.Receipt, recharge.Server, recharge.TimeStamp, recharge.Account) + m := md5.New() + m.Write([]byte(buf)) + recharge.Token = hex.EncodeToString(m.Sum(nil)) + js, err := json.Marshal(recharge) + ip := internal.ServerConfig[0]["topServer"].(string) + rs, err := g.Client().Post(ctx, ip+"/recharge", js) + result := DepositResult{} + err = json.Unmarshal(rs.ReadAll(), &result) + if result.Status == 2 { + err = nil + return + } + err = gerror.New(result.Msg) + return +} + func (o gameOrderImpl) GetOrders(ctx context.Context, req *game.OrderSearchReq) (res *game.OrderSearchRes, err error) { account := req.Account role := new(entity.RoleDetail) @@ -84,7 +207,7 @@ func (o gameOrderImpl) GetOrderCount(ctx context.Context, req *game.OrderCountRe } g.Try(ctx, func(ctx context.Context) { - res.Orders, err = internal.GetorderCount(ctx, filter, req.ServerId) + res.Orders, err = internal.GetOrderCount(ctx, filter, req.ServerId) }) return