Kaynağa Gözat

用户有老师身份,非群主时主动退群

Eric 2 yıl önce
ebeveyn
işleme
8c9a6be770

+ 30 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java

@@ -1,6 +1,5 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.yonge.cooleshow.auth.config.AppGlobalServiceConfig;
@@ -29,6 +28,8 @@ import io.rong.models.Result;
 import io.rong.models.group.GroupMember;
 import io.rong.models.group.GroupModel;
 import org.apache.commons.collections.CollectionUtils;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,6 +45,7 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 import java.util.UUID;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 即时通讯群组(ImGroup)表服务实现类
@@ -74,6 +76,8 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
     @Autowired
     private AppGlobalServiceConfig appGlobalServiceConfig;
+    @Autowired
+    private RedissonClient redissonClient;
 
     @Override
     public ImGroupDao getDao() {
@@ -254,18 +258,38 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                 if (Objects.nonNull(group) && appGlobalServiceConfig.getGroupMemberJoin()) {
 
                     // 若用户群组存在,判定用户是否拥有老师身份,自动加入群组
-                    //int count = teacherService.lambdaQuery().eq(Teacher::getUserId, userId).count();
+                    int count = teacherService.lambdaQuery().eq(Teacher::getUserId, userId).count();
 
                     // 用户是否已加入该群组
-                    int groupMembers = imGroupMemberService.count(Wrappers.<ImGroupMember>lambdaQuery()
-                            .eq(ImGroupMember::getGroupId, groupId).eq(ImGroupMember::getUserId, userId));
+                    ImGroupMember groupMember = imGroupMemberService.lambdaQuery()
+                            .eq(ImGroupMember::getGroupId, groupId)
+                            .eq(ImGroupMember::getUserId, userId)
+                            .eq(ImGroupMember::getRoleType, ImGroupMemberRoleType.STUDENT)
+                            .one();
 
-                    // count > 0 && groupMembers > 0
-                    if (groupMembers > 0) {
+                    if (Objects.nonNull(groupMember)) {
 
                         String imIdentity = MessageFormat.format("{0}:{1}", String.valueOf(userId), ClientEnum.STUDENT.name());
+                        // 缓存用户重新入群标识
+                        RBucket<Object> bucket = redissonClient.getBucket(imIdentity);
+                        if (bucket.isExists()) {
+                            return;
+                        }
+
                         // 自动加入该群组
                         imGroupMemberService.join(Lists.newArrayList(new GroupMember(imIdentity, groupId, null)), groupId);
+
+                        // 拥有老师身份,且非群主时,需要主动退出群聊
+                        if (count > 0 && !groupMember.getIsAdmin()) {
+
+                            GroupModel groupModel = new GroupModel(groupId,0);
+                            GroupMember[] groupMembers = new GroupMember[]{new GroupMember(String.valueOf(userId), groupId,null)};
+                            groupModel.setMembers(groupMembers);
+                            RongCloudConfig.rongCloud.group.quit(groupModel);
+                        }
+
+                        // 缓存重新入群标识, 默认有效期为120天
+                        bucket.set(imIdentity, 120, TimeUnit.DAYS);
                     }
                 }