|
@@ -17,27 +17,30 @@ import com.yonge.cooleshow.biz.dal.dao.ImGroupDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.ImGroupMemberAuditDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.ImGroupResultDto;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.ImGroupSearchDto;
|
|
|
-import com.yonge.cooleshow.biz.dal.entity.*;
|
|
|
-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.entity.CourseGroup;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.ImGroup;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.ImHistoryMessage;
|
|
|
+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.entity.StudentStar;
|
|
|
-import com.yonge.cooleshow.biz.dal.service.*;
|
|
|
+import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
|
|
|
+import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
|
|
|
+import com.yonge.cooleshow.biz.dal.service.ImGroupService;
|
|
|
+import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
|
|
|
+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.TeacherService;
|
|
|
import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
|
|
|
import com.yonge.toolset.base.exception.BizException;
|
|
|
import com.yonge.toolset.base.util.ThreadPool;
|
|
|
-import com.yonge.toolset.utils.http.HttpUtil;
|
|
|
import io.rong.RongCloud;
|
|
|
import io.rong.methods.message.history.History;
|
|
|
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.lang.math.RandomUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.redisson.api.RBucket;
|
|
|
import org.redisson.api.RedissonClient;
|
|
@@ -49,23 +52,21 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
-import java.io.*;
|
|
|
-import java.net.HttpURLConnection;
|
|
|
-import java.net.MalformedURLException;
|
|
|
+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.util.*;
|
|
|
-import java.util.stream.Collectors;
|
|
|
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;
|
|
|
|
|
|
-import static com.microsvc.toolkit.middleware.im.message.ETencentMessage.TIMImageElem;
|
|
|
-import static com.microsvc.toolkit.middleware.im.message.ETencentMessage.TIMLocationElem;
|
|
|
-import static com.microsvc.toolkit.middleware.im.message.ETencentMessage.TIMTextElem;
|
|
|
-
|
|
|
/**
|
|
|
* 即时通讯群组(ImGroup)表服务实现类
|
|
|
*
|
|
@@ -136,7 +137,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
* @return IM聊天Token
|
|
|
*/
|
|
|
@Override
|
|
|
- public ImGroupWrapper.ImUserInfo register(String userId,ClientEnum clientType, 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()
|
|
|
.imUserId("").imToken("").build();
|
|
@@ -144,7 +145,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
try {
|
|
|
|
|
|
// 聊天Token
|
|
|
- String imUserId = getImUserId(userId,clientType.getCode());
|
|
|
+ String imUserId = getImUserId(userId, clientType.getCode());
|
|
|
|
|
|
// 生成签名
|
|
|
userInfo.imUserId(imUserId)
|
|
@@ -164,10 +165,10 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
* @return String
|
|
|
*/
|
|
|
@Override
|
|
|
- public String getImUserId(String userId,String clientType) {
|
|
|
+ public String getImUserId(String userId, String clientType) {
|
|
|
String imUserId = userId;
|
|
|
if (StringUtils.isNotBlank(imConfig.getAppPrefix()) && !userId.startsWith(imConfig.getAppPrefix())) {
|
|
|
- imUserId = MessageFormat.format("{0}:{1}:{2}", imConfig.getAppPrefix(), userId,clientType);
|
|
|
+ imUserId = MessageFormat.format("{0}:{1}:{2}", imConfig.getAppPrefix(), userId, clientType);
|
|
|
}
|
|
|
return imUserId;
|
|
|
}
|
|
@@ -200,11 +201,12 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
imGroup.setId(imGroupId);
|
|
|
this.baseMapper.insert(imGroup);
|
|
|
//处理本地群成员列表
|
|
|
- List<ImGroupMember> 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
|
|
@@ -240,9 +242,11 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
imUserFriendService.saveUserFriend(teacherId, studentIds);
|
|
|
//处理本地群成员列表
|
|
|
// 添加老师
|
|
|
- List<ImGroupMember> 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());
|
|
|
//加入融云群
|
|
@@ -252,12 +256,12 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
|
|
|
|
|
|
//创建融云群
|
|
|
- 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) throws Exception {
|
|
|
+ rtcCreate(userId, imGroupId, imGroupName, ClientEnum.TEACHER);
|
|
|
}
|
|
|
|
|
|
//创建融云群
|
|
|
- private void rtcCreate(Long userId,String imGroupId,String imGroupName,ClientEnum clientType) throws Exception {
|
|
|
+ private void rtcCreate(Long userId, String imGroupId, String imGroupName, ClientEnum clientType) throws Exception {
|
|
|
//创建群
|
|
|
SysUser user = sysUserService.findUserById(userId);
|
|
|
|
|
@@ -274,7 +278,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
.avatar(null)
|
|
|
.nickname(user.getUsername())
|
|
|
.isAdmin(true)
|
|
|
- .imUserId(getImUserId(userId.toString(),clientType.getCode()))
|
|
|
+ .imUserId(getImUserId(userId.toString(), clientType.getCode()))
|
|
|
.roleType(clientType.getCode())
|
|
|
.build();
|
|
|
groupMembers.add(groupMember);
|
|
@@ -284,7 +288,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
|
|
|
// 创建IM群组
|
|
|
imPluginContext.getPluginService().groupCreate(imGroupId, imGroupName,
|
|
|
- getImUserId(userId.toString(),clientType.getCode()));
|
|
|
+ getImUserId(userId.toString(), clientType.getCode()));
|
|
|
|
|
|
// 添加群成员到当前群组
|
|
|
imPluginContext.getPluginService().groupJoin(imGroupId, imGroupName,
|
|
@@ -294,6 +298,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
|
|
|
/**
|
|
|
* 批量导入用户
|
|
|
+ *
|
|
|
* @param groupMembers List<ImGroupMemberWrapper.ImGroupMember>
|
|
|
*/
|
|
|
private void registerUser(List<GroupMemberWrapper.ImGroupMember> groupMembers) {
|
|
@@ -310,7 +315,8 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
member.getClientType());
|
|
|
}
|
|
|
|
|
|
- imPluginContext.getPluginService().register(getImUserId(imUserId,member.getClientType()), member.getNickname(), member.getAvatar());
|
|
|
+ imPluginContext.getPluginService().register(getImUserId(imUserId, member.getClientType()),
|
|
|
+ member.getNickname(), member.getAvatar());
|
|
|
} catch (Exception e) {
|
|
|
log.error("registerUser member imToken");
|
|
|
}
|
|
@@ -337,6 +343,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
|
|
|
/**
|
|
|
* 自动注册用户
|
|
|
+ *
|
|
|
* @param groupMembers List<ImGroupMemberWrapper.ImGroupMember>
|
|
|
*/
|
|
|
@Override
|
|
@@ -350,7 +357,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
Long createBy = Optional.ofNullable(this.baseMapper.selectById(groupId)).
|
|
|
map(ImGroup::getCreateBy).
|
|
|
orElseThrow(() -> new BizException("操作失败:群组不存在"));
|
|
|
- if(!sysUserService.getUserId().equals(createBy)){
|
|
|
+ if (!sysUserService.getUserId().equals(createBy)) {
|
|
|
throw new BizException("操作失败:您没有操作权限");
|
|
|
}
|
|
|
//删除入群申请
|
|
@@ -387,7 +394,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
@Override
|
|
|
public ImGroup getByCourseGroupId(Long courseGroupId) {
|
|
|
return this.lambdaQuery()
|
|
|
- .eq(ImGroup::getCourseGroupId,courseGroupId)
|
|
|
+ .eq(ImGroup::getCourseGroupId, courseGroupId)
|
|
|
.last("limit 1")
|
|
|
.one();
|
|
|
}
|
|
@@ -411,7 +418,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
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("操作失败:用户不在此群组");
|
|
|
}
|
|
|
//修改群成员数
|
|
@@ -437,10 +444,10 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
|
|
|
// 已经有群的不操作
|
|
|
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) {
|
|
|
continue;
|
|
|
}
|
|
@@ -454,8 +461,8 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
|
|
|
// 查询老师的粉丝,添加到群
|
|
|
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());
|
|
|
|
|
|
|
|
@@ -472,9 +479,11 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
String imGroupId = UUID.randomUUID() + imGroup.getType().getCode();
|
|
|
imGroup.setId(imGroupId);
|
|
|
this.baseMapper.insert(imGroup);
|
|
|
- List<ImGroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(), true, ImGroupMemberRoleType.TEACHER);
|
|
|
+ List<ImGroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(),
|
|
|
+ true, ImGroupMemberRoleType.TEACHER);
|
|
|
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());
|
|
@@ -515,7 +524,8 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
|
|
|
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);
|
|
|
RBucket<Object> bucket = redissonClient.getBucket(userKey);
|
|
@@ -551,6 +561,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
|
|
|
/**
|
|
|
* 同步即时通讯聊天记录
|
|
|
+ *
|
|
|
* @param date
|
|
|
* @return
|
|
|
*/
|
|
@@ -561,7 +572,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void saveImHistoryMessage(File file) {
|
|
|
+ public void saveImHistoryMessage(File file) {
|
|
|
ZipInputStream zin = null;
|
|
|
try {
|
|
|
zin = new ZipInputStream(new FileInputStream(file), StandardCharsets.UTF_8);
|
|
@@ -573,19 +584,20 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
String line;
|
|
|
while ((line = br.readLine()) != null) {
|
|
|
try {
|
|
|
- historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")), ImHistoryMessage.class));
|
|
|
+ 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){
|
|
|
+ } catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
br.close();
|
|
|
break;
|
|
|
}
|
|
|
- if(historyMessages.size() > 0){
|
|
|
+ if (historyMessages.size() > 0) {
|
|
|
ImGroupDao dao = getDao();
|
|
|
dao.batchInsert(historyMessages.stream().sorted(Comparator.comparing(ImHistoryMessage::getDateTime)).collect(Collectors.toList()));
|
|
|
}
|
|
@@ -619,7 +631,7 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
Integer type = i.getTargetType();
|
|
|
if (type == 1) {
|
|
|
//单聊会话
|
|
|
-
|
|
|
+
|
|
|
MessageWrapper.PrivateImportMessage privateImportMessage = new MessageWrapper.PrivateImportMessage();
|
|
|
//2:表示历史消息导入,消息不计入未读计数,且消息不会推送到终端
|
|
|
privateImportMessage.setSyncFromOldSystem(2);
|
|
@@ -632,14 +644,14 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
//设置body
|
|
|
|
|
|
List<TencentRequest.MessageBody> list = new ArrayList<>();
|
|
|
- list.stream().forEach(item->{
|
|
|
+ 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")){
|
|
|
+ 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")){
|
|
|
+ } else if (list.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:ImgMsg")) {
|
|
|
//图文对象
|
|
|
list.stream().forEach(item -> item.setMsgType("TIMImageElem"));
|
|
|
}
|
|
@@ -665,13 +677,13 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
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.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")){
|
|
|
+ } else if (bodyList.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:ImgMsg")) {
|
|
|
//暂未支持图文对象
|
|
|
bodyList.stream().forEach(item -> item.setMsgType("TIMCustomElem"));
|
|
|
}
|
|
@@ -695,11 +707,117 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
|
|
|
}
|
|
|
|
|
|
|
|
|
- private History getHistory(){
|
|
|
+ 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(new Date().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);
|
|
|
+ }
|
|
|
}
|
|
|
|