1212import java .util .List ;
1313import java .util .Map ;
1414import java .util .Objects ;
15+ import java .util .stream .Collectors ;
1516
1617import com .github .f4b6a3 .uuid .UuidCreator ;
1718import lombok .RequiredArgsConstructor ;
2930import org .lowcoder .domain .group .service .GroupService ;
3031import org .lowcoder .domain .organization .model .MemberRole ;
3132import org .lowcoder .domain .organization .model .OrgMember ;
33+ import org .lowcoder .domain .organization .service .OrgMemberService ;
34+ import org .lowcoder .domain .organization .service .OrganizationService ;
3235import org .lowcoder .domain .user .model .User ;
3336import org .lowcoder .domain .user .service .UserService ;
3437import org .lowcoder .infra .util .TupleUtils ;
3538import org .lowcoder .sdk .exception .BizError ;
3639import org .springframework .stereotype .Service ;
3740
41+ import reactor .core .publisher .Flux ;
3842import reactor .core .publisher .Mono ;
3943import reactor .util .function .Tuple2 ;
4044
@@ -48,6 +52,8 @@ public class GroupApiServiceImpl implements GroupApiService {
4852 private final UserService userService ;
4953 private final GroupService groupService ;
5054 private final AbstractBizThresholdChecker bizThresholdChecker ;
55+ private final OrganizationService organizationService ;
56+ private final OrgMemberService orgMemberService ;
5157
5258 @ Override
5359 public Mono <GroupMemberAggregateView > getGroupMembers (String groupId , int page , int count ) {
@@ -180,6 +186,7 @@ public Mono<List<GroupView>> getGroups() {
180186 return sessionUserService .getVisitorOrgMemberCache ()
181187 .flatMap (orgMember -> {
182188 String orgId = orgMember .getOrgId ();
189+ Mono <Integer > orgAdminCountMono = orgMemberService .getAllOrgAdmins (orgId ).map (List ::size );
183190 if (orgMember .isAdmin () || orgMember .isSuperAdmin ()) {
184191 MemberRole memberRole ;
185192 if (orgMember .isAdmin ()) {
@@ -189,17 +196,46 @@ public Mono<List<GroupView>> getGroups() {
189196 }
190197 return groupService .getByOrgId (orgId )
191198 .sort ()
192- .flatMapSequential (group -> GroupView .from (group , memberRole .getValue ()))
199+ .flatMapSequential (group -> groupMemberService .getAllGroupAdmin (group .getId ())
200+ .zipWith (groupMemberService .getGroupMembers (group .getId (), 0 , -1 ))
201+ .zipWith (orgAdminCountMono , TupleUtils ::merge )
202+ .flatMap (tuple -> {
203+ var adminMembers = tuple .getT1 ();
204+ var users = tuple .getT2 ();
205+ var orgAdminCount = tuple .getT3 ();
206+ if (group .isAllUsersGroup ()) {
207+ return GroupView .from (group , memberRole .getValue (), orgAdminCount , users .size ());
208+ } else {
209+ return GroupView .from (group , memberRole .getValue (), adminMembers .size (), users .size ());
210+ }
211+ })
212+ )
193213 .collectList ();
194214 }
195215 return groupMemberService .getUserGroupMembersInOrg (orgId , orgMember .getUserId ())
196- .flatMap (groupMembers -> {
216+ .zipWith (orgAdminCountMono )
217+ .flatMap (tuple -> {
218+ List <GroupMember > groupMembers = tuple .getT1 ();
219+ int orgAdminCount = tuple .getT2 ();
197220 List <String > groupIds = collectList (groupMembers , GroupMember ::getGroupId );
198221 Map <String , GroupMember > groupMemberMap = collectMap (groupMembers , GroupMember ::getGroupId , it -> it );
199222 return groupService .getByIds (groupIds )
200223 .sort ()
201- .flatMapSequential (group -> GroupView .from (group ,
202- groupMemberMap .get (group .getId ()).getRole ().getValue ()))
224+ .flatMapSequential (group -> {
225+ var adminMembers = groupMembers .stream ().filter (groupMember -> groupMember .getGroupId ().equals (group .getId ()) && groupMember .getRole () == MemberRole .ADMIN ).toList ();
226+ var allMembers = groupMembers .stream ().filter (groupMember -> groupMember .getGroupId ().equals (group .getId ())).toList ();
227+ if (group .isAllUsersGroup ()) {
228+ return GroupView .from (group ,
229+ groupMemberMap .get (group .getId ()).getRole ().getValue (),
230+ orgAdminCount ,
231+ allMembers .size ());
232+ } else {
233+ return GroupView .from (group ,
234+ groupMemberMap .get (group .getId ()).getRole ().getValue (),
235+ adminMembers .size (),
236+ allMembers .size ());
237+ }
238+ })
203239 .collectList ();
204240 });
205241 });
0 commit comments