游戏排行新增regions字段
This commit is contained in:
parent
4f9fe9c664
commit
cab174318a
@ -9,12 +9,14 @@ import com.red.circle.other.app.dto.cmd.game.GameRankingQry;
|
||||
import com.red.circle.other.domain.game.GameRankingPeriodType;
|
||||
import com.red.circle.other.domain.game.GameRankingRecord;
|
||||
import com.red.circle.other.domain.gateway.game.GameRankingGateway;
|
||||
import com.red.circle.other.domain.gateway.user.ability.UserRegionGateway;
|
||||
import com.red.circle.other.infra.database.cache.key.GameRankingKeys;
|
||||
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
@ -31,6 +33,7 @@ public class GameRankingQryExe {
|
||||
private final GameRankingGateway gameRankingGateway;
|
||||
private final GameRankingConvertor gameRankingConvertor;
|
||||
private final RedisService redisService;
|
||||
private final UserRegionGateway userRegionGateway;
|
||||
|
||||
private static final long CACHE_EXPIRE_SECONDS = 300;
|
||||
|
||||
@ -40,7 +43,8 @@ public class GameRankingQryExe {
|
||||
Integer pageNum = qry.getCurrent().intValue();
|
||||
Integer pageSize = qry.getSize().intValue();
|
||||
|
||||
String cacheKey = buildCacheKey(periodType, periodKey, pageNum, pageSize);
|
||||
String regionId = userRegionGateway.getRegionId(qry.requiredReqUserId());
|
||||
String cacheKey = buildCacheKey(periodType, periodKey, regionId, pageNum, pageSize);
|
||||
|
||||
PageResult<GameRankingCO> cachedResult = redisService.getStringToObject(cacheKey, PageResult.class);
|
||||
if (cachedResult != null) {
|
||||
@ -59,8 +63,19 @@ public class GameRankingQryExe {
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 区域过滤:regions 有值时只保留包含当前用户 regionId 的游戏
|
||||
List<GameRankingCO> filtered = coList.stream()
|
||||
.filter(co -> {
|
||||
String regions = co.getRegions();
|
||||
if (regions == null || regions.isBlank()) {
|
||||
return true;
|
||||
}
|
||||
return Objects.nonNull(regionId) && List.of(regions.split(",")).contains(regionId);
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// latest 排前,非 latest 保持原 totalPrizeAmount 排序
|
||||
List<GameRankingCO> sorted = coList.stream()
|
||||
List<GameRankingCO> sorted = filtered.stream()
|
||||
.sorted((a, b) -> {
|
||||
boolean aLatest = a.isLatest();
|
||||
boolean bLatest = b.isLatest();
|
||||
@ -96,7 +111,7 @@ public class GameRankingQryExe {
|
||||
return null;
|
||||
}
|
||||
|
||||
private String buildCacheKey(String periodType, String periodKey, Integer pageNum, Integer pageSize) {
|
||||
return GameRankingKeys.RANKING_PAGE.getKey(periodType, periodKey, pageNum, pageSize);
|
||||
private String buildCacheKey(String periodType, String periodKey, String regionId, Integer pageNum, Integer pageSize) {
|
||||
return GameRankingKeys.RANKING_PAGE.getKey(periodType, periodKey, regionId, pageNum, pageSize);
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,6 +31,7 @@ public class GameRankingConvertor {
|
||||
co.setTotalPrizeAmount(record.getTotalPrizeAmount());
|
||||
co.setPeriodType(record.getPeriodType());
|
||||
co.setGameCreateTime(record.getGameCreateTime());
|
||||
co.setRegions(record.getRegions());
|
||||
return co;
|
||||
}
|
||||
}
|
||||
|
||||
@ -56,6 +56,7 @@ public class GameRankingInitTask {
|
||||
.gameUrl(config.getGameCode())
|
||||
.gameCreateTime(config.getCreateTime())
|
||||
.showcase(config.getShowcase())
|
||||
.regions(config.getRegions())
|
||||
.periodType(GameRankingPeriodType.WEEK.getCode())
|
||||
.periodKey(weekKey)
|
||||
.amount(0L)
|
||||
|
||||
@ -167,6 +167,7 @@ public class GameEventService {
|
||||
.sysOrigin(gameConfig.getSysOrigin())
|
||||
.amount(gold)
|
||||
.showcase(gameConfig.getShowcase())
|
||||
.regions(gameConfig.getRegions())
|
||||
.periodType(GameRankingPeriodType.WEEK.getCode())
|
||||
.periodKey(ZonedDateTimeAsiaRiyadhUtils.nowWeekMondayToInt().toString())
|
||||
.gameCreateTime(gameConfig.getCreateTime())
|
||||
|
||||
@ -61,6 +61,11 @@ public class GameRankingCO {
|
||||
*/
|
||||
private Timestamp gameCreateTime;
|
||||
|
||||
/**
|
||||
* 区域ID列表(逗号分隔),为空代表全区域
|
||||
*/
|
||||
private String regions;
|
||||
|
||||
public boolean isLatest() {
|
||||
if (gameCreateTime == null) {
|
||||
return false;
|
||||
|
||||
@ -71,4 +71,9 @@ public class GameRankingIncrementCmd {
|
||||
* 是否上架
|
||||
*/
|
||||
private Boolean showcase;
|
||||
|
||||
/**
|
||||
* 区域ID列表(逗号分隔),为空代表全区域
|
||||
*/
|
||||
private String regions;
|
||||
}
|
||||
|
||||
@ -64,4 +64,9 @@ public class GameRankingRecord {
|
||||
* 游戏创建时间
|
||||
*/
|
||||
private Timestamp gameCreateTime;
|
||||
|
||||
/**
|
||||
* 区域ID列表(逗号分隔),为空代表全区域
|
||||
*/
|
||||
private String regions;
|
||||
}
|
||||
|
||||
@ -82,6 +82,11 @@ public class GameRanking {
|
||||
*/
|
||||
private Boolean showcase;
|
||||
|
||||
/**
|
||||
* 区域ID列表(逗号分隔),为空代表全区域
|
||||
*/
|
||||
private String regions;
|
||||
|
||||
/**
|
||||
* 游戏创建时间
|
||||
*/
|
||||
|
||||
@ -82,6 +82,7 @@ public class GameRankingGatewayImpl implements GameRankingGateway {
|
||||
update.inc("totalPrizeAmount", cmd.getAmount());
|
||||
update.set("updateTime", LocalDateTime.now());
|
||||
update.set("showcase", cmd.getShowcase());
|
||||
update.set("regions", cmd.getRegions());
|
||||
update.setOnInsert("createTime", LocalDateTime.now());
|
||||
update.setOnInsert("sysOrigin", cmd.getSysOrigin());
|
||||
update.setOnInsert("gameOrigin", cmd.getGameOrigin());
|
||||
@ -111,6 +112,7 @@ public class GameRankingGatewayImpl implements GameRankingGateway {
|
||||
record.setPeriodKey(entity.getPeriodKey());
|
||||
record.setTotalPrizeAmount(entity.getTotalPrizeAmount());
|
||||
record.setGameCreateTime(entity.getGameCreateTime());
|
||||
record.setRegions(entity.getRegions());
|
||||
return record;
|
||||
}
|
||||
}
|
||||
|
||||
@ -101,6 +101,7 @@ public class SysGameListConfigClientServiceImpl implements SysGameListConfigClie
|
||||
.gameUrl(config.getGameCode())
|
||||
.gameCreateTime(config.getCreateTime())
|
||||
.showcase(config.getShowcase())
|
||||
.regions(config.getRegions())
|
||||
.periodType(GameRankingPeriodType.WEEK.getCode())
|
||||
.periodKey(ZonedDateTimeAsiaRiyadhUtils.nowWeekMondayToInt().toString())
|
||||
.amount(0L)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user