diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/family/FamilyBaseInfoExe.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/family/FamilyBaseInfoExe.java index e0ad4664..0996bb2f 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/family/FamilyBaseInfoExe.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/family/FamilyBaseInfoExe.java @@ -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 members = familyMemberInfoService.listFamilyMembers(familyId, null, 50); + + if (members.isEmpty()) { + return new FamilyBaseInfoCO.FamilyMemberList() + .setHosts(new ArrayList<>()) + .setSupporters(new ArrayList<>()); + } + + Set memberUserIds = members.stream() + .map(FamilyMemberInfo::getMemberUserId) + .collect(Collectors.toSet()); + + Map teamMemberMap = mapTeamMember(memberUserIds); + Map userProfileMap = mapUserProfile(memberUserIds); + + List hosts = new ArrayList<>(); + List 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 mapTeamMember(Set memberUserIds) { + List teamMemberList = teamMemberService.listByMemberIds(memberUserIds); + return teamMemberList.stream() + .collect(Collectors.toMap(TeamMember::getMemberId, e -> e, (v1, v2) -> v1)); + } + + private Map mapUserProfile(Set memberUserIds) { + return userProfileGateway.mapByUserIds(memberUserIds); + } + } diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/family/FamilyBaseInfoCO.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/family/FamilyBaseInfoCO.java index 42b60936..d2967634 100644 --- a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/family/FamilyBaseInfoCO.java +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/family/FamilyBaseInfoCO.java @@ -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 hosts; + + /** + * 支持者列表. + */ + private List supporters; + + } + + @Data + public static class SimpleMemberInfo { + + /** + * 用户ID. + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long userId; + + /** + * 用户头像. + */ + private String userAvatar; + + } + }