国王皇后发送礼物逻辑新增
This commit is contained in:
parent
04c88b1640
commit
d48ae288a6
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送代理活动奖励.
|
||||
*/
|
||||
|
||||
@ -45,4 +45,9 @@ public class TeamMonthBillTest {
|
||||
weeklyRewardsSentManager.sendLastWeekStarV1(SysOriginPlatformEnum.LIKEI);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void weeklyKingQueenSent() {
|
||||
weeklyRewardsSentManager.sendLastWeekKingQueen(SysOriginPlatformEnum.LIKEI);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user