cp榜单修改

This commit is contained in:
tianfeng 2026-01-14 14:32:14 +08:00
parent 3ba78182c1
commit d43fba354f
3 changed files with 71 additions and 15 deletions

View File

@ -52,6 +52,7 @@ public class SeasonCpTop1QueryExe {
List<ActivityCpUserRankingCO> results = weekCpValueCounts.stream().map(weekCpValueCount -> {
WeekCpUserIdDTO userIdPair = UserCpUtils.parseUserIdPair(weekCpValueCount.getId());
return new ActivityCpUserRankingCO()
.setRank(1)
.setUserId(userIdPair.getUserIdOne())
.setCpUserId(userIdPair.getUserIdTwo())
.setTotalNumber(weekCpValueCount.getQuantity())

View File

@ -20,6 +20,7 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@ -31,6 +32,9 @@ import org.springframework.stereotype.Service;
@RequiredArgsConstructor
public class WeekCpUserGiftQueryExe {
private static final int TOP_SIZE = 50;
private static final int OUT_OF_RANK = 99;
private final UserProfileGateway userProfileGateway;
private final CpRelationshipService cpRelationshipService;
private final WeekCpValueCountService weekCpValueCountService;
@ -45,75 +49,122 @@ public class WeekCpUserGiftQueryExe {
}
private ActivityWeekCpGiftCO getWeekRanking(CpRankingQueryCmd cmd) {
List<ActivityCpUserRankingCO> topList = getThisWeekUser(cmd);
ActivityCpUserRankingCO currentUser = getThisWeekCurrentUser(cmd, topList);
return new ActivityWeekCpGiftCO()
.setThisWeekUserTop(getThisWeekUser(cmd))
.setThisUser(getThisWeekCurrentUser(cmd));
.setThisWeekUserTop(topList)
.setThisUser(currentUser);
}
private ActivityWeekCpGiftCO getSeasonRanking(CpRankingQueryCmd cmd) {
List<ActivityCpUserRankingCO> topList = getThisSeasonUser(cmd);
ActivityCpUserRankingCO currentUser = getThisSeasonCurrentUser(cmd, topList);
return new ActivityWeekCpGiftCO()
.setThisWeekUserTop(getThisSeasonUser(cmd))
.setThisUser(getThisSeasonCurrentUser(cmd));
.setThisWeekUserTop(topList)
.setThisUser(currentUser);
}
private ActivityCpUserRankingCO getThisWeekCurrentUser(CpRankingQueryCmd cmd) {
private ActivityCpUserRankingCO getThisWeekCurrentUser(CpRankingQueryCmd cmd,
List<ActivityCpUserRankingCO> topList) {
List<Long> cpUserIdList = cpRelationshipService.getCpUserId(cmd.getReqUserId());
if (cpUserIdList.isEmpty()) {
return new ActivityCpUserRankingCO();
}
Long cpUserId = cpUserIdList.get(0);
// 先在Top榜单中查找
ActivityCpUserRankingCO userInTop = findUserInTopList(cmd.getReqUserId(), cpUserId, topList);
if (Objects.nonNull(userInTop)) {
return userInTop;
}
// 不在Top榜单单独查询并设置排名为99
WeekCpValueCount thisUser = weekCpValueCountService.getUserThisWeekCount(
cmd.getReqSysOrigin().getOrigin(),
cmd.getReqUserId(), cpUserId);
if (Objects.isNull(thisUser)) {
return new ActivityCpUserRankingCO();
}
List<ActivityCpUserRankingCO> users = assemble(Lists.newArrayList(thisUser));
List<ActivityCpUserRankingCO> users = assemble(Lists.newArrayList(thisUser), OUT_OF_RANK);
if (CollectionUtils.isEmpty(users)) {
return new ActivityCpUserRankingCO();
}
return users.get(0);
}
private ActivityCpUserRankingCO getThisSeasonCurrentUser(CpRankingQueryCmd cmd) {
private ActivityCpUserRankingCO getThisSeasonCurrentUser(CpRankingQueryCmd cmd,
List<ActivityCpUserRankingCO> topList) {
List<Long> cpUserIdList = cpRelationshipService.getCpUserId(cmd.getReqUserId());
if (cpUserIdList.isEmpty()) {
return new ActivityCpUserRankingCO();
}
Long cpUserId = cpUserIdList.get(0);
// 先在Top榜单中查找
ActivityCpUserRankingCO userInTop = findUserInTopList(cmd.getReqUserId(), cpUserId, topList);
if (Objects.nonNull(userInTop)) {
return userInTop;
}
// 不在Top榜单单独查询并设置排名为99
WeekCpValueCount thisSeason = weekCpValueCountService.getUserThisSeasonCount(
cmd.getReqSysOrigin().getOrigin(),
cmd.getReqUserId(), cpUserId);
if (Objects.isNull(thisSeason)) {
return new ActivityCpUserRankingCO();
}
List<ActivityCpUserRankingCO> users = assemble(Lists.newArrayList(thisSeason));
List<ActivityCpUserRankingCO> users = assemble(Lists.newArrayList(thisSeason), OUT_OF_RANK);
if (CollectionUtils.isEmpty(users)) {
return new ActivityCpUserRankingCO();
}
return users.get(0);
}
private ActivityCpUserRankingCO findUserInTopList(Long userId, Long cpUserId,
List<ActivityCpUserRankingCO> topList) {
if (CollectionUtils.isEmpty(topList)) {
return null;
}
return topList.stream()
.filter(ranking ->
(ranking.getUserId().equals(userId) && ranking.getCpUserId().equals(cpUserId)) ||
(ranking.getUserId().equals(cpUserId) && ranking.getCpUserId().equals(userId))
)
.findFirst()
.orElse(null);
}
private List<ActivityCpUserRankingCO> getThisWeekUser(CpRankingQueryCmd cmd) {
return assemble(weekCpValueCountService.listThisWeekTop(cmd.getReqSysOrigin().getOrigin(), 20)
);
List<WeekCpValueCount> topList = weekCpValueCountService.listThisWeekTop(
cmd.getReqSysOrigin().getOrigin(), TOP_SIZE);
return assemble(topList, 1);
}
private List<ActivityCpUserRankingCO> getThisSeasonUser(CpRankingQueryCmd cmd) {
return assemble(weekCpValueCountService.listThisSeasonTop(cmd.getReqSysOrigin().getOrigin(), 20)
);
List<WeekCpValueCount> topList = weekCpValueCountService.listThisSeasonTop(
cmd.getReqSysOrigin().getOrigin(), TOP_SIZE);
return assemble(topList, 1);
}
private List<ActivityCpUserRankingCO> assemble(List<WeekCpValueCount> weekCpValueCounts) {
private List<ActivityCpUserRankingCO> assemble(List<WeekCpValueCount> weekCpValueCounts,
int startRank) {
if (CollectionUtils.isEmpty(weekCpValueCounts)) {
return Lists.newArrayList();
}
AtomicInteger rankCounter = new AtomicInteger(startRank);
List<ActivityCpUserRankingCO> results = weekCpValueCounts.stream().map(weekCpValueCount -> {
WeekCpUserIdDTO userIdPair = UserCpUtils.parseUserIdPair(weekCpValueCount.getId());
return new ActivityCpUserRankingCO()
.setRank(rankCounter.getAndIncrement())
.setUserId(userIdPair.getUserIdOne())
.setCpUserId(userIdPair.getUserIdTwo())
.setTotalNumber(weekCpValueCount.getQuantity())
@ -122,8 +173,7 @@ public class WeekCpUserGiftQueryExe {
).toList();
Map<Long, UserProfileDTO> userProfileMap = userProfileAppConvertor.toMapUserProfileDTO(
userProfileGateway.mapByUserIds(
getAllUserIds(results))
userProfileGateway.mapByUserIds(getAllUserIds(results))
);
return results.stream().map(ranking -> {

View File

@ -24,6 +24,11 @@ public class ActivityCpUserRankingCO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 排名.
*/
private Integer rank;
/**
* ID.
*/