累计排行榜活动处理
This commit is contained in:
parent
34d7532f04
commit
cbf67d93b3
@ -48,17 +48,4 @@ public class RankingActivityRestController extends BaseController {
|
|||||||
public RankingListCO getRankingList(@RequestBody @Validated RankingListQueryCmd cmd) {
|
public RankingListCO getRankingList(@RequestBody @Validated RankingListQueryCmd cmd) {
|
||||||
return rankingActivityService.getRankingList(cmd);
|
return rankingActivityService.getRankingList(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询用户排名
|
|
||||||
*
|
|
||||||
* 用途:查询指定用户在某活动的排名信息
|
|
||||||
*
|
|
||||||
* @param cmd 查询命令
|
|
||||||
* @return 用户排名信息
|
|
||||||
*/
|
|
||||||
@PostMapping("/my-rank")
|
|
||||||
public UserRankInfoCO getUserRank(@RequestBody @Validated UserRankQueryCmd cmd) {
|
|
||||||
return rankingActivityService.getUserRank(cmd);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -1,15 +1,21 @@
|
|||||||
package com.red.circle.other.app.command.activity.query;
|
package com.red.circle.other.app.command.activity.query;
|
||||||
|
|
||||||
import com.red.circle.other.app.convertor.user.RankingActivityConvertor;
|
import com.red.circle.other.app.convertor.user.RankingActivityConvertor;
|
||||||
|
import com.red.circle.other.app.convertor.user.UserProfileAppConvertor;
|
||||||
import com.red.circle.other.app.dto.clientobject.activity.RankingActivityRecordCO;
|
import com.red.circle.other.app.dto.clientobject.activity.RankingActivityRecordCO;
|
||||||
import com.red.circle.other.app.dto.clientobject.activity.RankingListCO;
|
import com.red.circle.other.app.dto.clientobject.activity.RankingListCO;
|
||||||
import com.red.circle.other.app.dto.clientobject.activity.UserRankInfoCO;
|
import com.red.circle.other.app.dto.clientobject.activity.UserRankInfoCO;
|
||||||
import com.red.circle.other.app.dto.cmd.activity.RankingListQueryCmd;
|
import com.red.circle.other.app.dto.cmd.activity.RankingListQueryCmd;
|
||||||
|
import com.red.circle.other.domain.gateway.user.UserProfileGateway;
|
||||||
|
import com.red.circle.other.domain.model.user.UserProfile;
|
||||||
import com.red.circle.other.domain.ranking.RankingActivityType;
|
import com.red.circle.other.domain.ranking.RankingActivityType;
|
||||||
import com.red.circle.other.domain.ranking.RankingCycleType;
|
import com.red.circle.other.domain.ranking.RankingCycleType;
|
||||||
import com.red.circle.other.domain.ranking.RankingDimension;
|
import com.red.circle.other.domain.ranking.RankingDimension;
|
||||||
import com.red.circle.other.infra.database.mongo.entity.activity.RankingActivityRecord;
|
import com.red.circle.other.infra.database.mongo.entity.activity.RankingActivityRecord;
|
||||||
|
import com.red.circle.other.infra.database.mongo.entity.activity.WeekKingQueenCount;
|
||||||
import com.red.circle.other.infra.gateway.RankingActivityGateway;
|
import com.red.circle.other.infra.gateway.RankingActivityGateway;
|
||||||
|
import com.red.circle.other.inner.model.dto.user.UserProfileDTO;
|
||||||
|
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@ -17,7 +23,9 @@ import org.springframework.stereotype.Component;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.IntStream;
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
@ -31,28 +39,41 @@ public class RankingListQryExe {
|
|||||||
|
|
||||||
private final RankingActivityGateway rankingActivityGateway;
|
private final RankingActivityGateway rankingActivityGateway;
|
||||||
private final RankingActivityConvertor convertor;
|
private final RankingActivityConvertor convertor;
|
||||||
|
private final UserProfileGateway userProfileGateway;
|
||||||
|
private final UserProfileAppConvertor userProfileAppConvertor;
|
||||||
|
|
||||||
public RankingListCO execute(RankingListQueryCmd cmd) {
|
public RankingListCO execute(RankingListQueryCmd cmd) {
|
||||||
// 获取枚举
|
// 获取枚举
|
||||||
RankingActivityType activityType = RankingActivityType.getByCode(cmd.getActivityType());
|
RankingActivityType activityType = RankingActivityType.getByCode(cmd.getActivityType());
|
||||||
RankingCycleType cycleType = RankingCycleType.getByCode(cmd.getCycleType());
|
RankingCycleType cycleType = RankingCycleType.WEEKLY;
|
||||||
|
|
||||||
// 查询排行榜列表
|
// 查询排行榜列表
|
||||||
List<RankingActivityRecord> records = rankingActivityGateway.getRankingList(
|
List<RankingActivityRecord> records = rankingActivityGateway.getRankingList(
|
||||||
cmd.getReqSysOrigin().getOrigin(),
|
cmd.getReqSysOrigin().getOrigin(),
|
||||||
activityType,
|
activityType,
|
||||||
cycleType,
|
cycleType,
|
||||||
cmd.getCycleKey(),
|
ZonedDateTimeAsiaRiyadhUtils.nowWeekMondayToInt().toString(),
|
||||||
cmd.getUserSex(),
|
null,
|
||||||
cmd.getTopN()
|
cmd.getTopN()
|
||||||
);
|
);
|
||||||
|
|
||||||
// 转换为CO并设置排名
|
Map<Long, UserProfileDTO> userProfileMap = userProfileAppConvertor.toMapUserProfileDTO(
|
||||||
|
userProfileGateway
|
||||||
|
.mapByUserIds(getUserIds(records)));
|
||||||
|
|
||||||
|
// 转换为CO并设置排名
|
||||||
List<RankingActivityRecordCO> rankingList = IntStream.range(0, records.size())
|
List<RankingActivityRecordCO> rankingList = IntStream.range(0, records.size())
|
||||||
.mapToObj(i -> {
|
.mapToObj(i -> {
|
||||||
RankingActivityRecord record = records.get(i);
|
RankingActivityRecord record = records.get(i);
|
||||||
RankingActivityRecordCO co = convertor.toRecordCO(record);
|
RankingActivityRecordCO co = convertor.toRecordCO(record);
|
||||||
co.setRank(i + 1); // 排名从1开始
|
co.setRank(i + 1); // 排名从1开始
|
||||||
|
|
||||||
|
UserProfileDTO userProfileDTO = userProfileMap.get(record.getUserId());
|
||||||
|
if (userProfileDTO != null) {
|
||||||
|
co.setAccount(userProfileDTO.getAccount());
|
||||||
|
co.setNickname(userProfileDTO.getUserNickname());
|
||||||
|
co.setAvatar(userProfileDTO.getUserAvatar());
|
||||||
|
}
|
||||||
return co;
|
return co;
|
||||||
})
|
})
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
@ -61,16 +82,14 @@ public class RankingListQryExe {
|
|||||||
UserRankInfoCO currentUserRank = null;
|
UserRankInfoCO currentUserRank = null;
|
||||||
if (cmd.getIncludeCurrentUser() && cmd.getReqUserId() != null) {
|
if (cmd.getIncludeCurrentUser() && cmd.getReqUserId() != null) {
|
||||||
currentUserRank = queryCurrentUserRank(cmd, activityType, cycleType);
|
currentUserRank = queryCurrentUserRank(cmd, activityType, cycleType);
|
||||||
}
|
UserProfile userProfile = userProfileGateway.getByUserId(cmd.getReqUserId());
|
||||||
|
if (userProfile != null) {
|
||||||
|
currentUserRank.setAccount(userProfile.getAccount());
|
||||||
|
currentUserRank.setNickname(userProfile.getUserNickname());
|
||||||
|
currentUserRank.setAvatar(userProfile.getUserAvatar());
|
||||||
|
}
|
||||||
|
|
||||||
// 统计参与总人数
|
}
|
||||||
// Long totalParticipants = rankingActivityGateway.countTotalParticipants(
|
|
||||||
// cmd.getReqSysOrigin().getOrigin(),
|
|
||||||
// activityType,
|
|
||||||
// cycleType,
|
|
||||||
// cmd.getCycleKey(),
|
|
||||||
// cmd.getUserSex()
|
|
||||||
// );
|
|
||||||
|
|
||||||
// 构建返回结果
|
// 构建返回结果
|
||||||
RankingListCO result = new RankingListCO();
|
RankingListCO result = new RankingListCO();
|
||||||
@ -93,12 +112,17 @@ public class RankingListQryExe {
|
|||||||
|
|
||||||
result.setRankingList(rankingList);
|
result.setRankingList(rankingList);
|
||||||
result.setCurrentUserRank(currentUserRank);
|
result.setCurrentUserRank(currentUserRank);
|
||||||
// result.setTotalParticipants(totalParticipants);
|
|
||||||
result.setUpdateTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
result.setUpdateTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Set<Long> getUserIds(List<RankingActivityRecord> weekStarGiftCounts) {
|
||||||
|
|
||||||
|
return weekStarGiftCounts.stream().map(RankingActivityRecord::getUserId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询当前用户排名
|
* 查询当前用户排名
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -20,6 +20,8 @@ public class RankingActivityRecordCO implements Serializable {
|
|||||||
@JsonSerialize(using = ToStringSerializer.class)
|
@JsonSerialize(using = ToStringSerializer.class)
|
||||||
private Long userId;
|
private Long userId;
|
||||||
|
|
||||||
|
private String account;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户昵称
|
* 用户昵称
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -21,6 +21,19 @@ public class UserRankInfoCO implements Serializable {
|
|||||||
@JsonSerialize(using = ToStringSerializer.class)
|
@JsonSerialize(using = ToStringSerializer.class)
|
||||||
private Long userId;
|
private Long userId;
|
||||||
|
|
||||||
|
|
||||||
|
private String account;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户昵称
|
||||||
|
*/
|
||||||
|
private String nickname;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户头像
|
||||||
|
*/
|
||||||
|
private String avatar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 当前排名
|
* 当前排名
|
||||||
*
|
*
|
||||||
|
|||||||
@ -27,7 +27,6 @@ public class RankingListQueryCmd extends AppExtCommand {
|
|||||||
*
|
*
|
||||||
* RankingCycleType
|
* RankingCycleType
|
||||||
*/
|
*/
|
||||||
@NotNull(message = "周期类型不能为空")
|
|
||||||
private Integer cycleType;
|
private Integer cycleType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -52,7 +51,7 @@ public class RankingListQueryCmd extends AppExtCommand {
|
|||||||
*/
|
*/
|
||||||
@Min(value = 1, message = "查询数量最小为1")
|
@Min(value = 1, message = "查询数量最小为1")
|
||||||
@Max(value = 100, message = "查询数量最大为100")
|
@Max(value = 100, message = "查询数量最大为100")
|
||||||
private Integer topN = 50;
|
private Integer topN = 100;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否包含当前用户排名
|
* 是否包含当前用户排名
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user