12
12
import java .util .List ;
13
13
import java .util .Map ;
14
14
import java .util .Objects ;
15
+ import java .util .stream .Collectors ;
15
16
16
17
import com .github .f4b6a3 .uuid .UuidCreator ;
17
18
import lombok .RequiredArgsConstructor ;
29
30
import org .lowcoder .domain .group .service .GroupService ;
30
31
import org .lowcoder .domain .organization .model .MemberRole ;
31
32
import org .lowcoder .domain .organization .model .OrgMember ;
33
+ import org .lowcoder .domain .organization .service .OrgMemberService ;
34
+ import org .lowcoder .domain .organization .service .OrganizationService ;
32
35
import org .lowcoder .domain .user .model .User ;
33
36
import org .lowcoder .domain .user .service .UserService ;
34
37
import org .lowcoder .infra .util .TupleUtils ;
35
38
import org .lowcoder .sdk .exception .BizError ;
36
39
import org .springframework .stereotype .Service ;
37
40
41
+ import reactor .core .publisher .Flux ;
38
42
import reactor .core .publisher .Mono ;
39
43
import reactor .util .function .Tuple2 ;
40
44
@@ -48,6 +52,8 @@ public class GroupApiServiceImpl implements GroupApiService {
48
52
private final UserService userService ;
49
53
private final GroupService groupService ;
50
54
private final AbstractBizThresholdChecker bizThresholdChecker ;
55
+ private final OrganizationService organizationService ;
56
+ private final OrgMemberService orgMemberService ;
51
57
52
58
@ Override
53
59
public Mono <GroupMemberAggregateView > getGroupMembers (String groupId , int page , int count ) {
@@ -180,6 +186,7 @@ public Mono<List<GroupView>> getGroups() {
180
186
return sessionUserService .getVisitorOrgMemberCache ()
181
187
.flatMap (orgMember -> {
182
188
String orgId = orgMember .getOrgId ();
189
+ Mono <Integer > orgAdminCountMono = orgMemberService .getAllOrgAdmins (orgId ).map (List ::size );
183
190
if (orgMember .isAdmin () || orgMember .isSuperAdmin ()) {
184
191
MemberRole memberRole ;
185
192
if (orgMember .isAdmin ()) {
@@ -189,17 +196,46 @@ public Mono<List<GroupView>> getGroups() {
189
196
}
190
197
return groupService .getByOrgId (orgId )
191
198
.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
+ )
193
213
.collectList ();
194
214
}
195
215
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 ();
197
220
List <String > groupIds = collectList (groupMembers , GroupMember ::getGroupId );
198
221
Map <String , GroupMember > groupMemberMap = collectMap (groupMembers , GroupMember ::getGroupId , it -> it );
199
222
return groupService .getByIds (groupIds )
200
223
.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
+ })
203
239
.collectList ();
204
240
});
205
241
});
0 commit comments