30
30
import org .lowcoder .domain .group .service .GroupService ;
31
31
import org .lowcoder .domain .organization .model .MemberRole ;
32
32
import org .lowcoder .domain .organization .model .OrgMember ;
33
+ import org .lowcoder .domain .organization .service .OrgMemberService ;
34
+ import org .lowcoder .domain .organization .service .OrganizationService ;
33
35
import org .lowcoder .domain .user .model .User ;
34
36
import org .lowcoder .domain .user .service .UserService ;
35
37
import org .lowcoder .infra .util .TupleUtils ;
@@ -50,6 +52,8 @@ public class GroupApiServiceImpl implements GroupApiService {
50
52
private final UserService userService ;
51
53
private final GroupService groupService ;
52
54
private final AbstractBizThresholdChecker bizThresholdChecker ;
55
+ private final OrganizationService organizationService ;
56
+ private final OrgMemberService orgMemberService ;
53
57
54
58
@ Override
55
59
public Mono <GroupMemberAggregateView > getGroupMembers (String groupId , int page , int count ) {
@@ -182,6 +186,7 @@ public Mono<List<GroupView>> getGroups() {
182
186
return sessionUserService .getVisitorOrgMemberCache ()
183
187
.flatMap (orgMember -> {
184
188
String orgId = orgMember .getOrgId ();
189
+ Mono <Integer > orgAdminCountMono = orgMemberService .getAllOrgAdmins (orgId ).map (List ::size );
185
190
if (orgMember .isAdmin () || orgMember .isSuperAdmin ()) {
186
191
MemberRole memberRole ;
187
192
if (orgMember .isAdmin ()) {
@@ -193,27 +198,43 @@ public Mono<List<GroupView>> getGroups() {
193
198
.sort ()
194
199
.flatMapSequential (group -> groupMemberService .getAllGroupAdmin (group .getId ())
195
200
.zipWith (groupMemberService .getGroupMembers (group .getId (), 0 , -1 ))
201
+ .zipWith (orgAdminCountMono , TupleUtils ::merge )
196
202
.flatMap (tuple -> {
197
203
var adminMembers = tuple .getT1 ();
198
204
var users = tuple .getT2 ();
199
- return GroupView .from (group , memberRole .getValue (), adminMembers .size (), users .size ());
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
+ }
200
211
})
201
212
)
202
213
.collectList ();
203
214
}
204
215
return groupMemberService .getUserGroupMembersInOrg (orgId , orgMember .getUserId ())
205
- .flatMap (groupMembers -> {
216
+ .zipWith (orgAdminCountMono )
217
+ .flatMap (tuple -> {
218
+ List <GroupMember > groupMembers = tuple .getT1 ();
219
+ int orgAdminCount = tuple .getT2 ();
206
220
List <String > groupIds = collectList (groupMembers , GroupMember ::getGroupId );
207
221
Map <String , GroupMember > groupMemberMap = collectMap (groupMembers , GroupMember ::getGroupId , it -> it );
208
222
return groupService .getByIds (groupIds )
209
223
.sort ()
210
224
.flatMapSequential (group -> {
211
225
var adminMembers = groupMembers .stream ().filter (groupMember -> groupMember .getGroupId ().equals (group .getId ()) && groupMember .getRole () == MemberRole .ADMIN ).toList ();
212
226
var allMembers = groupMembers .stream ().filter (groupMember -> groupMember .getGroupId ().equals (group .getId ())).toList ();
213
- return GroupView .from (group ,
214
- groupMemberMap .get (group .getId ()).getRole ().getValue (),
215
- allMembers .size (),
216
- adminMembers .size ());
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
+ }
217
238
})
218
239
.collectList ();
219
240
});
0 commit comments