增加活动奖品列表

This commit is contained in:
tianfeng 2025-09-12 15:40:31 +08:00
parent 3f14fa244e
commit e29fc767d9
12 changed files with 288 additions and 6 deletions

View File

@ -93,6 +93,14 @@ public interface SysActivityConfigClientApi {
ResultResponse<List<ActivityConfigDTO>> listActivityConf(
@RequestBody @Validated ActivityConfigBackQryCmd query);
/**
* 查询有效的活动配置.
*/
@PostMapping("/conf/effective")
ResultResponse<ActivityConfigDTO> effectiveActivityConf(
@RequestBody @Validated ActivityConfigBackQryCmd query);
/**
* 获取模版信息.
*/

View File

@ -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);
}
/**
* 我本周贡献.
*

View File

@ -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<ActivityConfigDTO> activityConfigs = List.of(activityConfigDTO);
Map<Long, ActivityTemplateValueDTO> templateValueMap = ResponseAssert.requiredSuccess(
sysActivityConfigClient.mapByIds(
activityConfigs.stream().map(ActivityConfigDTO::getTemplateId).collect(
Collectors.toSet())));
Map<Long, List<PropsActivityRewardConfigInfoDTO>> rewardMaps = this.mapSourceGroup(
cmd.getReqSysOrigin().getOrigin(), getRewardGroupIds(activityConfigs));
Map<Long, GiftConfigDTO> 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<Long, List<PropsActivityRewardConfigInfoDTO>> mapSourceGroup(String sysOrigin,
Set<Long> sourceGroupIds) {
if (StringUtils.isBlank(sysOrigin) || CollectionUtils.isEmpty(sourceGroupIds)) {
return Maps.newHashMap();
}
Map<Long, List<PropsActivityRewardConfigInfoDTO>> propsActivityRewardMap = ResponseAssert.requiredSuccess(
propsActivityRewardConfigClient
.mapByGroupIds(sourceGroupIds));
Map<Long, BadgePictureConfigDTO> 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<Long> getBadgeIds(
Map<Long, List<PropsActivityRewardConfigInfoDTO>> 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<ActivityConfigRewardsCO> getRewards(
Map<Long, List<PropsActivityRewardConfigInfoDTO>> rewardMaps,
List<ActivityConfigRewardsDTO> 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<Long> getRewardGroupIds(List<ActivityConfigDTO> 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());
}
}

View File

@ -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<UserRankCO> listRanking(WeekKingQueenRankingQueryCmd cmd) {
return weekKingQueenRankingQueryExe.execute(cmd);
}
@Override
public ActivityConfigVO getEffectiveActivity(AppExtCommand cmd) {
return weekKingQueenActivityExe.getEffectiveActivity(cmd);
}
@Override
public String countDown() {
return weekKingQueenCountDownQueryExe.execute();

View File

@ -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<PropsActivityRewardConfigInfoDTO> rewards;
/**
* 获奖用户.
*/

View File

@ -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<ActivityConfigRewardsCO> butOneRewards;
/**
* 资源组信息2.
*/
private List<ActivityConfigRewardsCO> butTwoRewards;
/**
* 活动礼物,集合.
*/
private List<GiftConfigDTO> gifts;
/**
* 模版名称.
*/
private String templateName;
/**
* 创建人昵称.
*/
private String createUserName;
/**
* 修改人昵称.
*/
@JsonSerialize(using = ToStringSerializer.class)
private String updateUserName;
/**
* 剩余时间.
*/
private Long countDown;
/**
* 0 未开始1 开始2 已结束.
*/
private Integer status;
}

View File

@ -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<UserRankCO> listRanking(WeekKingQueenRankingQueryCmd cmd);
ActivityConfigVO getEffectiveActivity(AppExtCommand cmd);
String countDown();
UserCharmWealthContributeCO getUserContribute(AppExtCommand cmd);

View File

@ -64,4 +64,8 @@ public interface ActivityConfigService {
*/
List<ActivityConfig> list(ActivityConfigBackQryCmd query);
/**
* 查询有效i的活动配置
*/
ActivityConfig getEffectiveActivityConf(ActivityConfigBackQryCmd query);
}

View File

@ -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);
}
}

View File

@ -91,6 +91,11 @@ public class SysActivityConfigClientEndpoint implements SysActivityConfigClientA
return ResultResponse.success(sysActivityConfigClientService.listActivityConf(query));
}
@Override
public ResultResponse<ActivityConfigDTO> effectiveActivityConf(ActivityConfigBackQryCmd query) {
return ResultResponse.success(sysActivityConfigClientService.getEffectiveActivityConf(query));
}
@Override
public ResultResponse<Map<Long, ActivityTemplateValueDTO>> mapByIds(Set<Long> collect) {
return ResultResponse.success(sysActivityConfigClientService.mapByIds(collect));

View File

@ -67,6 +67,11 @@ public interface SysActivityConfigClientService {
*/
List<ActivityConfigDTO> listActivityConf(ActivityConfigBackQryCmd query);
/**
* 查询有效的活动配置
*/
ActivityConfigDTO getEffectiveActivityConf(ActivityConfigBackQryCmd query);
/**
* 获取模版信息.
*/

View File

@ -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<Long, ActivityTemplateValueDTO> mapByIds(Set<Long> collect) {
return sysActivityConfigInnerConvertor.toMapActivityTemplateValueDTO(