礼物消息消费逻辑,新增MAGIC 魔法礼物类型

This commit is contained in:
tianfeng 2026-01-22 16:15:36 +08:00
parent acf72c9b0f
commit 078e53e937
5 changed files with 84 additions and 36 deletions

View File

@ -46,4 +46,9 @@ public enum GiftTabEnum {
* 幸运礼物. * 幸运礼物.
*/ */
LUCKY_GIFT, LUCKY_GIFT,
/**
* 魔法礼物(新爆率的幸运礼物)
*/
MAGIC,
} }

View File

@ -616,6 +616,13 @@ public class GiftCountStrategy implements GiftStrategy {
return giftValue.getGiftType().contains(GiftTabEnum.LUCKY_GIFT.name()); return giftValue.getGiftType().contains(GiftTabEnum.LUCKY_GIFT.name());
} }
/**
* 是否魔法礼物
*/
private boolean isMagicGift(GiftValue giftValue) {
return giftValue.getGiftType().contains(GiftTabEnum.MAGIC.name());
}
/** /**
* 判断是否为活动礼物 * 判断是否为活动礼物
*/ */
@ -643,6 +650,11 @@ public class GiftCountStrategy implements GiftStrategy {
return acceptAmount.multiply(ratio).setScale(0, RoundingMode.DOWN).longValue(); return acceptAmount.multiply(ratio).setScale(0, RoundingMode.DOWN).longValue();
} }
if (isMagicGift(giftValue)) {
BigDecimal ratio = new BigDecimal("0.1");
return acceptAmount.multiply(ratio).setScale(0, RoundingMode.DOWN).longValue();
}
if (isActivityGift(giftValue) || isCpGift(giftValue)) { if (isActivityGift(giftValue) || isCpGift(giftValue)) {
BigDecimal ratio = new BigDecimal("0.7"); BigDecimal ratio = new BigDecimal("0.7");
return acceptAmount.multiply(ratio).setScale(0, RoundingMode.DOWN).longValue(); return acceptAmount.multiply(ratio).setScale(0, RoundingMode.DOWN).longValue();

View File

@ -87,10 +87,12 @@ public class GiftPrizeAcceptStrategy implements GiftStrategy {
// 当前礼物是否为幸运礼物 // 当前礼物是否为幸运礼物
boolean isLuckyGift = runningWater.getGiftValue().getGiftType() boolean isLuckyGift = runningWater.getGiftValue().getGiftType()
.contains(GiftTabEnum.LUCKY_GIFT.name()); .contains(GiftTabEnum.LUCKY_GIFT.name());
boolean isCpGift = runningWater.getGiftValue().getGiftType() boolean isMagicGift = runningWater.getGiftValue().getGiftType()
.contains(GiftTabEnum.LUCKY_GIFT.name()); .contains(GiftTabEnum.MAGIC.name());
// 发送金币 // 发送金币
if (GiftCurrencyType.GOLD.eq(runningWater.getGiftValue().getCurrencyType()) && !isLuckyGift) { if (GiftCurrencyType.GOLD.eq(runningWater.getGiftValue().getCurrencyType())
&& !isLuckyGift
&& !isMagicGift) {
Long consumeId = walletGoldClient.changeBalance(GoldReceiptCmd.builder() Long consumeId = walletGoldClient.changeBalance(GoldReceiptCmd.builder()
.appIncome() .appIncome()

View File

@ -113,6 +113,10 @@ public class GiftRocketListener implements GiftStrategy {
return gameLuckyGiftCommon.getLuckyGiftShareRatio(runningWater.getSysOrigin()); return gameLuckyGiftCommon.getLuckyGiftShareRatio(runningWater.getSysOrigin());
} }
if (isMagicGift(giftValue)) {
return new BigDecimal("0.1");
}
if (isActivityGift(giftValue) || isCpGift(giftValue)) { if (isActivityGift(giftValue) || isCpGift(giftValue)) {
return new BigDecimal("0.7"); return new BigDecimal("0.7");
} }
@ -144,6 +148,14 @@ public class GiftRocketListener implements GiftStrategy {
giftValue.getGiftType().contains(GiftTabEnum.CP.name()); giftValue.getGiftType().contains(GiftTabEnum.CP.name());
} }
/**
* 判断是否为魔法礼物
*/
private boolean isMagicGift(GiftValue giftValue) {
return giftValue.getGiftType() != null &&
giftValue.getGiftType().contains(GiftTabEnum.MAGIC.name());
}
/** /**
* 计算实际金额 * 计算实际金额
*/ */

View File

@ -43,12 +43,9 @@ import com.red.circle.other.inner.model.dto.sys.SysActivityCountType;
import com.red.circle.tool.core.collection.CollectionUtils; import com.red.circle.tool.core.collection.CollectionUtils;
import com.red.circle.tool.core.date.TimestampUtils; import com.red.circle.tool.core.date.TimestampUtils;
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils; import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
import com.red.circle.tool.core.json.JacksonUtils;
import com.red.circle.tool.core.regex.RegexConstant; import com.red.circle.tool.core.regex.RegexConstant;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@ -106,9 +103,7 @@ public class RankCountStrategy implements GiftStrategy {
GiftValue giftValue = runningWater.getGiftValue(); GiftValue giftValue = runningWater.getGiftValue();
// 幸运礼物比例 // 幸运礼物比例
boolean isLuckyGift = isLuckyGift(giftValue); BigDecimal giftRatio = getGiftRatio(runningWater);
BigDecimal luckyGiftRatio = getLuckyGiftShareRatio(runningWater);
log.info("RankCountStrategy.processor---幸运礼物比例:{}", luckyGiftRatio);
// 周星礼物排行榜计算 // 周星礼物排行榜计算
boolean isWeekStar = isWeekStar(giftValue); boolean isWeekStar = isWeekStar(giftValue);
@ -125,20 +120,22 @@ public class RankCountStrategy implements GiftStrategy {
if (isWeekKingQueen) { if (isWeekKingQueen) {
// king & queen // king & queen
// ActualAmount: * userSize 发送给所有用户礼物的总价值
// GiftValue: * quantity 单个礼物的总价值
weekKingQueenCountService.incrThisWeekQuantity(runningWater.getSysOrigin(), weekKingQueenCountService.incrThisWeekQuantity(runningWater.getSysOrigin(),
runningWater.getUserId(), runningWater.getUserId(),
KingQueenType.WEALTH, KingQueenType.WEALTH,
getActualAmount(isLuckyGift, giftValue.getActualAmount(), luckyGiftRatio)); getActualAmount(giftValue.getActualAmount(), giftRatio));
// queen // queen
runningWater.getAcceptUsers().forEach(accept -> runningWater.getAcceptUsers().forEach(accept ->
weekKingQueenCountService.incrThisWeekQuantity(runningWater.getSysOrigin(), weekKingQueenCountService.incrThisWeekQuantity(runningWater.getSysOrigin(),
accept.getAcceptUserId(), accept.getAcceptUserId(),
KingQueenType.CHARM, KingQueenType.CHARM,
getActualAmount(isLuckyGift, giftValue.getGiftValue(), luckyGiftRatio))); getActualAmount(giftValue.getGiftValue(), giftRatio)));
} }
// 新排行榜累计数据 // 新排行榜累计数据
accumulateNewRankingData(runningWater, isLuckyGift, luckyGiftRatio); accumulateNewRankingData(runningWater, giftRatio);
// cp // cp
if (isCpGift(giftValue)) { if (isCpGift(giftValue)) {
@ -146,31 +143,39 @@ public class RankCountStrategy implements GiftStrategy {
} }
// 首页排行榜 // 首页排行榜
homeRank(runningWater, luckyGiftRatio); homeRank(runningWater, giftRatio);
giftGiveRunningWaterService.addLog(runningWater.getId(), "结束:排行榜相关统计"); giftGiveRunningWaterService.addLog(runningWater.getId(), "结束:排行榜相关统计");
} }
private BigDecimal getLuckyGiftShareRatio(GiftGiveRunningWater runningWater) { private BigDecimal getGiftRatio(GiftGiveRunningWater runningWater) {
return gameLuckyGiftCommon.getLuckyGiftShareRatio(runningWater.getSysOrigin()); GiftValue giftValue = runningWater.getGiftValue();
if (isLuckyGift(giftValue)) {
gameLuckyGiftCommon.getLuckyGiftShareRatio(runningWater.getSysOrigin());
}
if (isMagicGift(giftValue)) {
return new BigDecimal("0.1");
}
if (isActivityGift(giftValue) || isCpGift(giftValue)) {
return new BigDecimal("0.7");
}
return BigDecimal.ONE;
} }
/** /**
* 获得礼物额度. * 获得礼物额度.
*/ */
private Long getActualAmount(boolean checkLuckyGift, BigDecimal amount, private Long getActualAmount(BigDecimal amount, BigDecimal giftRatio) {
BigDecimal luckyGiftRatio) { return amount.multiply(giftRatio).setScale(0, RoundingMode.DOWN).longValue();
if (checkLuckyGift) {
return amount.multiply(luckyGiftRatio).setScale(0, RoundingMode.DOWN).longValue();
}
return amount.longValue();
} }
/** /**
* KTV游戏统计. * KTV游戏统计.
*/ */
private void gameKtv(GiftGiveRunningWater runningWater, BigDecimal luckyGiftRatio) { private void gameKtv(GiftGiveRunningWater runningWater, BigDecimal giftRatio) {
// 演唱者一定是一号麦且必须要有已点歌曲i标识id // 演唱者一定是一号麦且必须要有已点歌曲i标识id
List<GiftAcceptUser> users = runningWater.getAcceptUsers().stream().filter(acceptUsers -> List<GiftAcceptUser> users = runningWater.getAcceptUsers().stream().filter(acceptUsers ->
@ -179,9 +184,8 @@ public class RankCountStrategy implements GiftStrategy {
if (Objects.nonNull(runningWater.getSongId()) && CollectionUtils.isNotEmpty(users)) { if (Objects.nonNull(runningWater.getSongId()) && CollectionUtils.isNotEmpty(users)) {
gameKtvCommon.incIntegral(users.get(0).getAcceptUserId(), runningWater.getSongId(), gameKtvCommon.incIntegral(users.get(0).getAcceptUserId(), runningWater.getSongId(),
getActualAmount(isLuckyGift(runningWater.getGiftValue()), getActualAmount( runningWater.getGiftValue().getGiftValue(),
runningWater.getGiftValue().getGiftValue(), giftRatio)
luckyGiftRatio)
); );
} }
} }
@ -262,9 +266,7 @@ public class RankCountStrategy implements GiftStrategy {
/** /**
* 首页排行榜. * 首页排行榜.
*/ */
private void homeRank(GiftGiveRunningWater runningWater, BigDecimal luckyGiftRatio) { private void homeRank(GiftGiveRunningWater runningWater, BigDecimal giftRatio) {
boolean isLuckyGift = isLuckyGift(runningWater.getGiftValue());
// 房间榜 // 房间榜
if (runningWater.getOriginId().matches(RegexConstant.NUMBER)) { if (runningWater.getOriginId().matches(RegexConstant.NUMBER)) {
@ -273,23 +275,21 @@ public class RankCountStrategy implements GiftStrategy {
if (Objects.nonNull(roomProfile)) { if (Objects.nonNull(roomProfile)) {
appRankCountService.incrRoomWealthQuantity(runningWater.getSysOrigin() appRankCountService.incrRoomWealthQuantity(runningWater.getSysOrigin()
, roomProfile.getId() , roomProfile.getId()
, getActualAmount(isLuckyGift, runningWater.getGiftValue().getActualAmount(), , getActualAmount(runningWater.getGiftValue().getActualAmount(), giftRatio)
luckyGiftRatio)
); );
} }
} }
// 财富榜 // 财富榜
appRankCountService.incrWealthQuantity(runningWater.getSysOrigin(), appRankCountService.incrWealthQuantity(runningWater.getSysOrigin(),
runningWater.getUserId(), runningWater.getUserId(),
getActualAmount(isLuckyGift, runningWater.getGiftValue().getActualAmount(), luckyGiftRatio) getActualAmount(runningWater.getGiftValue().getActualAmount(), giftRatio)
); );
// 魅力榜 // 魅力榜
runningWater.getAcceptUsers() runningWater.getAcceptUsers()
.forEach(accept -> appRankCountService.incrCharmQuantity(runningWater.getSysOrigin(), .forEach(accept -> appRankCountService.incrCharmQuantity(runningWater.getSysOrigin(),
accept.getAcceptUserId(), accept.getAcceptUserId(),
getActualAmount(isLuckyGift, runningWater.getGiftValue().getGiftValue(), getActualAmount(runningWater.getGiftValue().getGiftValue(), giftRatio)));
luckyGiftRatio)));
} }
@ -398,10 +398,27 @@ public class RankCountStrategy implements GiftStrategy {
return giftValue.getGiftType().contains(GiftTabEnum.CP.name()); return giftValue.getGiftType().contains(GiftTabEnum.CP.name());
} }
/**
* 判断是否为活动礼物
*/
private boolean isActivityGift(GiftValue giftValue) {
return giftValue.getGiftType() != null &&
giftValue.getGiftType().contains(GiftTabEnum.ACTIVITY.name());
}
/**
* 判断是否为魔法礼物
*/
private boolean isMagicGift(GiftValue giftValue) {
return giftValue.getGiftType() != null &&
giftValue.getGiftType().contains(GiftTabEnum.MAGIC.name());
}
/** /**
* 累计新排行榜数据 * 累计新排行榜数据
*/ */
private void accumulateNewRankingData(GiftGiveRunningWater runningWater, boolean isLuckyGift, BigDecimal luckyGiftRatio) { private void accumulateNewRankingData(GiftGiveRunningWater runningWater, BigDecimal giftRatio) {
try { try {
// 先查询上架且进行中的活动 // 先查询上架且进行中的活动
@ -412,7 +429,7 @@ public class RankCountStrategy implements GiftStrategy {
} }
// 计算实际金额 // 计算实际金额
Long actualAmount = getActualAmount(isLuckyGift, runningWater.getGiftValue().getActualAmount(), luckyGiftRatio); Long actualAmount = getActualAmount(runningWater.getGiftValue().getActualAmount(), giftRatio);
// 遍历活动找到对应的type再累计对应活动类型的数据 // 遍历活动找到对应的type再累计对应活动类型的数据
for (ActivityConfig activity : ongoingActivities) { for (ActivityConfig activity : ongoingActivities) {