游戏排行榜接入游戏数据

This commit is contained in:
tianfeng 2025-12-02 19:42:54 +08:00
parent fefbaeac94
commit dd8e57615c
4 changed files with 87 additions and 48 deletions

View File

@ -187,39 +187,16 @@ public class GameBaishunServiceImpl implements GameBaishunService {
.gameId(Long.parseLong(request.getGameId())) .gameId(Long.parseLong(request.getGameId()))
.build()); .build());
BigDecimal cost = enumConfigCacheService
.getValueBigDecimal(EnumConfigKey.GAME_BROADCAST_AMOUNT, sysOrigin) ;
if (cost == null || cost.compareTo(BigDecimal.ZERO) <= 0) {
cost = BigDecimal.valueOf(5000L);
}
if (request.getCurrencyDiff() >= cost.longValue()) {
UserProfileDTO userProfile = userProfileAppConvertor.toUserProfileDTO(
userProfileGateway.getByUserId(DataTypeUtils.toLong(request.getUserId())));
GameListConfig gameListConfig = gameListConfigService.getByGameId(request.getGameId(), GameOriginEnum.BAISHUN.name(), sysOrigin); GameListConfig gameListConfig = gameListConfigService.getByGameId(request.getGameId(), GameOriginEnum.BAISHUN.name(), sysOrigin);
if (Objects.nonNull(gameListConfig)) { if (Objects.nonNull(gameListConfig)) {
Map<Object, Object> build = OfficialNoticeUtils.buildUserProfile(userProfile); sendBroadcast(request, gameListConfig);
build.put("gameUrl", gameListConfig.getCover());
build.put("currencyDiff", request.getCurrencyDiff());
imGroupClient.sendMessageBroadcast( //游戏是否参与打榜活动
BroadcastGroupMsgBodyCmd.builder() incGameRankingActivity(request);
.toPlatform(SysOriginPlatformEnum.LIKEI)
.type(GroupMessageTypeEnum.GAME_BAISHUN_WIN) //累计游戏排行榜
.data(build) incGameRankingRecord(request, gameListConfig);
.build()
);
} }
}
//游戏是否参与打榜活动
if (gameId != null && gameId.equals(request.getGameId()) && request.getCurrencyDiff() > 0) {
incGameRankingActivity(DataTypeUtils.toLong(request.getUserId()), 1, request.getCurrencyDiff(),
request.getGameRoundId());
}
log.warn("{} 发送游戏获奖通知--金币数量{}", GoldOrigin.BAISHUN_GAME.name(), request.getCurrencyDiff()); log.warn("{} 发送游戏获奖通知--金币数量{}", GoldOrigin.BAISHUN_GAME.name(), request.getCurrencyDiff());
return BaishunResponse.success(new BaishunChangeCurrencyResponse() return BaishunResponse.success(new BaishunChangeCurrencyResponse()
@ -239,18 +216,66 @@ public class GameBaishunServiceImpl implements GameBaishunService {
return BaishunResponse.fail(BaishunErrorCode.SERVER_ERROR); return BaishunResponse.fail(BaishunErrorCode.SERVER_ERROR);
} }
private void incGameRankingActivity(Long userId, Integer userSex, Long amount, String gameRoundId) { private void sendBroadcast(BaishunChangeCurrencyRequest request, GameListConfig gameListConfig) {
RankingDataUpdateCmd receiverCmd = new RankingDataUpdateCmd(); if (gameListConfig == null) {
receiverCmd.setUserId(userId); return;
receiverCmd.setUserSex(userSex); }
receiverCmd.setActivityType(RankingActivityType.GREEDY_GAME.getCode());
receiverCmd.setCycleType(RankingCycleType.MONTHLY.getCode()); BigDecimal cost = enumConfigCacheService
receiverCmd.setCycleKey("202511"); .getValueBigDecimal(EnumConfigKey.GAME_BROADCAST_AMOUNT, gameListConfig.getSysOrigin()) ;
receiverCmd.setDimension(RankingDimension.GAME_WIN.getCode()); if (cost == null || cost.compareTo(BigDecimal.ZERO) <= 0) {
receiverCmd.setIncrementQuantity(amount); cost = BigDecimal.valueOf(5000L);
receiverCmd.setBizNo(gameRoundId); }
receiverCmd.setReqSysOrigin(ReqSysOrigin.of("LIKEI"));
rankingActivityService.accumulateRankingData(receiverCmd); if (request.getCurrencyDiff() >= cost.longValue()) {
UserProfileDTO userProfile = userProfileAppConvertor.toUserProfileDTO(
userProfileGateway.getByUserId(DataTypeUtils.toLong(request.getUserId())));
Map<Object, Object> build = OfficialNoticeUtils.buildUserProfile(userProfile);
build.put("gameUrl", gameListConfig.getCover());
build.put("currencyDiff", request.getCurrencyDiff());
imGroupClient.sendMessageBroadcast(
BroadcastGroupMsgBodyCmd.builder()
.toPlatform(SysOriginPlatformEnum.LIKEI)
.type(GroupMessageTypeEnum.GAME_BAISHUN_WIN)
.data(build)
.build()
);
}
}
private void incGameRankingRecord(BaishunChangeCurrencyRequest request, GameListConfig gameListConfig) {
if (gameListConfig == null || request.getCurrencyDiff() <= 0) {
return;
}
GameRankingIncrementCmd build = GameRankingIncrementCmd.builder()
.gameOrigin(GameOriginEnum.BAISHUN.name())
.gameId(gameListConfig.getGameId())
.gameName(gameListConfig.getName())
.gameCover(gameListConfig.getCover())
.sysOrigin(gameListConfig.getSysOrigin())
.amount(request.getCurrencyDiff())
.periodType("ALL")
.build();
gameRankingGateway.incrementPrizeAmount(build);
}
private void incGameRankingActivity(BaishunChangeCurrencyRequest request) {
if (gameId != null && gameId.equals(request.getGameId()) && request.getCurrencyDiff() > 0) {
RankingDataUpdateCmd receiverCmd = new RankingDataUpdateCmd();
receiverCmd.setUserId(DataTypeUtils.toLong(request.getUserId()));
receiverCmd.setUserSex(1);
receiverCmd.setActivityType(RankingActivityType.GREEDY_GAME.getCode());
receiverCmd.setCycleType(RankingCycleType.MONTHLY.getCode());
receiverCmd.setCycleKey("202511");
receiverCmd.setDimension(RankingDimension.GAME_WIN.getCode());
receiverCmd.setIncrementQuantity(request.getCurrencyDiff());
receiverCmd.setBizNo(request.getGameRoundId());
receiverCmd.setReqSysOrigin(ReqSysOrigin.of("LIKEI"));
rankingActivityService.accumulateRankingData(receiverCmd);
}
} }
private GoldReceiptCmd createReceipt(BaishunChangeCurrencyRequest param) { private GoldReceiptCmd createReceipt(BaishunChangeCurrencyRequest param) {

View File

@ -1,6 +1,9 @@
package com.red.circle.other.domain.game; package com.red.circle.other.domain.game;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
/** /**
@ -9,7 +12,9 @@ import lombok.experimental.Accessors;
* @author system * @author system
*/ */
@Data @Data
@Accessors(chain=true) @NoArgsConstructor
@AllArgsConstructor
@Builder
public class GameRankingIncrementCmd { public class GameRankingIncrementCmd {
/** /**

View File

@ -81,6 +81,8 @@ public class GameRankingGatewayImpl implements GameRankingGateway {
update.setOnInsert("gameOrigin", cmd.getGameOrigin()); update.setOnInsert("gameOrigin", cmd.getGameOrigin());
update.setOnInsert("gameId", cmd.getGameId()); update.setOnInsert("gameId", cmd.getGameId());
update.setOnInsert("periodType", cmd.getPeriodType()); update.setOnInsert("periodType", cmd.getPeriodType());
update.setOnInsert("gameCover", cmd.getGameCover());
update.setOnInsert("gameName", cmd.getGameName());
mongoTemplate.upsert(query, update, GameRanking.class); mongoTemplate.upsert(query, update, GameRanking.class);
} }

View File

@ -69,13 +69,20 @@ public class SpringTest {
@Test @Test
public void testGameRanking() { public void testGameRanking() {
String sysOrigin = "LIKEI"; // 例如: "LIKEI" String gameId = "1083";
String gameOrigin = "BAISHUN"; // 例如: "THIRD_PARTY" "APP"
String gameId = "1053"; // 例如: "1001"
Long prizeAmount = 500L; // 中奖金额单位
// 同时更新三个维度的排行榜 GameListConfig gameListConfig = gameListConfigService.getByGameId(gameId, GameOriginEnum.BAISHUN.name(), "LIKEI");
gameRankingGateway.incrementPrizeAmount(new GameRankingIncrementCmd());
GameRankingIncrementCmd build = GameRankingIncrementCmd.builder()
.gameOrigin(GameOriginEnum.BAISHUN.name())
.gameId(gameListConfig.getGameId())
.gameName(gameListConfig.getName())
.gameCover(gameListConfig.getCover())
.sysOrigin(gameListConfig.getSysOrigin())
.amount(100L)
.periodType("ALL")
.build();
gameRankingGateway.incrementPrizeAmount(build);
} }
@Test @Test