Przeglądaj źródła

update 完善用户相关逻辑

Alvin 8 miesięcy temu
rodzic
commit
4a6297ff57

+ 22 - 2
game/game_cluster/nodes/webadmin/entity/admin.go

@@ -152,6 +152,26 @@ type RewardListReq struct {
 }
 
 type RewardListResp struct {
-	Details []*models.ToPlayerRewardBase `json:"details"`
-	Total   int64                        `json:"total"`
+	Details []*RewardListDetail `json:"details"`
+	Total   int64               `json:"total"`
+}
+
+type RewardListDetail struct {
+	UserName   string            `json:"userName"`
+	AddReward  []*ShowItemReward `json:"AddReward"`
+	Desc       *Desc             `json:"desc"`
+	CreateTime int64             `json:"createTime"`
+}
+
+type ShowItemReward struct {
+	ItemBaseType int     `json:"itemBaseType"` // itemType:道具基类型
+	ItemID       int     `json:"itemID"`       // itemID:道具ID
+	ItemName     string  `json:"itemName"`     // itemName:道具名称
+	Amount       float64 `json:"amount"`       // amount:数量
+}
+
+type Desc struct {
+	ID     int               `json:"id"`
+	CurID  int               `json:"curId"`
+	Reward []*ShowItemReward `json:"reward"`
 }

+ 123 - 109
game/game_cluster/nodes/webadmin/service/playerMange.go

@@ -2,20 +2,19 @@ package service
 
 import (
 	"context"
-	"time"
 
-	mhayaTime "github.com/mhaya/extend/time"
+	cutils "github.com/mhaya/extend/utils"
 	"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/mdb"
 	"github.com/mhaya/game/game_cluster/internal/mdb/eventmodels"
 	"github.com/mhaya/game/game_cluster/internal/mdb/models"
+	"github.com/mhaya/game/game_cluster/internal/param"
 	"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"
 	"gorm.io/gorm"
 )
 
@@ -69,26 +68,16 @@ func (a *PlayerManage) List(ctx context.Context, req entity.PlayerListReq) (*ent
 
 	var results []*entity.PlayerListDetail
 	for _, v := range registerRecords {
-		// 获取最新的用户信息更新记录
-		var updateRecord *eventmodels.UserUpdateInfoEventContent
-		updateWhere := &eventmodels.UserUpdateInfoEventContent{
-			UserBasic: eventmodels.UserBasic{UserId: v.UserName, TgId: v.TgId},
-		}
-		err := mdb.LogstashDB.Model(&eventmodels.UserUpdateInfoEventContent{}).Where(updateWhere).Order("create_at desc").First(&updateRecord).Error
-		if err != nil && err != gorm.ErrRecordNotFound {
-			mhayaLogger.Warnf("List First updateRecord error:%v", err)
-			return nil, common.NewResult(code.InternalError)
+		updateRecord, codeResult := a.GetPlayerLastestUpdateRecord(v.UserName)
+		if codeResult != nil {
+			mhayaLogger.Warnf("List GetPlayerLastestUpdateRecord error:%v", codeResult)
+			return nil, codeResult
 		}
 
-		// 获取最新的用户登录记录
-		var loginRecord *eventmodels.UserLoginEventContent
-		loginWhere := &eventmodels.UserLoginEventContent{
-			UserBasic: eventmodels.UserBasic{UserId: v.UserName, TgId: v.TgId},
-		}
-		err = mdb.LogstashDB.Model(&eventmodels.UserLoginEventContent{}).Where(loginWhere).Order("create_at desc").First(&loginRecord).Error
-		if err != nil && err != gorm.ErrRecordNotFound {
-			mhayaLogger.Warnf("List First loginRecord error:%v", err)
-			return nil, common.NewResult(code.InternalError)
+		loginRecord, codeResult := a.GetPlayerLastestLoginRecord(v.UserName)
+		if codeResult != nil {
+			mhayaLogger.Warnf("List GetPlayerLastestLoginRecord error:%v", codeResult)
+			return nil, codeResult
 		}
 
 		results = append(results, &entity.PlayerListDetail{
@@ -383,6 +372,22 @@ func (a *PlayerManage) GetPlayerLastestUpdateRecord(userName string) (*eventmode
 	return updateRecord, nil
 }
 
+// 获取最新的用户登录记录
+func (a *PlayerManage) GetPlayerLastestLoginRecord(userName string) (*eventmodels.UserLoginEventContent, *code.Result) {
+	var loginRecord *eventmodels.UserLoginEventContent
+	loginWhere := &eventmodels.UserLoginEventContent{
+		UserBasic: eventmodels.UserBasic{UserId: userName},
+	}
+	err := mdb.LogstashDB.Model(&eventmodels.UserLoginEventContent{}).Where(loginWhere).Order("create_at desc").First(&loginRecord).Error
+	if err != nil && err != gorm.ErrRecordNotFound {
+		mhayaLogger.Warnf("GetPlayerLastestLoginRecord First loginRecord error:%v", err)
+		return nil, common.NewResult(code.InternalError)
+	}
+
+	return loginRecord, nil
+}
+
+// 获取用户的注册记录
 func (a *PlayerManage) GetPlayerRegisterRecord(userName string) (*eventmodels.UserRegisterEventContent, *code.Result) {
 	var registerRecord *eventmodels.UserRegisterEventContent
 	where := &eventmodels.UserRegisterEventContent{
@@ -399,38 +404,26 @@ func (a *PlayerManage) GetPlayerRegisterRecord(userName string) (*eventmodels.Us
 
 // 获取玩家详情
 func (a *PlayerManage) PlayerInfo(ctx context.Context, req entity.PlayerInfoReq) (*entity.PlayerInfoResp, *code.Result) {
-	// 获取最新的用户信息更新记录
-	var updateRecord *eventmodels.UserUpdateInfoEventContent
-	updateWhere := &eventmodels.UserUpdateInfoEventContent{
-		UserBasic: eventmodels.UserBasic{UserId: req.UserName},
-	}
-	err := mdb.LogstashDB.Model(&eventmodels.UserUpdateInfoEventContent{}).Where(updateWhere).Order("create_at desc").First(&updateRecord).Error
-	if err != nil && err != gorm.ErrRecordNotFound {
-		mhayaLogger.Warnf("PlayerInfo First updateRecord error:%v", err)
-		return nil, common.NewResult(code.InternalError)
+	updateRecord, codeResult := a.GetPlayerLastestUpdateRecord(req.UserName)
+	if codeResult != nil {
+		mhayaLogger.Warnf("PlayerInfo GetPlayerLastestUpdateRecord error:%v", codeResult)
+		return nil, codeResult
 	}
 
 	var registerRecord *eventmodels.UserRegisterEventContent
 	if updateRecord == nil {
-		where := &eventmodels.UserRegisterEventContent{
-			UserBasic: eventmodels.UserBasic{UserId: req.UserName},
-		}
-		err := mdb.LogstashDB.Model(&eventmodels.UserRegisterEventContent{}).Where(where).First(&registerRecord).Error
-		if err != nil && err != gorm.ErrRecordNotFound {
-			mhayaLogger.Warnf("PlayerInfo First registerRecord error:%v", err)
-			return nil, common.NewResult(code.InternalError)
+		record, codeResult := a.GetPlayerRegisterRecord(req.UserName)
+		if codeResult != nil {
+			mhayaLogger.Warnf("PlayerInfo GetPlayerRegisterRecord error:%v", codeResult)
+			return nil, codeResult
 		}
+		registerRecord = record
 	}
 
-	// 获取最新的用户登录记录
-	var loginRecord *eventmodels.UserLoginEventContent
-	loginWhere := &eventmodels.UserLoginEventContent{
-		UserBasic: eventmodels.UserBasic{UserId: req.UserName},
-	}
-	err = mdb.LogstashDB.Model(&eventmodels.UserLoginEventContent{}).Where(loginWhere).Order("create_at desc").First(&loginRecord).Error
-	if err != nil && err != gorm.ErrRecordNotFound {
-		mhayaLogger.Warnf("PlayerInfo First loginRecord error:%v", err)
-		return nil, common.NewResult(code.InternalError)
+	loginRecord, codeResult := a.GetPlayerLastestLoginRecord(req.UserName)
+	if codeResult != nil {
+		mhayaLogger.Warnf("PlayerInfo GetPlayerLastestLoginRecord error:%v", codeResult)
+		return nil, codeResult
 	}
 
 	return &entity.PlayerInfoResp{
@@ -587,8 +580,8 @@ func (a *PlayerManage) PlayerInfo(ctx context.Context, req entity.PlayerInfoReq)
 
 			return 0
 		}(),
-		Successions:    0, // TODO
-		MaxSuccessions: 0, // TODO
+		Successions:    loginRecord.ContinuousDays,
+		MaxSuccessions: loginRecord.ContinuousDaysMax,
 		PrevTime: func() int64 {
 			if loginRecord != nil {
 				return loginRecord.CreateAt
@@ -603,85 +596,106 @@ func (a *PlayerManage) PlayerInfo(ctx context.Context, req entity.PlayerInfoReq)
 
 			return 0
 		}(),
-		IsDrawShare:   0,
-		DrawShareTime: 0,
-		FirstReward:   0,
+		IsDrawShare:   0, // TODO
+		DrawShareTime: 0, // TODO
+		FirstReward:   0, // TODO
 		// TODO 其他玩家信息
 	}, 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
+	var rewardRecords []*eventmodels.UserRewardEventContent
 
-	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
-		}
+	where := &eventmodels.UserRewardEventContent{
+		UserBasic: eventmodels.UserBasic{
+			UserId: req.UserName,
+		},
+		Source: models.SourceDraw,
 	}
+	db := mdb.LogstashDB.Model(&eventmodels.UserRewardEventContent{}).Where(where).Order("create_at")
 
-	if req.EndTime > 0 && req.EndTime <= endTime {
-		if req.StartTime <= req.EndTime {
-			endTime = req.EndTime
-		}
+	if req.StartTime > 0 && req.EndTime > 0 && req.StartTime <= req.EndTime {
+		db = db.Where("create_at >= ? and create_at <= ?", req.StartTime, req.EndTime)
 	}
 
-	filter["createTime"] = bson.M{
-		"$gte": startTime,
-		"$lte": endTime,
+	pages := Paginate(db, page, pageSize)
+	err := db.Scopes(pages.Limit).Find(&rewardRecords).Error
+	if err != nil && err != gorm.ErrRecordNotFound {
+		mhayaLogger.Warnf("RewardList Find error:%v", err)
+		return nil, common.NewResult(code.InternalError)
 	}
 
-	// 设置分页选项
-	skip := (page - 1) * pageSize
-	limit := pageSize
-	findOptions := options.Find().SetSkip(int64(skip)).SetLimit(int64(limit))
+	var results []*entity.RewardListDetail
+	for _, v := range rewardRecords {
+		results = append(results, &entity.RewardListDetail{
+			UserName: v.UserId,
+			AddReward: func() []*entity.ShowItemReward {
+				if len(v.AddReward) == 0 {
+					return nil
+				}
 
-	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)
-	}
+				ret := make([]*entity.ShowItemReward, 0, 8)
+				for _, item := range v.AddReward {
+					ret = append(ret, a.packItemReward(item))
+				}
+				return ret
+			}(),
+			Desc: func() *entity.Desc {
+				if v.Desc == nil {
+					return nil
+				}
 
-	// 执行查询
-	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)
+				param, ok := v.Desc.(param.Draw)
+				if ok {
+					return &entity.Desc{
+						ID:    param.ID,
+						CurID: param.CurID,
+						Reward: func() []*entity.ShowItemReward {
+							if len(param.Reward) == 0 {
+								return nil
+							}
+
+							ret := make([]*entity.ShowItemReward, 0, 8)
+							for _, item := range param.Reward {
+								ret = append(ret, a.packItemReward(item))
+							}
+							return ret
+						}(),
+					}
+				}
+
+				return nil
+			}(),
+			CreateTime: v.CreateAt,
+		})
 	}
 
 	return &entity.RewardListResp{
 		Details: results,
-		Total:   count,
+		Total:   pages.Count,
 	}, nil
 }
+
+func (a *PlayerManage) packItemReward(reward data.ItemReward) *entity.ShowItemReward {
+	itemName := ""
+	cfg, exist := data.ItemConfig.Get(reward.ItemID)
+	if exist {
+		itemName = cfg.ItemKey
+	}
+
+	return &entity.ShowItemReward{
+		ItemBaseType: reward.ItemBaseType,
+		ItemID:       reward.ItemID,
+		ItemName:     itemName,
+		Amount: func() float64 {
+			if itemName == "u" || itemName == "ton" {
+				return cutils.QuoInt64ByRatioToFloat64(int64(reward.Amount), constant.MoneyRatio)
+			}
+
+			return float64(reward.Amount)
+		}(),
+	}
+}