奖励优化

This commit is contained in:
tianfeng 2025-12-18 22:17:40 +08:00
parent 3c64594f3f
commit e15d1a5b54

View File

@ -1,7 +1,9 @@
package com.red.circle.other.app.command.activity;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Sets;
import com.red.circle.common.business.enums.SendPropsOrigin;
import com.red.circle.component.redis.service.RedisService;
import com.red.circle.mq.business.model.event.BadgeOperateEvent;
import com.red.circle.mq.rocket.business.producer.UserMqMessageService;
import com.red.circle.other.app.common.props.SingleGroupRewardPoolCommon;
@ -22,6 +24,7 @@ import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@ -36,6 +39,10 @@ public class RankingRewardGrantCmdExe {
private final PropsBackpackClient propsBackpackClient;
private final UserMqMessageService userMqMessageService;
private final SingleGroupRewardPoolCommon singleGroupRewardPoolCommon;
private final RedisService redisService;
private static final String REWARD_CACHE_KEY_PREFIX = "game_king_reward:";
private static final int REWARD_CACHE_EXPIRE_HOURS = 24;
/**
* 处理排名奖励变化.
@ -209,17 +216,15 @@ public class RankingRewardGrantCmdExe {
ActivityConfigDTO config = activityConfig.getConfig();
List<ActivityRewardPropsDTO> badgeList = singleGroupRewardPoolCommon.listRewardProps(
config.getSysOrigin(), PropsActivityTypeEnum.GAME_KING_BADGE);
List<ActivityRewardPropsDTO> honorList = singleGroupRewardPoolCommon.listRewardProps(
config.getSysOrigin(), PropsActivityTypeEnum.GAME_KING_HONOR);
List<ActivityRewardPropsDTO> badgeList = getRewardListFromCache(config.getSysOrigin(), "BADGE");
List<ActivityRewardPropsDTO> honorList = getRewardListFromCache(config.getSysOrigin(), "HONOR");
if (rank < 1 || rank > 10) {
return Collections.emptyList();
}
List<RankingRewardSnapshot.RewardItem> rewards = new ArrayList<>();
int index = rank - 1;
if (CollectionUtils.isNotEmpty(badgeList) && index < badgeList.size()) {
@ -245,6 +250,31 @@ public class RankingRewardGrantCmdExe {
return rewards;
}
/**
* 从Redis缓存获取奖励列表.
*/
private List<ActivityRewardPropsDTO> getRewardListFromCache(String origin, String rewardType) {
String cacheKey = REWARD_CACHE_KEY_PREFIX + origin + ":" + rewardType;
String cachedJson = redisService.getString(cacheKey);
if (cachedJson != null) {
return JSON.parseArray(cachedJson, ActivityRewardPropsDTO.class);
}
PropsActivityTypeEnum activityTypeEnum = "BADGE".equals(rewardType)
? PropsActivityTypeEnum.GAME_KING_BADGE
: PropsActivityTypeEnum.GAME_KING_HONOR;
List<ActivityRewardPropsDTO> rewardList = singleGroupRewardPoolCommon.listRewardProps(origin, activityTypeEnum);
if (CollectionUtils.isNotEmpty(rewardList)) {
redisService.setString(cacheKey, JSON.toJSONString(rewardList), REWARD_CACHE_EXPIRE_HOURS, TimeUnit.HOURS);
log.info("缓存游戏王奖励配置到Redis, origin: {}, type: {}, count: {}", origin, rewardType, rewardList.size());
}
return rewardList;
}
/**
* 保存新快照.
*/