游戏王发送奖励 处理奖励差异

This commit is contained in:
tianfeng 2025-12-19 10:28:45 +08:00
parent 7e8fef8450
commit 3afd652431

View File

@ -90,22 +90,54 @@ public class RankingRewardGrantCmdExe {
Integer currentRank = currentUser.getRank();
RankingRewardSnapshot.RankingUserSnapshot lastUser = lastUserMap.get(userId);
List<RankingRewardSnapshot.RewardItem> currentRewards = getRewardsForRank(currentRank, activityConfig);
if (lastUser == null) {
log.info("用户新获得排名,发放奖励, userId: {}, rank: {}", userId, currentRank);
List<RankingRewardSnapshot.RewardItem> rewards = getRewardsForRank(currentRank, activityConfig);
grantRewards(userId, rewards);
grantRewards(userId, currentRewards);
} else if (!Objects.equals(lastUser.getRank(), currentRank)) {
log.info("用户排名变化, userId: {}, 旧排名: {}, 新排名: {}",
userId, lastUser.getRank(), currentRank);
revokeRewards(userId, lastUser.getRewards());
List<RankingRewardSnapshot.RewardItem> rewards = getRewardsForRank(currentRank, activityConfig);
grantRewards(userId, rewards);
processRewardDiff(userId, lastUser.getRewards(), currentRewards);
}
}
}
/**
* 处理奖励差异
*/
private void processRewardDiff(Long userId,
List<RankingRewardSnapshot.RewardItem> oldRewards,
List<RankingRewardSnapshot.RewardItem> newRewards) {
Set<String> oldRewardKeys = oldRewards.stream()
.map(r -> r.getType() + ":" + r.getContent())
.collect(Collectors.toSet());
Set<String> newRewardKeys = newRewards.stream()
.map(r -> r.getType() + ":" + r.getContent())
.collect(Collectors.toSet());
List<RankingRewardSnapshot.RewardItem> toRevoke = oldRewards.stream()
.filter(r -> !newRewardKeys.contains(r.getType() + ":" + r.getContent()))
.collect(Collectors.toList());
List<RankingRewardSnapshot.RewardItem> toGrant = newRewards.stream()
.filter(r -> !oldRewardKeys.contains(r.getType() + ":" + r.getContent()))
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(toGrant)) {
grantRewards(userId, toGrant);
}
if (CollectionUtils.isNotEmpty(toRevoke)) {
revokeRewards(userId, toRevoke);
}
if (CollectionUtils.isEmpty(toGrant) && CollectionUtils.isEmpty(toRevoke)) {
log.info("奖励未发生变化, userId: {}", userId);
}
}
/**
* 发放奖励.
*/