From d48ae288a69d2e89d061d20110b599f4c2d3b3f1 Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Tue, 23 Sep 2025 18:10:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BD=E7=8E=8B=E7=9A=87=E5=90=8E=E5=8F=91?= =?UTF-8?q?=E9=80=81=E7=A4=BC=E7=89=A9=E9=80=BB=E8=BE=91=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../award/WeeklyRewardsSentManager.java | 202 ++++++++++++++++++ .../src/test/java/TeamMonthBillTest.java | 5 + 2 files changed, 207 insertions(+) diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/manager/activity/award/WeeklyRewardsSentManager.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/manager/activity/award/WeeklyRewardsSentManager.java index 373f2634..44305389 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/manager/activity/award/WeeklyRewardsSentManager.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/manager/activity/award/WeeklyRewardsSentManager.java @@ -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 wealthTopUsers = getRankingData(sysOrigin, KingQueenType.WEALTH, lastWeekDate); + List charmTopUsers = getRankingData(sysOrigin, KingQueenType.CHARM, lastWeekDate); + + // 4. 获取奖励配置并更新 + List kingRewardList = activityConfigDTO.getButOneRewards(); + List 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 getRankingData(String sysOrigin, KingQueenType type, String lastWeekDate) { + try { + PageResult result = weekKingQueenClient.listRanking(sysOrigin, type, lastWeekDate, 1L, 3L).getBody(); + return result != null ? (List) 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 kingRewards, + List 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 wealthTopUsers, + List 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 charmTopUsers, + List 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); + } + /** * 发送代理活动奖励. */ diff --git a/rc-service/rc-service-other/other-start/src/test/java/TeamMonthBillTest.java b/rc-service/rc-service-other/other-start/src/test/java/TeamMonthBillTest.java index f6a38158..e2dfe175 100644 --- a/rc-service/rc-service-other/other-start/src/test/java/TeamMonthBillTest.java +++ b/rc-service/rc-service-other/other-start/src/test/java/TeamMonthBillTest.java @@ -45,4 +45,9 @@ public class TeamMonthBillTest { weeklyRewardsSentManager.sendLastWeekStarV1(SysOriginPlatformEnum.LIKEI); } + @Test + public void weeklyKingQueenSent() { + weeklyRewardsSentManager.sendLastWeekKingQueen(SysOriginPlatformEnum.LIKEI); + } + }