diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/gift/strategy/RankCountStrategy.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/gift/strategy/RankCountStrategy.java index 8abffeb6..82fae59b 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/gift/strategy/RankCountStrategy.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/gift/strategy/RankCountStrategy.java @@ -396,21 +396,37 @@ public class RankCountStrategy implements GiftStrategy { return; } + // 先查询上架且进行中的活动 + List ongoingActivities = activityConfigService.listOngoingActivities(runningWater.getSysOrigin()); + if (CollectionUtils.isEmpty(ongoingActivities)) { + log.debug("没有进行中的活动,跳过排行榜累计"); + return; + } + // 生成本周周一的cycleKey(格式:yyyyMMdd) String cycleKey = generateWeeklyCycleKey(); // 计算实际金额 Long actualAmount = getActualAmount(isLuckyGift, runningWater.getGiftValue().getActualAmount(), luckyGiftRatio); - String giftType = runningWater.getGiftValue().getGiftType(); - - // 遍历所有排行榜活动类型 - for (RankingActivityType activityType : RankingActivityType.values()) { - if (giftType.contains(activityType.name())) { - // 累计对应活动类型的数据 - getDataUpdateCmd(runningWater, senderProfile.getUserSex(), cycleKey, actualAmount, activityType); - } + // 遍历活动,找到对应的type再累计对应活动类型的数据 + for (ActivityConfig activity : ongoingActivities) { + if (Objects.isNull(activity.getActivityType())) { + continue; } + if (!activity.getGiftIds().contains(String.valueOf(runningWater.getGiftId()))) { + continue; + } + + // 将活动类型转换为RankingActivityType枚举 + try { + RankingActivityType activityType = RankingActivityType.valueOf(activity.getActivityType()); + // 累计对应活动类型的数据 + getDataUpdateCmd(runningWater, senderProfile.getUserSex(), cycleKey, actualAmount, activityType); + } catch (IllegalArgumentException e) { + log.warn("未识别的活动类型: {}, activityId={}", activity.getActivityType(), activity.getId()); + } + } } catch (Exception e) { log.error("累计新排行榜数据异常, runningWaterId={}", runningWater.getId(), e); diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/sys/ActivityConfigService.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/sys/ActivityConfigService.java index 115beab4..71428932 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/sys/ActivityConfigService.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/sys/ActivityConfigService.java @@ -72,4 +72,11 @@ public interface ActivityConfigService { ActivityConfig getShowcaseActivityConf(Long templateId, String activityType); List listRecentlyEndedActivities(String sysOrigin, Integer limit); + + /** + * 查询上架且进行中的活动 + * @param sysOrigin 系统来源 + * @return 活动配置列表 + */ + List listOngoingActivities(String sysOrigin); } diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/sys/impl/ActivityConfigServiceImpl.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/sys/impl/ActivityConfigServiceImpl.java index 1df98823..c4e2e2c1 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/sys/impl/ActivityConfigServiceImpl.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/sys/impl/ActivityConfigServiceImpl.java @@ -266,4 +266,18 @@ public class ActivityConfigServiceImpl implements ActivityConfigService { ); } + @Override + public List listOngoingActivities(String sysOrigin) { + if (StringUtils.isBlank(sysOrigin)) { + return Lists.newArrayList(); + } + Date now = TimestampUtils.now(); + return mongoTemplate.find( + Query.query(Criteria.where("sysOrigin").is(sysOrigin) + .and("showcase").is(Boolean.TRUE) + .and("startTime").lte(now) + .and("endTime").gte(now)), + ActivityConfig.class); + } + }