account.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package models
  2. import (
  3. "context"
  4. mhayaTime "github.com/mhaya/extend/time"
  5. "github.com/mhaya/game/game_cluster/internal/code"
  6. "github.com/mhaya/game/game_cluster/internal/constant"
  7. "github.com/mhaya/game/game_cluster/internal/data"
  8. "github.com/mhaya/game/game_cluster/internal/guid"
  9. "github.com/mhaya/game/game_cluster/internal/mdb"
  10. "github.com/mhaya/game/game_cluster/internal/param"
  11. clog "github.com/mhaya/logger"
  12. "go.mongodb.org/mongo-driver/bson"
  13. "go.mongodb.org/mongo-driver/mongo"
  14. )
  15. type Account struct {
  16. UserName string `json:"username" bson:"userName"`
  17. Platform string `json:"platform" bson:"platform"`
  18. Channel string `json:"channel" bson:"channel"`
  19. OpenId string `json:"openId" bson:"openId"`
  20. JoinIp string `json:"joinip" bson:"JoinIp"`
  21. JoinTime int64 `json:"jointime" bson:"JoinTime"`
  22. }
  23. type HomeData struct {
  24. Item ItemBasePack `json:"item"` // 道具
  25. FirstItem FirstReward `json:"firstItem"` // 首次登录奖励
  26. RocketLv RocketLvProgress `json:"rocketLvProgress"` // 币安进度
  27. }
  28. type RocketLvProgress struct {
  29. Max int `json:"max"`
  30. Cur int `json:"cur"`
  31. }
  32. func (ac *Account) AccountRegisterOrLogin(req *param.LoginReq) (*Account, int32) {
  33. var account Account
  34. findFilter := bson.M{"openId": req.OpenID}
  35. err := mdb.MDB.Collection(constant.CNameAccount).FindOne(context.Background(), findFilter).Decode(&account)
  36. if err != nil && err != mongo.ErrNoDocuments {
  37. clog.Errorf("Failed to AccountRegisterOrLogin select err request: %v err = %v", req, err.Error())
  38. return nil, code.LoginError
  39. }
  40. // 设置IP 规则
  41. num, ok := SetPlayerBlacklistIpRecord(req.IP, req.OpenID)
  42. if ok {
  43. clog.Errorf("Failed to SetPlayerBlacklistIpRecord err request: %v,num:%v", req, num)
  44. return nil, code.LoginError
  45. }
  46. if account.OpenId != "" {
  47. if account.Platform == "on" {
  48. mdb.MDB.Collection(constant.CNameAccount).UpdateOne(context.Background(), findFilter, bson.M{"platform": req.Platform})
  49. // 统计新注册
  50. SetAppointDailyRecordNewUserRegisterHash(req.Platform, req.Channel, account.UserName, account.JoinIp, mhayaTime.CreateFromTimestamp(account.JoinTime).Unix(), DailyRecordNewRegistered)
  51. }
  52. return &account, code.OK
  53. }
  54. devAccountTable := &Account{
  55. UserName: guid.Next(),
  56. OpenId: req.OpenID,
  57. Platform: req.Platform,
  58. Channel: req.Channel,
  59. JoinIp: req.IP,
  60. JoinTime: mhayaTime.Now().Unix(),
  61. }
  62. _, err = mdb.MDB.Collection(constant.CNameAccount).InsertOne(context.Background(), devAccountTable)
  63. if err != nil {
  64. clog.Errorf("Failed to AccountRegisterOrLogin request: %v err = %v", devAccountTable, err.Error())
  65. return nil, code.LoginError
  66. }
  67. // 统计新注册
  68. SetDailyRecordNewUserRegisterHash(req.Platform, req.Channel, devAccountTable.UserName, req.IP, DailyRecordNewRegistered)
  69. // 新用户触发币安升级逻辑
  70. // 当前级别
  71. lvID, _ := mdb.RDB.Get(context.Background(), constant.RocketLvKey).Int()
  72. // 当前用户数
  73. userNum, _ := mdb.MDB.Collection(constant.PlayerTotalKey).CountDocuments(context.Background(), bson.M{})
  74. roConfig := data.RocketLvConfig.GetAll()
  75. // 当前经验
  76. var curExperience int64
  77. // 当前升级所需经验
  78. var curLvNeed int64
  79. for _, lvRow := range roConfig {
  80. if lvRow.ID == lvID {
  81. curLvNeed = int64(lvRow.LvNeed)
  82. break
  83. }
  84. curExperience += int64(lvRow.LvNeed)
  85. }
  86. if userNum-curExperience >= curLvNeed {
  87. // 触发升级
  88. curLvID, _ := mdb.RDB.Get(context.Background(), constant.RocketLvKey).Int()
  89. // 并发控制
  90. if lvID == curLvID {
  91. mdb.RDB.Incr(context.Background(), constant.RocketLvKey)
  92. }
  93. }
  94. return devAccountTable, code.OK
  95. }