cp周榜发送指定性别礼物处理
This commit is contained in:
parent
a6502cc90d
commit
557e231b12
@ -279,7 +279,7 @@ public enum SendPropsOrigin {
|
|||||||
/**
|
/**
|
||||||
* 每赛季CP相互赠送礼物榜单.
|
* 每赛季CP相互赠送礼物榜单.
|
||||||
*/
|
*/
|
||||||
SEASON_CP_GIFT(""),
|
SEASON_CP_GIFT("Season cp gift"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 签到奖励
|
* 签到奖励
|
||||||
|
|||||||
@ -5,12 +5,17 @@ import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
|
|||||||
import com.red.circle.common.business.enums.SendPropsOrigin;
|
import com.red.circle.common.business.enums.SendPropsOrigin;
|
||||||
import com.red.circle.other.infra.common.activity.PropsActivitySendCommon;
|
import com.red.circle.other.infra.common.activity.PropsActivitySendCommon;
|
||||||
import com.red.circle.other.infra.common.activity.send.SendRewardGroup;
|
import com.red.circle.other.infra.common.activity.send.SendRewardGroup;
|
||||||
|
import com.red.circle.other.infra.common.props.PropsSendCommon;
|
||||||
import com.red.circle.other.infra.database.mongo.entity.user.count.WeekCpValueCount;
|
import com.red.circle.other.infra.database.mongo.entity.user.count.WeekCpValueCount;
|
||||||
import com.red.circle.other.infra.database.mongo.service.user.count.WeekCpValueCountService;
|
import com.red.circle.other.infra.database.mongo.service.user.count.WeekCpValueCountService;
|
||||||
|
import com.red.circle.other.infra.database.rds.entity.activity.PropsActivityRewardConfig;
|
||||||
import com.red.circle.other.infra.database.rds.entity.activity.PropsActivityRuleConfig;
|
import com.red.circle.other.infra.database.rds.entity.activity.PropsActivityRuleConfig;
|
||||||
|
import com.red.circle.other.infra.database.rds.service.activity.PropsActivityRewardConfigService;
|
||||||
import com.red.circle.other.infra.database.rds.service.activity.PropsActivityRuleConfigService;
|
import com.red.circle.other.infra.database.rds.service.activity.PropsActivityRuleConfigService;
|
||||||
import com.red.circle.other.infra.utils.SeasonUtils;
|
import com.red.circle.other.infra.utils.SeasonUtils;
|
||||||
import com.red.circle.other.inner.enums.activity.PropsActivityTypeEnum;
|
import com.red.circle.other.inner.enums.activity.PropsActivityTypeEnum;
|
||||||
|
import com.red.circle.other.inner.model.cmd.material.PrizeDescribe;
|
||||||
|
import com.red.circle.other.inner.model.cmd.material.PrizeDescribeRewardCmd;
|
||||||
import com.red.circle.tool.core.collection.CollectionUtils;
|
import com.red.circle.tool.core.collection.CollectionUtils;
|
||||||
import com.red.circle.tool.core.date.DateFormatConstant;
|
import com.red.circle.tool.core.date.DateFormatConstant;
|
||||||
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
|
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
|
||||||
@ -33,6 +38,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CP排行榜奖励发送管理器.
|
* CP排行榜奖励发送管理器.
|
||||||
@ -47,6 +53,8 @@ public class CpRankingRewardManager {
|
|||||||
private final PropsActivitySendCommon sendPropsManager;
|
private final PropsActivitySendCommon sendPropsManager;
|
||||||
private final WalletGoldClient walletGoldClient;
|
private final WalletGoldClient walletGoldClient;
|
||||||
private final StringRedisTemplate stringRedisTemplate;
|
private final StringRedisTemplate stringRedisTemplate;
|
||||||
|
private final PropsActivityRewardConfigService propsActivityRewardConfigService;
|
||||||
|
private final PropsSendCommon propsSendCommon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送上周周榜前三名奖励
|
* 发送上周周榜前三名奖励
|
||||||
@ -161,7 +169,7 @@ public class CpRankingRewardManager {
|
|||||||
String eventIdOne = String.format("WK_CP_RW_%s_%d_%d", weekDate, userOne, rank);
|
String eventIdOne = String.format("WK_CP_RW_%s_%d_%d", weekDate, userOne, rank);
|
||||||
if (checkAndSetIdempotent(eventIdOne, 15)) {
|
if (checkAndSetIdempotent(eventIdOne, 15)) {
|
||||||
sendGoldAndProps(sysOrigin, userOne, goldReward, rewardConfig.getResourceGroupId(),
|
sendGoldAndProps(sysOrigin, userOne, goldReward, rewardConfig.getResourceGroupId(),
|
||||||
rewardConfig.getId(), SendPropsOrigin.WEEK_CP_GIFT, eventIdOne);
|
rewardConfig.getId(), SendPropsOrigin.WEEK_CP_GIFT, eventIdOne, 0);
|
||||||
log.info("[CP周榜] 排名 {} 用户 {} 奖励发放成功, 金币: {}, 道具组: {}",
|
log.info("[CP周榜] 排名 {} 用户 {} 奖励发放成功, 金币: {}, 道具组: {}",
|
||||||
rank, userOne, goldReward, rewardConfig.getResourceGroupId());
|
rank, userOne, goldReward, rewardConfig.getResourceGroupId());
|
||||||
}
|
}
|
||||||
@ -170,7 +178,7 @@ public class CpRankingRewardManager {
|
|||||||
String eventIdTwo = String.format("WK_CP_RW_%s_%d_%d", weekDate, userTwo, rank);
|
String eventIdTwo = String.format("WK_CP_RW_%s_%d_%d", weekDate, userTwo, rank);
|
||||||
if (checkAndSetIdempotent(eventIdTwo, 15)) {
|
if (checkAndSetIdempotent(eventIdTwo, 15)) {
|
||||||
sendGoldAndProps(sysOrigin, userTwo, goldReward, rewardConfig.getResourceGroupId(),
|
sendGoldAndProps(sysOrigin, userTwo, goldReward, rewardConfig.getResourceGroupId(),
|
||||||
rewardConfig.getId(), SendPropsOrigin.WEEK_CP_GIFT, eventIdTwo);
|
rewardConfig.getId(), SendPropsOrigin.WEEK_CP_GIFT, eventIdTwo, 0);
|
||||||
log.info("[CP周榜] 排名 {} 用户 {} 奖励发放成功, 金币: {}, 道具组: {}",
|
log.info("[CP周榜] 排名 {} 用户 {} 奖励发放成功, 金币: {}, 道具组: {}",
|
||||||
rank, userTwo, goldReward, rewardConfig.getResourceGroupId());
|
rank, userTwo, goldReward, rewardConfig.getResourceGroupId());
|
||||||
}
|
}
|
||||||
@ -217,12 +225,87 @@ public class CpRankingRewardManager {
|
|||||||
Long resourceGroupId,
|
Long resourceGroupId,
|
||||||
Long trackId,
|
Long trackId,
|
||||||
SendPropsOrigin origin,
|
SendPropsOrigin origin,
|
||||||
String eventId) {
|
String eventId,
|
||||||
|
int sendIndex) {
|
||||||
// 发送金币
|
// 发送金币
|
||||||
addUserGold(userId, sysOrigin.name(), goldAmount, eventId);
|
addUserGold(userId, sysOrigin.name(), goldAmount, eventId);
|
||||||
|
|
||||||
|
SendRewardGroup param = SendRewardGroup.builder()
|
||||||
|
.trackId(trackId)
|
||||||
|
.sysOrigin(sysOrigin)
|
||||||
|
.acceptUserId(userId)
|
||||||
|
.resourceGroupId(resourceGroupId)
|
||||||
|
.origin(origin)
|
||||||
|
.build();
|
||||||
// 发送道具
|
// 发送道具
|
||||||
sendProps(sysOrigin, userId, resourceGroupId, trackId, origin);
|
List<PropsActivityRewardConfig> configs = propsActivityRewardConfigService.listByGroupId(
|
||||||
|
param.getResourceGroupId());
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(configs)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据 sendIndex 筛选要发送的配置
|
||||||
|
List<PropsActivityRewardConfig> filteredConfigs = filterConfigsBySendIndex(configs, sendIndex);
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(filteredConfigs)) {
|
||||||
|
log.warn("根据 sendIndex={} 筛选后没有可发送的配置, resourceGroupId={}", sendIndex, resourceGroupId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
propsSendCommon.send(new PrizeDescribeRewardCmd()
|
||||||
|
.setTrackId(param.getTrackId())
|
||||||
|
.setAcceptUserId(param.getAcceptUserId())
|
||||||
|
.setOrigin(param.getOrigin())
|
||||||
|
.setSysOrigin(param.getSysOrigin())
|
||||||
|
.setPrizes(toListPrizeDescribe(filteredConfigs))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据 sendIndex 筛选配置
|
||||||
|
* AVATAR_FRAME 类型根据 sendIndex 只保留第 sendIndex 个,其他类型正常返回
|
||||||
|
* 例如: configs = [AVATAR_FRAME, AVATAR_FRAME, CHAT_BUBBLE]
|
||||||
|
* sendIndex = 0 -> 返回 [第一个 AVATAR_FRAME, CHAT_BUBBLE]
|
||||||
|
* sendIndex = 1 -> 返回 [第二个 AVATAR_FRAME, CHAT_BUBBLE]
|
||||||
|
*/
|
||||||
|
private List<PropsActivityRewardConfig> filterConfigsBySendIndex(
|
||||||
|
List<PropsActivityRewardConfig> configs, int sendIndex) {
|
||||||
|
if (sendIndex < 0 || CollectionUtils.isEmpty(configs)) {
|
||||||
|
return configs;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<PropsActivityRewardConfig> result = Lists.newArrayList();
|
||||||
|
String avatarFrameType = "AVATAR_FRAME";
|
||||||
|
int avatarFrameCount = 0;
|
||||||
|
|
||||||
|
for (PropsActivityRewardConfig config : configs) {
|
||||||
|
if (Objects.equals(avatarFrameType, config.getType())) {
|
||||||
|
// AVATAR_FRAME 类型只保留第 sendIndex 个
|
||||||
|
if (avatarFrameCount == sendIndex) {
|
||||||
|
result.add(config);
|
||||||
|
}
|
||||||
|
avatarFrameCount++;
|
||||||
|
} else {
|
||||||
|
// 其他类型正常添加
|
||||||
|
result.add(config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<PrizeDescribe> toListPrizeDescribe(List<PropsActivityRewardConfig> configs) {
|
||||||
|
return configs.stream().map(this::toPrizeDescribe).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private PrizeDescribe toPrizeDescribe(PropsActivityRewardConfig config) {
|
||||||
|
return new PrizeDescribe()
|
||||||
|
.setTrackId(config.getGroupId())
|
||||||
|
.setType(config.getType())
|
||||||
|
.setDetailType(config.getDetailType())
|
||||||
|
.setContent(config.getContent())
|
||||||
|
.setQuantity(config.getQuantity());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user