From e29fc767d931da654f01b7a64846d35160fb01ce Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Fri, 12 Sep 2025 15:40:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B4=BB=E5=8A=A8=E5=A5=96?= =?UTF-8?q?=E5=93=81=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/api/SysActivityConfigClientApi.java | 8 + .../room/WeekKingQueenController.java | 9 ++ .../query/WeekKingQueenActivityExe.java | 152 ++++++++++++++++++ .../activity/WeekKingQueenServiceImpl.java | 16 +- .../sys/ActivityConfigRewardsCO.java | 6 + .../clientobject/sys/ActivityConfigVO.java | 68 ++++++++ .../activity/WeekKingQueenService.java | 5 + .../service/sys/ActivityConfigService.java | 4 + .../sys/impl/ActivityConfigServiceImpl.java | 11 ++ .../sys/SysActivityConfigClientEndpoint.java | 5 + .../sys/SysActivityConfigClientService.java | 5 + .../SysActivityConfigClientServiceImpl.java | 5 + 12 files changed, 288 insertions(+), 6 deletions(-) create mode 100644 rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/query/WeekKingQueenActivityExe.java create mode 100644 rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/sys/ActivityConfigVO.java diff --git a/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/sys/api/SysActivityConfigClientApi.java b/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/sys/api/SysActivityConfigClientApi.java index 9dc0c8df..c890c3b7 100644 --- a/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/sys/api/SysActivityConfigClientApi.java +++ b/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/sys/api/SysActivityConfigClientApi.java @@ -93,6 +93,14 @@ public interface SysActivityConfigClientApi { ResultResponse> listActivityConf( @RequestBody @Validated ActivityConfigBackQryCmd query); + /** + * 查询有效的活动配置. + */ + @PostMapping("/conf/effective") + ResultResponse effectiveActivityConf( + @RequestBody @Validated ActivityConfigBackQryCmd query); + + /** * 获取模版信息. */ diff --git a/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/activity/room/WeekKingQueenController.java b/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/activity/room/WeekKingQueenController.java index 425d962f..02b80e13 100644 --- a/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/activity/room/WeekKingQueenController.java +++ b/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/activity/room/WeekKingQueenController.java @@ -5,6 +5,7 @@ import com.red.circle.framework.dto.PageResult; import com.red.circle.framework.web.controller.BaseController; import com.red.circle.other.app.dto.clientobject.activity.UserCharmWealthContributeCO; import com.red.circle.other.app.dto.clientobject.activity.UserRankCO; +import com.red.circle.other.app.dto.clientobject.sys.ActivityConfigVO; import com.red.circle.other.app.dto.cmd.activity.WeekKingQueenRankingQueryCmd; import com.red.circle.other.app.service.activity.WeekKingQueenService; import java.util.List; @@ -43,6 +44,14 @@ public class WeekKingQueenController extends BaseController { return weekKingQueenService.listRanking(cmd); } + /** + * 获取有效活动 + */ + @GetMapping("/effective") + public ActivityConfigVO getEffective(@Validated AppExtCommand cmd) { + return weekKingQueenService.getEffectiveActivity(cmd); + } + /** * 我本周贡献. * diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/query/WeekKingQueenActivityExe.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/query/WeekKingQueenActivityExe.java new file mode 100644 index 00000000..7a08a0bf --- /dev/null +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/query/WeekKingQueenActivityExe.java @@ -0,0 +1,152 @@ +package com.red.circle.other.app.command.activity.query; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.red.circle.common.business.dto.cmd.AppExtCommand; +import com.red.circle.common.business.enums.PropsActivityRewardEnum; +import com.red.circle.framework.core.asserts.ResponseAssert; +import com.red.circle.other.app.dto.clientobject.sys.ActivityConfigRewardsCO; +import com.red.circle.other.app.dto.clientobject.sys.ActivityConfigVO; +import com.red.circle.other.inner.endpoint.material.gift.GiftConfigClient; +import com.red.circle.other.inner.endpoint.material.props.BadgeSourceClient; +import com.red.circle.other.inner.endpoint.material.props.PropsActivityRewardConfigClient; +import com.red.circle.other.inner.endpoint.sys.SysActivityConfigClient; +import com.red.circle.other.inner.model.cmd.material.BadgePictureMapQry; +import com.red.circle.other.inner.model.cmd.sys.ActivityConfigBackQryCmd; +import com.red.circle.other.inner.model.dto.material.BadgePictureConfigDTO; +import com.red.circle.other.inner.model.dto.material.GiftConfigDTO; +import com.red.circle.other.inner.model.dto.material.PropsActivityRewardConfigInfoDTO; +import com.red.circle.other.inner.model.dto.sys.ActivityConfigDTO; +import com.red.circle.other.inner.model.dto.sys.ActivityConfigRewardsDTO; +import com.red.circle.other.inner.model.dto.sys.ActivityTemplateValueDTO; +import com.red.circle.tool.core.collection.CollectionUtils; +import com.red.circle.tool.core.text.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@Service +@RequiredArgsConstructor +public class WeekKingQueenActivityExe { + private final SysActivityConfigClient sysActivityConfigClient; + private final GiftConfigClient giftConfigClient; + private final BadgeSourceClient badgeSourceClient; + private final PropsActivityRewardConfigClient propsActivityRewardConfigClient; + + public ActivityConfigVO getEffectiveActivity(AppExtCommand cmd) { + ActivityConfigBackQryCmd query = new ActivityConfigBackQryCmd(); + query.setSysOrigin(cmd.getReqSysOrigin().getOrigin()); + ActivityConfigDTO activityConfigDTO = ResponseAssert.requiredSuccess(sysActivityConfigClient.effectiveActivityConf(query)); + + if (activityConfigDTO == null) { + return null; + } + + List activityConfigs = List.of(activityConfigDTO); + Map templateValueMap = ResponseAssert.requiredSuccess( + sysActivityConfigClient.mapByIds( + activityConfigs.stream().map(ActivityConfigDTO::getTemplateId).collect( + Collectors.toSet()))); + + Map> rewardMaps = this.mapSourceGroup( + cmd.getReqSysOrigin().getOrigin(), getRewardGroupIds(activityConfigs)); + + Map sysGiftConfigMap = ResponseAssert.requiredSuccess( + giftConfigClient.mapByIds( + activityConfigs.stream() + .map(ActivityConfigDTO::getGiftIds) + .filter(CollectionUtils::isNotEmpty) + .flatMap(Collection::stream) + .filter(Objects::nonNull) + .map(Long::parseLong) + .collect(Collectors.toSet()))); + + return activityConfigs.stream().map(conf -> + new ActivityConfigVO() + .setConfig(conf) + .setButOneRewards(getRewards(rewardMaps, conf.getButOneRewards())) + .setButTwoRewards(getRewards(rewardMaps, conf.getButTwoRewards())) + .setTemplateName(Optional.ofNullable(templateValueMap.get(conf.getTemplateId())) + .map(ActivityTemplateValueDTO::getName) + .orElse("")) + .setGifts(Optional.ofNullable(conf.getGiftIds()) + .map(giftIds -> giftIds.stream() + .map(giftId -> sysGiftConfigMap.get(Long.parseLong(giftId))) + .collect(Collectors.toList())) + .orElseGet(Lists::newArrayList)) + .setStatus(conf.status()) + .setCountDown(conf.countDown()) + ).toList().get(0); + } + + public Map> mapSourceGroup(String sysOrigin, + Set sourceGroupIds) { + if (StringUtils.isBlank(sysOrigin) || CollectionUtils.isEmpty(sourceGroupIds)) { + return Maps.newHashMap(); + } + Map> propsActivityRewardMap = ResponseAssert.requiredSuccess( + propsActivityRewardConfigClient + .mapByGroupIds(sourceGroupIds)); + Map badgePictureMap = ResponseAssert.requiredSuccess( + badgeSourceClient + .mapPictureByIds( + new BadgePictureMapQry() + .setBadgeIds(getBadgeIds(propsActivityRewardMap)) + .setSysOrigin(sysOrigin) + ) + ); + propsActivityRewardMap.values().stream().flatMap(Collection::stream) + .filter(props -> Objects.equals(props.getType(), + PropsActivityRewardEnum.BADGE.name())) + .forEach(props -> { + BadgePictureConfigDTO picture = badgePictureMap.get(Long.valueOf(props.getContent())); + if (Objects.isNull(picture)) { + return; + } + props.setCover(picture.getSelectUrl()); + props.setSourceUrl(picture.getAnimationUrl()); + }); + return propsActivityRewardMap; + } + + private Set getBadgeIds( + Map> propsActivityRewardMap) { + return propsActivityRewardMap.values().stream().flatMap(Collection::stream) + .filter(props -> Objects.equals(props.getType(), + PropsActivityRewardEnum.BADGE.name())) + .map(props -> Long.valueOf(props.getContent())) + .collect(Collectors.toSet()); + } + + private List getRewards( + Map> rewardMaps, + List rewardGroup) { + return Optional.ofNullable(rewardGroup) + .map(rewards -> rewards.stream().map(reward -> new ActivityConfigRewardsCO() + .setRankRange(reward.getRankRange()) + .setResourceGroupId(reward.getResourceGroupId()) + .setRewards(rewardMaps.get(reward.getResourceGroupId())) + ).collect(Collectors.toList())) + .orElseGet(Lists::newArrayList); + } + + + private Set getRewardGroupIds(List activityConfigs) { + return Stream.of(activityConfigs.stream().map(ActivityConfigDTO::getButOneRewards) + .filter(CollectionUtils::isNotEmpty) + .flatMap(Collection::stream) + .map(ActivityConfigRewardsDTO::getResourceGroupId) + .collect(Collectors.toSet()), + activityConfigs.stream().map(ActivityConfigDTO::getButTwoRewards) + .filter(CollectionUtils::isNotEmpty) + .flatMap(Collection::stream) + .map(ActivityConfigRewardsDTO::getResourceGroupId) + .collect(Collectors.toSet())) + .flatMap(Collection::stream) + .collect(Collectors.toSet()); + } + +} diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/activity/WeekKingQueenServiceImpl.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/activity/WeekKingQueenServiceImpl.java index 59d61f51..44afbd9e 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/activity/WeekKingQueenServiceImpl.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/activity/WeekKingQueenServiceImpl.java @@ -2,16 +2,14 @@ package com.red.circle.other.app.service.activity; import com.red.circle.common.business.dto.cmd.AppExtCommand; import com.red.circle.framework.dto.PageResult; -import com.red.circle.other.app.command.activity.query.ActivityRewardQueryExe; -import com.red.circle.other.app.command.activity.query.WeekKingQueenCountDownQueryExe; -import com.red.circle.other.app.command.activity.query.WeekKingQueenRankingQueryExe; -import com.red.circle.other.app.command.activity.query.WeekKingQueenUserContributeQueryExe; +import com.red.circle.other.app.command.activity.query.*; import com.red.circle.other.app.dto.clientobject.activity.UserCharmWealthContributeCO; import com.red.circle.other.app.dto.clientobject.activity.UserRankCO; +import com.red.circle.other.app.dto.clientobject.sys.ActivityConfigVO; import com.red.circle.other.app.dto.cmd.activity.WeekKingQueenRankingQueryCmd; -import java.util.List; + +import java.util.*; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; /** @@ -27,12 +25,18 @@ public class WeekKingQueenServiceImpl implements WeekKingQueenService { private final WeekKingQueenRankingQueryExe weekKingQueenRankingQueryExe; private final WeekKingQueenCountDownQueryExe weekKingQueenCountDownQueryExe; private final WeekKingQueenUserContributeQueryExe weekKingQueenUserContributeQueryExe; + private final WeekKingQueenActivityExe weekKingQueenActivityExe; @Override public PageResult listRanking(WeekKingQueenRankingQueryCmd cmd) { return weekKingQueenRankingQueryExe.execute(cmd); } + @Override + public ActivityConfigVO getEffectiveActivity(AppExtCommand cmd) { + return weekKingQueenActivityExe.getEffectiveActivity(cmd); + } + @Override public String countDown() { return weekKingQueenCountDownQueryExe.execute(); diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/sys/ActivityConfigRewardsCO.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/sys/ActivityConfigRewardsCO.java index 16b199de..74aecda4 100644 --- a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/sys/ActivityConfigRewardsCO.java +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/sys/ActivityConfigRewardsCO.java @@ -2,6 +2,7 @@ package com.red.circle.other.app.dto.clientobject.sys; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.red.circle.other.inner.model.dto.material.PropsActivityRewardConfigInfoDTO; import com.red.circle.other.inner.model.dto.user.UserProfileDTO; import java.io.Serializable; import java.util.List; @@ -35,6 +36,11 @@ public class ActivityConfigRewardsCO implements Serializable { */ private ActivityPropsGroupCO reward; + /** + * 奖品信息. + */ + private List rewards; + /** * 获奖用户. */ diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/sys/ActivityConfigVO.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/sys/ActivityConfigVO.java new file mode 100644 index 00000000..6061e441 --- /dev/null +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/sys/ActivityConfigVO.java @@ -0,0 +1,68 @@ +package com.red.circle.other.app.dto.clientobject.sys; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.red.circle.other.inner.model.dto.material.GiftConfigDTO; +import com.red.circle.other.inner.model.dto.sys.ActivityConfigDTO; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +/** + * 活动设置. + */ +@Data +@Accessors(chain = true) +public class ActivityConfigVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 配置信息. + */ + private ActivityConfigDTO config; + + /** + * 资源组信息1. + */ + private List butOneRewards; + + /** + * 资源组信息2. + */ + private List butTwoRewards; + + /** + * 活动礼物,集合. + */ + private List gifts; + + /** + * 模版名称. + */ + private String templateName; + + /** + * 创建人昵称. + */ + private String createUserName; + + /** + * 修改人昵称. + */ + @JsonSerialize(using = ToStringSerializer.class) + private String updateUserName; + + /** + * 剩余时间. + */ + private Long countDown; + + /** + * 0 未开始,1 开始,2 已结束. + */ + private Integer status; + +} diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/activity/WeekKingQueenService.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/activity/WeekKingQueenService.java index 882772c0..105ea068 100644 --- a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/activity/WeekKingQueenService.java +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/activity/WeekKingQueenService.java @@ -4,7 +4,10 @@ import com.red.circle.common.business.dto.cmd.AppExtCommand; import com.red.circle.framework.dto.PageResult; import com.red.circle.other.app.dto.clientobject.activity.UserCharmWealthContributeCO; import com.red.circle.other.app.dto.clientobject.activity.UserRankCO; +import com.red.circle.other.app.dto.clientobject.sys.ActivityConfigVO; import com.red.circle.other.app.dto.cmd.activity.WeekKingQueenRankingQueryCmd; +import com.red.circle.other.inner.model.dto.sys.ActivityConfigDTO; + import java.util.List; /** @@ -16,6 +19,8 @@ public interface WeekKingQueenService { PageResult listRanking(WeekKingQueenRankingQueryCmd cmd); + ActivityConfigVO getEffectiveActivity(AppExtCommand cmd); + String countDown(); UserCharmWealthContributeCO getUserContribute(AppExtCommand cmd); 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 c2b5a9fc..775d7b69 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 @@ -64,4 +64,8 @@ public interface ActivityConfigService { */ List list(ActivityConfigBackQryCmd query); + /** + * 查询有效i的活动配置 + */ + ActivityConfig getEffectiveActivityConf(ActivityConfigBackQryCmd query); } 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 5c354885..134aede3 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 @@ -222,4 +222,15 @@ public class ActivityConfigServiceImpl implements ActivityConfigService { , ActivityConfig.class); } + @Override + public ActivityConfig getEffectiveActivityConf(ActivityConfigBackQryCmd query) { + Criteria criteria = Criteria.where("sysOrigin").is(query.getSysOrigin()); + criteria.and("endTime").gt(TimestampUtils.now()); + + return mongoTemplate.findOne(Query.query(criteria) + .with(Sort.by(Sort.Order.desc("id"))) + .limit(1) + , ActivityConfig.class); + } + } diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/sys/SysActivityConfigClientEndpoint.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/sys/SysActivityConfigClientEndpoint.java index b664d1f9..d4144e0f 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/sys/SysActivityConfigClientEndpoint.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/sys/SysActivityConfigClientEndpoint.java @@ -91,6 +91,11 @@ public class SysActivityConfigClientEndpoint implements SysActivityConfigClientA return ResultResponse.success(sysActivityConfigClientService.listActivityConf(query)); } + @Override + public ResultResponse effectiveActivityConf(ActivityConfigBackQryCmd query) { + return ResultResponse.success(sysActivityConfigClientService.getEffectiveActivityConf(query)); + } + @Override public ResultResponse> mapByIds(Set collect) { return ResultResponse.success(sysActivityConfigClientService.mapByIds(collect)); diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/sys/SysActivityConfigClientService.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/sys/SysActivityConfigClientService.java index ae414633..705134f0 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/sys/SysActivityConfigClientService.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/sys/SysActivityConfigClientService.java @@ -67,6 +67,11 @@ public interface SysActivityConfigClientService { */ List listActivityConf(ActivityConfigBackQryCmd query); + /** + * 查询有效的活动配置 + */ + ActivityConfigDTO getEffectiveActivityConf(ActivityConfigBackQryCmd query); + /** * 获取模版信息. */ diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/sys/impl/SysActivityConfigClientServiceImpl.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/sys/impl/SysActivityConfigClientServiceImpl.java index e477acd7..f0936c88 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/sys/impl/SysActivityConfigClientServiceImpl.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/sys/impl/SysActivityConfigClientServiceImpl.java @@ -91,6 +91,11 @@ public class SysActivityConfigClientServiceImpl implements SysActivityConfigClie return sysActivityConfigInnerConvertor.toListActivityConf(activityConfigService.list(query)); } + @Override + public ActivityConfigDTO getEffectiveActivityConf(ActivityConfigBackQryCmd query) { + return sysActivityConfigInnerConvertor.toActivityConfigDTO(activityConfigService.getEffectiveActivityConf(query)); + } + @Override public Map mapByIds(Set collect) { return sysActivityConfigInnerConvertor.toMapActivityTemplateValueDTO(