feat(game-king): include ranking context in rewards

This commit is contained in:
hy001 2026-07-23 18:46:01 +08:00
parent 82f35f2f91
commit a96e82ead4
2 changed files with 22 additions and 11 deletions

View File

@ -197,20 +197,24 @@ type UnblockAccountRequest struct {
}
type SendActivityRewardRequest struct {
TrackID int64 `json:"trackId"`
Origin string `json:"origin"`
SysOrigin string `json:"sysOrigin"`
SourceGroupID int64 `json:"sourceGroupId"`
AcceptUserID int64 `json:"acceptUserId"`
TrackID int64 `json:"trackId"`
Origin string `json:"origin"`
SysOrigin string `json:"sysOrigin"`
SourceGroupID int64 `json:"sourceGroupId"`
AcceptUserID int64 `json:"acceptUserId"`
GameKingRankingPeriod string `json:"gameKingRankingPeriod,omitempty"`
GameKingRank int `json:"gameKingRank,omitempty"`
}
// SendFrozenActivityRewardRequest 直接携带启用时冻结的单个奖励项,避免活动发奖时重新读取已变化的共享奖励组。
type SendFrozenActivityRewardRequest struct {
TrackID int64 `json:"trackId"`
AcceptUserID int64 `json:"acceptUserId"`
Origin string `json:"origin"`
SysOrigin string `json:"sysOrigin"`
Prizes []FrozenActivityReward `json:"prizes"`
TrackID int64 `json:"trackId"`
AcceptUserID int64 `json:"acceptUserId"`
Origin string `json:"origin"`
SysOrigin string `json:"sysOrigin"`
GameKingRankingPeriod string `json:"gameKingRankingPeriod,omitempty"`
GameKingRank int `json:"gameKingRank,omitempty"`
Prizes []FrozenActivityReward `json:"prizes"`
}
// FrozenActivityReward 对齐 Java PrizeDescribe内层 TrackID 是资源组商品 ID外层请求 TrackID 才是 delivery item 幂等号。

View File

@ -19,6 +19,8 @@ const deliveryProcessingLease = 10 * time.Minute
type frozenDeliveryContext struct {
SysOrigin string
BusinessNo string
RankingPeriod string
RankNo int
RewardItemsJSON string
RewardItems []RewardItemView
}
@ -107,6 +109,7 @@ func (s *Service) dispatchDeliveryItem(ctx context.Context, itemID int64, retry
err = s.gateway.SendActivityReward(ctx, integration.SendActivityRewardRequest{
TrackID: item.ID, Origin: rewardOriginGameKing, SysOrigin: frozen.SysOrigin,
SourceGroupID: item.ResourceGroupID, AcceptUserID: item.UserID,
GameKingRankingPeriod: frozen.RankingPeriod, GameKingRank: frozen.RankNo,
})
} else {
prizes := make([]integration.FrozenActivityReward, 0, len(frozen.RewardItems))
@ -119,7 +122,8 @@ func (s *Service) dispatchDeliveryItem(ctx context.Context, itemID int64, retry
}
err = s.gateway.SendFrozenActivityReward(ctx, integration.SendFrozenActivityRewardRequest{
TrackID: item.ID, AcceptUserID: item.UserID, Origin: rewardOriginGameKing,
SysOrigin: frozen.SysOrigin, Prizes: prizes,
SysOrigin: frozen.SysOrigin, GameKingRankingPeriod: frozen.RankingPeriod,
GameKingRank: frozen.RankNo, Prizes: prizes,
})
}
if err != nil {
@ -250,6 +254,9 @@ func (s *Service) loadFrozenDeliveryContext(ctx context.Context, item model.Yumi
return result, err
}
result.BusinessNo = record.BusinessNo
// 排名上下文随冻结奖励一起透传Java 通知据此生成日榜/总榜英文名次文案。
result.RankingPeriod = record.RankingPeriod
result.RankNo = record.RankNo
if strings.TrimSpace(result.RewardItemsJSON) == "" {
var rankReward model.YumiGameKingRankReward
if err := s.db.WithContext(ctx).Where("id = ? AND activity_id = ?", record.RankRewardID, item.ActivityID).First(&rankReward).Error; err != nil {