家族新增增加支持者和主播列表

This commit is contained in:
tianfeng 2025-12-24 17:04:51 +08:00
parent 43448cab51
commit a6f3a6cf5b
2 changed files with 110 additions and 3 deletions

View File

@ -21,15 +21,20 @@ import com.red.circle.other.infra.database.rds.service.family.FamilyBoxUserContr
import com.red.circle.other.infra.database.rds.service.family.FamilyBoxUserRewardService;
import com.red.circle.other.infra.database.rds.service.family.FamilyLevelExpService;
import com.red.circle.other.infra.database.rds.service.family.FamilyMemberInfoService;
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.enums.family.FamilyRoleEnum;
import com.red.circle.other.infra.enums.family.FamilyStatusEnum;
import com.red.circle.other.infra.enums.family.FamilyBoxConfigEnum;
import com.red.circle.other.inner.enums.config.EnumConfigKey;
import com.red.circle.other.inner.enums.team.TeamMemberRole;
import com.red.circle.other.inner.model.dto.famliy.FamilyDetailsDTO;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
@ -58,6 +63,7 @@ public class FamilyBaseInfoExe {
private final FamilyBoxDailyService familyBoxDailyService;
private final FamilyBoxUserContributeService familyBoxUserContributeService;
private final FamilyBoxUserRewardService familyBoxUserRewardService;
private final TeamMemberService teamMemberService;
private final EnumConfigCacheService enumConfigCacheService;
private final UserProfileGateway userProfileGateway;
@ -83,13 +89,16 @@ public class FamilyBaseInfoExe {
FamilyBaseInfoCO.FamilyBoxInfo boxInfo = buildBoxInfo(cmd.getFamilyId(), cmd.getReqUserId());
return getFamilyInfoCO(baseInfo, familyLevel, adminInfo, boxInfo);
FamilyBaseInfoCO.FamilyMemberList memberList = buildMemberList(cmd.getFamilyId());
return getFamilyInfoCO(baseInfo, familyLevel, adminInfo, boxInfo, memberList);
}
private FamilyBaseInfoCO getFamilyInfoCO(FamilyBaseInfo baseInfo,
FamilyDetailsDTO familyLevel,
FamilyBaseInfoCO.FamilyAdminInfo adminInfo,
FamilyBaseInfoCO.FamilyBoxInfo boxInfo) {
FamilyBaseInfoCO.FamilyBoxInfo boxInfo,
FamilyBaseInfoCO.FamilyMemberList memberList) {
return new FamilyBaseInfoCO()
.setFamilyId(baseInfo.getId())
@ -108,7 +117,8 @@ public class FamilyBaseInfoExe {
.setLevelExp(familyLevel.getLevelExp())
.setMaxMember(familyLevel.getMaxMember())
.setLevelBackgroundPicture(familyLevel.getLevelBackgroundPicture())
.setBoxInfo(boxInfo);
.setBoxInfo(boxInfo)
.setMemberList(memberList);
}
private FamilyDetailsDTO getCacheFamilyLevel(FamilyBaseInfoQueryCmd cmd, Long familyId) {
@ -156,4 +166,65 @@ public class FamilyBaseInfoExe {
return boxInfo;
}
private FamilyBaseInfoCO.FamilyMemberList buildMemberList(Long familyId) {
List<FamilyMemberInfo> members = familyMemberInfoService.listFamilyMembers(familyId, null, 50);
if (members.isEmpty()) {
return new FamilyBaseInfoCO.FamilyMemberList()
.setHosts(new ArrayList<>())
.setSupporters(new ArrayList<>());
}
Set<Long> memberUserIds = members.stream()
.map(FamilyMemberInfo::getMemberUserId)
.collect(Collectors.toSet());
Map<Long, TeamMember> teamMemberMap = mapTeamMember(memberUserIds);
Map<Long, UserProfile> userProfileMap = mapUserProfile(memberUserIds);
List<FamilyBaseInfoCO.SimpleMemberInfo> hosts = new ArrayList<>();
List<FamilyBaseInfoCO.SimpleMemberInfo> supporters = new ArrayList<>();
for (FamilyMemberInfo member : members) {
TeamMember teamMember = teamMemberMap.get(member.getMemberUserId());
UserProfile userProfile = userProfileMap.get(member.getMemberUserId());
if (Objects.isNull(userProfile)) {
continue;
}
FamilyBaseInfoCO.SimpleMemberInfo memberInfo = new FamilyBaseInfoCO.SimpleMemberInfo()
.setUserId(member.getMemberUserId())
.setUserAvatar(userProfile.getUserAvatar());
if (Objects.nonNull(teamMember)) {
if (hosts.size() < 5) {
hosts.add(memberInfo);
}
} else {
if (supporters.size() < 5) {
supporters.add(memberInfo);
}
}
if (hosts.size() >= 5 && supporters.size() >= 5) {
break;
}
}
return new FamilyBaseInfoCO.FamilyMemberList()
.setHosts(hosts)
.setSupporters(supporters);
}
private Map<Long, TeamMember> mapTeamMember(Set<Long> memberUserIds) {
List<TeamMember> teamMemberList = teamMemberService.listByMemberIds(memberUserIds);
return teamMemberList.stream()
.collect(Collectors.toMap(TeamMember::getMemberId, e -> e, (v1, v2) -> v1));
}
private Map<Long, UserProfile> mapUserProfile(Set<Long> memberUserIds) {
return userProfileGateway.mapByUserIds(memberUserIds);
}
}

View File

@ -120,6 +120,11 @@ public class FamilyBaseInfoCO extends ClientObject {
*/
private FamilyBoxInfo boxInfo;
/**
* 成员列表.
*/
private FamilyMemberList memberList;
/**
* 家族群聊付费解锁金额.
*/
@ -161,4 +166,35 @@ public class FamilyBaseInfoCO extends ClientObject {
}
@Data
public static class FamilyMemberList {
/**
* 主播列表.
*/
private List<SimpleMemberInfo> hosts;
/**
* 支持者列表.
*/
private List<SimpleMemberInfo> supporters;
}
@Data
public static class SimpleMemberInfo {
/**
* 用户ID.
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long userId;
/**
* 用户头像.
*/
private String userAvatar;
}
}