feat: 迁移渠道商务游戏排行榜及同期比较

This commit is contained in:
Yvan
2026-11-04 01:34:37 +08:00
parent cbf0ee9be3
commit ac4e13e610
27 changed files with 1079 additions and 6 deletions
+40
View File
@@ -0,0 +1,40 @@
package business
import (
"context"
"kra/internal/biz/business"
"kra/internal/service/dto"
)
type RankingUsecase interface {
List(context.Context, business.RankingKind, business.AnalyticsFilter) (*business.RankingPage, error)
}
type RankingService struct{ uc RankingUsecase }
func NewRankingService(uc *business.RankingUsecase) *RankingService { return &RankingService{uc: uc} }
func rankingItems(rows []*business.RankingItem, kind business.RankingKind) []*dto.RankingItem {
out := make([]*dto.RankingItem, 0, len(rows))
for _, row := range rows {
item := &dto.RankingItem{Rank: row.Rank, ObjectID: row.ObjectID, ObjectName: row.Name, MetricValue: row.Value, MoM: row.MoM, MoMStatus: row.MoMStatus}
if kind != business.BusinessRanking {
source, label := row.SourceDB, business.PlatformName(row.SourceDB)
item.SourceDB, item.SourceDBLabel = &source, &label
}
out = append(out, item)
}
return out
}
func (s *RankingService) List(ctx context.Context, kind business.RankingKind, req *dto.RankingQuery) (*dto.RankingPage, error) {
if req == nil {
return nil, business.ErrAnalyticsInput
}
f, err := analyticsRequest(&dto.AnalyticsQuery{Sources: req.Sources, BeginTime: req.BeginTime, EndTime: req.EndTime})
if err != nil {
return nil, err
}
page, err := s.uc.List(ctx, kind, f)
if err != nil {
return nil, err
}
return &dto.RankingPage{Register: rankingItems(page.Register, kind), Recharge: rankingItems(page.Recharge, kind), PayRate: rankingItems(page.PayRate, kind), Active: rankingItems(page.Active, kind), Begin: page.Begin, End: page.End, Available: page.Available}, nil
}
+27
View File
@@ -0,0 +1,27 @@
package dto
type RankingQuery struct {
Sources []string `form:"sourceDb"`
BeginTime string `form:"beginTime"`
EndTime string `form:"endTime"`
GameID *int64 `form:"gameId"`
}
type RankingItem struct {
Rank int `json:"rank"`
ObjectID string `json:"objectId"`
ObjectName string `json:"objectName"`
SourceDB *string `json:"sourceDb"`
SourceDBLabel *string `json:"sourceDbLabel"`
MetricValue string `json:"metricValue"`
MoM *string `json:"momValue"`
MoMStatus *int `json:"momStatus"`
}
type RankingPage struct {
Register []*RankingItem `json:"registerRankList"`
Recharge []*RankingItem `json:"rechargeRankList"`
PayRate []*RankingItem `json:"payRateRankList"`
Active []*RankingItem `json:"activeRankList"`
Begin string `json:"beginTime"`
End string `json:"endTime"`
Available bool `json:"available"`
}
+1
View File
@@ -27,6 +27,7 @@ var ProviderSet = wire.NewSet(
businessservice.NewAnalyticsService,
businessservice.NewServerAnalysisService,
businessservice.NewWorkbenchService,
businessservice.NewRankingService,
systemservice.ProviderSet,
paymentservice.ProviderSet,
integrationservice.ProviderSet,