123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- package service
- import (
- "context"
- "time"
- 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/mdb"
- "github.com/mhaya/game/game_cluster/internal/mdb/models"
- "github.com/mhaya/game/game_cluster/nodes/webadmin/common"
- "github.com/mhaya/game/game_cluster/nodes/webadmin/entity"
- mhayaLogger "github.com/mhaya/logger"
- "go.mongodb.org/mongo-driver/bson"
- "go.mongodb.org/mongo-driver/mongo"
- "go.mongodb.org/mongo-driver/mongo/options"
- )
- type PlayerManage struct {
- db *mongo.Database
- }
- func NewPlayerManage() *PlayerManage {
- return &PlayerManage{
- db: mdb.MDB,
- }
- }
- // 获取玩家列表
- func (a *PlayerManage) List(ctx context.Context, req entity.PlayerListReq) (*entity.PlayerListResp, *code.Result) {
- page, pageSize := checkPageParam(req.Page, req.Size)
- // 构建查询条件
- filter := bson.M{}
- if req.UserName != "" {
- filter["userName"] = bson.M{"$regex": escapeRegex(req.UserName), "$options": "i"}
- }
- if req.NickName != "" {
- filter["nickName"] = bson.M{"$regex": escapeRegex(req.NickName), "$options": "i"}
- }
- if req.OpenId != "" {
- filter["openId"] = req.OpenId
- }
- if req.Pid != "" {
- filter["pid"] = req.Pid
- }
- if req.XID != "" {
- filter["xID"] = req.XID
- }
- if req.TonWall != "" {
- filter["tonWall"] = req.TonWall
- }
- if req.Email != "" {
- filter["email"] = req.Email
- }
- if req.LevelMin > 0 && req.LevelMax == 0 {
- filter["level"] = bson.M{
- "$gte": req.LevelMin,
- "$lte": 1000, // 等级最大值
- }
- }
- if req.LevelMin > 0 && req.LevelMax > 0 && req.LevelMin <= req.LevelMax {
- filter["level"] = bson.M{
- "$gte": req.LevelMin,
- "$lte": req.LevelMax,
- }
- }
- if req.Status > 0 {
- filter["status"] = req.Status
- }
- if req.LoginIP != "" {
- filter["loginIP"] = req.LoginIP
- }
- if req.JoinTimeMin > 0 && req.JoinTimeMax > 0 && req.JoinTimeMin <= req.JoinTimeMax {
- filter["joinTime"] = bson.M{
- "$gte": req.JoinTimeMin,
- "$lte": req.JoinTimeMax,
- }
- }
- // 设置分页选项
- skip := (page - 1) * pageSize
- limit := pageSize
- findOptions := options.Find().SetSkip(int64(skip)).SetLimit(int64(limit))
- // 执行查询
- cursor, err := a.db.Collection(constant.CNamePlayer).Find(ctx, filter, findOptions)
- if err != nil {
- mhayaLogger.Warnf("List Find error:%v", err)
- return nil, common.NewResult(code.InternalError)
- }
- defer func() {
- if closeErr := cursor.Close(ctx); closeErr != nil {
- mhayaLogger.Warnf("Error closing cursor: %v", closeErr)
- }
- }()
- // 解析结果
- details := make([]*entity.PlayerListDetail, 0)
- for cursor.Next(ctx) {
- var detail entity.PlayerListDetail
- if err := cursor.Decode(&detail); err != nil {
- mhayaLogger.Warnf("List Decode error:%v", err)
- return nil, common.NewResult(code.InternalError)
- }
- details = append(details, &detail)
- }
- if err := cursor.Err(); err != nil {
- mhayaLogger.Warnf("List cursor error:%v", err)
- return nil, common.NewResult(code.InternalError)
- }
- count, codeResult := a.GetPlayerTotalCount()
- if codeResult != nil {
- mhayaLogger.Warnf("List GetPlayerTotalCount codeResult:%v", codeResult)
- return nil, codeResult
- }
- return &entity.PlayerListResp{
- Details: details,
- Total: count,
- }, nil
- }
- func (a *PlayerManage) GetPlayerTotalCount() (int64, *code.Result) {
- count := 0
- playerServerLoadStats, codeResult := NewAdmin().GetServerStatus(context.Background())
- if codeResult != nil {
- return 0, codeResult
- }
- for _, v := range playerServerLoadStats {
- count += int(v.TotalUser)
- }
- return int64(count), nil
- }
- // 获取玩家详情
- func (a *PlayerManage) PlayerInfo(ctx context.Context, req entity.PlayerInfoReq) (*entity.PlayerInfoResp, *code.Result) {
- var player models.Player
- err := a.db.Collection(constant.CNamePlayer).FindOne(context.Background(), bson.M{"userName": req.UserName}).Decode(&player)
- if err != nil {
- mhayaLogger.Warnf("PlayerInfo cursor error:%v", err)
- return nil, common.NewResult(code.InternalError)
- }
- return &entity.PlayerInfoResp{
- UserName: player.UserName,
- OpenId: player.OpenId,
- UserNameMaybe: player.UserNameMaybe,
- NickName: player.NickName,
- Pid: player.Pid,
- XID: player.XID,
- TonWall: player.TonWall,
- Email: player.Email,
- Level: player.Level,
- Status: player.Status,
- LoginTime: player.LoginTime,
- LoginIP: player.LoginIP,
- JoinIP: player.JoinIP,
- JoinTime: player.JoinTime,
- Avatar: player.Avatar,
- IsRobot: player.IsRobot,
- IsLeader: player.IsLeader,
- IsVip: player.IsVip,
- Successions: player.Successions,
- MaxSuccessions: player.MaxSuccessions,
- PrevTime: player.PrevTime,
- UpdateTime: player.UpdateTime,
- IsDrawShare: player.Share.IsDrawShare,
- DrawShareTime: player.Share.DrawShareTime,
- FirstReward: player.FirstReward,
- Item: player.Item,
- SinIn: player.SinIn,
- DailyTask: player.DailyTask,
- AchieveTask: player.AchieveTask,
- RankReward: player.RankReward,
- Invite: player.Invite,
- InviteReward: player.InviteReward,
- Roll: player.Roll,
- }, nil
- }
- // 获取玩家中奖记录(默认查询最近三天)
- func (a *PlayerManage) RewardList(ctx context.Context, req entity.RewardListReq) (*entity.RewardListResp, *code.Result) {
- page, pageSize := checkPageParam(req.Page, req.Size)
- // 构建查询条件
- filter := bson.M{}
- if req.UserName != "" {
- filter["userName"] = bson.M{"$regex": escapeRegex(req.UserName), "$options": "i"}
- }
- filter["source"] = models.SourceDraw
- startTime := mhayaTime.Now().Add(-3 * 24 * time.Hour).Unix()
- endTime := mhayaTime.Now().Unix()
- if req.StartTime > 0 && req.StartTime >= startTime {
- if req.StartTime <= req.EndTime || req.EndTime == 0 {
- startTime = req.StartTime
- }
- }
- if req.EndTime > 0 && req.EndTime <= endTime {
- if req.StartTime <= req.EndTime {
- endTime = req.EndTime
- }
- }
- filter["createTime"] = bson.M{
- "$gte": startTime,
- "$lte": endTime,
- }
- // 设置分页选项
- skip := (page - 1) * pageSize
- limit := pageSize
- findOptions := options.Find().SetSkip(int64(skip)).SetLimit(int64(limit))
- collection := a.db.Collection(constant.CNamePlayerReward)
- // 获取总数total
- count, err := collection.CountDocuments(ctx, filter)
- if err != nil {
- mhayaLogger.Warnf("RewardList count error:%v", err)
- return nil, common.NewResult(code.InternalError)
- }
- // 执行查询
- cursor, err := collection.Find(ctx, filter, findOptions)
- if err != nil {
- mhayaLogger.Warnf("RewardList Find error:%v", err)
- return nil, common.NewResult(code.InternalError)
- }
- defer func() {
- if closeErr := cursor.Close(ctx); closeErr != nil {
- mhayaLogger.Warnf("Error closing cursor: %v", closeErr)
- }
- }()
- // 解析结果
- results := make([]*models.ToPlayerRewardBase, 0)
- for cursor.Next(ctx) {
- var result models.PlayerRewardBase
- if err := cursor.Decode(&result); err != nil {
- mhayaLogger.Warnf("RewardList Decode error:%v", err)
- return nil, common.NewResult(code.InternalError)
- }
- results = append(results, result.To())
- }
- if err := cursor.Err(); err != nil {
- mhayaLogger.Warnf("RewardList cursor error:%v", err)
- return nil, common.NewResult(code.InternalError)
- }
- return &entity.RewardListResp{
- Details: results,
- Total: count,
- }, nil
- }
|