|
@@ -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(®isterRecord).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)
|
|
|
+ }(),
|
|
|
+ }
|
|
|
+}
|