家族成员总榜top100接口新增我的排名信息
This commit is contained in:
parent
9c80625799
commit
3b97886fab
@ -1,11 +1,11 @@
|
|||||||
package com.red.circle.other.app.command.family;
|
package com.red.circle.other.app.command.family;
|
||||||
|
|
||||||
import com.red.circle.other.app.dto.clientobject.family.FamilyLeaderboardCO;
|
import com.red.circle.other.app.dto.clientobject.family.FamilyLeaderboardCO;
|
||||||
|
import com.red.circle.other.app.dto.clientobject.family.FamilyMemberRankInfoCO;
|
||||||
import com.red.circle.other.app.dto.clientobject.family.FamilyMemberWeekRankCO;
|
import com.red.circle.other.app.dto.clientobject.family.FamilyMemberWeekRankCO;
|
||||||
import com.red.circle.other.app.dto.cmd.family.FamilyBaseInfoQueryCmd;
|
import com.red.circle.other.app.dto.cmd.family.FamilyBaseInfoQueryCmd;
|
||||||
import com.red.circle.other.domain.gateway.user.UserProfileGateway;
|
import com.red.circle.other.domain.gateway.user.UserProfileGateway;
|
||||||
import com.red.circle.other.domain.model.user.UserProfile;
|
import com.red.circle.other.domain.model.user.UserProfile;
|
||||||
import com.red.circle.other.infra.database.mongo.entity.team.team.TeamMember;
|
|
||||||
import com.red.circle.other.infra.database.mongo.service.team.team.TeamMemberService;
|
import com.red.circle.other.infra.database.mongo.service.team.team.TeamMemberService;
|
||||||
import com.red.circle.other.infra.database.rds.entity.family.FamilyMemberInfo;
|
import com.red.circle.other.infra.database.rds.entity.family.FamilyMemberInfo;
|
||||||
import com.red.circle.other.infra.database.rds.entity.family.FamilyMemberTotalExp;
|
import com.red.circle.other.infra.database.rds.entity.family.FamilyMemberTotalExp;
|
||||||
@ -38,8 +38,7 @@ public class FamilyMemberTop100Exe {
|
|||||||
private final FamilyMemberTotalExpService familyMemberTotalExpService;
|
private final FamilyMemberTotalExpService familyMemberTotalExpService;
|
||||||
|
|
||||||
public FamilyLeaderboardCO execute(FamilyBaseInfoQueryCmd cmd) {
|
public FamilyLeaderboardCO execute(FamilyBaseInfoQueryCmd cmd) {
|
||||||
Map<Long, FamilyMemberInfo> map = familyMemberInfoService.mapUserIdBaseInfo(cmd.getFamilyId(), Set.of(cmd.getReqUserId()));
|
FamilyMemberInfo member = familyMemberInfoService.getFamilyMemberByUserId(cmd.getReqUserId());
|
||||||
FamilyMemberInfo member = map.get(cmd.getReqUserId());
|
|
||||||
if (Objects.isNull(member)) {
|
if (Objects.isNull(member)) {
|
||||||
return new FamilyLeaderboardCO();
|
return new FamilyLeaderboardCO();
|
||||||
}
|
}
|
||||||
@ -59,26 +58,57 @@ public class FamilyMemberTop100Exe {
|
|||||||
List<FamilyMemberWeekRankCO> hostRank = new ArrayList<>();
|
List<FamilyMemberWeekRankCO> hostRank = new ArrayList<>();
|
||||||
List<FamilyMemberWeekRankCO> supporterRank = new ArrayList<>();
|
List<FamilyMemberWeekRankCO> supporterRank = new ArrayList<>();
|
||||||
|
|
||||||
for (FamilyMemberTotalExp exp : top200Exp) {
|
int myRankInHost = -1;
|
||||||
|
int myRankInSupporter = -1;
|
||||||
|
FamilyMemberTotalExp myExp = null;
|
||||||
|
|
||||||
|
for (int i = 0; i < top200Exp.size(); i++) {
|
||||||
|
FamilyMemberTotalExp exp = top200Exp.get(i);
|
||||||
Long userId = exp.getFamilyMemberId();
|
Long userId = exp.getFamilyMemberId();
|
||||||
boolean isHost = hostUserIds.contains(userId);
|
boolean isHost = hostUserIds.contains(userId);
|
||||||
|
|
||||||
|
if (userId.equals(cmd.getReqUserId())) {
|
||||||
|
myExp = exp;
|
||||||
|
}
|
||||||
|
|
||||||
FamilyMemberWeekRankCO rankCO = buildRankCO(exp, userProfileMap.get(userId), isHost);
|
FamilyMemberWeekRankCO rankCO = buildRankCO(exp, userProfileMap.get(userId), isHost);
|
||||||
|
|
||||||
if (isHost && hostRank.size() < 100) {
|
if (isHost && hostRank.size() < 100) {
|
||||||
|
if (userId.equals(cmd.getReqUserId())) {
|
||||||
|
myRankInHost = hostRank.size() + 1;
|
||||||
|
}
|
||||||
hostRank.add(rankCO);
|
hostRank.add(rankCO);
|
||||||
} else if (!isHost && supporterRank.size() < 100) {
|
} else if (!isHost && supporterRank.size() < 100) {
|
||||||
|
if (userId.equals(cmd.getReqUserId())) {
|
||||||
|
myRankInSupporter = supporterRank.size() + 1;
|
||||||
|
}
|
||||||
supporterRank.add(rankCO);
|
supporterRank.add(rankCO);
|
||||||
|
} else if (userId.equals(cmd.getReqUserId())) {
|
||||||
|
if (isHost) {
|
||||||
|
myRankInHost = 101;
|
||||||
|
} else {
|
||||||
|
myRankInSupporter = 101;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hostRank.size() >= 100 && supporterRank.size() >= 100) {
|
if (hostRank.size() >= 100 && supporterRank.size() >= 100 && Objects.nonNull(myExp)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FamilyMemberRankInfoCO myRankInfo = buildMyRankInfo(
|
||||||
|
cmd.getReqUserId(),
|
||||||
|
myExp,
|
||||||
|
userProfileMap.get(cmd.getReqUserId()),
|
||||||
|
myRankInHost,
|
||||||
|
myRankInSupporter,
|
||||||
|
hostUserIds.contains(cmd.getReqUserId())
|
||||||
|
);
|
||||||
|
|
||||||
return new FamilyLeaderboardCO()
|
return new FamilyLeaderboardCO()
|
||||||
.setHostWeekRank(hostRank)
|
.setHostWeekRank(hostRank)
|
||||||
.setSupporterWeekRank(supporterRank);
|
.setSupporterWeekRank(supporterRank)
|
||||||
|
.setMyRankInfo(myRankInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<FamilyMemberTotalExp> getTop200TotalExp(Long familyId) {
|
private List<FamilyMemberTotalExp> getTop200TotalExp(Long familyId) {
|
||||||
@ -107,4 +137,28 @@ public class FamilyMemberTop100Exe {
|
|||||||
.setExp(NumUtils.formatLong(exp.getExp()))
|
.setExp(NumUtils.formatLong(exp.getExp()))
|
||||||
.setIsHost(isHost);
|
.setIsHost(isHost);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private FamilyMemberRankInfoCO buildMyRankInfo(
|
||||||
|
Long userId,
|
||||||
|
FamilyMemberTotalExp myExp,
|
||||||
|
UserProfile profile,
|
||||||
|
int myRankInHost,
|
||||||
|
int myRankInSupporter,
|
||||||
|
boolean isHost
|
||||||
|
) {
|
||||||
|
String rank;
|
||||||
|
if (isHost) {
|
||||||
|
rank = myRankInHost > 0 ? (myRankInHost > 100 ? "100+" : String.valueOf(myRankInHost)) : "100+";
|
||||||
|
} else {
|
||||||
|
rank = myRankInSupporter > 0 ? (myRankInSupporter > 100 ? "100+" : String.valueOf(myRankInSupporter)) : "100+";
|
||||||
|
}
|
||||||
|
|
||||||
|
return new FamilyMemberRankInfoCO()
|
||||||
|
.setUserId(userId)
|
||||||
|
.setNickname(Objects.nonNull(profile) ? profile.getUserNickname() : "")
|
||||||
|
.setAvatar(Objects.nonNull(profile) ? profile.getUserAvatar() : "")
|
||||||
|
.setExp(Objects.nonNull(myExp) ? NumUtils.formatLong(myExp.getExp()) : "0")
|
||||||
|
.setRank(rank)
|
||||||
|
.setIsHost(isHost);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,4 +26,9 @@ public class FamilyLeaderboardCO implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private List<FamilyMemberWeekRankCO> supporterWeekRank;
|
private List<FamilyMemberWeekRankCO> supporterWeekRank;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 我的排名信息
|
||||||
|
*/
|
||||||
|
private FamilyMemberRankInfoCO myRankInfo;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,49 @@
|
|||||||
|
package com.red.circle.other.app.dto.clientobject.family;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||||
|
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 家族成员排名信息
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class FamilyMemberRankInfoCO implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户ID
|
||||||
|
*/
|
||||||
|
@JsonSerialize(using = ToStringSerializer.class)
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户昵称
|
||||||
|
*/
|
||||||
|
private String nickname;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户头像
|
||||||
|
*/
|
||||||
|
private String avatar;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 经验值
|
||||||
|
*/
|
||||||
|
private String exp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排名(100+表示100名之外)
|
||||||
|
*/
|
||||||
|
private String rank;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否是主播
|
||||||
|
*/
|
||||||
|
private Boolean isHost;
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user