123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- package models
- import (
- "context"
- mhayaTime "github.com/mhaya/extend/time"
- "github.com/mhaya/game/game_cluster/internal/code"
- "github.com/mhaya/game/game_cluster/internal/constant"
- "github.com/mhaya/game/game_cluster/internal/data"
- "github.com/mhaya/game/game_cluster/internal/guid"
- "github.com/mhaya/game/game_cluster/internal/mdb"
- "github.com/mhaya/game/game_cluster/internal/param"
- clog "github.com/mhaya/logger"
- "go.mongodb.org/mongo-driver/bson"
- "go.mongodb.org/mongo-driver/mongo"
- )
- type Account struct {
- UserName string `json:"username" bson:"userName"`
- Platform string `json:"platform" bson:"platform"`
- Channel string `json:"channel" bson:"channel"`
- OpenId string `json:"openId" bson:"openId"`
- JoinIp string `json:"joinip" bson:"JoinIp"`
- JoinTime int64 `json:"jointime" bson:"JoinTime"`
- }
- type HomeData struct {
- Item ItemBasePack `json:"item"` // 道具
- FirstItem FirstReward `json:"firstItem"` // 首次登录奖励
- RocketLv RocketLvProgress `json:"rocketLvProgress"` // 币安进度
- }
- type RocketLvProgress struct {
- Max int `json:"max"`
- Cur int `json:"cur"`
- }
- func (ac *Account) AccountRegisterOrLogin(req *param.LoginReq) (*Account, int32) {
- var account Account
- findFilter := bson.M{"openId": req.OpenID}
- err := mdb.MDB.Collection(constant.CNameAccount).FindOne(context.Background(), findFilter).Decode(&account)
- if err != nil && err != mongo.ErrNoDocuments {
- clog.Errorf("Failed to AccountRegisterOrLogin select err request: %v err = %v", req, err.Error())
- return nil, code.LoginError
- }
- // 设置IP 规则
- num, ok := SetPlayerBlacklistIpRecord(req.IP, req.OpenID)
- if ok {
- clog.Errorf("Failed to SetPlayerBlacklistIpRecord err request: %v,num:%v", req, num)
- return nil, code.LoginError
- }
- if account.OpenId != "" {
- if account.Platform == "on" {
- mdb.MDB.Collection(constant.CNameAccount).UpdateOne(context.Background(), findFilter, bson.M{"platform": req.Platform})
- // 统计新注册
- SetAppointDailyRecordNewUserRegisterHash(req.Platform, req.Channel, account.UserName, account.JoinIp, mhayaTime.CreateFromTimestamp(account.JoinTime).Unix(), DailyRecordNewRegistered)
- }
- return &account, code.OK
- }
- devAccountTable := &Account{
- UserName: guid.Next(),
- OpenId: req.OpenID,
- Platform: req.Platform,
- Channel: req.Channel,
- JoinIp: req.IP,
- JoinTime: mhayaTime.Now().Unix(),
- }
- _, err = mdb.MDB.Collection(constant.CNameAccount).InsertOne(context.Background(), devAccountTable)
- if err != nil {
- clog.Errorf("Failed to AccountRegisterOrLogin request: %v err = %v", devAccountTable, err.Error())
- return nil, code.LoginError
- }
- // 统计新注册
- SetDailyRecordNewUserRegisterHash(req.Platform, req.Channel, devAccountTable.UserName, req.IP, DailyRecordNewRegistered)
- // 新用户触发币安升级逻辑
- // 当前级别
- lvID, _ := mdb.RDB.Get(context.Background(), constant.RocketLvKey).Int()
- // 当前用户数
- userNum, _ := mdb.MDB.Collection(constant.PlayerTotalKey).CountDocuments(context.Background(), bson.M{})
- roConfig := data.RocketLvConfig.GetAll()
- // 当前经验
- var curExperience int64
- // 当前升级所需经验
- var curLvNeed int64
- for _, lvRow := range roConfig {
- if lvRow.ID == lvID {
- curLvNeed = int64(lvRow.LvNeed)
- break
- }
- curExperience += int64(lvRow.LvNeed)
- }
- if userNum-curExperience >= curLvNeed {
- // 触发升级
- curLvID, _ := mdb.RDB.Get(context.Background(), constant.RocketLvKey).Int()
- // 并发控制
- if lvID == curLvID {
- mdb.RDB.Incr(context.Background(), constant.RocketLvKey)
- }
- }
- return devAccountTable, code.OK
- }
|