瀏覽代碼

Merge branch 'dev_v1.3.5_20220927'

# Conflicts:
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java
Eric 3 年之前
父節點
當前提交
9f032947ef

+ 30 - 11
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;
@@ -19,12 +18,7 @@ import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
-import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.entity.StudentStar;
-import com.yonge.cooleshow.biz.dal.entity.Teacher;
-import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
-import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
 import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
@@ -38,6 +32,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;
@@ -54,6 +50,7 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.UUID;
 import java.util.stream.Collectors;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 即时通讯群组(ImGroup)表服务实现类
@@ -84,6 +81,8 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
     @Autowired
     private AppGlobalServiceConfig appGlobalServiceConfig;
+    @Autowired
+    private RedissonClient redissonClient;
 
     @Autowired
     private SysUserFeignService sysUserFeignService;
@@ -270,18 +269,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);
                     }
                 }