活动奖励改为发送指定奖励

This commit is contained in:
tianfeng 2025-12-18 18:46:03 +08:00
parent 07b0a29d6c
commit 8ba98a46f4
3 changed files with 53 additions and 51 deletions

View File

@ -202,5 +202,15 @@ public enum PropsActivityTypeEnum {
*/ */
GAME_KTV_WEEK_RANK_REWARD, GAME_KTV_WEEK_RANK_REWARD,
/**
* 游戏王徽章奖励
*/
GAME_KING_BADGE,
/**
* 游戏王荣誉奖励
*/
GAME_KING_HONOR,
} }

View File

@ -4,16 +4,17 @@ import com.google.common.collect.Sets;
import com.red.circle.common.business.enums.SendPropsOrigin; import com.red.circle.common.business.enums.SendPropsOrigin;
import com.red.circle.mq.business.model.event.BadgeOperateEvent; import com.red.circle.mq.business.model.event.BadgeOperateEvent;
import com.red.circle.mq.rocket.business.producer.UserMqMessageService; import com.red.circle.mq.rocket.business.producer.UserMqMessageService;
import com.red.circle.other.app.common.props.SingleGroupRewardPoolCommon;
import com.red.circle.other.app.dto.clientobject.sys.ActivityConfigVO; import com.red.circle.other.app.dto.clientobject.sys.ActivityConfigVO;
import com.red.circle.other.infra.database.mongo.entity.ranking.RankingRewardSnapshot; import com.red.circle.other.infra.database.mongo.entity.ranking.RankingRewardSnapshot;
import com.red.circle.other.infra.database.mongo.service.ranking.RankingRewardSnapshotService; import com.red.circle.other.infra.database.mongo.service.ranking.RankingRewardSnapshotService;
import com.red.circle.other.infra.database.rds.entity.badge.BadgeConfig;
import com.red.circle.other.infra.database.rds.service.badge.BadgeConfigService;
import com.red.circle.other.inner.endpoint.material.props.PropsBackpackClient; import com.red.circle.other.inner.endpoint.material.props.PropsBackpackClient;
import com.red.circle.other.inner.enums.activity.PropsActivityTypeEnum;
import com.red.circle.other.inner.enums.material.PropsCommodityType; import com.red.circle.other.inner.enums.material.PropsCommodityType;
import com.red.circle.other.inner.model.cmd.material.DeletePropsCmd; import com.red.circle.other.inner.model.cmd.material.DeletePropsCmd;
import com.red.circle.other.inner.model.cmd.material.GivePropsBackpackCmd; import com.red.circle.other.inner.model.cmd.material.GivePropsBackpackCmd;
import com.red.circle.other.inner.model.dto.material.PropsActivityRewardConfigInfoDTO; import com.red.circle.other.inner.model.dto.activity.props.ActivityRewardPropsDTO;
import com.red.circle.other.inner.model.dto.sys.ActivityConfigDTO;
import com.red.circle.tool.core.collection.CollectionUtils; import com.red.circle.tool.core.collection.CollectionUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -34,7 +35,7 @@ public class RankingRewardGrantCmdExe {
private final RankingRewardSnapshotService snapshotService; private final RankingRewardSnapshotService snapshotService;
private final PropsBackpackClient propsBackpackClient; private final PropsBackpackClient propsBackpackClient;
private final UserMqMessageService userMqMessageService; private final UserMqMessageService userMqMessageService;
private final BadgeConfigService badgeConfigService; private final SingleGroupRewardPoolCommon singleGroupRewardPoolCommon;
/** /**
* 处理排名奖励变化. * 处理排名奖励变化.
@ -202,54 +203,46 @@ public class RankingRewardGrantCmdExe {
* 获取指定排名的奖励列表. * 获取指定排名的奖励列表.
*/ */
private List<RankingRewardSnapshot.RewardItem> getRewardsForRank(Integer rank, ActivityConfigVO activityConfig) { private List<RankingRewardSnapshot.RewardItem> getRewardsForRank(Integer rank, ActivityConfigVO activityConfig) {
if (activityConfig == null || CollectionUtils.isEmpty(activityConfig.getButOneRewards())) { if (activityConfig == null || activityConfig.getConfig() == null) {
return Collections.emptyList(); return Collections.emptyList();
} }
String rankRange = getRankRange(rank); ActivityConfigDTO config = activityConfig.getConfig();
return activityConfig.getButOneRewards().stream() List<ActivityRewardPropsDTO> badgeList = singleGroupRewardPoolCommon.listRewardProps(
.filter(r -> rankRange.equals(r.getRankRange())) config.getSysOrigin(), PropsActivityTypeEnum.GAME_KING_BADGE);
.flatMap(r -> { List<ActivityRewardPropsDTO> honorList = singleGroupRewardPoolCommon.listRewardProps(
if (CollectionUtils.isEmpty(r.getRewards())) { config.getSysOrigin(), PropsActivityTypeEnum.GAME_KING_HONOR);
return java.util.stream.Stream.empty();
}
return r.getRewards().stream()
.filter(this::isSupportedRewardType)
.map(this::convertToRewardItem);
})
.collect(Collectors.toList());
}
/** if (rank < 1 || rank > 10) {
* 判断是否为支持的奖励类型. return Collections.emptyList();
*/ }
private boolean isSupportedRewardType(PropsActivityRewardConfigInfoDTO dto) {
return ("PROPS".equals(dto.getType()) && "AVATAR_FRAME".equals(dto.getDetailType())) ||
("BADGE".equals(dto.getType()) && "HONOR_ACTIVITY".equals(dto.getDetailType()));
}
/** List<RankingRewardSnapshot.RewardItem> rewards = new ArrayList<>();
* 转换为奖励项.
*/
private RankingRewardSnapshot.RewardItem convertToRewardItem(PropsActivityRewardConfigInfoDTO dto) {
return new RankingRewardSnapshot.RewardItem()
.setType(dto.getType())
.setDetailType(dto.getDetailType())
.setContent(dto.getContent())
.setQuantity(dto.getQuantity())
.setBadgeName(dto.getBadgeName());
}
/** int index = rank - 1;
* 获取排名范围.
*/ if (CollectionUtils.isNotEmpty(badgeList) && index < badgeList.size()) {
private String getRankRange(Integer rank) { ActivityRewardPropsDTO badge = badgeList.get(index);
if (rank == 1) return "1"; RankingRewardSnapshot.RewardItem badgeItem = new RankingRewardSnapshot.RewardItem()
if (rank == 2) return "2"; .setType(badge.getType())
if (rank == 3) return "3"; .setDetailType(badge.getDetailType())
if (rank <= 10) return "4-10"; .setContent(badge.getContent())
return "other"; .setQuantity(badge.getQuantity());
rewards.add(badgeItem);
}
if (CollectionUtils.isNotEmpty(honorList) && index < honorList.size()) {
ActivityRewardPropsDTO honor = honorList.get(index);
RankingRewardSnapshot.RewardItem honorItem = new RankingRewardSnapshot.RewardItem()
.setType(honor.getType())
.setDetailType(honor.getDetailType())
.setContent(honor.getContent())
.setQuantity(honor.getQuantity());
rewards.add(honorItem);
}
return rewards;
} }
/** /**
@ -260,13 +253,12 @@ public class RankingRewardGrantCmdExe {
ActivityConfigVO activityConfig) { ActivityConfigVO activityConfig) {
List<RankingRewardSnapshot.RankingUserSnapshot> snapshotUsers = currentRankingUsers.stream() List<RankingRewardSnapshot.RankingUserSnapshot> snapshotUsers = currentRankingUsers.stream()
.map(user -> { .map(user -> {
String rankRange = getRankRange(user.getRank());
List<RankingRewardSnapshot.RewardItem> rewards = getRewardsForRank(user.getRank(), activityConfig); List<RankingRewardSnapshot.RewardItem> rewards = getRewardsForRank(user.getRank(), activityConfig);
return new RankingRewardSnapshot.RankingUserSnapshot() return new RankingRewardSnapshot.RankingUserSnapshot()
.setUserId(user.getUserId()) .setUserId(user.getUserId())
.setRank(user.getRank()) .setRank(user.getRank())
.setRankRange(rankRange) .setRankRange(String.valueOf(user.getRank()))
.setScore(user.getScore()) .setScore(user.getScore())
.setRewards(rewards); .setRewards(rewards);
}) })

View File

@ -74,7 +74,7 @@ public class RankingActivityServiceImpl implements RankingActivityService {
String cachedJson = redisService.getString(cacheKey); String cachedJson = redisService.getString(cacheKey);
if (cachedJson != null) { if (cachedJson != null) {
return JSON.parseArray(cachedJson, RankingUserVO.class); // return JSON.parseArray(cachedJson, RankingUserVO.class);
} }
RankingListQueryCmd top4Cmd = new RankingListQueryCmd(); RankingListQueryCmd top4Cmd = new RankingListQueryCmd();