|
@@ -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);
|
|
|
}
|
|
|
}
|
|
|
|