国王皇后发送礼物逻辑新增

This commit is contained in:
tianfeng 2025-09-23 18:10:59 +08:00
parent 04c88b1640
commit d48ae288a6
2 changed files with 207 additions and 0 deletions

View File

@ -5,6 +5,9 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
import com.red.circle.common.business.enums.SendPropsOrigin;
import com.red.circle.framework.core.asserts.ResponseAssert;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.framework.dto.ResultResponse;
import com.red.circle.other.app.convertor.material.GiftAppConvertor;
import com.red.circle.other.app.convertor.sys.ActivityAppConvertor;
import com.red.circle.other.app.dto.clientobject.activity.ActivityResourceCO;
@ -36,13 +39,22 @@ import com.red.circle.other.infra.database.rds.service.sys.WeekStarGiftService;
import com.red.circle.other.infra.database.rds.service.sys.WeekStarGroupService;
import com.red.circle.other.infra.utils.DateFormatEnum;
import com.red.circle.other.infra.utils.ZonedDateTimeUtils;
import com.red.circle.other.inner.endpoint.activity.PropsActivityClient;
import com.red.circle.other.inner.endpoint.sys.SysActivityConfigClient;
import com.red.circle.other.inner.endpoint.user.user.WeekKingQueenClient;
import com.red.circle.other.inner.enums.activity.KingQueenType;
import com.red.circle.other.inner.enums.activity.PropsActivityTypeEnum;
import com.red.circle.other.inner.enums.activity.WeekStarGiftTypeEnum;
import com.red.circle.other.inner.enums.config.EnumConfigKey;
import com.red.circle.other.inner.model.cmd.activity.SendActivityRewardCmd;
import com.red.circle.other.inner.model.cmd.sys.ActivityConfigBackQryCmd;
import com.red.circle.other.inner.model.dto.activity.rule.CommonContent;
import com.red.circle.other.inner.model.dto.activity.rule.FriendshipCardContent;
import com.red.circle.other.inner.model.dto.sys.*;
import com.red.circle.tool.core.collection.CollectionUtils;
import com.red.circle.tool.core.date.DateFormatConstant;
import com.red.circle.tool.core.date.LocalDateTimeUtils;
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@ -82,6 +94,9 @@ public class WeeklyRewardsSentManager {
private final PropsActivityRuleConfigService propsActivityRuleConfigService;
private final ActivityFriendshipCardChampionService activityFriendshipCardChampionService;
private final ActivityFriendshipCardHistoryService activityFriendshipCardHistoryService;
private final SysActivityConfigClient sysActivityConfigClient;
private final WeekKingQueenClient weekKingQueenClient;
private final PropsActivityClient propsActivityClient;
/**
* 每周一发送奖励业务.
@ -103,6 +118,9 @@ public class WeeklyRewardsSentManager {
// 上周周星奖励
sendLastWeekStarV1(sysOriginPlatformEnum);
// 上周国王王后奖励
sendLastWeekKingQueen(sysOriginPlatformEnum);
// CP
processSendRewardCp(sysOriginPlatformEnum, null);
@ -114,6 +132,190 @@ public class WeeklyRewardsSentManager {
log.warn("[execute] 每周奖励统一发送 end:{}", LocalDateTimeUtils.nowFormat("yyyy-MM-dd"));
}
/**
* 发送上周国王王后奖励
*
* 业务流程
* 1. 获取当前系统的活动配置信息
* 2. 检查奖励发放状态如果已发放则直接返回
* 3. 获取上周财富榜(国王)和魅力榜(王后)的前3名用户
* 4. 获取对应的奖励配置信息并更新
* 5. 为每个获奖用户发放相应等级的奖励
* 6. 更新奖励发放状态避免重复发放
*
* @param sysOriginPlatformEnum 系统平台枚举用于区分不同的语音系统平台
*/
public void sendLastWeekKingQueen(SysOriginPlatformEnum sysOriginPlatformEnum) {
String sysOrigin = sysOriginPlatformEnum.getSysOrigin();
log.info("[KingQueen] 开始发送上周国王王后奖励, 系统平台: {}", sysOrigin);
try {
// 1. 获取活动配置信息
ActivityConfigDTO activityConfigDTO = getActivityConfig(sysOrigin);
if (activityConfigDTO == null) {
log.warn("[KingQueen] 未找到有效的活动配置, 系统平台: {}", sysOrigin);
return;
}
// 2. 检查奖励是否已发放
if (Boolean.TRUE.equals(activityConfigDTO.getAwardStatus())) {
log.info("[KingQueen] 奖励已发放,跳过处理, 系统平台: {}", sysOrigin);
return;
}
Long activityId = activityConfigDTO.getId();
String lastWeekDate = getLastWeekDate();
// 3. 获取上周排行榜数据
List<SysActivityCountDTO> wealthTopUsers = getRankingData(sysOrigin, KingQueenType.WEALTH, lastWeekDate);
List<SysActivityCountDTO> charmTopUsers = getRankingData(sysOrigin, KingQueenType.CHARM, lastWeekDate);
// 4. 获取奖励配置并更新
List<ActivityConfigRewardsDTO> kingRewardList = activityConfigDTO.getButOneRewards();
List<ActivityConfigRewardsDTO> queenRewardList = activityConfigDTO.getButTwoRewards();
updateActivityRewards(activityId, kingRewardList, queenRewardList);
// 5. 发放国王(财富榜)奖励
sendKingRewards(sysOriginPlatformEnum, activityId, wealthTopUsers, kingRewardList);
// 6. 发放王后(魅力榜)奖励
sendQueenRewards(sysOriginPlatformEnum, activityId, charmTopUsers, queenRewardList);
// 7. 更新活动奖励状态为已发放
sysActivityConfigClient.updateAwardStatusTrue(activityId);
log.info("[KingQueen] 上周国王王后奖励发放完成, 系统平台: {}, 活动ID: {}", sysOrigin, activityId);
} catch (Exception e) {
log.error("[KingQueen] 发送上周国王王后奖励异常, 系统平台: {}, 错误信息: {}", sysOrigin, e.getMessage(), e);
}
}
/**
* 获取活动配置信息
*/
private ActivityConfigDTO getActivityConfig(String sysOrigin) {
try {
ActivityConfigBackQryCmd query = new ActivityConfigBackQryCmd();
query.setSysOrigin(sysOrigin);
return ResponseAssert.requiredSuccess(sysActivityConfigClient.effectiveActivityConf(query));
} catch (Exception e) {
log.error("[KingQueen] 获取活动配置失败, 系统平台: {}, 错误信息: {}", sysOrigin, e.getMessage(), e);
return null;
}
}
/**
* 获取排行榜数据
*/
private List<SysActivityCountDTO> getRankingData(String sysOrigin, KingQueenType type, String lastWeekDate) {
try {
PageResult<SysActivityCountDTO> result = weekKingQueenClient.listRanking(sysOrigin, type, lastWeekDate, 1L, 3L).getBody();
return result != null ? (List<SysActivityCountDTO>) result.getRecords() : Collections.emptyList();
} catch (Exception e) {
log.error("[KingQueen] 获取{}排行榜数据失败, 系统平台: {}, 日期: {}, 错误信息: {}",
type.name(), sysOrigin, lastWeekDate, e.getMessage(), e);
return Collections.emptyList();
}
}
/**
* 更新活动奖励配置
*/
private void updateActivityRewards(Long activityId, List<ActivityConfigRewardsDTO> kingRewards,
List<ActivityConfigRewardsDTO> queenRewards) {
try {
sysActivityConfigClient.updateRewards(
new ActivityConfigRewardsInfoDTO()
.setActivityId(activityId)
.setButOneCnfRewards(kingRewards)
.setButTwoCnfRewards(queenRewards)
);
} catch (Exception e) {
log.error("[KingQueen] 更新活动奖励配置失败, 活动ID: {}, 错误信息: {}", activityId, e.getMessage(), e);
throw e;
}
}
/**
* 发放国王(财富榜)奖励
*/
private void sendKingRewards(SysOriginPlatformEnum sysOriginPlatformEnum, Long activityId,
List<SysActivityCountDTO> wealthTopUsers,
List<ActivityConfigRewardsDTO> kingRewardList) {
if (CollectionUtils.isEmpty(wealthTopUsers) || CollectionUtils.isEmpty(kingRewardList)) {
log.warn("[KingQueen] 财富榜用户或奖励配置为空,跳过国王奖励发放");
return;
}
for (int i = 0; i < Math.min(wealthTopUsers.size(), kingRewardList.size()); i++) {
try {
SysActivityCountDTO user = wealthTopUsers.get(i);
ActivityConfigRewardsDTO reward = kingRewardList.get(i);
// 发送奖励
sendRewardToUser(sysOriginPlatformEnum, activityId, user.getUserId(), reward.getResourceGroupId());
// 更新奖励状态
sysActivityConfigClient.updateButOneRewardsStatusTrue(activityId, reward.getRewardId());
log.info("[KingQueen] 国王奖励发放成功 - 排名: {}, 用户ID: {}, 奖励组ID: {}",
i + 1, user.getUserId(), reward.getResourceGroupId());
} catch (Exception e) {
log.error("[KingQueen] 国王奖励发放失败 - 排名: {}, 错误信息: {}", i + 1, e.getMessage(), e);
}
}
}
/**
* 发放王后(魅力榜)奖励
*/
private void sendQueenRewards(SysOriginPlatformEnum sysOriginPlatformEnum, Long activityId,
List<SysActivityCountDTO> charmTopUsers,
List<ActivityConfigRewardsDTO> queenRewardList) {
if (CollectionUtils.isEmpty(charmTopUsers) || CollectionUtils.isEmpty(queenRewardList)) {
log.warn("[KingQueen] 魅力榜用户或奖励配置为空,跳过王后奖励发放");
return;
}
for (int i = 0; i < Math.min(charmTopUsers.size(), queenRewardList.size()); i++) {
try {
SysActivityCountDTO user = charmTopUsers.get(i);
ActivityConfigRewardsDTO reward = queenRewardList.get(i);
// 发送奖励
sendRewardToUser(sysOriginPlatformEnum, activityId, user.getUserId(), reward.getResourceGroupId());
// 更新奖励状态
sysActivityConfigClient.updateButTwoRewardsStatusTrue(activityId, reward.getRewardId());
log.info("[KingQueen] 王后奖励发放成功 - 排名: {}, 用户ID: {}, 奖励组ID: {}",
i + 1, user.getUserId(), reward.getResourceGroupId());
} catch (Exception e) {
log.error("[KingQueen] 王后奖励发放失败 - 排名: {}, 错误信息: {}", i + 1, e.getMessage(), e);
}
}
}
/**
* 向用户发送奖励
*/
private void sendRewardToUser(SysOriginPlatformEnum sysOriginPlatformEnum, Long activityId,
Long userId, Long resourceGroupId) {
propsActivityClient.sendActivityReward(new SendActivityRewardCmd()
.setTrackId(activityId)
.setOrigin(SendPropsOrigin.ACTIVITY_REWARD)
.setSysOrigin(sysOriginPlatformEnum)
.setSourceGroupId(resourceGroupId)
.setAcceptUserId(userId)
);
}
private String getLastWeekDate() {
return com.red.circle.tool.core.date.ZonedDateTimeUtils.format(ZonedDateTimeAsiaRiyadhUtils.getLastWeekMonday(),
DateFormatConstant.yyyyMMdd);
}
/**
* 发送代理活动奖励.
*/

View File

@ -45,4 +45,9 @@ public class TeamMonthBillTest {
weeklyRewardsSentManager.sendLastWeekStarV1(SysOriginPlatformEnum.LIKEI);
}
@Test
public void weeklyKingQueenSent() {
weeklyRewardsSentManager.sendLastWeekKingQueen(SysOriginPlatformEnum.LIKEI);
}
}