奖励优化
This commit is contained in:
parent
3c64594f3f
commit
e15d1a5b54
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存新快照.
|
||||
*/
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user