查询语句查询缓存

This commit is contained in:
tianfeng 2025-12-19 15:40:05 +08:00
parent 0f7ea5d377
commit 9802a2c3d0
3 changed files with 82 additions and 10 deletions

View File

@ -1,11 +1,19 @@
package com.red.circle.other.app.scheduler.activity; package com.red.circle.other.app.scheduler.activity;
import com.alibaba.fastjson.JSON;
import com.red.circle.common.business.core.enums.SysOriginPlatformEnum; import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
import com.red.circle.component.redis.annotation.TaskCacheLock; import com.red.circle.component.redis.annotation.TaskCacheLock;
import com.red.circle.component.redis.service.RedisService;
import com.red.circle.framework.core.dto.ReqSysOrigin; import com.red.circle.framework.core.dto.ReqSysOrigin;
import com.red.circle.mq.business.model.event.GameKingRewardEvent;
import com.red.circle.mq.rocket.business.producer.UserMqMessageService;
import com.red.circle.other.app.command.activity.query.RankingListQryExe;
import com.red.circle.other.app.dto.clientobject.activity.RankingListCO;
import com.red.circle.other.app.dto.cmd.activity.RankingListQueryCmd; import com.red.circle.other.app.dto.cmd.activity.RankingListQueryCmd;
import com.red.circle.other.app.service.activity.RankingActivityService; import com.red.circle.other.app.service.activity.RankingActivityService;
import com.red.circle.other.domain.ranking.RankingActivityType; import com.red.circle.other.domain.ranking.RankingActivityType;
import com.red.circle.other.domain.ranking.RankingCycleType;
import com.red.circle.tool.core.collection.CollectionUtils;
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils; import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -13,6 +21,9 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/** /**
* 游戏王排名奖励兜底任务. * 游戏王排名奖励兜底任务.
*/ */
@ -23,6 +34,11 @@ import org.springframework.stereotype.Component;
public class GameKingRewardTask { public class GameKingRewardTask {
private final RankingActivityService rankingActivityService; private final RankingActivityService rankingActivityService;
private final RankingListQryExe rankingListQryExe;
private final RedisService redisService;
private static final String RANKING_LIST_CACHE_KEY_PREFIX = "ranking_list:";
private static final int CACHE_EXPIRE_MINUTES = 10;
private final UserMqMessageService userMqMessageService;
/** /**
* 每5分钟执行一次兜底发送游戏王排名奖励. * 每5分钟执行一次兜底发送游戏王排名奖励.
@ -39,11 +55,59 @@ public class GameKingRewardTask {
cmd.setTemplateId("2001207026499137537"); cmd.setTemplateId("2001207026499137537");
cmd.setReqSysOrigin(ReqSysOrigin.of("LIKEI")); cmd.setReqSysOrigin(ReqSysOrigin.of("LIKEI"));
rankingActivityService.getTopFourRankingWithReward(cmd); RankingListQueryCmd top4Cmd = new RankingListQueryCmd();
top4Cmd.setActivityType(cmd.getActivityType());
top4Cmd.setCycleKey(cmd.getCycleKey());
top4Cmd.setCycleType(RankingCycleType.WEEKLY.getCode());
top4Cmd.setReqUserId(cmd.getReqUserId());
top4Cmd.setReqSysOrigin(cmd.getReqSysOrigin());
top4Cmd.setTopN(100);
top4Cmd.setTemplateId(cmd.getTemplateId());
RankingListCO result = rankingListQryExe.execute(top4Cmd);
String cacheKey = buildRankingListCacheKey(cmd);
if (result != null && CollectionUtils.isNotEmpty(result.getRankingList())) {
redisService.setString(cacheKey, JSON.toJSONString(result), CACHE_EXPIRE_MINUTES, TimeUnit.MINUTES);
result.setRankingList(result.getRankingList().stream().limit(10).toList());
sendGameKingRewardEvent(cmd, result);
}
log.info("游戏王排名奖励兜底任务执行完成"); log.info("游戏王排名奖励兜底任务执行完成");
} catch (Exception e) { } catch (Exception e) {
log.error("游戏王排名奖励兜底任务执行失败", e); log.error("游戏王排名奖励兜底任务执行失败", e);
} }
} }
/**
* 构建排行榜缓存Key.
*/
private String buildRankingListCacheKey(RankingListQueryCmd cmd) {
return RANKING_LIST_CACHE_KEY_PREFIX + RankingActivityType.getByCode(cmd.getActivityType()).name() + ":" + cmd.getCycleKey();
}
/**
* 发送游戏王奖励消息.
*/
private void sendGameKingRewardEvent(RankingListQueryCmd cmd, RankingListCO result) {
if (CollectionUtils.isEmpty(result.getRankingList())) {
return;
}
GameKingRewardEvent event = new GameKingRewardEvent()
.setActivityType(RankingActivityType.getByCode(cmd.getActivityType()).name())
.setOrigin(cmd.getReqSysOrigin().getOrigin())
.setCycleKey(cmd.getCycleKey())
.setTemplateId(cmd.getTemplateId())
.setRankingUsers(result.getRankingList().stream()
.map(user -> new GameKingRewardEvent.RankingUser()
.setUserId(user.getUserId())
.setRank(user.getRank()))
.collect(Collectors.toList()));
userMqMessageService.sendGameKingRewardEvent(event);
}
} }

View File

@ -47,8 +47,7 @@ public class RankingActivityServiceImpl implements RankingActivityService {
private final UserProfileGateway userProfileGateway; private final UserProfileGateway userProfileGateway;
private static final String RANKING_LIST_CACHE_KEY_PREFIX = "ranking_list:"; private static final String RANKING_LIST_CACHE_KEY_PREFIX = "ranking_list:";
private static final int CACHE_EXPIRE_MINUTES = 5; private static final int CACHE_EXPIRE_MINUTES = 10;
private static final String GAME_KING_TEMPLATE_ID = "2001207026499137537";
@Override @Override
public Boolean accumulateRankingData(RankingDataUpdateCmd cmd) { public Boolean accumulateRankingData(RankingDataUpdateCmd cmd) {
@ -69,7 +68,7 @@ public class RankingActivityServiceImpl implements RankingActivityService {
return cachedResult; return cachedResult;
} }
RankingListCO result = rankingListQryExe.execute(cmd); /*RankingListCO result = rankingListQryExe.execute(cmd);
if (result != null && CollectionUtils.isNotEmpty(result.getRankingList())) { if (result != null && CollectionUtils.isNotEmpty(result.getRankingList())) {
redisService.setString(cacheKey, JSON.toJSONString(result), CACHE_EXPIRE_MINUTES, TimeUnit.MINUTES); redisService.setString(cacheKey, JSON.toJSONString(result), CACHE_EXPIRE_MINUTES, TimeUnit.MINUTES);
@ -79,7 +78,8 @@ public class RankingActivityServiceImpl implements RankingActivityService {
sendGameKingRewardEvent(cmd, top10Result); sendGameKingRewardEvent(cmd, top10Result);
} }
return result; return result;*/
return new RankingListCO();
} }
@Override @Override
@ -110,7 +110,7 @@ public class RankingActivityServiceImpl implements RankingActivityService {
top4Cmd.setTopN(100); top4Cmd.setTopN(100);
top4Cmd.setTemplateId(cmd.getTemplateId()); top4Cmd.setTemplateId(cmd.getTemplateId());
RankingListCO result = rankingListQryExe.execute(top4Cmd); /*RankingListCO result = rankingListQryExe.execute(top4Cmd);
if (result != null && CollectionUtils.isNotEmpty(result.getRankingList())) { if (result != null && CollectionUtils.isNotEmpty(result.getRankingList())) {
redisService.setString(cacheKey, JSON.toJSONString(result), CACHE_EXPIRE_MINUTES, TimeUnit.MINUTES); redisService.setString(cacheKey, JSON.toJSONString(result), CACHE_EXPIRE_MINUTES, TimeUnit.MINUTES);
@ -118,9 +118,9 @@ public class RankingActivityServiceImpl implements RankingActivityService {
result.setRankingList(result.getRankingList().stream().limit(10).toList()); result.setRankingList(result.getRankingList().stream().limit(10).toList());
sendGameKingRewardEvent(cmd, result); sendGameKingRewardEvent(cmd, result);
return convertToRankingUserVOList(result); return convertToRankingUserVOList(result);
} }*/
return null; return List.of();
} }
/** /**

View File

@ -5,6 +5,7 @@ import com.red.circle.other.app.scheduler.CleanExpiredDismissingCpTask;
import com.red.circle.other.app.scheduler.DailyTask; import com.red.circle.other.app.scheduler.DailyTask;
import com.red.circle.other.app.scheduler.RankingActivityRewardTask; import com.red.circle.other.app.scheduler.RankingActivityRewardTask;
import com.red.circle.other.app.scheduler.RocketStatusSyncTask; import com.red.circle.other.app.scheduler.RocketStatusSyncTask;
import com.red.circle.other.app.scheduler.activity.GameKingRewardTask;
import com.red.circle.other.app.service.room.RocketStatusCacheService; import com.red.circle.other.app.service.room.RocketStatusCacheService;
import com.red.circle.other.inner.endpoint.activity.PropsActivityClient; import com.red.circle.other.inner.endpoint.activity.PropsActivityClient;
import com.red.circle.other.inner.model.cmd.activity.SendActivityRewardCmd; import com.red.circle.other.inner.model.cmd.activity.SendActivityRewardCmd;
@ -28,6 +29,13 @@ public class DailTaskTest {
private PropsActivityClient propsActivityClient; private PropsActivityClient propsActivityClient;
@Autowired @Autowired
private CleanExpiredDismissingCpTask cleanExpiredDismissingCpTask; private CleanExpiredDismissingCpTask cleanExpiredDismissingCpTask;
@Autowired
private GameKingRewardTask gameKingRewardTask;
@Test
public void testGameKing() {
gameKingRewardTask.executeGameKingReward();
}
@Test @Test
public void DailTaskTest() { public void DailTaskTest() {