From 98ad96147d4a538112af36809eebc4daa956d0b7 Mon Sep 17 00:00:00 2001 From: linquan <349589071@qq.com> Date: Tue, 15 Jul 2025 13:42:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=BF=E5=91=8A=EF=BC=8C=E7=83=AD=E9=87=8D?= =?UTF-8?q?=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/game/serverConfig.go | 10 ++ internal/controller/game_login_url.go | 5 + internal/controller/game_pub.go | 11 +- internal/controller/sys_login.go | 25 +++- internal/service/sys_user.go | 18 +-- internal/serviceGame/advertisement.go | 6 + .../serviceGame/internal/advertisement.go | 108 ++++++++++++++---- internal/serviceGame/loginUrl.go | 71 ++++++++---- test/test.go | 1 + test/testMongo.go | 69 +++++++++++ 10 files changed, 258 insertions(+), 66 deletions(-) create mode 100644 test/testMongo.go diff --git a/api/v1/game/serverConfig.go b/api/v1/game/serverConfig.go index d4432b6..2b9b6b8 100644 --- a/api/v1/game/serverConfig.go +++ b/api/v1/game/serverConfig.go @@ -103,3 +103,13 @@ type GetServerConfigRes struct { InnerIp string `json:"innerIp" description:""` CreateTime int64 `json:"createTime" description:""` } + +type ServerReloadDllReq struct { + g.Meta `path:"/server/reloadDll" tags:"server" method:"get" summary:"reloadDll"` + Server string `p:"serverId"` +} + +type ServerReloadDllRes struct { + g.Meta `mime:"application/json"` + Message string `json:"message"` +} diff --git a/internal/controller/game_login_url.go b/internal/controller/game_login_url.go index 4234318..78471e7 100644 --- a/internal/controller/game_login_url.go +++ b/internal/controller/game_login_url.go @@ -76,3 +76,8 @@ func (c *loginUrlController) ServerUpdateMsg(ctx context.Context, req *game.Serv res, err = serviceGame.GameLoginUrl().ServerUpdateMsg(ctx, req) return } + +func (c *loginUrlController) ServerReloadDll(ctx context.Context, req *game.ServerReloadDllReq) (res *game.ServerReloadDllRes, err error) { + res, err = serviceGame.GameLoginUrl().ServerReloadDll(ctx, req) + return +} diff --git a/internal/controller/game_pub.go b/internal/controller/game_pub.go index 4af5bfe..f7ffd67 100644 --- a/internal/controller/game_pub.go +++ b/internal/controller/game_pub.go @@ -2,7 +2,6 @@ package controller import ( "context" - "github.com/gogf/gf/v2/encoding/gjson" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" "log" @@ -144,35 +143,35 @@ func (c *pubController) AdvertiseHugeAmount(ctx context.Context, req *game.Adver } func (c *pubController) AdvertiseHugeAmount1(ctx context.Context, req *game.AdvertiseHA1Req) (res *game.AdvertiseHA1Res, err error) { - log.Print("AdvertiseHugeAmount1", gjson.MustEncodeString(req)) + //log.Print("AdvertiseHugeAmount1", gjson.MustEncodeString(req)) res = new(game.AdvertiseHA1Res) err = serviceGame.Advertisement().AdvertiseHugeAmount1(ctx, req.Androidid, req.Idfa, req.Os, req.Callback, req.TIMESTAMP) return } func (c *pubController) AdvertiseHugeAmount2(ctx context.Context, req *game.AdvertiseHA2Req) (res *game.AdvertiseHA2Res, err error) { - log.Print("AdvertiseHugeAmount2", gjson.MustEncodeString(req)) + //log.Print("AdvertiseHugeAmount2", gjson.MustEncodeString(req)) res = new(game.AdvertiseHA2Res) err = serviceGame.Advertisement().AdvertiseHugeAmount1(ctx, req.Androidid, req.Idfa, req.Os, req.Callback, req.TIMESTAMP) return } func (c *pubController) AdvertiseHugeAmount3(ctx context.Context, req *game.AdvertiseHA3Req) (res *game.AdvertiseHA3Res, err error) { - log.Print("AdvertiseHugeAmount3", gjson.MustEncodeString(req)) + //log.Print("AdvertiseHugeAmount3", gjson.MustEncodeString(req)) res = new(game.AdvertiseHA3Res) err = serviceGame.Advertisement().AdvertiseHugeAmount1(ctx, req.Androidid, req.Idfa, req.Os, req.Callback, req.TIMESTAMP) return } func (c *pubController) AdvertiseHugeAmount4(ctx context.Context, req *game.AdvertiseHA4Req) (res *game.AdvertiseHA4Res, err error) { - log.Print("AdvertiseHugeAmount4", gjson.MustEncodeString(req)) + //log.Print("AdvertiseHugeAmount4", gjson.MustEncodeString(req)) res = new(game.AdvertiseHA4Res) err = serviceGame.Advertisement().AdvertiseHugeAmount1(ctx, req.Androidid, req.Idfa, req.Os, req.Callback, req.TIMESTAMP) return } func (c *pubController) AdvertiseHugeAmount5(ctx context.Context, req *game.AdvertiseHA5Req) (res *game.AdvertiseHA5Res, err error) { - log.Print("AdvertiseHugeAmount5", gjson.MustEncodeString(req)) + //log.Print("AdvertiseHugeAmount5", gjson.MustEncodeString(req)) res = new(game.AdvertiseHA5Res) err = serviceGame.Advertisement().AdvertiseHugeAmount1(ctx, req.Androidid, req.Idfa, req.Os, req.Callback, req.TIMESTAMP) return diff --git a/internal/controller/sys_login.go b/internal/controller/sys_login.go index e3e6f76..0326585 100644 --- a/internal/controller/sys_login.go +++ b/internal/controller/sys_login.go @@ -223,13 +223,13 @@ func (c *loginController) MobileCode(ctx context.Context, req *system.MobileCode }) return } - liberr.ValueIsNil(user, "手机验证码错误") + liberr.ValueIsNil(user, "手机号错误") code, err := service.User().GetCodeByMobile(ctx, req.Phone) if err != nil { // 保存登录失败的日志信息 service.SysLoginLog().Invoke(ctx, &model.LoginLogParams{ Status: 0, - Username: req.Phone + "_" + code, + Username: req.Phone, Ip: ip, UserAgent: userAgent, Msg: err.Error(), @@ -250,6 +250,14 @@ func (c *loginController) MobileCode(ctx context.Context, req *system.MobileCode }) return } + service.SysLoginLog().Invoke(ctx, &model.LoginLogParams{ + Status: 0, + Username: req.Phone, + Ip: ip, + UserAgent: userAgent, + Msg: "获取验证码成功!" + "_" + code, + Module: "系统后台", + }) return } @@ -348,13 +356,13 @@ func (c *loginController) EmailCode(ctx context.Context, req *system.EmailCodeRe }) return } - liberr.ValueIsNil(user, "验证码错误") + liberr.ValueIsNil(user, "邮箱地址错误") code, err := service.User().GetCodeByEmail(ctx, req.Email) if err != nil { // 保存登录失败的日志信息 service.SysLoginLog().Invoke(ctx, &model.LoginLogParams{ Status: 0, - Username: req.Email + "_" + code, + Username: req.Email, Ip: ip, UserAgent: userAgent, Msg: err.Error(), @@ -375,5 +383,14 @@ func (c *loginController) EmailCode(ctx context.Context, req *system.EmailCodeRe }) return } + + service.SysLoginLog().Invoke(ctx, &model.LoginLogParams{ + Status: 0, + Username: req.Email, + Ip: ip, + UserAgent: userAgent, + Msg: "获取验证码成功!" + "_" + code, + Module: "系统后台", + }) return } diff --git a/internal/service/sys_user.go b/internal/service/sys_user.go index bde4ed0..24452c9 100644 --- a/internal/service/sys_user.go +++ b/internal/service/sys_user.go @@ -168,7 +168,7 @@ func (s *userImpl) GetAdminUserByPhone(ctx context.Context, req *system.UserLogi err = g.Try(ctx, func(ctx context.Context) { user, err = s.GetUserByMobile(ctx, req.Phone) liberr.ErrIsNil(ctx, err) - liberr.ValueIsNil(user, "手机验证码错误") + liberr.ValueIsNil(user, "手机号错误") //账号状态 if user.UserStatus == 0 { liberr.ErrIsNil(ctx, gerror.New("账号已被冻结")) @@ -180,7 +180,7 @@ func (s *userImpl) GetAdminUserByPhone(ctx context.Context, req *system.UserLogi if ok { log.Printf("GetAdminUserByPhone >>> Phone:%s, time %s ", req.Phone, fmt.Sprint(model.Time.Unix())+"--"+fmt.Sprint(gtime.Now().Unix())) } - liberr.ErrIsNil(ctx, gerror.New("手机验证码错误")) + liberr.ErrIsNil(ctx, gerror.New("验证码过期")) } if libUtils.EncryptPassword(req.Code+fmt.Sprint(model.Time.Unix()), user.UserSalt) != model.Password { liberr.ErrIsNil(ctx, gerror.New("手机验证码错误")) @@ -201,7 +201,7 @@ func (s *userImpl) GetAdminUserByEmail(ctx context.Context, req *system.UserLogi err = g.Try(ctx, func(ctx context.Context) { user, err = s.GetUserByEmail(ctx, req.Email) liberr.ErrIsNil(ctx, err) - liberr.ValueIsNil(user, "验证码错误") + liberr.ValueIsNil(user, "邮箱地址错误") //账号状态 if user.UserStatus == 0 { liberr.ErrIsNil(ctx, gerror.New("账号已被冻结")) @@ -213,7 +213,7 @@ func (s *userImpl) GetAdminUserByEmail(ctx context.Context, req *system.UserLogi if ok { log.Printf("GetAdminUserByEmail >>> Email:%s, time %s ", req.Email, fmt.Sprint(model.Time.Unix())+"--"+fmt.Sprint(gtime.Now().Unix())) } - liberr.ErrIsNil(ctx, gerror.New("验证码错误")) + liberr.ErrIsNil(ctx, gerror.New("验证码过期")) } if libUtils.EncryptPassword(req.Code+fmt.Sprint(model.Time.Unix()), user.UserSalt) != model.Password { liberr.ErrIsNil(ctx, gerror.New("验证码错误")) @@ -230,7 +230,7 @@ func (s *userImpl) GetUserByUsername(ctx context.Context, userName string) (user err = g.Try(ctx, func(ctx context.Context) { user = &model2.LoginUserRes{} err = dao.SysUser.Ctx(ctx).Fields(user).Where(dao.SysUser.Columns().UserName, userName).Scan(user) - liberr.ErrIsNil(ctx, err, "账号密码错误") + liberr.ErrIsNil(ctx, err, "账号错误") }) return } @@ -240,7 +240,7 @@ func (s *userImpl) GetUserByMobile(ctx context.Context, mobile string) (user *mo err = g.Try(ctx, func(ctx context.Context) { user = &model2.LoginUserRes{} err = dao.SysUser.Ctx(ctx).Fields(user).Where(dao.SysUser.Columns().Mobile, mobile).Scan(user) - liberr.ErrIsNil(ctx, err, "手机验证码错误") + liberr.ErrIsNil(ctx, err, "手机号错误") }) return } @@ -250,7 +250,7 @@ func (s *userImpl) GetUserByEmail(ctx context.Context, email string) (user *mode err = g.Try(ctx, func(ctx context.Context) { user = &model2.LoginUserRes{} err = dao.SysUser.Ctx(ctx).Fields(user).Where(dao.SysUser.Columns().UserEmail, email).Scan(user) - liberr.ErrIsNil(ctx, err, "验证码错误") + liberr.ErrIsNil(ctx, err, "邮箱地址错误") }) return } @@ -260,7 +260,7 @@ func (s *userImpl) GetCodeByMobile(ctx context.Context, mobile string) (code str err = g.Try(ctx, func(ctx context.Context) { user, err := s.GetUserByMobile(ctx, mobile) liberr.ErrIsNil(ctx, err) - liberr.ValueIsNil(user, "手机验证码错误") + liberr.ValueIsNil(user, "手机号错误") //账号状态 if user.UserStatus == 0 { liberr.ErrIsNil(ctx, gerror.New("账号已被冻结")) @@ -286,7 +286,7 @@ func (s *userImpl) GetCodeByEmail(ctx context.Context, email string) (code strin err = g.Try(ctx, func(ctx context.Context) { user, err := s.GetUserByEmail(ctx, email) liberr.ErrIsNil(ctx, err) - liberr.ValueIsNil(user, "验证码错误") + liberr.ValueIsNil(user, "邮箱地址错误") //账号状态 if user.UserStatus == 0 { liberr.ErrIsNil(ctx, gerror.New("账号已被冻结")) diff --git a/internal/serviceGame/advertisement.go b/internal/serviceGame/advertisement.go index 262ed2c..3c91596 100644 --- a/internal/serviceGame/advertisement.go +++ b/internal/serviceGame/advertisement.go @@ -66,6 +66,12 @@ func (g *advertisementImpl) AdvertiseHugeAmount1(ctx context.Context, androidId, if osInt != 0 && osInt != 1 { return errors.New("系统类型错误!") } + if osInt == 1 && idfa == "__IDFA__" { + return + } + if osInt == 0 && androidId == "__ANDROIDID__" { + return + } _, err = dao.AdvertisementOceanegine.Ctx(ctx).Insert(do.AdvertisementOceanegine{ AdvAndroidId: androidId, Idfa: idfa, diff --git a/internal/serviceGame/internal/advertisement.go b/internal/serviceGame/internal/advertisement.go index 5f48496..65fe545 100644 --- a/internal/serviceGame/internal/advertisement.go +++ b/internal/serviceGame/internal/advertisement.go @@ -98,7 +98,6 @@ func sendMsgHugeAmount(ctx context.Context, url string, data map[string]interfac if err != nil { return "", err } - g.Log().Info(ctx, "sendMsgHugeAmount - res: ", bytes) src := string(bytes.ReadAll()) tmp, err := gcharset.ToUTF8("UTF-8", src) if err != nil { @@ -109,7 +108,7 @@ func sendMsgHugeAmount(ctx context.Context, url string, data map[string]interfac } func AttributionHugeAmount(ctx context.Context, req *game.ATHAReq) (res *game.ATHARes, err error) { - log.Printf("AttributionHugeAmount: %s", gjson.MustEncodeString(req)) + //log.Printf("AttributionHugeAmount: %s", gjson.MustEncodeString(req)) data := map[string]interface{}{ "platform": req.Platform, // ios或android "package_name": req.PackageName, @@ -118,19 +117,37 @@ func AttributionHugeAmount(ctx context.Context, req *game.ATHAReq) (res *game.AT var adData []entity.AdvertisementOceanegine model := dao.AdvertisementOceanegine.Ctx(ctx).Order("last_touch_time desc") if req.Platform == "android" { - _ = model.Where("adv_android_id=?", req.AndroidId).Scan(&adData) + if req.AndroidId != "" { + _ = model.Where("adv_android_id=?", req.AndroidId).Scan(&adData) + } if len(adData) == 0 { log.Printf("AttributionHugeAmount: adData is nil %s", gjson.MustEncodeString(req)) + err = errors.New("account is nil") return } data["android_id"] = req.AndroidId } else if req.Platform == "ios" { - _ = model.Where("idfa=?", req.Idfa).Scan(&adData) + if req.Idfa != "" { + _ = model.Where("idfa=?", req.Idfa).Scan(&adData) + } if len(adData) == 0 { - log.Printf("AttributionHugeAmount: adData is nil %s", gjson.MustEncodeString(req)) - return + if req.Idfv != "" { + _ = model.Where("adv_idfv=?", req.Idfv).Scan(&adData) + } + if len(adData) == 0 { + log.Printf("AttributionHugeAmount: adData is nil %s", gjson.MustEncodeString(req)) + err = errors.New("account is nil") + return + } } data["idfv"] = req.Idfv + } else { + err = errors.New("platform is error " + req.Platform) + return + } + if len(adData) == 0 || adData[0].CallbackParam == "" { + err = errors.New("无广告!") + return } url := "https://analytics.oceanengine.com/sdk/app/attribution" @@ -146,48 +163,79 @@ func AttributionHugeAmount(ctx context.Context, req *game.ATHAReq) (res *game.AT if json != nil && json.Get("code").Int() == 0 { callbackUrl := json.Get("callback_url").String() callbackParam := json.Get("callback_param").String() + androidId := json.Get("adv_android_id").String() + if androidId == "" { + androidId = req.AndroidId + } + idfa := json.Get("idfa").String() + if idfa == "" { + idfa = req.Idfa + } + advIdfv := json.Get("adv_idfv").String() + if advIdfv == "" { + advIdfv = req.Idfv + } lastTouchTime := json.Get("last_touch_time").Int64() - advertiseData := do.AdvertisementOceanegine{AdvAndroidId: req.AndroidId, Idfa: req.Idfa, AdvIdfv: req.Idfv, + advertiseData := do.AdvertisementOceanegine{AdvAndroidId: androidId, Idfa: idfa, AdvIdfv: advIdfv, CallbackUrl: callbackUrl, CallbackParam: callbackParam, LastTouchTime: lastTouchTime * 1000} if req.Platform == "android" { advertiseData.Os = 0 } else if req.Platform == "ios" { advertiseData.Os = 1 } - _, _ = dao.AdvertisementOceanegine.Ctx(ctx).Insert(advertiseData) + if callbackParam == "" { + return + } + _, err = dao.AdvertisementOceanegine.Ctx(ctx).Insert(advertiseData) } else { - return nil, errors.New("获取失败") + err = errors.New("获取失败") + return } return } func ConversionHugeAmount(ctx context.Context, req *game.CSHAReq) (res *game.CSHARes, err error) { - log.Printf("ConversionHugeAmount: %s", gjson.MustEncodeString(req)) + //log.Printf("ConversionHugeAmount: %s", gjson.MustEncodeString(req)) var adData []entity.AdvertisementOceanegine device := map[string]interface{}{ "platform": req.Platform, } model := dao.AdvertisementOceanegine.Ctx(ctx).Order("last_touch_time desc") if req.Platform == "android" { - _ = model.Where("adv_android_id=?", req.Id).Scan(&adData) + if req.Id != "" { + _ = model.Where("adv_android_id=?", req.Id).Scan(&adData) + } if len(adData) == 0 { log.Printf("ConversionHugeAmount: adData is nil %s", gjson.MustEncodeString(req)) + err = errors.New("account is nil") return } device["android_id"] = req.Id - } else if req.Platform == "ios" && req.Idfa != "" { - _ = model.Where("idfa=?", req.Idfa).Scan(&adData) + } else if req.Platform == "ios" { + if req.Idfa != "" { + _ = model.Where("idfa=?", req.Idfa).Scan(&adData) + } if len(adData) == 0 { - log.Printf("ConversionHugeAmount: adData is nil %s", gjson.MustEncodeString(req)) - return + if req.Id != "" { + _ = model.Where("adv_idfv=?", req.Id).Scan(&adData) + } + if len(adData) == 0 { + log.Printf("ConversionHugeAmount: adData is nil %s", gjson.MustEncodeString(req)) + err = errors.New("account is nil") + return + } } device["idfv"] = req.Id } else { - return nil, errors.New("") + err = errors.New("platform is error " + req.Platform) + return + } + if adData[0].CallbackParam == "" { + err = errors.New("callbackParam is nil") + return } - // log.Printf("ConversionHugeAmount: adData: %s", gjson.MustEncodeString(adData)) ad := map[string]interface{}{ "callback": adData[0].CallbackParam, } @@ -213,21 +261,32 @@ func ConversionHugeAmount(ctx context.Context, req *game.CSHAReq) (res *game.CSH } data["properties"] = properties } - // log.Printf("ConversionHugeAmount: json.Unmarshal([]byte(req.Properties), &properties): %s", gjson.MustEncodeString(properties)) + //log.Printf("ConversionHugeAmount: %s", gjson.MustEncodeString(data)) url := "https://analytics.oceanengine.com/api/v2/conversion" - _, _ = sendMsgHugeAmount(ctx, url, data) + tmp, err := sendMsgHugeAmount(ctx, url, data) + if err != nil { + return + } + json, err := gjson.DecodeToJson(tmp) + if json != nil && json.Get("code").Int() != 0 { + err = errors.New(json.Get("message").String()) + } return } func AdvertiseHugeAmount(ctx context.Context, req *game.AdvertiseHAReq) (res *game.AdvertiseHARes, err error) { req.Platform = strings.ToLower(req.Platform) - log.Printf("AdvertiseHugeAmount: %s", gjson.MustEncodeString(req)) if req.Platform == "android" { return } if req.Platform == "iphoneplayer" { req.Platform = "ios" } + go HugeAmount(ctx, req) + return +} + +func HugeAmount(ctx context.Context, req *game.AdvertiseHAReq) { req2 := game.CSHAReq{ Platform: req.Platform, Id: req.Id, @@ -236,8 +295,11 @@ func AdvertiseHugeAmount(ctx context.Context, req *game.AdvertiseHAReq) (res *ga Properties: req.Properties, } req2.Id = req.Id - _, err = ConversionHugeAmount(ctx, &req2) - + _, err := ConversionHugeAmount(ctx, &req2) + if err != nil { + log.Printf("AdvertiseHugeAmount: ConversionHugeAmount err- %s, req: %s", err.Error(), gjson.MustEncodeString(req2)) + return + } req1 := game.ATHAReq{ Platform: req.Platform, PackageName: req.PackageName, @@ -248,10 +310,12 @@ func AdvertiseHugeAmount(ctx context.Context, req *game.AdvertiseHAReq) (res *ga } else if req.Platform == "ios" { req1.Idfv = req.Id } else { + log.Printf("AdvertiseHugeAmount: plarform err- %s, req.Platform: %s", err.Error(), req.Platform) return } _, err = AttributionHugeAmount(ctx, &req1) if err != nil { + log.Printf("AdvertiseHugeAmount: AttributionHugeAmount err- %s, req: %s", err.Error(), gjson.MustEncodeString(req1)) return } return diff --git a/internal/serviceGame/loginUrl.go b/internal/serviceGame/loginUrl.go index bb0a5d0..f2728ae 100644 --- a/internal/serviceGame/loginUrl.go +++ b/internal/serviceGame/loginUrl.go @@ -35,6 +35,7 @@ type IGameLoginUrl interface { GetServerVersionList(ctx context.Context, req *game.GetServerVersionListReq) (res *game.GetServerVersionListRes, err error) UpdateRouter(ctx context.Context, req *game.AddRouterReq) (res *game.AddRouterRes, err error) ServerUpdateMsg(ctx context.Context, req *game.ServerUpdateMsgReq) (res *game.ServerUpdateMsgRes, err error) + ServerReloadDll(ctx context.Context, req *game.ServerReloadDllReq) (res *game.ServerReloadDllRes, err error) } type gameLoginUrlImpl struct { @@ -151,7 +152,7 @@ func (c *gameLoginUrlImpl) GetGameLoginUrl(ctx context.Context, req *game.GetGam g.Log().Debugf(ctx, "GetWhiteList -> ", req.Account, gjson.MustEncodeString(list), ip) err = g.Try(ctx, func(ctx context.Context) { var LoginUrlList []*entity.GameLoginUrl - err = dao.GameLoginUrl.Ctx(ctx).Where("isShow=?", 1).Scan(&LoginUrlList) + err = dao.GameLoginUrl.Ctx(ctx).Scan(&LoginUrlList) var unitData []*entity.GameUnit if req.Account != "" { err = dao.GameUnit.Ctx(ctx).Where("channel=?", req.Channel).Where("account=?", account).Scan(&unitData) @@ -178,29 +179,30 @@ func (c *gameLoginUrlImpl) GetGameLoginUrl(ctx context.Context, req *game.GetGam } channel += ";" for _, v := range LoginUrlList { - if v.IsShow != 1 { + if !strings.Contains(v.Channel, channel) { continue } - if !strings.Contains(v.Channel, channel) { + if v.IsShow != 1 && !(utils.ContainsWhiteList(list, ip) || utils.ContainsWhiteList(list, req.Channel)) { continue } var data = game.LoginUrlData{Id: v.Id, Host: v.Host, Port: v.Port, Difficulty: v.Difficulty, IsNew: v.IsNew, Recommend: v.Recommend, Name: v.Name, State: v.State, Area: v.Area, CreateTime: v.CDate.Unix()} - if data.State == consts.Login_URL_STATE_WHITE { + if data.State == consts.Login_URL_STATE_Maintenance { + data.Host = consts.DEFAULT_HOST + } else if data.State == consts.Login_URL_STATE_WHITE { if utils.ContainsWhiteList(list, ip) || utils.ContainsWhiteList(list, req.Channel) { data.State = consts.Login_URL_STATE_NORMAL } else { - data.State = consts.Login_URL_STATE_Maintenance data.Host = consts.DEFAULT_HOST - } - } - if data.State == consts.Login_URL_STATE_BLACK { - if !utils.ContainsBlackList(blackList, req.Channel) || utils.ContainsWhiteList(list, ip) { - data.State = consts.Login_URL_STATE_NORMAL - } else { data.State = consts.Login_URL_STATE_Maintenance + } + } else if data.State == consts.Login_URL_STATE_BLACK { + if utils.ContainsBlackList(blackList, req.Channel) || utils.ContainsBlackList(blackList, ip) { data.Host = consts.DEFAULT_HOST + data.State = consts.Login_URL_STATE_Maintenance + } else { + data.State = consts.Login_URL_STATE_NORMAL } } for _, v1 := range unitData { @@ -353,31 +355,23 @@ func (c *gameLoginUrlImpl) GetServerVersionList(ctx context.Context, req *game.G } func (c *gameLoginUrlImpl) ServerUpdateMsg(ctx context.Context, req *game.ServerUpdateMsgReq) (res *game.ServerUpdateMsgRes, err error) { - //url := "https://open.feishu.cn/open-apis/bot/v2/hook/4033c60d-08b4-4d28-8eab-1d4159df98ed" - //url := "https://open.feishu.cn/open-apis/bot/v2/hook/6c2ebace-6815-49a8-9964-eb580ec0a56b" url := internal.Webhook if len(url) == 0 { return nil, errors.New("地址为空!") } - normal_v2 := map[string]interface{}{"default": "normal", "pc": "normal", "mobile": "heading"} - text_size := map[string]interface{}{"normal_v2": normal_v2} - style := map[string]interface{}{"text_size": text_size} + + normalV2 := map[string]interface{}{"default": "normal", "pc": "normal", "mobile": "heading"} + textSize := map[string]interface{}{"normal_v2": normalV2} + style := map[string]interface{}{"text_size": textSize} config := map[string]interface{}{"update_multi": true, "style": style} - elements := []map[string]interface{}{ - { - "tag": "markdown", - "content": req.Content, - "text_align": "left", - "text_size": "normal_v2", - "margin": "0px 0px 0px 0px", - }, - } + elements := []map[string]interface{}{{"tag": "markdown", "content": req.Content, "text_align": "left", "text_size": "normal_v2", "margin": "0px 0px 0px 0px"}} body1 := map[string]interface{}{"direction": "vertical", "padding": "12px 12px 12px 12px", "elements": elements} title := map[string]interface{}{"tag": "plain_text", "content": req.Title} subtitle := map[string]interface{}{"tag": "plain_text", "content": req.Subtitle} header := map[string]interface{}{"title": title, "template": "blue", "subtitle": subtitle, "padding": "12px 12px 12px 12px"} card := map[string]interface{}{"schema": "2.0", "config": config, "body": body1, "header": header} body := map[string]interface{}{"msg_type": "interactive", "card": card} + fmt.Println("GetOnlineList - body: ", gjson.MustEncodeString(body)) bytes := g.Client().PostBytes(ctx, url, gjson.MustEncodeString(body)) src := string(bytes) @@ -397,3 +391,30 @@ func (c *gameLoginUrlImpl) ServerUpdateMsg(ctx context.Context, req *game.Server } return } + +func (c *gameLoginUrlImpl) ServerReloadDll(ctx context.Context, req *game.ServerReloadDllReq) (res *game.ServerReloadDllRes, err error) { + res = new(game.ServerReloadDllRes) + res.Message = "发送失败" + ip := internal.ServerConfig[fmt.Sprint(req.Server)] + url := "http://" + ip + "/ReloadDll" + bytes := g.Client().GetBytes(ctx, url) + fmt.Println("ServerReloadDll: ", url, bytes) + src := string(bytes) + if g.IsEmpty(src) { + fmt.Println("ServerReloadDll: IsEmpty(src) err", url) + return + } + + srcCharset := "UTF-8" + tmp, _ := gcharset.ToUTF8(srcCharset, src) + json, err := gjson.DecodeToJson(tmp) + if err != nil { + fmt.Println("ServerReloadDll: DecodeToJson(tmp) err", url) + return + } + fmt.Println("ReloadDll - json: ", tmp) + if json.Get("Error").Int() == 200 { + res.Message = "发送成功" + } + return +} diff --git a/test/test.go b/test/test.go index bfd9319..76c54b0 100644 --- a/test/test.go +++ b/test/test.go @@ -24,6 +24,7 @@ const link = "mongodb://127.0.0.1:27017/PeachValley" const notAccount = false func main() { + //fmt.Println("参数: ", len(os.Args)) var model string diff --git a/test/testMongo.go b/test/testMongo.go new file mode 100644 index 0000000..1e6c3ce --- /dev/null +++ b/test/testMongo.go @@ -0,0 +1,69 @@ +package main + +import ( + "context" + "github.com/gogf/gf/v2/frame/g" + "github.com/qiniu/qmgo" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" + "log" +) + +var ( + MongoDatabaseList map[string]*qmgo.Database +) + +func main() { + ctx := context.Background() + initMongo(ctx) + for k, _ := range MongoDatabaseList { + findUnit(ctx, k) + } + +} + +func initMongo(ctx context.Context) { + mongoCfg, err := g.Cfg().Get(ctx, "game.mongo") + if err != nil { + return + } + config := mongoCfg.Maps() + + MongoDatabaseList = map[string]*qmgo.Database{} + for _, v := range config { + mongoclient, err := qmgo.NewClient(ctx, &qmgo.Config{Uri: v["link"].(string)}) + if err != nil { + log.Println("数据库: ", v["id"], ", 创建错误:", err.Error()) + continue + } + db := mongoclient.Database(v["name"].(string)) + MongoDatabaseList[v["id"].(string)] = db + } +} + +func findUnit(ctx context.Context, serverId string) { + query := bson.M{"$and": bson.A{bson.M{"Children.ConfigId": 845}, bson.M{"Children.Amount": bson.M{"$gt": 1000000}}}} + selectStores(ctx, serverId, query) +} + +func selectStores(ctx context.Context, serverId string, query bson.M) { + stores := []map[string]interface{}{} + MongoDatabaseList[serverId].Collection("StoreComponent").Find(ctx, query).All(&stores) + if len(stores) == 0 { + log.Printf("服务器编号[%s] 不存在数量!", serverId) + return + } + log.Printf("服务器编号[%s] 搜素长度: %d", serverId, len(stores)) + for _, v := range stores { + store := v["Children"].(primitive.A) + for _, v1 := range store { + item := v1.(map[string]interface{}) + if item["ConfigId"].(int32) == 845 && item["Amount"].(int32) > 1000000 { + log.Printf("服务器编号: %s, id: %d, 物品: %d, 数量: %d", serverId, v["_id"], item["ConfigId"], item["Amount"]) + break + } + } + + } + log.Printf("服务器编号[%s] 结束!", serverId) +}