public Mono<Set<Long>> queryMemberIdsInUsersJoinedGroups(
            @NotEmpty Set<Long> userIds,
            boolean preferCache) {
        try {
            Validator.notEmpty(userIds, "userIds");
        } catch (ResponseException e) {
            return Mono.error(e);
        }
        Recyclable<Set<Long>> recyclableSet = SetRecycler.obtain();
        return queryUsersJoinedGroupIds(null, userIds, null, null)
                .collect(Collectors.toCollection(recyclableSet::getValue))
                .flatMap(groupIds -> groupIds.isEmpty()
                        ? PublisherPool.<Long>emptySet()
                        : queryGroupMemberIds(groupIds, preferCache))
                .doFinally(signalType -> recyclableSet.recycle());
    }
@return Possible codes: {@link ResponseStatusCode#OK}
        {@link ResponseStatusCode#SEND_MESSAGE_TO_MUTED_GROUP}
        {@link ResponseStatusCode#SEND_MESSAGE_TO_INACTIVE_GROUP}
        {@link ResponseStatusCode#MUTED_GROUP_MEMBER_SEND_MESSAGE}
turms-service/src/main/java/im/turms/service/domain/group/service/GroupMemberService.java