From e15d1a5b54b71d81876e7992842a754b9cdb520c Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Thu, 18 Dec 2025 22:17:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A5=96=E5=8A=B1=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activity/RankingRewardGrantCmdExe.java | 40 ++++++++++++++++--- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/RankingRewardGrantCmdExe.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/RankingRewardGrantCmdExe.java index 7528148a..da3ba62e 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/RankingRewardGrantCmdExe.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/RankingRewardGrantCmdExe.java @@ -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 badgeList = singleGroupRewardPoolCommon.listRewardProps( - config.getSysOrigin(), PropsActivityTypeEnum.GAME_KING_BADGE); - List honorList = singleGroupRewardPoolCommon.listRewardProps( - config.getSysOrigin(), PropsActivityTypeEnum.GAME_KING_HONOR); + List badgeList = getRewardListFromCache(config.getSysOrigin(), "BADGE"); + List honorList = getRewardListFromCache(config.getSysOrigin(), "HONOR"); if (rank < 1 || rank > 10) { return Collections.emptyList(); } List 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 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 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; + } + /** * 保存新快照. */