Browse Source

update 新增获取玩家中奖记录(默认查询最近三天)接口

Alvin 8 months ago
parent
commit
0a1f825187

+ 25 - 0
game/game_cluster/nodes/webadmin/controller/player.go

@@ -64,3 +64,28 @@ func (w *PlayerManage) GetPlayerInfo(ctx *gin.Context) {
 		"msg":  "success",
 	})
 }
+
+func (w *PlayerManage) GetRewardList(ctx *gin.Context) {
+	req := entity.RewardListReq{}
+	if err := ctx.ShouldBindJSON(&req); err != nil {
+		ctx.JSON(200, gin.H{
+			"code": 400,
+			"msg":  err.Error(),
+		})
+		return
+	}
+	resp, total, err := w.sev.RewardList(ctx, req)
+	if err != nil {
+		ctx.JSON(200, gin.H{
+			"code": 400,
+			"msg":  err.Error(),
+		})
+		return
+	}
+	ctx.JSON(200, gin.H{
+		"code":  200,
+		"data":  resp,
+		"msg":   "success",
+		"total": total,
+	})
+}

+ 20 - 0
game/game_cluster/nodes/webadmin/entity/admin.go

@@ -124,3 +124,23 @@ type PlayerInfoResp struct {
 	DrawShareTime  int64  `json:"drawShareTime" bson:"drawShareTime"`   // 领取时间
 	FirstReward    int    `json:"firstReward" bson:"firstReward"`       // 是否已领取首次登陆奖励
 }
+
+type RewardListReq struct {
+	Page      int    `json:"page" binding:"required"`
+	Size      int    `json:"size" binding:"required"`
+	UserName  string `json:"userName"`   // 用户名
+	StartTime int64  `json:"start_time"` // 开始时间
+	EndTime   int64  `json:"end_time"`   // 结束时间
+}
+
+type RewardListResp struct {
+	UserName   string        `json:"userName" bson:"userName"` // 用户名
+	AddReward  []*ItemReward `json:"AddReward" bson:"addReward"`
+	CreateTime int64         `json:"createTime" bson:"createTime"`
+}
+
+type ItemReward struct {
+	ItemID   int    // itemID:道具ID
+	Amount   int    // amount:数量
+	ItemName string // itemName:道具名称
+}

+ 1 - 0
game/game_cluster/nodes/webadmin/router/router.go

@@ -71,6 +71,7 @@ func (c *Controller) InitApiRouter(u *gin.RouterGroup) {
 	u.POST("/whitelist/list", controller.NewWhitelist().GetWhitelist)
 	u.POST("/player/list", controller.NewPlayerManage().GetPlayerlist)
 	u.POST("/player/info", controller.NewPlayerManage().GetPlayerInfo)
+	u.POST("/player/rewardList", controller.NewPlayerManage().GetRewardList)
 }
 
 // func (c *Controller) InitMdb() {

+ 84 - 0
game/game_cluster/nodes/webadmin/service/playerMange.go

@@ -3,8 +3,11 @@ package service
 import (
 	"context"
 	"log"
+	"time"
 
+	mhayaTime "github.com/mhaya/extend/time"
 	"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/models"
 	"github.com/mhaya/game/game_cluster/nodes/webadmin/entity"
@@ -151,3 +154,84 @@ func (a *PlayerManage) PlayerInfo(ctx context.Context, req entity.PlayerInfoReq)
 		FirstReward:    player.FirstReward,
 	}, nil
 }
+
+// 获取玩家中奖记录(默认查询最近三天)
+func (a *PlayerManage) RewardList(ctx context.Context, req entity.RewardListReq) ([]*entity.RewardListResp, int64, error) {
+	page := req.Page
+	// 验证参数
+	if page <= 0 {
+		page = 1
+	}
+	pageSize := req.Size
+	if pageSize <= 0 {
+		pageSize = 10
+	}
+
+	// 构建查询条件
+	filter := bson.M{}
+	if req.UserName != "" {
+		filter["userName"] = bson.M{"$regex": escapeRegex(req.UserName), "$options": "i"}
+	}
+
+	startTime := mhayaTime.Now().StartOfDay().Unix()
+	endTime := mhayaTime.Now().EndOfDay().Add(3 * 24 * time.Hour).Unix()
+	if req.StartTime > 0 && req.StartTime < req.EndTime {
+		startTime = req.StartTime
+	}
+
+	if req.EndTime > 0 && req.EndTime <= 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 := mdb.MDB.Collection(constant.CNamePlayerReward)
+	// 获取总数total
+	count, err := collection.CountDocuments(ctx, filter)
+	if err != nil {
+		return nil, 0, err
+	}
+
+	// 执行查询
+	cursor, err := collection.Find(ctx, filter, findOptions)
+	if err != nil {
+		return nil, 0, err
+	}
+	defer func() {
+		if closeErr := cursor.Close(ctx); closeErr != nil {
+			log.Printf("Error closing cursor: %v", closeErr)
+		}
+	}()
+
+	// 解析结果
+	results := make([]*entity.RewardListResp, 0)
+	for cursor.Next(ctx) {
+		var result entity.RewardListResp
+		if err := cursor.Decode(&result); err != nil {
+			return nil, 0, err
+		}
+		results = append(results, &result)
+	}
+	if err := cursor.Err(); err != nil {
+		return nil, 0, err
+	}
+
+	for _, result := range results {
+		for _, v := range result.AddReward {
+			cfg, exist := data.ItemConfig.Get(v.ItemID)
+			if exist {
+				v.ItemName = cfg.ItemKey
+			}
+		}
+	}
+
+	return results, count, nil
+}