|
@@ -1,13 +1,17 @@
|
|
package com.yonge.cooleshow.biz.dal.service.impl;
|
|
package com.yonge.cooleshow.biz.dal.service.impl;
|
|
|
|
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Lists;
|
|
import com.microsvc.toolkit.middleware.im.ImPluginContext;
|
|
import com.microsvc.toolkit.middleware.im.ImPluginContext;
|
|
|
|
+import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
|
|
|
|
+import com.microsvc.toolkit.middleware.im.message.MessageWrapper;
|
|
|
|
+import com.microsvc.toolkit.middleware.im.message.TencentRequest;
|
|
import com.microsvc.toolkit.middleware.im.properties.ImConfigProperties;
|
|
import com.microsvc.toolkit.middleware.im.properties.ImConfigProperties;
|
|
import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
|
|
import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
|
|
import com.yonge.cooleshow.auth.api.entity.SysUser;
|
|
import com.yonge.cooleshow.auth.api.entity.SysUser;
|
|
import com.yonge.cooleshow.auth.config.AppGlobalServiceConfig;
|
|
import com.yonge.cooleshow.auth.config.AppGlobalServiceConfig;
|
|
-import com.yonge.cooleshow.biz.dal.config.RongCloudConfig;
|
|
|
|
import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentPaymentDao;
|
|
import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentPaymentDao;
|
|
import com.yonge.cooleshow.biz.dal.dao.ImGroupDao;
|
|
import com.yonge.cooleshow.biz.dal.dao.ImGroupDao;
|
|
import com.yonge.cooleshow.biz.dal.dao.ImGroupMemberAuditDao;
|
|
import com.yonge.cooleshow.biz.dal.dao.ImGroupMemberAuditDao;
|
|
@@ -16,29 +20,27 @@ import com.yonge.cooleshow.biz.dal.dto.ImGroupSearchDto;
|
|
import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
|
|
import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
|
|
import com.yonge.cooleshow.biz.dal.entity.ImGroup;
|
|
import com.yonge.cooleshow.biz.dal.entity.ImGroup;
|
|
import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
|
|
import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
|
|
-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.ImHistoryMessage;
|
|
import com.yonge.cooleshow.biz.dal.entity.StudentStar;
|
|
import com.yonge.cooleshow.biz.dal.entity.StudentStar;
|
|
import com.yonge.cooleshow.biz.dal.entity.Teacher;
|
|
import com.yonge.cooleshow.biz.dal.entity.Teacher;
|
|
import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
|
|
import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
|
|
import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
|
|
import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
|
|
import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
|
|
import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
|
|
|
|
+import com.yonge.cooleshow.biz.dal.enums.RoleEnum;
|
|
import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
|
|
import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
|
|
import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
|
|
import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
|
|
import com.yonge.cooleshow.biz.dal.service.ImGroupService;
|
|
import com.yonge.cooleshow.biz.dal.service.ImGroupService;
|
|
import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
|
|
import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
|
|
import com.yonge.cooleshow.biz.dal.service.StudentStarService;
|
|
import com.yonge.cooleshow.biz.dal.service.StudentStarService;
|
|
|
|
+import com.yonge.cooleshow.biz.dal.service.SysConfigService;
|
|
import com.yonge.cooleshow.biz.dal.service.SysUserService;
|
|
import com.yonge.cooleshow.biz.dal.service.SysUserService;
|
|
import com.yonge.cooleshow.biz.dal.service.TeacherService;
|
|
import com.yonge.cooleshow.biz.dal.service.TeacherService;
|
|
import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
|
|
import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
|
|
import com.yonge.toolset.base.exception.BizException;
|
|
import com.yonge.toolset.base.exception.BizException;
|
|
import com.yonge.toolset.base.util.ThreadPool;
|
|
import com.yonge.toolset.base.util.ThreadPool;
|
|
|
|
+import io.rong.RongCloud;
|
|
|
|
+import io.rong.methods.message.history.History;
|
|
import io.rong.models.Result;
|
|
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.apache.commons.collections.CollectionUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.redisson.api.RBucket;
|
|
import org.redisson.api.RBucket;
|
|
@@ -46,20 +48,25 @@ import org.redisson.api.RedissonClient;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
+import java.io.BufferedReader;
|
|
|
|
+import java.io.File;
|
|
|
|
+import java.io.FileInputStream;
|
|
|
|
+import java.io.IOException;
|
|
|
|
+import java.io.InputStreamReader;
|
|
|
|
+import java.net.URL;
|
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
import java.text.MessageFormat;
|
|
import java.text.MessageFormat;
|
|
-import java.util.Collections;
|
|
|
|
-import java.util.Date;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.Objects;
|
|
|
|
-import java.util.Optional;
|
|
|
|
-import java.util.Set;
|
|
|
|
-import java.util.UUID;
|
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
+import java.util.*;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
+import java.util.zip.ZipEntry;
|
|
|
|
+import java.util.zip.ZipFile;
|
|
|
|
+import java.util.zip.ZipInputStream;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 即时通讯群组(ImGroup)表服务实现类
|
|
* 即时通讯群组(ImGroup)表服务实现类
|
|
@@ -106,6 +113,16 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
@Autowired
|
|
@Autowired
|
|
private ImConfigProperties imConfig;
|
|
private ImConfigProperties imConfig;
|
|
|
|
|
|
|
|
+
|
|
|
|
+ @Value("${cn.rongcloud.im.appkey}")
|
|
|
|
+ private String appKey;
|
|
|
|
+ @Value("${cn.rongcloud.im.secret}")
|
|
|
|
+ private String appSecret;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private SysConfigService sysConfigService;
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public ImGroupDao getDao() {
|
|
public ImGroupDao getDao() {
|
|
return this.baseMapper;
|
|
return this.baseMapper;
|
|
@@ -121,7 +138,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
* @return IM聊天Token
|
|
* @return IM聊天Token
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public ImGroupWrapper.ImUserInfo register(String userId, String username, String avatar) throws Exception {
|
|
|
|
|
|
+ public ImGroupWrapper.ImUserInfo register(String userId, ClientEnum clientType, String username, String avatar) throws Exception {
|
|
|
|
|
|
ImGroupWrapper.ImUserInfo userInfo = ImGroupWrapper.ImUserInfo.builder()
|
|
ImGroupWrapper.ImUserInfo userInfo = ImGroupWrapper.ImUserInfo.builder()
|
|
.imUserId("").imToken("").build();
|
|
.imUserId("").imToken("").build();
|
|
@@ -129,7 +146,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
try {
|
|
try {
|
|
|
|
|
|
// 聊天Token
|
|
// 聊天Token
|
|
- String imUserId = getImUserId(userId);
|
|
|
|
|
|
+ String imUserId = getImUserId(userId, clientType.getCode());
|
|
|
|
|
|
// 生成签名
|
|
// 生成签名
|
|
userInfo.imUserId(imUserId)
|
|
userInfo.imUserId(imUserId)
|
|
@@ -149,10 +166,36 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
* @return String
|
|
* @return String
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public String getImUserId(String userId) {
|
|
|
|
|
|
+ public String getImUserId(String userId, String clientType) {
|
|
String imUserId = userId;
|
|
String imUserId = userId;
|
|
if (StringUtils.isNotBlank(imConfig.getAppPrefix()) && !userId.startsWith(imConfig.getAppPrefix())) {
|
|
if (StringUtils.isNotBlank(imConfig.getAppPrefix()) && !userId.startsWith(imConfig.getAppPrefix())) {
|
|
- imUserId = MessageFormat.format("{0}:{1}", imConfig.getAppPrefix(), userId);
|
|
|
|
|
|
+ imUserId = MessageFormat.format("{0}:{1}:{2}", imConfig.getAppPrefix(), userId, clientType);
|
|
|
|
+ }
|
|
|
|
+ return imUserId;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public String getImUserId(Long userId, RoleEnum userRole) {
|
|
|
|
+ String imUserId = String.valueOf(userId);
|
|
|
|
+ String clientType = "STUDENT";
|
|
|
|
+ if(userRole.RoleTeacher == userRole){
|
|
|
|
+ clientType = "TEACHER";
|
|
|
|
+ }
|
|
|
|
+ if (StringUtils.isNotBlank(imConfig.getAppPrefix()) && !imUserId.startsWith(imConfig.getAppPrefix())) {
|
|
|
|
+ imUserId = MessageFormat.format("{0}:{1}:{2}", imConfig.getAppPrefix(), userId, clientType);
|
|
|
|
+ }
|
|
|
|
+ return imUserId;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public String getImUserId(Long userId, ClientEnum clientEnum) {
|
|
|
|
+ String imUserId = String.valueOf(userId);
|
|
|
|
+ String clientType = "STUDENT";
|
|
|
|
+ if(clientEnum.TEACHER == clientEnum){
|
|
|
|
+ clientType = "TEACHER";
|
|
|
|
+ }
|
|
|
|
+ if (StringUtils.isNotBlank(imConfig.getAppPrefix()) && !imUserId.startsWith(imConfig.getAppPrefix())) {
|
|
|
|
+ imUserId = MessageFormat.format("{0}:{1}:{2}", imConfig.getAppPrefix(), userId, clientType);
|
|
}
|
|
}
|
|
return imUserId;
|
|
return imUserId;
|
|
}
|
|
}
|
|
@@ -185,11 +228,12 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
imGroup.setId(imGroupId);
|
|
imGroup.setId(imGroupId);
|
|
this.baseMapper.insert(imGroup);
|
|
this.baseMapper.insert(imGroup);
|
|
//处理本地群成员列表
|
|
//处理本地群成员列表
|
|
- List<GroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(), true, ImGroupMemberRoleType.TEACHER);
|
|
|
|
|
|
+ List<ImGroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(),
|
|
|
|
+ true, ImGroupMemberRoleType.TEACHER);
|
|
//创建融云群
|
|
//创建融云群
|
|
- this.rtcCreate(imGroup.getCreateBy(),imGroupId,imGroup.getName());
|
|
|
|
|
|
+ this.rtcCreate(imGroup.getCreateBy(), imGroupId, imGroup.getName());
|
|
//加入融云群
|
|
//加入融云群
|
|
- imGroupMemberService.join(groupMembers,imGroupId);
|
|
|
|
|
|
+ imGroupMemberService.join(groupMembers, imGroupId);
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -225,9 +269,11 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
imUserFriendService.saveUserFriend(teacherId, studentIds);
|
|
imUserFriendService.saveUserFriend(teacherId, studentIds);
|
|
//处理本地群成员列表
|
|
//处理本地群成员列表
|
|
// 添加老师
|
|
// 添加老师
|
|
- List<GroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(), true, ImGroupMemberRoleType.TEACHER);
|
|
|
|
|
|
+ List<ImGroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(),
|
|
|
|
+ true, ImGroupMemberRoleType.TEACHER);
|
|
// 添加学生
|
|
// 添加学生
|
|
- groupMembers.addAll(imGroupMemberService.initGroupMembers(imGroupId, studentIds, ImGroupMemberRoleType.STUDENT));
|
|
|
|
|
|
+ groupMembers.addAll(imGroupMemberService.initGroupMembers(imGroupId, studentIds,
|
|
|
|
+ ImGroupMemberRoleType.STUDENT));
|
|
//创建融云群
|
|
//创建融云群
|
|
this.rtcCreate(courseGroup.getTeacherId(), imGroupId, imGroup.getName());
|
|
this.rtcCreate(courseGroup.getTeacherId(), imGroupId, imGroup.getName());
|
|
//加入融云群
|
|
//加入融云群
|
|
@@ -235,46 +281,130 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
return imGroupId;
|
|
return imGroupId;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
//创建融云群
|
|
//创建融云群
|
|
- private void rtcCreate(Long userId,String imGroupId,String imGroupName) throws Exception {
|
|
|
|
- //创建融云群
|
|
|
|
- GroupMember[] groupMembers = new GroupMember[]{new GroupMember(userId.toString(),imGroupId,null)};
|
|
|
|
- GroupModel groupModel = new GroupModel(imGroupId,0);
|
|
|
|
- groupModel.setMembers(groupMembers);
|
|
|
|
- groupModel.setName(imGroupName);
|
|
|
|
- Result result = RongCloudConfig.rongCloud.group.create(groupModel);
|
|
|
|
- if(!result.code.equals(200)){
|
|
|
|
- log.error("创建群聊失败:{}",result.errorMessage);
|
|
|
|
- throw new BizException("创建群聊失败,请联系管理员");
|
|
|
|
|
|
+ private void rtcCreate(Long userId, String imGroupId, String imGroupName) throws Exception {
|
|
|
|
+ rtcCreate(userId, imGroupId, imGroupName, ClientEnum.TEACHER);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //创建融云群
|
|
|
|
+ private void rtcCreate(Long userId, String imGroupId, String imGroupName, ClientEnum clientType) throws Exception {
|
|
|
|
+ //创建群
|
|
|
|
+ SysUser user = sysUserService.findUserById(userId);
|
|
|
|
+
|
|
|
|
+ // 群组默认头象
|
|
|
|
+// String groupDefaultAvatar = sysConfigService.findConfigValue(SysConfigConstant.GROUP_DEFAULT_AVATAR);
|
|
|
|
+ List<GroupMemberWrapper.ImGroupMember> groupMembers = Lists.newArrayList();
|
|
|
|
+ //记录群成员
|
|
|
|
+ GroupMemberWrapper.ImGroupMember groupMember = GroupMemberWrapper.ImGroupMember
|
|
|
|
+ .builder()
|
|
|
|
+ .id(IdWorker.getId())
|
|
|
|
+ .groupId(imGroupId)
|
|
|
|
+ .userId(userId)
|
|
|
|
+ .clientType(clientType.getCode())
|
|
|
|
+ .avatar(null)
|
|
|
|
+ .nickname(user.getUsername())
|
|
|
|
+ .isAdmin(true)
|
|
|
|
+ .imUserId(getImUserId(userId.toString(), clientType.getCode()))
|
|
|
|
+ .roleType(clientType.getCode())
|
|
|
|
+ .build();
|
|
|
|
+ groupMembers.add(groupMember);
|
|
|
|
+
|
|
|
|
+ // 自动激活学生IM帐号
|
|
|
|
+ registerUser(groupMembers);
|
|
|
|
+
|
|
|
|
+ // 创建IM群组
|
|
|
|
+ imPluginContext.getPluginService().groupCreate(imGroupId, imGroupName,
|
|
|
|
+ getImUserId(userId.toString(), clientType.getCode()));
|
|
|
|
+
|
|
|
|
+ // 添加群成员到当前群组
|
|
|
|
+ imPluginContext.getPluginService().groupJoin(imGroupId, imGroupName,
|
|
|
|
+ groupMembers);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 批量导入用户
|
|
|
|
+ *
|
|
|
|
+ * @param groupMembers List<ImGroupMemberWrapper.ImGroupMember>
|
|
|
|
+ */
|
|
|
|
+ private void registerUser(List<GroupMemberWrapper.ImGroupMember> groupMembers) {
|
|
|
|
+ for (GroupMemberWrapper.ImGroupMember member : groupMembers) {
|
|
|
|
+ // 激活用户帐号为空
|
|
|
|
+ if (StringUtils.isBlank(member.getNickname())) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ String imUserId = member.getImUserId();
|
|
|
|
+ if (StringUtils.isBlank(imUserId)) {
|
|
|
|
+ imUserId = getImUserId(String.valueOf(member.getUserId()),
|
|
|
|
+ member.getClientType());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ imPluginContext.getPluginService().register(getImUserId(imUserId, member.getClientType()),
|
|
|
|
+ member.getNickname(), member.getAvatar());
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("registerUser member imToken");
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
|
+ public List<GroupMemberWrapper.ImGroupMember> getImGroupMembers(List<ImGroupMember> groupMemberList) {
|
|
|
|
+ return groupMemberList.stream().map(item -> {
|
|
|
|
+ return GroupMemberWrapper.ImGroupMember.builder()
|
|
|
|
+ .id(item.getId())
|
|
|
|
+ .groupId(item.getGroupId())
|
|
|
|
+ .userId(item.getUserId())
|
|
|
|
+ .clientType(item.getRoleType().getCode())
|
|
|
|
+ .avatar(item.getAvatar())
|
|
|
|
+ .nickname(item.getNickname())
|
|
|
|
+ .isAdmin(item.getIsAdmin())
|
|
|
|
+ .imUserId(item.getImUserId())
|
|
|
|
+ .roleType(item.getRoleType().getCode())
|
|
|
|
+ .build();
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 自动注册用户
|
|
|
|
+ *
|
|
|
|
+ * @param groupMembers List<ImGroupMemberWrapper.ImGroupMember>
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public void asyncRegisterUser(List<GroupMemberWrapper.ImGroupMember> groupMembers) {
|
|
|
|
+ com.microsvc.toolkit.common.tools.ThreadPool.getExecutor().submit(() -> registerUser(groupMembers));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public void dismiss(String groupId) throws Exception {
|
|
public void dismiss(String groupId) throws Exception {
|
|
Long createBy = Optional.ofNullable(this.baseMapper.selectById(groupId)).
|
|
Long createBy = Optional.ofNullable(this.baseMapper.selectById(groupId)).
|
|
map(ImGroup::getCreateBy).
|
|
map(ImGroup::getCreateBy).
|
|
orElseThrow(() -> new BizException("操作失败:群组不存在"));
|
|
orElseThrow(() -> new BizException("操作失败:群组不存在"));
|
|
- if(!sysUserService.getUserId().equals(createBy)){
|
|
|
|
|
|
+ if (!sysUserService.getUserId().equals(createBy)) {
|
|
throw new BizException("操作失败:您没有操作权限");
|
|
throw new BizException("操作失败:您没有操作权限");
|
|
}
|
|
}
|
|
//删除入群申请
|
|
//删除入群申请
|
|
imGroupMemberAuditDao.delByGroupId(groupId);
|
|
imGroupMemberAuditDao.delByGroupId(groupId);
|
|
//获取所有群成员
|
|
//获取所有群成员
|
|
- List<GroupMember> groupMembers = imGroupMemberService.getDao().queryGroupMember(groupId);
|
|
|
|
|
|
+ List<ImGroupMember> groupMembers = imGroupMemberService.getDao().queryGroupMember(groupId);
|
|
//销毁成功,删除群
|
|
//销毁成功,删除群
|
|
this.baseMapper.deleteById(groupId);
|
|
this.baseMapper.deleteById(groupId);
|
|
//删除群成员
|
|
//删除群成员
|
|
imGroupMemberService.delByGroupId(groupId);
|
|
imGroupMemberService.delByGroupId(groupId);
|
|
//解散融云群
|
|
//解散融云群
|
|
- GroupModel groupModel = new GroupModel(groupId,0);
|
|
|
|
- GroupMember[] groupMembersArr = groupMembers.toArray(new GroupMember[groupMembers.size()]);
|
|
|
|
- groupModel.setMembers(groupMembersArr);
|
|
|
|
- Result result = RongCloudConfig.rongCloud.group.dismiss(groupModel);
|
|
|
|
- if(!result.code.equals(200)){
|
|
|
|
- log.error("解散群聊失败:{}",result.errorMessage);
|
|
|
|
- throw new BizException("解散群聊失败,请联系管理员");
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
+ // 获取群成员
|
|
|
|
+ List<GroupMemberWrapper.ImGroupMember> imGroupMembers = groupMembers.stream()
|
|
|
|
+ .map(x -> GroupMemberWrapper.ImGroupMember.builder().userId(x.getUserId())
|
|
|
|
+ .groupId(x.getGroupId()).clientType(x.getRoleType().getCode()).build())
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ // 解散群
|
|
|
|
+ imPluginContext.getPluginService().groupDismiss(groupId, imGroupMembers);
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -291,7 +421,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
@Override
|
|
@Override
|
|
public ImGroup getByCourseGroupId(Long courseGroupId) {
|
|
public ImGroup getByCourseGroupId(Long courseGroupId) {
|
|
return this.lambdaQuery()
|
|
return this.lambdaQuery()
|
|
- .eq(ImGroup::getCourseGroupId,courseGroupId)
|
|
|
|
|
|
+ .eq(ImGroup::getCourseGroupId, courseGroupId)
|
|
.last("limit 1")
|
|
.last("limit 1")
|
|
.one();
|
|
.one();
|
|
}
|
|
}
|
|
@@ -315,20 +445,19 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
imUserId = MessageFormat.format("{0}:{1}", imUserId, ClientEnum.STUDENT.name());
|
|
imUserId = MessageFormat.format("{0}:{1}", imUserId, ClientEnum.STUDENT.name());
|
|
}
|
|
}
|
|
|
|
|
|
- if(imGroupMemberService.getDao().delByGroupIdAndUserId(groupId, userId, roleType) < 1){
|
|
|
|
|
|
+ if (imGroupMemberService.getDao().delByGroupIdAndUserId(groupId, userId, roleType) < 1) {
|
|
throw new BizException("操作失败:用户不在此群组");
|
|
throw new BizException("操作失败:用户不在此群组");
|
|
}
|
|
}
|
|
//修改群成员数
|
|
//修改群成员数
|
|
baseMapper.updateMemberNum(groupId);
|
|
baseMapper.updateMemberNum(groupId);
|
|
|
|
|
|
- GroupModel groupModel = new GroupModel(groupId,0);
|
|
|
|
- GroupMember[] groupMembers = new GroupMember[]{new GroupMember(imUserId,groupId,null)};
|
|
|
|
- groupModel.setMembers(groupMembers);
|
|
|
|
- Result result = RongCloudConfig.rongCloud.group.quit(groupModel);
|
|
|
|
- if(!result.code.equals(200)){
|
|
|
|
- log.error("退出群聊失败:{}",result.errorMessage);
|
|
|
|
- throw new BizException("退出群聊失败,请联系管理员");
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
+ // 群主退出
|
|
|
|
+ List<ImGroupMember> groupMembers = Lists.newArrayList();
|
|
|
|
+ groupMembers.add(groupMember);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ imPluginContext.getPluginService().groupQuit(groupId, getImGroupMembers(groupMembers));
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -342,10 +471,10 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
|
|
|
// 已经有群的不操作
|
|
// 已经有群的不操作
|
|
Integer count = this.lambdaQuery()
|
|
Integer count = this.lambdaQuery()
|
|
- .eq(ImGroup::getCreateBy, teacher.getUserId())
|
|
|
|
- .eq(ImGroup::getAutoPassFlag, true)
|
|
|
|
- .eq(ImGroup::getType, ImGroupType.FAN)
|
|
|
|
- .count();
|
|
|
|
|
|
+ .eq(ImGroup::getCreateBy, teacher.getUserId())
|
|
|
|
+ .eq(ImGroup::getAutoPassFlag, true)
|
|
|
|
+ .eq(ImGroup::getType, ImGroupType.FAN)
|
|
|
|
+ .count();
|
|
if (count > 0) {
|
|
if (count > 0) {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
@@ -359,8 +488,8 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
|
|
|
// 查询老师的粉丝,添加到群
|
|
// 查询老师的粉丝,添加到群
|
|
List<StudentStar> list = studentStarService.lambdaQuery()
|
|
List<StudentStar> list = studentStarService.lambdaQuery()
|
|
- .eq(StudentStar::getTeacherId, teacher.getUserId())
|
|
|
|
- .list();
|
|
|
|
|
|
+ .eq(StudentStar::getTeacherId, teacher.getUserId())
|
|
|
|
+ .list();
|
|
Set<Long> studentIdList = list.stream().map(StudentStar::getStudentId).collect(Collectors.toSet());
|
|
Set<Long> studentIdList = list.stream().map(StudentStar::getStudentId).collect(Collectors.toSet());
|
|
|
|
|
|
|
|
|
|
@@ -377,9 +506,11 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
String imGroupId = UUID.randomUUID() + imGroup.getType().getCode();
|
|
String imGroupId = UUID.randomUUID() + imGroup.getType().getCode();
|
|
imGroup.setId(imGroupId);
|
|
imGroup.setId(imGroupId);
|
|
this.baseMapper.insert(imGroup);
|
|
this.baseMapper.insert(imGroup);
|
|
- List<GroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(), true, ImGroupMemberRoleType.TEACHER);
|
|
|
|
|
|
+ List<ImGroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(),
|
|
|
|
+ true, ImGroupMemberRoleType.TEACHER);
|
|
if (!CollectionUtils.isEmpty(studentIdList)) {
|
|
if (!CollectionUtils.isEmpty(studentIdList)) {
|
|
- groupMembers.addAll(imGroupMemberService.initGroupMembers(imGroupId, studentIdList, ImGroupMemberRoleType.STUDENT));
|
|
|
|
|
|
+ groupMembers.addAll(imGroupMemberService.initGroupMembers(imGroupId, studentIdList,
|
|
|
|
+ ImGroupMemberRoleType.STUDENT));
|
|
}
|
|
}
|
|
//创建融云群
|
|
//创建融云群
|
|
this.rtcCreate(sysUser.getId(), imGroupId, imGroup.getName());
|
|
this.rtcCreate(sysUser.getId(), imGroupId, imGroup.getName());
|
|
@@ -420,7 +551,8 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
|
|
|
if (Objects.nonNull(groupMember)) {
|
|
if (Objects.nonNull(groupMember)) {
|
|
|
|
|
|
- String imIdentity = MessageFormat.format("{0}:{1}", String.valueOf(userId), ClientEnum.STUDENT.name());
|
|
|
|
|
|
+ String imIdentity = MessageFormat.format("{0}:{1}", String.valueOf(userId),
|
|
|
|
+ ClientEnum.STUDENT.name());
|
|
// 缓存用户重新入群标识
|
|
// 缓存用户重新入群标识
|
|
String userKey = MessageFormat.format("{0}:{1}", groupId, imIdentity);
|
|
String userKey = MessageFormat.format("{0}:{1}", groupId, imIdentity);
|
|
RBucket<Object> bucket = redissonClient.getBucket(userKey);
|
|
RBucket<Object> bucket = redissonClient.getBucket(userKey);
|
|
@@ -429,7 +561,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
}
|
|
}
|
|
|
|
|
|
// 自动加入该群组
|
|
// 自动加入该群组
|
|
- imGroupMemberService.join(Lists.newArrayList(new GroupMember(imIdentity, groupId, null)), groupId);
|
|
|
|
|
|
+ imGroupMemberService.join(Lists.newArrayList(groupMember), groupId);
|
|
|
|
|
|
Integer numbers = imGroupMemberService.lambdaQuery()
|
|
Integer numbers = imGroupMemberService.lambdaQuery()
|
|
.eq(ImGroupMember::getGroupId, groupId)
|
|
.eq(ImGroupMember::getGroupId, groupId)
|
|
@@ -438,11 +570,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
.count();
|
|
.count();
|
|
// 拥有老师身份,且非群主时,需要主动退出群聊
|
|
// 拥有老师身份,且非群主时,需要主动退出群聊
|
|
if (count > 0 && numbers <= 0) {
|
|
if (count > 0 && numbers <= 0) {
|
|
-
|
|
|
|
- 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);
|
|
|
|
|
|
+ quit(groupId, userId, ClientEnum.TEACHER);
|
|
}
|
|
}
|
|
|
|
|
|
// 缓存重新入群标识, 默认有效期为120天
|
|
// 缓存重新入群标识, 默认有效期为120天
|
|
@@ -457,5 +585,266 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
|
|
|
return group;
|
|
return group;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 同步即时通讯聊天记录
|
|
|
|
+ *
|
|
|
|
+ * @param date
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public Result historyGet(String date) throws Exception {
|
|
|
|
+ return getHistory().get(date);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void saveImHistoryMessage(File file) {
|
|
|
|
+ ZipInputStream zin = null;
|
|
|
|
+ try {
|
|
|
|
+ zin = new ZipInputStream(new FileInputStream(file), StandardCharsets.UTF_8);
|
|
|
|
+ ZipFile zf = new ZipFile(file);
|
|
|
|
+ ZipEntry ze;
|
|
|
|
+ Set<ImHistoryMessage> historyMessages = new HashSet<>();
|
|
|
|
+ while ((ze = zin.getNextEntry()) != null) {
|
|
|
|
+ BufferedReader br = new BufferedReader(new InputStreamReader(zf.getInputStream(ze)));
|
|
|
|
+ String line;
|
|
|
|
+ while ((line = br.readLine()) != null) {
|
|
|
|
+ try {
|
|
|
|
+ historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")),
|
|
|
|
+ ImHistoryMessage.class));
|
|
|
|
+// if(historyMessages.size() >= 2000){
|
|
|
|
+// historyMessageDao.batchInsert(new ArrayList<>(historyMessages),HistoryMessage.class);
|
|
|
|
+// historyMessages.clear();
|
|
|
|
+// }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ br.close();
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ if (historyMessages.size() > 0) {
|
|
|
|
+ ImGroupDao dao = getDao();
|
|
|
|
+ dao.batchInsert(historyMessages.stream().sorted(Comparator.comparing(ImHistoryMessage::getDateTime)).collect(Collectors.toList()));
|
|
|
|
+ }
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ if (zin != null) {
|
|
|
|
+ try {
|
|
|
|
+ zin.closeEntry();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<ImHistoryMessage> getRongYunInfo() {
|
|
|
|
+ List<ImHistoryMessage> list = getDao().selectAll();
|
|
|
|
+ return list;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * IM导入消息
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public void importInfo(List<ImHistoryMessage> info) throws Exception {
|
|
|
|
+ URL url = new URL("https://console.tim.qq.com/v4/im_open_login_svc/account_import");
|
|
|
|
+ info.stream().forEach(i -> {
|
|
|
|
+ //判断消息类型
|
|
|
|
+ Integer type = i.getTargetType();
|
|
|
|
+ if (type == 1) {
|
|
|
|
+ //单聊会话
|
|
|
|
+
|
|
|
|
+ MessageWrapper.PrivateImportMessage privateImportMessage = new MessageWrapper.PrivateImportMessage();
|
|
|
|
+ //2:表示历史消息导入,消息不计入未读计数,且消息不会推送到终端
|
|
|
|
+ privateImportMessage.setSyncFromOldSystem(2);
|
|
|
|
+ //设置发送人
|
|
|
|
+ privateImportMessage.setFromAccount(i.getFromUserId());
|
|
|
|
+ //设置接收人
|
|
|
|
+ privateImportMessage.setToAccount(i.getTargetId());
|
|
|
|
+ //设置随机数
|
|
|
|
+ privateImportMessage.setMsgRandom(new Random().nextInt());
|
|
|
|
+ //设置body
|
|
|
|
+
|
|
|
|
+ List<TencentRequest.MessageBody> list = new ArrayList<>();
|
|
|
|
+ list.stream().forEach(item -> {
|
|
|
|
+ item.setMsgContent(i.getContent());
|
|
|
|
+ item.setMsgType(i.getClassname());
|
|
|
|
+ });
|
|
|
|
+ if (list.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:TxtMsg")) {
|
|
|
|
+ //文本对象
|
|
|
|
+ list.stream().forEach(item -> item.setMsgType("TIMTextElem"));
|
|
|
|
+ } else if (list.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:ImgMsg")) {
|
|
|
|
+ //图文对象
|
|
|
|
+ list.stream().forEach(item -> item.setMsgType("TIMImageElem"));
|
|
|
|
+ }
|
|
|
|
+ privateImportMessage.setTencentMessageBody(list);
|
|
|
|
+ try {
|
|
|
|
+ imPluginContext.getPluginService().importPrivateMessage(privateImportMessage);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ } else if (type == 3) {
|
|
|
|
+ //群组会话
|
|
|
|
+ MessageWrapper.GroupImportMessage groupImportMessage = new MessageWrapper.GroupImportMessage();
|
|
|
|
+ List<MessageWrapper.GroupImportMessageData> list = new ArrayList<>();
|
|
|
|
+ MessageWrapper.GroupImportMessageData data1 = new MessageWrapper.GroupImportMessageData();
|
|
|
|
+ List<TencentRequest.MessageBody> bodyList = new ArrayList<>();
|
|
|
|
+ //设置群组Id
|
|
|
|
+ groupImportMessage.setGroupId(i.getGroupId());
|
|
|
|
+ //设置发送人
|
|
|
|
+ data1.setFromAccount(i.getFromUserId());
|
|
|
|
+ //设置随机数
|
|
|
|
+ data1.setRandom(new Random().nextInt());
|
|
|
|
+ //设置发送时间
|
|
|
|
+ data1.setSendTime(Long.parseLong(i.getDateTime()));
|
|
|
|
+ bodyList.stream().forEach(item -> {
|
|
|
|
+ item.setMsgContent(i.getContent());
|
|
|
|
+ item.setMsgType(i.getClassname());
|
|
|
|
+ });
|
|
|
|
+ if (bodyList.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:TxtMsg")) {
|
|
|
|
+ bodyList.stream().forEach(item -> item.setMsgType("TIMTextElem"));
|
|
|
|
+ } else if (bodyList.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:ImgMsg")) {
|
|
|
|
+ //暂未支持图文对象
|
|
|
|
+ bodyList.stream().forEach(item -> item.setMsgType("TIMCustomElem"));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ data1.setTencentMessageBody(bodyList);
|
|
|
|
+
|
|
|
|
+ list.add(data1);
|
|
|
|
+ //导入消息列表
|
|
|
|
+ groupImportMessage.setMsgList(list);
|
|
|
|
+ try {
|
|
|
|
+ imPluginContext.getPluginService().importGroupMessage(groupImportMessage);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ private History getHistory() {
|
|
|
|
+ RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret);
|
|
|
|
+ History history = new History(appKey, appSecret);
|
|
|
|
+ history.setRongCloud(rongCloud);
|
|
|
|
+ return history;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 群迁移
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public void groupTransfer() {
|
|
|
|
+ int page = 1;
|
|
|
|
+ int size = 100;
|
|
|
|
+ List<ImGroup> imGroups = this.lambdaQuery().orderByDesc(ImGroup::getCreateTime)
|
|
|
|
+ .last("limit " + ((page - 1) * size) + "," + size).list();
|
|
|
|
+ while (!imGroups.isEmpty()) {
|
|
|
|
+ groupTransfer(imGroups);
|
|
|
|
+
|
|
|
|
+ page++;
|
|
|
|
+ imGroups = this.lambdaQuery().orderByDesc(ImGroup::getCreateTime)
|
|
|
|
+ .last("limit " + ((page - 1) * size) + "," + size).list();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void groupTransfer(List<ImGroup> records) {
|
|
|
|
+ for (ImGroup imGroup : records) {
|
|
|
|
+ List<ImGroupMember> memberList = imGroupMemberService.lambdaQuery()
|
|
|
|
+ .eq(ImGroupMember::getGroupId, imGroup.getId())
|
|
|
|
+ .list();
|
|
|
|
+ ImGroupMember admin = memberList.stream().filter(ImGroupMember::getIsAdmin).findFirst().orElse(null);
|
|
|
|
+ if (admin == null) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ MessageWrapper.ImportGroup importGroup = new MessageWrapper.ImportGroup();
|
|
|
|
+ importGroup.setOwnerAccount(getImUserId(admin.getUserId().toString(), "TEACHER"));
|
|
|
|
+ importGroup.setType("Public");
|
|
|
|
+ importGroup.setGroupId(imGroup.getId());
|
|
|
|
+ importGroup.setName(imGroup.getName());
|
|
|
|
+ importGroup.setIntroduction(imGroup.getIntroduce());
|
|
|
|
+ importGroup.setNotification(imGroup.getMemo());
|
|
|
|
+ importGroup.setFaceUrl(imGroup.getImg());
|
|
|
|
+ if (StringUtils.isEmpty(imGroup.getImg())) {
|
|
|
|
+ importGroup.setFaceUrl("https://gyt.ks3-cn-beijing.ksyuncs.com/example/group_default_avatar.png");
|
|
|
|
+ }
|
|
|
|
+ importGroup.setApplyJoinOption(Boolean.TRUE.equals(imGroup.getAutoPassFlag()) ? "FreeAccess" :
|
|
|
|
+ "NeedPermission");
|
|
|
|
+ importGroup.setCreateTime(imGroup.getCreateTime().getTime() / 1000);
|
|
|
|
+
|
|
|
|
+ register(admin.getUserId(), imGroup.getId(), admin.getAvatar(), true, ClientEnum.TEACHER);
|
|
|
|
+ imPluginContext.getPluginService().importGroup(importGroup);
|
|
|
|
+
|
|
|
|
+ List<ImGroupMember> groupMembers = memberList.stream()
|
|
|
|
+ .filter(next -> !next.getIsAdmin()).collect(Collectors.toList());
|
|
|
|
+ if (groupMembers.isEmpty()) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ for (ImGroupMember member : groupMembers) {
|
|
|
|
+ String avatar = member.getAvatar();
|
|
|
|
+ if (StringUtils.isEmpty(avatar)) {
|
|
|
|
+ avatar = "https://daya.ks3-cn-beijing.ksyun.com/202203/T1WgJaE.png";
|
|
|
|
+ }
|
|
|
|
+ register(member.getUserId(), imGroup.getId(), avatar, false,
|
|
|
|
+ ImGroupMemberRoleType.STUDENT.equals(member.getRoleType()) ? ClientEnum.STUDENT :
|
|
|
|
+ ClientEnum.TEACHER);
|
|
|
|
+ }
|
|
|
|
+ MessageWrapper.ImportGroupMember importGroupMember = new MessageWrapper.ImportGroupMember();
|
|
|
|
+ importGroupMember.setGroupId(imGroup.getId());
|
|
|
|
+ List<MessageWrapper.ImportGroupMemberData> members =
|
|
|
|
+ groupMembers.stream().map(next -> {
|
|
|
|
+ MessageWrapper.ImportGroupMemberData data = new MessageWrapper.ImportGroupMemberData();
|
|
|
|
+ data.setMemberAccount(getImUserId(next.getUserId().toString(),
|
|
|
|
+ ImGroupMemberRoleType.STUDENT.equals(next.getRoleType()) ?
|
|
|
|
+ ClientEnum.STUDENT.name() :
|
|
|
|
+ ClientEnum.TEACHER.name()));
|
|
|
|
+ data.setJoinTime(next.getCreateTime().getTime() / 1000);
|
|
|
|
+ data.setUnreadMsgNum(0);
|
|
|
|
+ return data;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ importGroupMember.setMemberList(members);
|
|
|
|
+ imPluginContext.getPluginService().importGroupMember(importGroupMember);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error(String.format("群迁移加入群聊失败:%s", e.getMessage()));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void register(Long userId, String imGroupId, String avatar, Boolean admin, ClientEnum clientType) {
|
|
|
|
+ SysUser user = sysUserService.findUserById(userId);
|
|
|
|
+
|
|
|
|
+ // 群组默认头象
|
|
|
|
+ List<GroupMemberWrapper.ImGroupMember> groupMembers = Lists.newArrayList();
|
|
|
|
+ //记录群成员
|
|
|
|
+ GroupMemberWrapper.ImGroupMember groupMember = GroupMemberWrapper.ImGroupMember
|
|
|
|
+ .builder()
|
|
|
|
+ .id(IdWorker.getId())
|
|
|
|
+ .groupId(imGroupId)
|
|
|
|
+ .userId(userId)
|
|
|
|
+ .clientType(clientType.getCode())
|
|
|
|
+ .avatar(avatar)
|
|
|
|
+ .nickname(user.getUsername())
|
|
|
|
+ .isAdmin(admin)
|
|
|
|
+ .imUserId(getImUserId(userId.toString(), clientType.getCode()))
|
|
|
|
+ .roleType(clientType.getCode())
|
|
|
|
+ .build();
|
|
|
|
+ groupMembers.add(groupMember);
|
|
|
|
+
|
|
|
|
+ // 自动激活学生IM帐号
|
|
|
|
+ registerUser(groupMembers);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|