playerMange.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package service
  2. import (
  3. "context"
  4. "log"
  5. "github.com/mhaya/game/game_cluster/internal/constant"
  6. "github.com/mhaya/game/game_cluster/internal/mdb"
  7. "github.com/mhaya/game/game_cluster/internal/mdb/models"
  8. "github.com/mhaya/game/game_cluster/nodes/webadmin/entity"
  9. "go.mongodb.org/mongo-driver/bson"
  10. "go.mongodb.org/mongo-driver/mongo/options"
  11. )
  12. type PlayerManage struct {
  13. }
  14. func NewPlayerManage() *PlayerManage {
  15. return &PlayerManage{}
  16. }
  17. // 获取玩家列表
  18. func (a *PlayerManage) List(ctx context.Context, req entity.PlayerListReq) ([]*entity.PlayerListResp, int64, error) {
  19. page := req.Page
  20. // 验证参数
  21. if page <= 0 {
  22. page = 1
  23. }
  24. pageSize := req.Size
  25. if pageSize <= 0 {
  26. pageSize = 10
  27. }
  28. // 构建查询条件
  29. filter := bson.M{}
  30. if req.UserName != "" {
  31. filter["userName"] = bson.M{"$regex": escapeRegex(req.UserName), "$options": "i"}
  32. }
  33. if req.NickName != "" {
  34. filter["nickName"] = bson.M{"$regex": escapeRegex(req.NickName), "$options": "i"}
  35. }
  36. if req.OpenId != "" {
  37. filter["openId"] = req.OpenId
  38. }
  39. if req.Pid != "" {
  40. filter["pid"] = req.Pid
  41. }
  42. if req.XID != "" {
  43. filter["xID"] = req.XID
  44. }
  45. if req.TonWall != "" {
  46. filter["tonWall"] = req.TonWall
  47. }
  48. if req.Email != "" {
  49. filter["email"] = req.Email
  50. }
  51. if req.LevelMin > 0 && req.LevelMax > 0 && req.LevelMin <= req.LevelMax {
  52. filter["level"] = bson.M{
  53. "$gte": req.LevelMin,
  54. "$lte": req.LevelMax,
  55. }
  56. }
  57. if req.Status > 0 {
  58. filter["status"] = req.Status
  59. }
  60. if req.LoginIP != "" {
  61. filter["loginIP"] = req.LoginIP
  62. }
  63. if req.JoinTimeMin > 0 && req.JoinTimeMax > 0 && req.JoinTimeMin <= req.JoinTimeMax {
  64. filter["joinTime"] = bson.M{
  65. "$gte": req.JoinTimeMin,
  66. "$lte": req.JoinTimeMax,
  67. }
  68. }
  69. // 设置分页选项
  70. skip := (page - 1) * pageSize
  71. limit := pageSize
  72. findOptions := options.Find().SetSkip(int64(skip)).SetLimit(int64(limit))
  73. // 执行查询
  74. cursor, err := mdb.MDB.Collection(constant.CNamePlayer).Find(ctx, filter, findOptions)
  75. if err != nil {
  76. return nil, 0, err
  77. }
  78. defer func() {
  79. if closeErr := cursor.Close(ctx); closeErr != nil {
  80. log.Printf("Error closing cursor: %v", closeErr)
  81. }
  82. }()
  83. // 解析结果
  84. results := make([]*entity.PlayerListResp, 0)
  85. for cursor.Next(ctx) {
  86. var result entity.PlayerListResp
  87. if err := cursor.Decode(&result); err != nil {
  88. return nil, 0, err
  89. }
  90. results = append(results, &result)
  91. }
  92. if err := cursor.Err(); err != nil {
  93. return nil, 0, err
  94. }
  95. count := 0
  96. playerServerLoadStats, err := NewAdmin().GetServerStatus(ctx)
  97. if err != nil {
  98. return nil, 0, err
  99. }
  100. for _, v := range playerServerLoadStats {
  101. count += int(v.TotalUser)
  102. }
  103. return results, int64(count), nil
  104. }
  105. // 获取玩家详情
  106. func (a *PlayerManage) PlayerInfo(ctx context.Context, req entity.PlayerInfoReq) (*entity.PlayerInfoResp, error) {
  107. var player models.Player
  108. err := mdb.MDB.Collection(constant.CNamePlayer).FindOne(context.Background(), bson.M{"userName": req.UserName}).Decode(&player)
  109. if err != nil {
  110. return nil, err
  111. }
  112. return &entity.PlayerInfoResp{
  113. UserName: player.UserName,
  114. OpenId: player.OpenId,
  115. UserNameMaybe: player.UserNameMaybe,
  116. NickName: player.NickName,
  117. Pid: player.Pid,
  118. XID: player.XID,
  119. TonWall: player.TonWall,
  120. Email: player.Email,
  121. Level: player.Level,
  122. Status: player.Status,
  123. LoginTime: player.LoginTime,
  124. LoginIP: player.LoginIP,
  125. JoinIP: player.JoinIP,
  126. JoinTime: player.JoinTime,
  127. Avatar: player.Avatar,
  128. IsRobot: player.IsRobot,
  129. IsLeader: player.IsLeader,
  130. IsVip: player.IsVip,
  131. Successions: player.Successions,
  132. MaxSuccessions: player.MaxSuccessions,
  133. PrevTime: player.PrevTime,
  134. UpdateTime: player.UpdateTime,
  135. IsDrawShare: player.Share.IsDrawShare,
  136. DrawShareTime: player.Share.DrawShareTime,
  137. FirstReward: player.FirstReward,
  138. }, nil
  139. }