累计榜
This commit is contained in:
parent
f9b4d8468a
commit
26af4f0410
@ -4,7 +4,14 @@ import com.alibaba.fastjson.JSON;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.red.circle.mq.business.model.event.gift.OfflineProcessGiftEvent;
|
import com.red.circle.mq.business.model.event.gift.OfflineProcessGiftEvent;
|
||||||
import com.red.circle.other.app.common.gift.GameLuckyGiftCommon;
|
import com.red.circle.other.app.common.gift.GameLuckyGiftCommon;
|
||||||
|
import com.red.circle.other.app.dto.cmd.activity.RankingDataUpdateCmd;
|
||||||
|
import com.red.circle.other.app.service.activity.RankingActivityService;
|
||||||
|
import com.red.circle.other.domain.gateway.user.UserProfileGateway;
|
||||||
import com.red.circle.other.domain.gateway.user.ability.UserRegionGateway;
|
import com.red.circle.other.domain.gateway.user.ability.UserRegionGateway;
|
||||||
|
import com.red.circle.other.domain.model.user.UserProfile;
|
||||||
|
import com.red.circle.other.domain.ranking.RankingActivityType;
|
||||||
|
import com.red.circle.other.domain.ranking.RankingCycleType;
|
||||||
|
import com.red.circle.other.domain.ranking.RankingDimension;
|
||||||
import com.red.circle.other.infra.common.game.GameKtvCommon;
|
import com.red.circle.other.infra.common.game.GameKtvCommon;
|
||||||
import com.red.circle.other.infra.database.cache.service.user.UserCpValueCacheService;
|
import com.red.circle.other.infra.database.cache.service.user.UserCpValueCacheService;
|
||||||
import com.red.circle.other.infra.database.mongo.dto.TemporaryActivityCountParam;
|
import com.red.circle.other.infra.database.mongo.dto.TemporaryActivityCountParam;
|
||||||
@ -33,6 +40,7 @@ import com.red.circle.other.inner.enums.material.GiftTabEnum;
|
|||||||
import com.red.circle.other.inner.model.dto.sys.SysActivityCountType;
|
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.json.JacksonUtils;
|
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;
|
||||||
@ -56,6 +64,7 @@ public class RankCountStrategy implements GiftStrategy {
|
|||||||
|
|
||||||
private final GameKtvCommon gameKtvCommon;
|
private final GameKtvCommon gameKtvCommon;
|
||||||
private final CpValueService cpValueService;
|
private final CpValueService cpValueService;
|
||||||
|
private final UserProfileGateway userProfileGateway;
|
||||||
private final UserRegionGateway userRegionGateway;
|
private final UserRegionGateway userRegionGateway;
|
||||||
private final AppRankCountService appRankCountService;
|
private final AppRankCountService appRankCountService;
|
||||||
private final GameLuckyGiftCommon gameLuckyGiftCommon;
|
private final GameLuckyGiftCommon gameLuckyGiftCommon;
|
||||||
@ -69,6 +78,7 @@ public class RankCountStrategy implements GiftStrategy {
|
|||||||
private final WeekKingQueenCountService weekKingQueenCountService;
|
private final WeekKingQueenCountService weekKingQueenCountService;
|
||||||
private final GiftGiveRunningWaterService giftGiveRunningWaterService;
|
private final GiftGiveRunningWaterService giftGiveRunningWaterService;
|
||||||
private final TemporaryActivityCountService temporaryActivityCountService;
|
private final TemporaryActivityCountService temporaryActivityCountService;
|
||||||
|
private final RankingActivityService rankingActivityService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void processor(OfflineProcessGiftEvent event) {
|
public void processor(OfflineProcessGiftEvent event) {
|
||||||
@ -143,6 +153,9 @@ public class RankCountStrategy implements GiftStrategy {
|
|||||||
getActualAmount(isLuckyGift, giftValue.getGiftValue(), luckyGiftRatio)));
|
getActualAmount(isLuckyGift, giftValue.getGiftValue(), luckyGiftRatio)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 新排行榜累计数据
|
||||||
|
accumulateNewRankingData(runningWater, isLuckyGift, luckyGiftRatio);
|
||||||
|
|
||||||
// cp
|
// cp
|
||||||
if (isCpGift(giftValue)) {
|
if (isCpGift(giftValue)) {
|
||||||
countCpValue(runningWater);
|
countCpValue(runningWater);
|
||||||
@ -158,7 +171,7 @@ public class RankCountStrategy implements GiftStrategy {
|
|||||||
sysActivityCount(runningWater);
|
sysActivityCount(runningWater);
|
||||||
|
|
||||||
// KTV游戏统计
|
// KTV游戏统计
|
||||||
gameKtv(runningWater, luckyGiftRatio);
|
// gameKtv(runningWater, luckyGiftRatio);
|
||||||
|
|
||||||
giftGiveRunningWaterService.addLog(runningWater.getId(), "结束:排行榜相关统计");
|
giftGiveRunningWaterService.addLog(runningWater.getId(), "结束:排行榜相关统计");
|
||||||
}
|
}
|
||||||
@ -370,4 +383,60 @@ public class RankCountStrategy implements GiftStrategy {
|
|||||||
return giftValue.getGiftType().contains(GiftTabEnum.CP.name());
|
return giftValue.getGiftType().contains(GiftTabEnum.CP.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 累计新排行榜数据
|
||||||
|
*/
|
||||||
|
private void accumulateNewRankingData(GiftGiveRunningWater runningWater, boolean isLuckyGift, BigDecimal luckyGiftRatio) {
|
||||||
|
try {
|
||||||
|
// 获取送礼用户信息
|
||||||
|
UserProfile senderProfile = userProfileGateway.getByUserId(runningWater.getUserId());
|
||||||
|
if (Objects.isNull(senderProfile)) {
|
||||||
|
log.warn("累计排行榜数据失败:未找到送礼用户信息, userId={}", runningWater.getUserId());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成本周周一的cycleKey(格式:yyyyMMdd)
|
||||||
|
String cycleKey = generateWeeklyCycleKey();
|
||||||
|
|
||||||
|
// 计算实际金额
|
||||||
|
Long actualAmount = getActualAmount(isLuckyGift, runningWater.getGiftValue().getActualAmount(), luckyGiftRatio);
|
||||||
|
|
||||||
|
String giftType = runningWater.getGiftValue().getGiftType();
|
||||||
|
|
||||||
|
if (giftType.contains(RankingActivityType.REVOLUTION_DAY.name())) {
|
||||||
|
// 累计送礼用户数据(革命日)
|
||||||
|
getDataUpdateCmd(runningWater, senderProfile.getUserSex(), cycleKey, actualAmount, RankingActivityType.REVOLUTION_DAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (giftType.contains(RankingActivityType.HEROES_DAY.name())) {
|
||||||
|
// 累计接收用户数据(英雄日 )
|
||||||
|
getDataUpdateCmd(runningWater, senderProfile.getUserSex(), cycleKey, actualAmount, RankingActivityType.HEROES_DAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("累计新排行榜数据异常, runningWaterId={}", runningWater.getId(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void getDataUpdateCmd(GiftGiveRunningWater runningWater, Integer userSex, String cycleKey, Long actualAmount, RankingActivityType activityType) {
|
||||||
|
RankingDataUpdateCmd receiverCmd = new RankingDataUpdateCmd();
|
||||||
|
receiverCmd.setUserId(runningWater.getUserId());
|
||||||
|
receiverCmd.setUserSex(userSex);
|
||||||
|
receiverCmd.setActivityType(activityType.getCode());
|
||||||
|
receiverCmd.setCycleType(RankingCycleType.WEEKLY.getCode());
|
||||||
|
receiverCmd.setCycleKey(cycleKey);
|
||||||
|
receiverCmd.setDimension(RankingDimension.CONSUME_AMOUNT.getCode());
|
||||||
|
receiverCmd.setIncrementQuantity(actualAmount);
|
||||||
|
receiverCmd.setBizNo(runningWater.getId().toString());
|
||||||
|
rankingActivityService.accumulateRankingData(receiverCmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成本周周一的cycleKey
|
||||||
|
* 格式:yyyyMMdd
|
||||||
|
*/
|
||||||
|
private String generateWeeklyCycleKey() {
|
||||||
|
return ZonedDateTimeAsiaRiyadhUtils.nowWeekMondayToInt().toString();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,85 +15,11 @@ public enum RankingDimension {
|
|||||||
/**
|
/**
|
||||||
* 消费金额(金币)
|
* 消费金额(金币)
|
||||||
*
|
*
|
||||||
* 适用活动:国王/皇后榜、送礼榜
|
* 适用活动:打赏礼物消费金币
|
||||||
*/
|
*/
|
||||||
CONSUME_AMOUNT(1, "消费金额", "金币"),
|
CONSUME_AMOUNT(1, "消费金额", "金币"),
|
||||||
|
|
||||||
/**
|
;
|
||||||
* 收入金额(钻石)
|
|
||||||
*
|
|
||||||
* 适用活动:收礼榜、主播收益榜
|
|
||||||
*/
|
|
||||||
INCOME_AMOUNT(2, "收入金额", "钻石"),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 直播时长
|
|
||||||
*
|
|
||||||
* 适用活动:直播时长榜
|
|
||||||
* 单位:秒
|
|
||||||
*/
|
|
||||||
LIVE_DURATION(3, "直播时长", "秒"),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 充值金额
|
|
||||||
*
|
|
||||||
* 适用活动:充值榜
|
|
||||||
* 单位:钻石
|
|
||||||
*/
|
|
||||||
RECHARGE_AMOUNT(4, "充值金额", "钻石"),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 魅力值
|
|
||||||
*
|
|
||||||
* 适用活动:魅力榜
|
|
||||||
* 综合计算:收礼 + 粉丝 + 互动等
|
|
||||||
*/
|
|
||||||
CHARM_VALUE(5, "魅力值", "分"),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 贵族积分
|
|
||||||
*
|
|
||||||
* 适用活动:贵族榜
|
|
||||||
* 根据贵族等级计算积分
|
|
||||||
*/
|
|
||||||
NOBILITY_SCORE(6, "贵族积分", "分"),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 粉丝数量
|
|
||||||
*
|
|
||||||
* 适用活动:粉丝榜
|
|
||||||
*/
|
|
||||||
FANS_COUNT(7, "粉丝数量", "人"),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 活跃度积分
|
|
||||||
*
|
|
||||||
* 适用活动:活跃度榜
|
|
||||||
* 综合计算:登录 + 互动 + 时长等
|
|
||||||
*/
|
|
||||||
ACTIVITY_SCORE(8, "活跃度积分", "分"),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 家族贡献值
|
|
||||||
*
|
|
||||||
* 适用活动:家族榜
|
|
||||||
*/
|
|
||||||
FAMILY_CONTRIBUTION(9, "家族贡献值", "分"),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 礼物数量
|
|
||||||
*
|
|
||||||
* 适用活动:特定礼物榜
|
|
||||||
*/
|
|
||||||
GIFT_COUNT(10, "礼物数量", "个"),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 经验值
|
|
||||||
*
|
|
||||||
* 适用活动:等级榜
|
|
||||||
*/
|
|
||||||
EXPERIENCE(11, "经验值", "点");
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 维度编码
|
* 维度编码
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user