查询语句查询缓存

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;
import com.alibaba.fastjson.JSON;
import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
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.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.service.activity.RankingActivityService;
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 lombok.RequiredArgsConstructor;
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.stereotype.Component;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* 游戏王排名奖励兜底任务.
*/
@ -23,6 +34,11 @@ import org.springframework.stereotype.Component;
public class GameKingRewardTask {
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分钟执行一次兜底发送游戏王排名奖励.
@ -39,11 +55,59 @@ public class GameKingRewardTask {
cmd.setTemplateId("2001207026499137537");
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("游戏王排名奖励兜底任务执行完成");
} catch (Exception 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 static final String RANKING_LIST_CACHE_KEY_PREFIX = "ranking_list:";
private static final int CACHE_EXPIRE_MINUTES = 5;
private static final String GAME_KING_TEMPLATE_ID = "2001207026499137537";
private static final int CACHE_EXPIRE_MINUTES = 10;
@Override
public Boolean accumulateRankingData(RankingDataUpdateCmd cmd) {
@ -68,8 +67,8 @@ public class RankingActivityServiceImpl implements RankingActivityService {
fillCurrentUserRank(cachedResult, cmd.getReqUserId());
return cachedResult;
}
RankingListCO result = rankingListQryExe.execute(cmd);
/*RankingListCO result = rankingListQryExe.execute(cmd);
if (result != null && CollectionUtils.isNotEmpty(result.getRankingList())) {
redisService.setString(cacheKey, JSON.toJSONString(result), CACHE_EXPIRE_MINUTES, TimeUnit.MINUTES);
@ -79,7 +78,8 @@ public class RankingActivityServiceImpl implements RankingActivityService {
sendGameKingRewardEvent(cmd, top10Result);
}
return result;
return result;*/
return new RankingListCO();
}
@Override
@ -110,7 +110,7 @@ public class RankingActivityServiceImpl implements RankingActivityService {
top4Cmd.setTopN(100);
top4Cmd.setTemplateId(cmd.getTemplateId());
RankingListCO result = rankingListQryExe.execute(top4Cmd);
/*RankingListCO result = rankingListQryExe.execute(top4Cmd);
if (result != null && CollectionUtils.isNotEmpty(result.getRankingList())) {
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());
sendGameKingRewardEvent(cmd, 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.RankingActivityRewardTask;
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.inner.endpoint.activity.PropsActivityClient;
import com.red.circle.other.inner.model.cmd.activity.SendActivityRewardCmd;
@ -28,6 +29,13 @@ public class DailTaskTest {
private PropsActivityClient propsActivityClient;
@Autowired
private CleanExpiredDismissingCpTask cleanExpiredDismissingCpTask;
@Autowired
private GameKingRewardTask gameKingRewardTask;
@Test
public void testGameKing() {
gameKingRewardTask.executeGameKingReward();
}
@Test
public void DailTaskTest() {