|
@@ -1,38 +1,95 @@
|
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.google.common.collect.Lists;
|
|
|
+import com.microsvc.toolkit.middleware.common.http.ImageUtil;
|
|
|
import com.microsvc.toolkit.middleware.im.ImPluginContext;
|
|
|
-import com.microsvc.toolkit.middleware.im.ImPluginService;
|
|
|
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.ym.mec.auth.api.entity.SysUser;
|
|
|
-import com.ym.mec.biz.dal.dao.*;
|
|
|
+import com.ym.mec.auth.api.enums.SysUserType;
|
|
|
+import com.ym.mec.biz.dal.dao.ClassGroupTeacherMapperDao;
|
|
|
+import com.ym.mec.biz.dal.dao.ImGroupDao;
|
|
|
+import com.ym.mec.biz.dal.dao.ImGroupMemberDao;
|
|
|
+import com.ym.mec.biz.dal.dao.ImUserFriendDao;
|
|
|
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
|
|
|
+import com.ym.mec.biz.dal.dao.TeacherDao;
|
|
|
import com.ym.mec.biz.dal.dto.ImGroupDto;
|
|
|
import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
|
|
|
import com.ym.mec.biz.dal.dto.NameDto;
|
|
|
-import com.ym.mec.biz.dal.entity.*;
|
|
|
+import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
|
|
|
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
|
|
|
+import com.ym.mec.biz.dal.entity.Employee;
|
|
|
+import com.ym.mec.biz.dal.entity.ImGroup;
|
|
|
+import com.ym.mec.biz.dal.entity.ImGroupMember;
|
|
|
+import com.ym.mec.biz.dal.entity.MusicGroup;
|
|
|
+import com.ym.mec.biz.dal.entity.SchoolStaff;
|
|
|
+import com.ym.mec.biz.dal.entity.Student;
|
|
|
+import com.ym.mec.biz.dal.entity.Teacher;
|
|
|
import com.ym.mec.biz.dal.enums.EFriendRoleType;
|
|
|
import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.im.ClientEnum;
|
|
|
import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
|
|
|
import com.ym.mec.biz.dal.mapper.SchoolStaffMapper;
|
|
|
+import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
|
|
|
import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
|
|
|
-import com.ym.mec.biz.service.*;
|
|
|
+import com.ym.mec.biz.dal.wrapper.ImHistoryMessageWrapper;
|
|
|
+import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
|
|
|
+import com.ym.mec.biz.service.CooperationOrganService;
|
|
|
+import com.ym.mec.biz.service.EmployeeService;
|
|
|
+import com.ym.mec.biz.service.ImGroupMemberService;
|
|
|
+import com.ym.mec.biz.service.ImGroupService;
|
|
|
+import com.ym.mec.biz.service.SchoolStaffService;
|
|
|
+import com.ym.mec.biz.service.StudentService;
|
|
|
+import com.ym.mec.biz.service.SysConfigService;
|
|
|
+import com.ym.mec.biz.service.SysUserService;
|
|
|
+import com.ym.mec.biz.service.TeacherService;
|
|
|
+import com.ym.mec.biz.service.UploadFileService;
|
|
|
+import com.ym.mec.biz.service.im.ImGroupCoreService;
|
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
|
-import com.ym.mec.common.entity.ImUserModel;
|
|
|
+import com.ym.mec.common.entity.UploadReturnBean;
|
|
|
import com.ym.mec.common.exception.BizException;
|
|
|
+import com.ym.mec.common.page.PageInfo;
|
|
|
+import com.ym.mec.common.page.PageUtil;
|
|
|
+import com.ym.mec.common.page.QueryInfo;
|
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
|
import com.ym.mec.common.tenant.TenantContextHolder;
|
|
|
-import com.ym.mec.im.ImFeignService;
|
|
|
-import com.ym.mec.im.entity.GroupMember;
|
|
|
-import com.ym.mec.im.entity.GroupModel;
|
|
|
+import com.yonge.log.dal.dao.HistoryMessageDao;
|
|
|
+import com.yonge.log.dal.model.HistoryMessage;
|
|
|
+import com.yonge.log.service.HistoryMessageService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.joda.time.DateTime;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.util.*;
|
|
|
+import javax.annotation.Resource;
|
|
|
+import javax.imageio.ImageIO;
|
|
|
+import java.awt.image.BufferedImage;
|
|
|
+import java.io.ByteArrayInputStream;
|
|
|
+import java.io.IOException;
|
|
|
+import java.net.URL;
|
|
|
+import java.text.MessageFormat;
|
|
|
+import java.text.ParseException;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Base64;
|
|
|
+import java.util.Calendar;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.Optional;
|
|
|
+import java.util.Random;
|
|
|
+import java.util.UUID;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -40,49 +97,72 @@ import java.util.stream.Collectors;
|
|
|
@Slf4j
|
|
|
public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> implements ImGroupService {
|
|
|
|
|
|
- @Autowired
|
|
|
+ @Resource
|
|
|
private ImGroupDao imGroupDao;
|
|
|
|
|
|
- @Autowired
|
|
|
+ @Resource
|
|
|
private ImGroupMemberDao imGroupMemberDao;
|
|
|
|
|
|
- @Autowired
|
|
|
- private ImGroupNoticeDao imGroupNoticeDao;
|
|
|
-
|
|
|
- @Autowired
|
|
|
+ @Resource
|
|
|
private ImGroupMemberService imGroupMemberService;
|
|
|
|
|
|
- @Autowired
|
|
|
- private ImFeignService imFeignService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
+ @Resource
|
|
|
private SysUserService sysUserService;
|
|
|
|
|
|
- @Autowired
|
|
|
+ @Resource
|
|
|
private ImUserFriendDao imUserFriendDao;
|
|
|
|
|
|
- @Autowired
|
|
|
+ @Resource
|
|
|
private SysConfigService sysConfigService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private CooperationOrganService cooperationOrganService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private SchoolStaffMapper schoolStaffMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private MusicGroupDao musicGroupDao;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
|
|
|
+
|
|
|
@Autowired
|
|
|
- private ImPluginContext imPluginContext;
|
|
|
+ private ImConfigProperties imConfig;
|
|
|
|
|
|
@Autowired
|
|
|
- private CooperationOrganService cooperationOrganService;
|
|
|
+ private TeacherService teacherService;
|
|
|
|
|
|
@Autowired
|
|
|
- private MusicGroupDao musicGroupDao;
|
|
|
+ private StudentService studentService;
|
|
|
|
|
|
@Autowired
|
|
|
- private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
|
|
|
+ private SchoolStaffService schoolStaffService;
|
|
|
|
|
|
@Autowired
|
|
|
- private SchoolStaffMapper schoolStaffMapper;
|
|
|
+ private EmployeeService employeeService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UploadFileService uploadFileService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private HistoryMessageDao historyMessageDao;
|
|
|
+ @Autowired
|
|
|
+ private HistoryMessageService historyMessageService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private ImGroupCoreService imGroupCoreService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ImPluginContext imPluginContext;
|
|
|
@Override
|
|
|
public BaseDAO<String, ImGroup> getDAO() {
|
|
|
return imGroupDao;
|
|
|
}
|
|
|
|
|
|
+ @Resource
|
|
|
+ private TeacherDao teacherDao;
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public ImGroup create(String id, Integer userId, String name, String introduce, String memo, String tags, String img, String type, ImGroup.GroupTypeEnum groupType) {
|
|
@@ -111,21 +191,38 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
imGroup.setType(type);
|
|
|
imGroup.setGroupType(groupType);
|
|
|
imGroup.setUpdateTime(date);
|
|
|
- imGroupDao.insert(imGroup);
|
|
|
|
|
|
- String groupId = imGroup.getId();
|
|
|
+ try {
|
|
|
+ String imGroupId = createImGroup(imGroup, userId, null);
|
|
|
+ imGroup.setId(imGroupId);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("群组创建失败",e);
|
|
|
+ throw new BizException("群组创建失败");
|
|
|
+ }
|
|
|
|
|
|
- if(userId != null){
|
|
|
- imGroupMemberService.join(id, userId, null, true);
|
|
|
+ return imGroup;
|
|
|
+ }
|
|
|
|
|
|
- GroupMember groupMember = new GroupMember(userId.toString(), groupId);
|
|
|
|
|
|
- imFeignService.groupCreate(new GroupModel(groupId, new GroupMember[] { groupMember }, name));
|
|
|
- }else{
|
|
|
- imFeignService.groupCreate(new GroupModel(groupId, null, name));
|
|
|
+ private String createImGroup(ImGroup imGroup, Integer userId, String roleType) throws Exception {
|
|
|
+ ImGroupWrapper.ImGroup group = ImGroupWrapper.ImGroup.from(JSON.toJSONString(imGroup));
|
|
|
+
|
|
|
+ //记录群成员
|
|
|
+ com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper.ImGroupMember groupMember = null;
|
|
|
+ if (userId != null) {
|
|
|
+ SysUser sysUser = teacherDao.getUser(userId);
|
|
|
+ SysUserType sysUserType = EFriendRoleType.getByName(roleType).toSysUserType();
|
|
|
+ groupMember = com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper.ImGroupMember
|
|
|
+ .builder()
|
|
|
+ .userId(userId.longValue())
|
|
|
+ .clientType(sysUserType.name())
|
|
|
+ .avatar(sysUser.getAvatar())
|
|
|
+ .nickname(sysUserType == SysUserType.STUDENT?sysUser.getUsername():sysUser.getRealName())
|
|
|
+ .roleType(roleType)
|
|
|
+ .isAdmin(true)
|
|
|
+ .build();
|
|
|
}
|
|
|
-
|
|
|
- return imGroup;
|
|
|
+ return imGroupCoreService.groupCreate(groupMember, group);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -152,31 +249,66 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
imGroup.setType(type);
|
|
|
imGroup.setGroupType(imGroupDto.getGroupType());
|
|
|
imGroup.setUpdateTime(date);
|
|
|
- imGroupDao.insert(imGroup);
|
|
|
+
|
|
|
+
|
|
|
+ try {
|
|
|
+ String imGroupId = createImGroup(imGroup, null, null);
|
|
|
+ imGroup.setId(imGroupId);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("群组创建失败",e);
|
|
|
+ throw new BizException("群组创建失败");
|
|
|
+ }
|
|
|
+
|
|
|
List<ImGroupMember> groupMemberList = imGroupMemberDao.queryMembers(groupId, userIdList, TenantContextHolder.getTenantId());
|
|
|
if(currentUserId != null){
|
|
|
groupMemberList.get(0).setRoleType("乐团主管");
|
|
|
}
|
|
|
- imGroupMemberDao.batchInsert(groupMemberList);
|
|
|
- Function<String,GroupMember> newGroup = userId ->new GroupMember(userId, groupId);
|
|
|
- List<GroupMember> groupMembers = userIdList.stream().map(newGroup).collect(Collectors.toList());
|
|
|
- GroupMember[] members = new GroupMember[groupMembers.size()];
|
|
|
- groupMembers.toArray(members);
|
|
|
- imFeignService.groupCreate(new GroupModel(groupId,members,groupName));
|
|
|
+
|
|
|
+ addImGroupMember(groupId, groupMemberList);
|
|
|
return groupId;
|
|
|
}
|
|
|
|
|
|
+ private void addImGroupMember(String groupId, List<ImGroupMember> groupMemberList) {
|
|
|
+ List<com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper.ImGroupMember> imGroupMembers = Lists.newArrayList();
|
|
|
+ for (ImGroupMember groupMember : groupMemberList) {
|
|
|
+ SysUserType sysUserType = EFriendRoleType.getByName(groupMember.getRoleType()).toSysUserType();
|
|
|
+ imGroupMembers.add(com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper.ImGroupMember.builder()
|
|
|
+ .groupId(groupMember.getImGroupId())
|
|
|
+ .userId(groupMember.getUserId().longValue())
|
|
|
+ .clientType(sysUserType.name())
|
|
|
+ .avatar(groupMember.getAvatar())
|
|
|
+ .nickname(groupMember.getNickname())
|
|
|
+ .isAdmin(groupMember.getIsAdmin())
|
|
|
+ .imUserId(getImUserId(groupMember.getUserId().toString(), sysUserType.name()))
|
|
|
+ .roleType(groupMember.getRoleType())
|
|
|
+ .build());
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ imGroupCoreService.saveImGroupMemberList(groupId, imGroupMembers);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("添加群成员用户失败",e);
|
|
|
+ throw new BizException("添加群成员用户失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public boolean cancel(String imGroupId) {
|
|
|
// 删除群成员
|
|
|
- imGroupMemberDao.deleteByImGroupId(imGroupId);
|
|
|
- // 删除群公告
|
|
|
- imGroupNoticeDao.deleteByImGroupId(imGroupId);
|
|
|
- // 删除群信息
|
|
|
- imGroupDao.delete(imGroupId);
|
|
|
+// imGroupMemberDao.deleteByImGroupId(imGroupId);
|
|
|
+// // 删除群公告
|
|
|
+// imGroupNoticeDao.deleteByImGroupId(imGroupId);
|
|
|
+// // 删除群信息
|
|
|
+// imGroupDao.delete(imGroupId);
|
|
|
+//
|
|
|
+// imFeignService.groupDismiss(new GroupModel(imGroupId, null));
|
|
|
|
|
|
- imFeignService.groupDismiss(new GroupModel(imGroupId, null));
|
|
|
+ try {
|
|
|
+ imGroupCoreService.groupDismiss(imGroupId);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("解散群组失败",e);
|
|
|
+ throw new BizException("解散群组失败");
|
|
|
+ }
|
|
|
|
|
|
return true;
|
|
|
}
|
|
@@ -200,6 +332,28 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
imGroupMemberDto.setType(EFriendRoleType.getByName(imGroupMemberDto.getRoleType()).name());
|
|
|
imGroupMemberDto.getUser().setUsername(imGroupMemberDto.getGroupNickname());
|
|
|
imGroupMemberDto.setNickname(imGroupMemberDto.getGroupNickname());
|
|
|
+ String roleType = imGroupMemberDto.getRoleType();
|
|
|
+ if (StringUtils.isEmpty(roleType)){
|
|
|
+ throw new BizException("roleType为空");
|
|
|
+ }
|
|
|
+ //根据角色不同 配置imUserId
|
|
|
+ if (EFriendRoleType.SCHOOLMASTER.getMsg().equals(roleType) ||
|
|
|
+ EFriendRoleType.ORCHESTRA_LEADER.getMsg().equals(roleType) ||
|
|
|
+ EFriendRoleType.SCHOOL_LEADER.getMsg().equals(roleType) ||
|
|
|
+ EFriendRoleType.SCHOOL_TEACHER.getMsg().equals(roleType)) {
|
|
|
+ imGroupMemberDto.setImUserId(
|
|
|
+ imGroupCoreService.getImUserId(String.valueOf(imGroupMemberDto.getUserId()), SysUserType.SCHOOL.getCode()
|
|
|
+ )
|
|
|
+ );
|
|
|
+ } else if (EFriendRoleType.ORCHESTRA_TEACHER.getMsg().equals(roleType)){
|
|
|
+ imGroupMemberDto.setImUserId(imGroupCoreService.getImUserId(String.valueOf(imGroupMemberDto.getUserId()),SysUserType.TEACHER.getCode()));
|
|
|
+ } else if (EFriendRoleType.ORCHESTRA_MANAGER.getMsg().equals(roleType) || EFriendRoleType.MAINTENANCE_TECHNICIAN.getMsg().equals(roleType)){
|
|
|
+ imGroupMemberDto.setImUserId(imGroupCoreService.getImUserId(String.valueOf(imGroupMemberDto.getUserId()),SysUserType.EDUCATION.getCode()));
|
|
|
+ } else if (EFriendRoleType.STUDENT.getMsg().equals(roleType)){
|
|
|
+ imGroupMemberDto.setImUserId(imGroupCoreService.getImUserId(String.valueOf(imGroupMemberDto.getUserId()),SysUserType.STUDENT.getCode()));
|
|
|
+ } else {
|
|
|
+ imGroupMemberDto.setImUserId("");
|
|
|
+ }
|
|
|
}
|
|
|
return imGroupMemberDtos;
|
|
|
}
|
|
@@ -213,6 +367,29 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
imGroupMemberDto.setRoleType(null);
|
|
|
}
|
|
|
}
|
|
|
+ String roleType = imGroupMemberDto.getRoleType();
|
|
|
+ if (StringUtils.isEmpty(roleType)){
|
|
|
+ throw new BizException("roleType为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ //根据角色不同 配置imUserId
|
|
|
+ if (EFriendRoleType.SCHOOLMASTER.getMsg().equals(roleType) ||
|
|
|
+ EFriendRoleType.ORCHESTRA_LEADER.getMsg().equals(roleType) ||
|
|
|
+ EFriendRoleType.SCHOOL_LEADER.getMsg().equals(roleType) ||
|
|
|
+ EFriendRoleType.SCHOOL_TEACHER.getMsg().equals(roleType)) {
|
|
|
+ imGroupMemberDto.setImUserId(
|
|
|
+ imGroupCoreService.getImUserId(String.valueOf(imGroupMemberDto.getUserId()), SysUserType.SCHOOL.getCode()
|
|
|
+ )
|
|
|
+ );
|
|
|
+ } else if (EFriendRoleType.ORCHESTRA_TEACHER.getMsg().equals(roleType)){
|
|
|
+ imGroupMemberDto.setImUserId(imGroupCoreService.getImUserId(String.valueOf(imGroupMemberDto.getUserId()),SysUserType.TEACHER.getCode()));
|
|
|
+ } else if (EFriendRoleType.ORCHESTRA_MANAGER.getMsg().equals(roleType) || EFriendRoleType.MAINTENANCE_TECHNICIAN.getMsg().equals(roleType)){
|
|
|
+ imGroupMemberDto.setImUserId(imGroupCoreService.getImUserId(String.valueOf(imGroupMemberDto.getUserId()),SysUserType.EDUCATION.getCode()));
|
|
|
+ } else if (EFriendRoleType.STUDENT.getMsg().equals(roleType)){
|
|
|
+ imGroupMemberDto.setImUserId(imGroupCoreService.getImUserId(String.valueOf(imGroupMemberDto.getUserId()),SysUserType.STUDENT.getCode()));
|
|
|
+ } else{
|
|
|
+ imGroupMemberDto.setImUserId("");
|
|
|
+ }
|
|
|
return imGroupMemberDto;
|
|
|
}
|
|
|
|
|
@@ -239,8 +416,15 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
sysUser.setRealName(nickName);
|
|
|
}
|
|
|
sysUserService.updateSysUser(sysUser);
|
|
|
- //同步融云基本信息
|
|
|
- imFeignService.update(new ImUserModel(sysUser.getId().toString(),nickName,sysUser.getAvatar()));
|
|
|
+
|
|
|
+ // IM用户信息更新
|
|
|
+ try {
|
|
|
+ imGroupCoreService.register(userId.toString(),"",nickName,sysUser.getAvatar());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("更新用户信息失败",e);
|
|
|
+ throw new BizException("更新用户信息失败");
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -248,16 +432,23 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
public void updateImGroup(ImGroup imGroup) {
|
|
|
imGroup.setMemberNum(null);
|
|
|
imGroupDao.update(imGroup);
|
|
|
- imFeignService.groupUpdate(new GroupModel(imGroup.getId(),null,imGroup.getName()));
|
|
|
+ try {
|
|
|
+ imGroupCoreService.modifyGroupInfo(imGroup.getId(),imGroup.getName(),imGroup.getImg());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("群信息修改失败",e);
|
|
|
+ throw new BizException("群信息修改失败");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void dismissGroup(String imGroupId) {
|
|
|
- imFeignService.groupDismiss(new GroupModel(imGroupId, null));
|
|
|
- imGroupDao.delete(imGroupId);
|
|
|
- imGroupMemberDao.deleteByImGroupId(imGroupId);
|
|
|
- imGroupNoticeDao.deleteByImGroupId(imGroupId);
|
|
|
+ try {
|
|
|
+ imGroupCoreService.groupDismiss(imGroupId);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("解散群组失败",e);
|
|
|
+ throw new BizException("解散群组失败");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -303,11 +494,6 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void quitAllGroup(Long userId) {
|
|
|
|
|
|
- // 退出群组
|
|
|
- String serviceProvider = sysConfigService.findByParamName(SysConfigService.IM_SERVICE_PROVIDER).getParanValue();
|
|
|
-
|
|
|
- ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
|
|
|
-
|
|
|
List<ImGroupMember> imGroupMembers = imGroupMemberDao.queryMembersByUserId(userId);
|
|
|
|
|
|
if (CollectionUtils.isEmpty(imGroupMembers)) {
|
|
@@ -327,7 +513,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
}
|
|
|
}
|
|
|
try {
|
|
|
- imPluginService.groupQuit(imGroupMember.getImGroupId(), GroupMemberWrapper.ImGroupMember.builder().userId(userId).imUserIdFormat(false).build());
|
|
|
+ imGroupCoreService.groupQuit(userId,"",imGroupMember.getImGroupId());
|
|
|
} catch (Exception e) {
|
|
|
log.error("用户退出群失败{},{}", userId, imGroupMember.getImGroupId(), e);
|
|
|
}
|
|
@@ -349,8 +535,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
List<ImGroup> groups = imGroups.stream().filter(imGroup -> imGroup.getMemberNum().equals(1)).collect(Collectors.toList());
|
|
|
for (ImGroup group : groups) {
|
|
|
try {
|
|
|
- GroupMemberWrapper.ImGroupMember build = GroupMemberWrapper.ImGroupMember.builder().userId(userId).imUserIdFormat(false).build();
|
|
|
- imPluginService.groupDismiss(group.getId(), Lists.newArrayList(build));
|
|
|
+ dismissGroup(group.getId());
|
|
|
} catch (Exception e) {
|
|
|
log.error("解散群组失败{},{}", userId, group.getId(), e);
|
|
|
}
|
|
@@ -372,13 +557,9 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
// 查询群是否存在
|
|
|
ImGroup imGroup = imGroupDao.queryBySchoolId(schoolId);
|
|
|
|
|
|
- String serviceProvider = sysConfigService.findByParamName(SysConfigService.IM_SERVICE_PROVIDER).getParanValue();
|
|
|
-
|
|
|
- ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
|
|
|
-
|
|
|
|
|
|
// 注册主播用户信息到三方平台
|
|
|
- imPluginService.register(userId.toString(), name, avatar);
|
|
|
+ imGroupCoreService.register(userId.toString(),"", name, avatar);
|
|
|
|
|
|
// 群组不存在,先创建群组
|
|
|
if (Objects.isNull(imGroup)) {
|
|
@@ -396,13 +577,12 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
imGroup.setCreateTime(new Date());
|
|
|
imGroup.setUpdateTime(new Date());
|
|
|
imGroup.setTenantId(cooperationOrgan.getTenantId());
|
|
|
- imGroupDao.insert(imGroup);
|
|
|
- imPluginService.groupCreate(imGroup.getId(), imGroup.getName(), userId.toString());
|
|
|
+
|
|
|
+ createImGroup(imGroup,userId,"");
|
|
|
|
|
|
initSchoolGroup(imGroup.getSchoolId());
|
|
|
}
|
|
|
- imPluginService.groupJoin(imGroup.getId(), imGroup.getName(), GroupMemberWrapper.ImGroupMember.builder()
|
|
|
- .userId(userId.longValue()).imUserIdFormat(false).build());
|
|
|
+
|
|
|
|
|
|
if (schoolStaffType.equals(ESchoolStaffType.ORCHESTRA_LEADER)) {
|
|
|
groupChangeOwner(userId, imGroup.getId());
|
|
@@ -496,16 +676,8 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
groupMember.setImUserIdFormat(false);
|
|
|
}
|
|
|
|
|
|
- String serviceProvider = sysConfigService.findByParamName(SysConfigService.IM_SERVICE_PROVIDER).getParanValue();
|
|
|
|
|
|
- ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
|
|
|
-
|
|
|
- try {
|
|
|
- imPluginService.groupJoin(imGroup.getId(), imGroup.getName(), imGroupMembers);
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("添加群成员失败{}", imGroup.getId(), e);
|
|
|
- }
|
|
|
- imGroupMemberDao.batchInsert(imGroupMemberList);
|
|
|
+ addImGroupMember(imGroup.getId(), imGroupMemberList);
|
|
|
updateImGroupUserNumber(imGroup.getId());
|
|
|
}
|
|
|
|
|
@@ -527,22 +699,17 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
}
|
|
|
|
|
|
|
|
|
- String serviceProvider = sysConfigService.findByParamName(SysConfigService.IM_SERVICE_PROVIDER).getParanValue();
|
|
|
|
|
|
List<Integer> userIds = new ArrayList<>();
|
|
|
- ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
|
|
|
for (GroupMemberWrapper.ImGroupMember imGroupMember : imGroupMembers) {
|
|
|
imGroupMember.setImUserIdFormat(false);
|
|
|
userIds.add(imGroupMember.getUserId().intValue());
|
|
|
}
|
|
|
try {
|
|
|
- imPluginService.groupQuit(imGroup.getId(),imGroupMembers);
|
|
|
+ imGroupCoreService.groupQuit(imGroupMembers,imGroup.getId());
|
|
|
} catch (Exception e) {
|
|
|
log.error("退出群成员失败{}", imGroup.getId(), e);
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- imGroupMemberDao.delByImGroupAndUserId(imGroup.getId(),userIds);
|
|
|
updateImGroupUserNumber(imGroup.getId());
|
|
|
}
|
|
|
|
|
@@ -562,9 +729,6 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean groupChangeOwner(Integer userId, String imGroupId) throws Exception {
|
|
|
|
|
|
- String serviceProvider = sysConfigService.findByParamName(SysConfigService.IM_SERVICE_PROVIDER).getParanValue();
|
|
|
-
|
|
|
- ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
|
|
|
|
|
|
ImGroupMember imGroupMember = imGroupMemberDao.getAdmin(imGroupId);
|
|
|
Integer adminId = userId;
|
|
@@ -573,7 +737,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
imGroupMember.setIsAdmin(false);
|
|
|
imGroupMemberDao.update(imGroupMember);
|
|
|
}
|
|
|
- imPluginService.changeGroupOwner(imGroupId, userId.toString(), adminId.toString());
|
|
|
+ imGroupCoreService.changeGroupOwner(imGroupId, userId.toString(), adminId.toString());
|
|
|
|
|
|
imGroupMemberDao.updateAdmin(imGroupId, userId);
|
|
|
return true;
|
|
@@ -593,10 +757,6 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- String serviceProvider = sysConfigService.findByParamName(SysConfigService.IM_SERVICE_PROVIDER).getParanValue();
|
|
|
-
|
|
|
- ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
|
|
|
-
|
|
|
List<ImGroup> groupList = imGroupDao.getByIds(imGroupIds);
|
|
|
|
|
|
// id 分组
|
|
@@ -609,18 +769,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
continue;
|
|
|
}
|
|
|
try {
|
|
|
- imPluginService.groupJoin(imGroup.getId(), imGroup.getName(), GroupMemberWrapper.ImGroupMember.builder()
|
|
|
- .userId(userId)
|
|
|
- .imUserIdFormat(false).build());
|
|
|
-
|
|
|
- ImGroupMember imGroupMember = new ImGroupMember();
|
|
|
- imGroupMember.setImGroupId(imGroup.getId());
|
|
|
- imGroupMember.setUserId(userId.intValue());
|
|
|
- imGroupMember.setIsAdmin(false);
|
|
|
- imGroupMember.setRoleType(roleType);
|
|
|
- imGroupMember.setType(EFriendRoleType.getByName(roleType).name());
|
|
|
- imGroupMember.setTenantId(imGroup.getTenantId());
|
|
|
- imGroupMemberDao.insert(imGroupMember);
|
|
|
+ imGroupCoreService.groupJoin(userId,"",imGroup.getId());
|
|
|
|
|
|
updateImGroupUserNumber(imGroup.getId());
|
|
|
} catch (Exception e) {
|
|
@@ -654,16 +803,12 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- String serviceProvider = sysConfigService.findByParamName(SysConfigService.IM_SERVICE_PROVIDER).getParanValue();
|
|
|
-
|
|
|
- ImPluginService imPluginService =imPluginContext.getPluginService(serviceProvider);
|
|
|
-
|
|
|
List<ImGroup> groupList = imGroupDao.getByIds(imGroupIds);
|
|
|
|
|
|
List<com.ym.mec.biz.dal.entity.ImGroupMember> imGroupMemberList = new ArrayList<>();
|
|
|
for (ImGroup imGroup : groupList) {
|
|
|
try {
|
|
|
- imPluginService.groupQuit(imGroup.getId(), GroupMemberWrapper.ImGroupMember.builder().userId(userId.longValue()).imUserIdFormat(false).build());
|
|
|
+ imGroupCoreService.groupQuit(userId.longValue(), "",imGroup.getId());
|
|
|
} catch (Exception e) {
|
|
|
log.error("退出群聊失败",e);
|
|
|
}
|
|
@@ -679,7 +824,6 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 学校人员加入群组
|
|
|
*
|
|
@@ -714,4 +858,903 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
|
|
|
addImGroup(Lists.newArrayList(imGroup.getId()),schoolStaff.getUserId(),ESchoolStaffType.ORCHESTRA_LEADER.getDescribe());
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * IM 用户注册
|
|
|
+ *
|
|
|
+ * @param userId 用户Id
|
|
|
+ * @return String
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String getImUserId(String userId, String clientType) {
|
|
|
+ /*if (StringUtils.isNotBlank(imConfig.getAppPrefix()) && !userId.startsWith(imConfig.getAppPrefix())) {
|
|
|
+ imUserId = MessageFormat.format("{0}_{1}", imConfig.getAppPrefix(), userId);
|
|
|
+ }*/
|
|
|
+ return userId;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 群迁移
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void groupTransfer(String startTime, String endTime) {
|
|
|
+ int page = 1;
|
|
|
+ int size = 100;
|
|
|
+ QueryInfo queryInfo = new QueryInfo();
|
|
|
+ queryInfo.setPage(page);
|
|
|
+ queryInfo.setRows(size);
|
|
|
+ queryInfo.setImportFlag(false);
|
|
|
+ PageInfo<ImGroup> imGroupPageInfo = this.queryPage(queryInfo);
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ int importImGroupCount = 0;
|
|
|
+ while (!imGroupPageInfo.getRows().isEmpty()) {
|
|
|
+ List<ImGroup> rows = imGroupPageInfo.getRows();
|
|
|
+ try {
|
|
|
+ if (StringUtils.isNotEmpty(startTime)) {
|
|
|
+ Date startDate = sdf.parse(startTime);
|
|
|
+ rows.removeIf(next -> next.getCreateTime().before(startDate));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.isNotEmpty(endTime)) {
|
|
|
+ Date endDate = sdf.parse(endTime);
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(endDate);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
+ calendar.set(Calendar.MINUTE, 59);
|
|
|
+ calendar.set(Calendar.SECOND, 59);
|
|
|
+ rows.removeIf(next -> next.getCreateTime().after(calendar.getTime()));
|
|
|
+ }
|
|
|
+ } catch (ParseException e) {
|
|
|
+ throw new BizException("时间区间参数错误,格式为:yyyy-MM-dd");
|
|
|
+ }
|
|
|
+ groupTransfer(rows);
|
|
|
+ importImGroupCount += rows.size();
|
|
|
+ log.info("------------------------------- import im group --------------------------------------------");
|
|
|
+ log.info("import im group success count:{}/{}", importImGroupCount, imGroupPageInfo.getTotal());
|
|
|
+
|
|
|
+ page++;
|
|
|
+ queryInfo.setPage(page);
|
|
|
+ imGroupPageInfo = this.queryPage(queryInfo);
|
|
|
+ }
|
|
|
+ log.info("-------------------- import im group finished and success! -------------------------------");
|
|
|
+ }
|
|
|
+
|
|
|
+ private void groupTransfer(List<ImGroup> records) {
|
|
|
+
|
|
|
+ for (ImGroup imGroup : records) {
|
|
|
+
|
|
|
+ log.info("群销毁开始:{}", imGroup.getId());
|
|
|
+ // 先删除群组
|
|
|
+ try {
|
|
|
+ // 解散群
|
|
|
+ imPluginContext.getPluginService().groupDismiss(imGroup.getId(), new ArrayList<>());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error(String.format("群迁移删除群聊失败:%s", e.getMessage()), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for (ImGroup imGroup : records) {
|
|
|
+
|
|
|
+ log.info("群迁移开始:{}", imGroup.getId());
|
|
|
+
|
|
|
+ GroupMemberQueryInfo groupMemberQueryInfo = new GroupMemberQueryInfo();
|
|
|
+ groupMemberQueryInfo.setPage(1);
|
|
|
+ groupMemberQueryInfo.setRows(9999);
|
|
|
+ groupMemberQueryInfo.setImGroupId(imGroup.getId());
|
|
|
+ PageInfo<ImGroupMemberDto> pageInfo = imGroupMemberService.queryGroupMemberPage(groupMemberQueryInfo);
|
|
|
+ ImGroupMember admin = pageInfo.getRows().stream().filter(ImGroupMember::getIsAdmin).findFirst().orElse(null);
|
|
|
+ if (admin == null) {
|
|
|
+ log.info("群主不存在,groupId:{}",imGroup.getId());
|
|
|
+// continue;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ MessageWrapper.ImportGroup importGroup = new MessageWrapper.ImportGroup();
|
|
|
+ if (admin != null) {
|
|
|
+ importGroup.setOwnerAccount(getImUserId(admin.getUserId().toString(), getClientType(admin.getRoleType())));
|
|
|
+ }
|
|
|
+ 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/icon_group_avatar1.png");
|
|
|
+ }
|
|
|
+ importGroup.setApplyJoinOption("FreeAccess");
|
|
|
+ importGroup.setCreateTime(imGroup.getCreateTime().getTime() / 1000);
|
|
|
+ if (admin != null) {
|
|
|
+ register(admin.getUserId().toString(), getClientType(admin.getRoleType()));
|
|
|
+ }
|
|
|
+ imPluginContext.getPluginService().importGroup(importGroup);
|
|
|
+
|
|
|
+ List<ImGroupMember> groupMembers = pageInfo.getRows().stream()
|
|
|
+ .filter(next -> !next.getIsAdmin()).collect(Collectors.toList());
|
|
|
+ if (groupMembers.isEmpty()) {
|
|
|
+ imGroupDao.updateImportStatusSuccess(imGroup.getId());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (ImGroupMember member : groupMembers) {
|
|
|
+ register(member.getUserId().toString(), getClientType(member.getRoleType()));
|
|
|
+ }
|
|
|
+ MessageWrapper.ImportGroupMember importGroupMember = new MessageWrapper.ImportGroupMember();
|
|
|
+ importGroupMember.setGroupId(imGroup.getId());
|
|
|
+ Date date = new DateTime(imGroup.getCreateTime()).plusSeconds(3).toDate();
|
|
|
+ List<MessageWrapper.ImportGroupMemberData> members =
|
|
|
+ groupMembers.stream().map(next -> {
|
|
|
+ MessageWrapper.ImportGroupMemberData data = new MessageWrapper.ImportGroupMemberData();
|
|
|
+ data.setMemberAccount(getImUserId(next.getUserId().toString(),
|
|
|
+ getClientType(next.getRoleType())));
|
|
|
+ if (next.getCreateTime().getTime() / 1000 <= importGroup.getCreateTime()) {
|
|
|
+ data.setJoinTime(date.getTime() / 1000);
|
|
|
+ } else {
|
|
|
+ data.setJoinTime(next.getCreateTime().getTime() / 1000);
|
|
|
+ }
|
|
|
+ data.setUnreadMsgNum(0);
|
|
|
+ return data;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ importGroupMember.setMemberList(members);
|
|
|
+ imPluginContext.getPluginService().importGroupMember(importGroupMember);
|
|
|
+ imGroupDao.updateImportStatusSuccess(imGroup.getId());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error(String.format("群迁移失败,失败群组:%s", JSON.toJSONString(imGroup)));
|
|
|
+ log.error(String.format("群迁移失败:%s", e.getMessage()));
|
|
|
+ }
|
|
|
+ log.info("群迁移成功:{}", imGroup.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void register(String userId, String clientType) {
|
|
|
+ SysUser user = sysUserService.queryUserById(Integer.valueOf(userId));
|
|
|
+ String avatar = user.getAvatar();
|
|
|
+ if (StringUtils.isEmpty(avatar)) {
|
|
|
+ avatar = "https://daya.ks3-cn-beijing.ksyun.com/202203/T1WgJaE.png";
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ String username = user.getUsername();
|
|
|
+
|
|
|
+ // 老师默认使用真实姓名
|
|
|
+ if (Lists.newArrayList(user.getUserType().split(",")).contains(ClientEnum.TEACHER.getCode())) {
|
|
|
+ username = Optional.ofNullable(user.getRealName()).orElse(username);
|
|
|
+ }
|
|
|
+ // 自动激活学生IM帐号
|
|
|
+ imGroupCoreService.register(userId,clientType, username, avatar);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("register user error", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public String getClientType(String roleType) {
|
|
|
+ EFriendRoleType byName = EFriendRoleType.getByName(roleType);
|
|
|
+ if (EFriendRoleType.STUDENT.equals(byName)) {
|
|
|
+ return "STUDENT";
|
|
|
+ } else if (EFriendRoleType.ORCHESTRA_TEACHER.equals(byName)) {
|
|
|
+ return "TEACHER";
|
|
|
+ } else if (EFriendRoleType.ORCHESTRA_MANAGER.equals(byName) ||
|
|
|
+ EFriendRoleType.MAINTENANCE_TECHNICIAN.equals(byName)) {
|
|
|
+ return "EMPLOYEE";
|
|
|
+ } else {
|
|
|
+ return "SCHOOL";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 导入用户
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void importUser() {
|
|
|
+ int page = 1;
|
|
|
+ int rows = 200;
|
|
|
+
|
|
|
+ int count = 0;
|
|
|
+
|
|
|
+ log.info("------------------------------- import user student ---------------------------");
|
|
|
+ List<String[]> student = getStudent(page, rows);
|
|
|
+ while (!student.isEmpty()) {
|
|
|
+ for (String[] next : student) {
|
|
|
+ register(next[0], next[1]);
|
|
|
+ }
|
|
|
+ count += student.size();
|
|
|
+ log.info("import im student success count:{}", count);
|
|
|
+ page++;
|
|
|
+ student = getStudent(page, rows);
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("------------------------------- import user staff ---------------------------");
|
|
|
+ count = 0;
|
|
|
+ page = 1;
|
|
|
+ List<String[]> staff = getStaff(page, rows);
|
|
|
+ while (!staff.isEmpty()) {
|
|
|
+ for (String[] next : staff) {
|
|
|
+ register(next[0], next[1]);
|
|
|
+ }
|
|
|
+ count += staff.size();
|
|
|
+ log.info("import im staff success count:{}", count);
|
|
|
+ page++;
|
|
|
+ staff = getStaff(page, rows);
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("------------------------------- import user emps ---------------------------");
|
|
|
+ count = 0;
|
|
|
+ page = 1;
|
|
|
+ List<String[]> emps = getEmp(page, rows);
|
|
|
+ while (!emps.isEmpty()) {
|
|
|
+ for (String[] next : emps) {
|
|
|
+ register(next[0], next[1]);
|
|
|
+ }
|
|
|
+ count += emps.size();
|
|
|
+ log.info("import im emps success count:{}", count);
|
|
|
+ page++;
|
|
|
+ emps = getEmp(page, rows);
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("------------------------------- import user teacher ---------------------------");
|
|
|
+ count = 0;
|
|
|
+ page = 1;
|
|
|
+ List<String[]> teachers = getTeachers(page, rows);
|
|
|
+ while (!teachers.isEmpty()) {
|
|
|
+ for (String[] next : teachers) {
|
|
|
+ register(next[0], next[1]);
|
|
|
+ }
|
|
|
+ count += teachers.size();
|
|
|
+ log.info("import im teacher success count:{}", count);
|
|
|
+ page++;
|
|
|
+ teachers = getTeachers(page, rows);
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("------------------------------- import user success ---------------------------");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int queryInfoCount() {
|
|
|
+ long count = historyMessageService.selectCount(0,new DateTime().plusMonths(-2).toDate());
|
|
|
+ return (int) count;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<String[]> getEmp(int page, int rows) {
|
|
|
+ QueryInfo queryInfo = new QueryInfo();
|
|
|
+ queryInfo.setPage(page);
|
|
|
+ queryInfo.setRows(rows);
|
|
|
+ PageInfo<Employee> employeePageInfo = employeeService.queryPage(queryInfo);
|
|
|
+ return employeePageInfo.getRows().stream().map(next -> {
|
|
|
+ String[] strList = new String[2];
|
|
|
+ strList[0] = next.getId().toString();
|
|
|
+ strList[1] = "EMPLOYEE";
|
|
|
+ return strList;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<String[]> getStaff(int page, int rows) {
|
|
|
+ Page<SchoolStaffWrapper.SchoolStaff> staffPage = PageUtil.getPage(page, rows);
|
|
|
+ IPage<SchoolStaffWrapper.SchoolStaff> iPage = schoolStaffService.selectPage(staffPage,
|
|
|
+ new SchoolStaffWrapper.SchoolStaffQuery());
|
|
|
+ return iPage.getRecords().stream().map(next -> {
|
|
|
+ String[] strList = new String[2];
|
|
|
+ strList[0] = next.getId().toString();
|
|
|
+ strList[1] = "SCHOOL";
|
|
|
+ return strList;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<String[]> getStudent(int page, int rows) {
|
|
|
+ QueryInfo queryInfo = new QueryInfo();
|
|
|
+ queryInfo.setPage(page);
|
|
|
+ queryInfo.setRows(rows);
|
|
|
+ PageInfo<Student> studentPageInfo = studentService.queryPage(queryInfo);
|
|
|
+ return studentPageInfo.getRows().stream().map(next -> {
|
|
|
+ String[] strList = new String[2];
|
|
|
+ strList[0] = next.getId().toString();
|
|
|
+ strList[1] = "STUDENT";
|
|
|
+ return strList;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<String[]> getTeachers(int page, int rows) {
|
|
|
+ QueryInfo queryInfo = new QueryInfo();
|
|
|
+ queryInfo.setPage(page);
|
|
|
+ queryInfo.setRows(rows);
|
|
|
+ PageInfo<Teacher> teacherPageInfo = teacherService.queryPage(queryInfo);
|
|
|
+ return teacherPageInfo.getRows().stream().map(next -> {
|
|
|
+ String[] strList = new String[2];
|
|
|
+ strList[0] = next.getId().toString();
|
|
|
+ strList[1] = "TEACHER";
|
|
|
+ return strList;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public com.yonge.mongodb.PageInfo<HistoryMessage> getRongYunInfo( int page, int size) {
|
|
|
+ com.yonge.mongodb.PageInfo<HistoryMessage> pageInfo = historyMessageService.selectPage(page, size, 0,new DateTime().plusMonths(-2).toDate());
|
|
|
+ //List<HistoryMessage> imHistoryMessageslist = imGroupDao.selectAll(result,size);
|
|
|
+ return pageInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * IM导入消息
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void importInfo(List<HistoryMessage> info) throws Exception {
|
|
|
+
|
|
|
+ for (HistoryMessage i : info) {//判断消息类型
|
|
|
+ log.info("消息导入:{}", i);
|
|
|
+ try {
|
|
|
+ Integer type = i.getTargetType();
|
|
|
+ if (type == 1) {
|
|
|
+ //单聊会话
|
|
|
+ MessageWrapper.PrivateImportMessage privateImportMessage = new MessageWrapper.PrivateImportMessage();
|
|
|
+ //2:表示历史消息导入,消息不计入未读计数,且消息不会推送到终端
|
|
|
+ privateImportMessage.setSyncFromOldSystem(2);
|
|
|
+ //设置发送人
|
|
|
+ //根据发送者分场景讨论
|
|
|
+ String id = i.getFromUserId();
|
|
|
+ String imUserId;
|
|
|
+ if (id.contains(":STUDENT")) {
|
|
|
+ String[] split = id.split(":");
|
|
|
+ String userId = split[0];
|
|
|
+ String clientType = split[1];
|
|
|
+ imUserId = getImUserId(userId, clientType);
|
|
|
+ } else {
|
|
|
+ imUserId = getImUserId(id, "TEACHER");
|
|
|
+ }
|
|
|
+
|
|
|
+ String targetId = i.getTargetId();
|
|
|
+ String targetIdUserId;
|
|
|
+ if (targetId.contains(":STUDENT")) {
|
|
|
+ String[] split = targetId.split(":");
|
|
|
+ String userId = split[0];
|
|
|
+ String clientType = split[1];
|
|
|
+ targetIdUserId = getImUserId(userId, clientType);
|
|
|
+ } else {
|
|
|
+ targetIdUserId = getImUserId(targetId, "TEACHER");
|
|
|
+ }
|
|
|
+
|
|
|
+ privateImportMessage.setFromAccount(imUserId);
|
|
|
+ //设置接收人
|
|
|
+ privateImportMessage.setToAccount(targetIdUserId);
|
|
|
+ //设置随机数
|
|
|
+ privateImportMessage.setMsgRandom(new Random().nextInt());
|
|
|
+
|
|
|
+ //设置发送时间
|
|
|
+ String time = i.getDateTime();
|
|
|
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ try {
|
|
|
+ Date date = df.parse(time);
|
|
|
+ long dateTime = date.getTime();
|
|
|
+ dateTime = dateTime / (1000);
|
|
|
+ privateImportMessage.setMsgTimeStamp(dateTime);
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ //设置body
|
|
|
+ TencentRequest.MessageBody body = new TencentRequest.MessageBody();
|
|
|
+ List<TencentRequest.MessageBody> list = new ArrayList<>();
|
|
|
+
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(i.getContent());
|
|
|
+
|
|
|
+ if (i.getClassname().equals("RC:TxtMsg")) {
|
|
|
+ //文本
|
|
|
+ TencentRequest.MessageBody body1 = getTimTextElem(jsonObject.getString("content"));
|
|
|
+ list.add(body1);
|
|
|
+ } else if (i.getClassname().equals("RC:ImgMsg")) {
|
|
|
+ //图片
|
|
|
+ TencentRequest.MessageBody body1 = getTimImageElem(jsonObject.getString("imageUri"));
|
|
|
+ list.add(body1);
|
|
|
+ } else if (i.getClassname().equals("RC:GIFMsg")) {
|
|
|
+ //GIf
|
|
|
+ String remoteUrl = jsonObject.getString("remoteUrl");
|
|
|
+ int gifDataSize = jsonObject.getInteger("gifDataSize");
|
|
|
+ int width = jsonObject.getInteger("width");
|
|
|
+ int height = jsonObject.getInteger("height");
|
|
|
+ TencentRequest.MessageBody body1 = getTimGifElem(remoteUrl, gifDataSize, width, height);
|
|
|
+ list.add(body1);
|
|
|
+ } else if (i.getClassname().equals("RC:HQVCMsg")) {
|
|
|
+ //语音
|
|
|
+ String remoteUrl = jsonObject.getString("remoteUrl");
|
|
|
+ int duration = jsonObject.getInteger("duration");
|
|
|
+ TencentRequest.MessageBody body1 = getTimSoundElem(remoteUrl, duration);
|
|
|
+ list.add(body1);
|
|
|
+ } else if (i.getClassname().equals("RC:FileMsg")) {
|
|
|
+ //文件
|
|
|
+ String fileUrl = jsonObject.getString("fileUrl");
|
|
|
+ String size = jsonObject.getString("size");
|
|
|
+ String name = jsonObject.getString("name");
|
|
|
+
|
|
|
+ TencentRequest.MessageBody body1 = getTimFileElem(fileUrl, size, name);
|
|
|
+ list.add(body1);
|
|
|
+ } else if (i.getClassname().equals("RC:SightMsg")) {
|
|
|
+ //视频
|
|
|
+ String sightUrl = jsonObject.getString("sightUrl");
|
|
|
+ String size = jsonObject.getString("size");
|
|
|
+ int duration = jsonObject.getInteger("duration");
|
|
|
+ String content = jsonObject.getString("content");
|
|
|
+ TencentRequest.MessageBody body1 = null;
|
|
|
+ try {
|
|
|
+ body1 = getTimVideoFileElem(sightUrl, size, duration, content);
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ list.add(body1);
|
|
|
+ } else if (i.getClassname().equals("RC:LBSMsg")) {
|
|
|
+ //位置
|
|
|
+ double latitude = jsonObject.getDouble("latitude");
|
|
|
+ double longitude = jsonObject.getDouble("longitude");
|
|
|
+ String poi = jsonObject.getString("poi");
|
|
|
+ TencentRequest.MessageBody body1 = getTimLocationElem(latitude, longitude, poi);
|
|
|
+ list.add(body1);
|
|
|
+ } else if (i.getClassname().equals("RC:ImgTextMsg")) {
|
|
|
+ //图文
|
|
|
+ TencentRequest.MessageBody body1 = getTimTextElem(jsonObject.getString("content"));
|
|
|
+ TencentRequest.MessageBody body2 = getTimImageElem(jsonObject.getString("imageUri"));
|
|
|
+ list.add(body1);
|
|
|
+ list.add(body2);
|
|
|
+ }
|
|
|
+
|
|
|
+ /* body.setMsgType(i.getClassname());
|
|
|
+ body.setMsgContent(i.getContent());*/
|
|
|
+
|
|
|
+ /*list.add(body);*/
|
|
|
+ /* 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.forEach(item -> item.setMsgType("TIMTextElem"));
|
|
|
+ } else if (list.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:ImgMsg")) {
|
|
|
+ //图文对象
|
|
|
+ list.forEach(item -> item.setMsgType("TIMImageElem"));
|
|
|
+ } else if (list.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:HQVCMsg")){
|
|
|
+ //高清语音消息对象
|
|
|
+ list.forEach(item -> item.setMsgType("TIMSoundElem"));
|
|
|
+ } else if (list.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:HQVCMsg")){
|
|
|
+ list.forEach(item -> item.setMsgType("TIMSoundElem"));
|
|
|
+ }*/
|
|
|
+ privateImportMessage.setTencentMessageBody(list);
|
|
|
+ privateImportMessage.setCloudCustomData(jsonObject.getString("extra"));
|
|
|
+ try {
|
|
|
+ imPluginContext.getPluginService().importPrivateMessage(privateImportMessage);
|
|
|
+ //为已导入数据更改标识
|
|
|
+ updateStatus(i,1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ updateStatus(i,2);
|
|
|
+ log.error("导入私聊IM消息失败 msg:{},entity:{}", list, i, e);
|
|
|
+ }
|
|
|
+ } 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<>();
|
|
|
+ TencentRequest.MessageBody body = new TencentRequest.MessageBody();
|
|
|
+ //设置群组Id
|
|
|
+ groupImportMessage.setGroupId(i.getGroupId());
|
|
|
+ //设置发送人
|
|
|
+ String imUserId;
|
|
|
+ String id = i.getFromUserId();
|
|
|
+ //根据发送者分场景讨论
|
|
|
+ if (id.contains(":STUDENT")) {
|
|
|
+ String[] split = id.split(":");
|
|
|
+ String userId = split[0];
|
|
|
+ String clientType = split[1];
|
|
|
+ imUserId = getImUserId(userId, clientType);
|
|
|
+ } else {
|
|
|
+ imUserId = getImUserId(id, "TEACHER");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ data1.setFromAccount(imUserId);
|
|
|
+ //设置随机数
|
|
|
+ data1.setRandom(new Random().nextInt());
|
|
|
+ //设置发送时间
|
|
|
+
|
|
|
+ String time = i.getDateTime();
|
|
|
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ try {
|
|
|
+ Date date = df.parse(time);
|
|
|
+ long dateTime = date.getTime();
|
|
|
+ dateTime = dateTime / (1000);
|
|
|
+ data1.setSendTime(dateTime);
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ /*bodyList.stream().forEach(item->{
|
|
|
+ item.setMsgContent(i.getContent());
|
|
|
+ item.setMsgType(i.getClassname());
|
|
|
+ });*/
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(i.getContent());
|
|
|
+
|
|
|
+
|
|
|
+ if (i.getClassname().equals("RC:TxtMsg")) {
|
|
|
+ //文本
|
|
|
+ TencentRequest.MessageBody body1 = getTimTextElem(jsonObject.getString("content"));
|
|
|
+ bodyList.add(body1);
|
|
|
+ } else if (i.getClassname().equals("RC:ImgMsg")) {
|
|
|
+ //图片
|
|
|
+ TencentRequest.MessageBody body1 = getTimImageElem(jsonObject.getString("imageUri"));
|
|
|
+ bodyList.add(body1);
|
|
|
+ } else if (i.getClassname().equals("RC:GIFMsg")) {
|
|
|
+ //GIf
|
|
|
+ String remoteUrl = jsonObject.getString("remoteUrl");
|
|
|
+ int gifDataSize = jsonObject.getInteger("gifDataSize");
|
|
|
+ int width = jsonObject.getInteger("width");
|
|
|
+ int height = jsonObject.getInteger("height");
|
|
|
+ TencentRequest.MessageBody body1 = getTimGifElem(remoteUrl, gifDataSize, width, height);
|
|
|
+ bodyList.add(body1);
|
|
|
+ } else if (i.getClassname().equals("RC:HQVCMsg")) {
|
|
|
+ //语音
|
|
|
+ String remoteUrl = jsonObject.getString("remoteUrl");
|
|
|
+ int duration = jsonObject.getInteger("duration");
|
|
|
+ TencentRequest.MessageBody body1 = getTimSoundElem(remoteUrl, duration);
|
|
|
+ bodyList.add(body1);
|
|
|
+ } else if (i.getClassname().equals("RC:FileMsg")) {
|
|
|
+ //文件
|
|
|
+ String fileUrl = jsonObject.getString("fileUrl");
|
|
|
+ String size = jsonObject.getString("size");
|
|
|
+ String name = jsonObject.getString("name");
|
|
|
+
|
|
|
+ TencentRequest.MessageBody body1 = getTimFileElem(fileUrl, size, name);
|
|
|
+ bodyList.add(body1);
|
|
|
+ } else if (i.getClassname().equals("RC:SightMsg")) {
|
|
|
+ //视频
|
|
|
+ String sightUrl = jsonObject.getString("sightUrl");
|
|
|
+ String size = jsonObject.getString("size");
|
|
|
+ int duration = jsonObject.getInteger("duration");
|
|
|
+ String content = jsonObject.getString("content");
|
|
|
+ TencentRequest.MessageBody body1 = null;
|
|
|
+ try {
|
|
|
+ body1 = getTimVideoFileElem(sightUrl, size, duration, content);
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ bodyList.add(body1);
|
|
|
+ } else if (i.getClassname().equals("RC:LBSMsg")) {
|
|
|
+ //位置
|
|
|
+ double latitude = jsonObject.getDouble("latitude");
|
|
|
+ double longitude = jsonObject.getDouble("longitude");
|
|
|
+ String poi = jsonObject.getString("poi");
|
|
|
+ TencentRequest.MessageBody body1 = getTimLocationElem(latitude, longitude, poi);
|
|
|
+ bodyList.add(body1);
|
|
|
+ } else if (i.getClassname().equals("RC:ImgTextMsg")) {
|
|
|
+ //图文
|
|
|
+ TencentRequest.MessageBody body1 = getTimTextElem(jsonObject.getString("content"));
|
|
|
+ TencentRequest.MessageBody body2 = getTimImageElem(jsonObject.getString("imageUri"));
|
|
|
+ bodyList.add(body1);
|
|
|
+ bodyList.add(body2);
|
|
|
+ } else if (i.getClassname().equals("RC:CombineMsg")) {
|
|
|
+ //合并转发
|
|
|
+ String remoteUrl = jsonObject.getString("remoteUrl");
|
|
|
+ int conversationType = jsonObject.getInteger("conversationType");
|
|
|
+ getTimRelayElem();
|
|
|
+ } else {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ /*body.setMsgContent(i.getContent());
|
|
|
+ body.setMsgType(i.getClassname());*/
|
|
|
+
|
|
|
+ //文本对象
|
|
|
+ /*if (bodyList.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:TxtMsg")) {
|
|
|
+ bodyList.forEach(item -> item.setMsgType("TIMTextElem"));
|
|
|
+ } else if (bodyList.stream().map(TencentRequest.MessageBody::getMsgType).collect(Collectors.toList()).get(0).equals("RC:ImgMsg")) {
|
|
|
+ //暂未支持图文对象
|
|
|
+ bodyList.forEach(item -> item.setMsgType("TIMCustomElem"));
|
|
|
+ }*/
|
|
|
+
|
|
|
+ data1.setTencentMessageBody(bodyList);
|
|
|
+ data1.setCloudCustomData(jsonObject.getString("extra"));
|
|
|
+
|
|
|
+ list.add(data1);
|
|
|
+ //导入消息列表
|
|
|
+ groupImportMessage.setMsgList(list);
|
|
|
+ try {
|
|
|
+ imPluginContext.getPluginService().importGroupMessage(groupImportMessage);
|
|
|
+ //为已导入数据更改标识
|
|
|
+ updateStatus(i,1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ updateStatus(i,2);
|
|
|
+ log.error("导入群组IM消息失败 msg:{},entity:{}", list, i, e);
|
|
|
+ }
|
|
|
+ log.info("导入消息成功:{}", i);
|
|
|
+ }
|
|
|
+ }catch (Exception e) {
|
|
|
+ log.error("导入消息失败:", e);
|
|
|
+ updateStatus(i,2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private TencentRequest.MessageBody getTimGifElem(String remoteUr,int size,int width,int height) {
|
|
|
+ if (StringUtils.isEmpty(remoteUr) && size == 0 && width == 0 && height == 0) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 腾讯云消息
|
|
|
+ // 腾讯云消息
|
|
|
+ //转换url格式
|
|
|
+ String newRemoteUr = urlTypeChange(remoteUr);
|
|
|
+ ImageUtil.ImageInfo imageReq = ImageUtil.ImageInfo.builder()
|
|
|
+ .imgUrl(newRemoteUr)
|
|
|
+ .suffix("GIF")
|
|
|
+ .build();
|
|
|
+
|
|
|
+ // 获取图片基本信息
|
|
|
+ ImageUtil.imageToBase64(imageReq);
|
|
|
+
|
|
|
+ // 图片格式。 JPG = 1 GIF = 2 PNG = 3 BMP = 4 其他 = 255
|
|
|
+ // 图片类型。原图 = 1,大图 = 2,缩略图 = 3
|
|
|
+ int imageFormat = 1;
|
|
|
+ if ("PNG".equalsIgnoreCase(imageReq.getSuffix())) {
|
|
|
+ imageFormat = 3;
|
|
|
+ }
|
|
|
+ if ("GIF".equalsIgnoreCase(imageReq.getSuffix())) {
|
|
|
+ imageFormat = 2;
|
|
|
+ }
|
|
|
+ return TencentRequest.MessageBody.builder()
|
|
|
+ .msgType("TIMImageElem")
|
|
|
+ .msgContent(TencentRequest.ImageMessageBody.builder()
|
|
|
+ .uuid(imageReq.getMd5())
|
|
|
+ .imageFormat(imageFormat)
|
|
|
+ .type(1)
|
|
|
+ .height(height)
|
|
|
+ .width(width)
|
|
|
+ .url(newRemoteUr)
|
|
|
+ .size(imageReq.getSize()).build())
|
|
|
+ .build();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新已修改数据的状态
|
|
|
+ * @param info
|
|
|
+ */
|
|
|
+ public void updateStatus(HistoryMessage info,int status) {
|
|
|
+ HistoryMessage historyMessage = new HistoryMessage();
|
|
|
+ historyMessage.setStatus(status);
|
|
|
+ historyMessageDao.update(info.getMsgUID(), historyMessage);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //构造文本请求体
|
|
|
+ public static TencentRequest.MessageBody getTimTextElem(String textMessage) {
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(textMessage)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ return TencentRequest.MessageBody.builder()
|
|
|
+ .msgType("TIMTextElem")
|
|
|
+ .msgContent(TencentRequest.TextMessageBody.builder().text(textMessage).build())
|
|
|
+ .build();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //构造图片请求体
|
|
|
+ public static TencentRequest.MessageBody getTimImageElem(String imgMessage) {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(imgMessage)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 腾讯云消息
|
|
|
+ // 腾讯云消息
|
|
|
+
|
|
|
+ String newImgMessage = urlTypeChange(imgMessage);
|
|
|
+ ImageUtil.ImageInfo imageReq = ImageUtil.ImageInfo.builder()
|
|
|
+ .imgUrl(newImgMessage)
|
|
|
+ .suffix(newImgMessage.substring(newImgMessage.lastIndexOf(".") + 1))
|
|
|
+ .build();
|
|
|
+
|
|
|
+ // 获取图片基本信息
|
|
|
+ ImageUtil.imageToBase64(imageReq);
|
|
|
+
|
|
|
+ // 图片格式。 JPG = 1 GIF = 2 PNG = 3 BMP = 4 其他 = 255
|
|
|
+ // 图片类型。原图 = 1,大图 = 2,缩略图 = 3
|
|
|
+ int imageFormat = 1;
|
|
|
+ if ("PNG".equalsIgnoreCase(imageReq.getSuffix())) {
|
|
|
+ imageFormat = 3;
|
|
|
+ }
|
|
|
+ if ("GIF".equalsIgnoreCase(imageReq.getSuffix())) {
|
|
|
+ imageFormat = 2;
|
|
|
+ }
|
|
|
+ return TencentRequest.MessageBody.builder()
|
|
|
+ .msgType("TIMImageElem")
|
|
|
+ .msgContent(TencentRequest.ImageMessageBody.builder()
|
|
|
+ .uuid(imageReq.getMd5())
|
|
|
+ .imageFormat(imageFormat)
|
|
|
+ .type(1)
|
|
|
+ .height(imageReq.getHeight())
|
|
|
+ .width(imageReq.getWidth())
|
|
|
+ .url(newImgMessage)
|
|
|
+ .size(imageReq.getSize()).build())
|
|
|
+ .build();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //构造语音请求体
|
|
|
+ public static TencentRequest.MessageBody getTimSoundElem(String remoteUrl,int duration) {
|
|
|
+ if (StringUtils.isEmpty(remoteUrl) && duration == 0) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ ImHistoryMessageWrapper.TimSoundElem timSoundElem = new ImHistoryMessageWrapper.TimSoundElem();
|
|
|
+
|
|
|
+ String newRemoteUrl = urlTypeChange(remoteUrl);
|
|
|
+ timSoundElem.setUrl(newRemoteUrl);
|
|
|
+ timSoundElem.setUUID(UUID.randomUUID().toString());
|
|
|
+ timSoundElem.setSecond(duration);
|
|
|
+ timSoundElem.setDownload_Flag(2);
|
|
|
+
|
|
|
+ TencentRequest.MessageBody messageBody = new TencentRequest.MessageBody();
|
|
|
+ messageBody.setMsgType("TIMSoundElem");
|
|
|
+ messageBody.setMsgContent(timSoundElem);
|
|
|
+ return messageBody;
|
|
|
+}
|
|
|
+
|
|
|
+ //构建文件请求体
|
|
|
+ public static TencentRequest.MessageBody getTimFileElem(String fileUrl, String size, String name) {
|
|
|
+ if (StringUtils.isEmpty(fileUrl) && StringUtils.isEmpty(size) && StringUtils.isEmpty(name)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ ImHistoryMessageWrapper.TimFileElem timFileElem = new ImHistoryMessageWrapper.TimFileElem();
|
|
|
+ String newFileUrl = urlTypeChange(fileUrl);
|
|
|
+ timFileElem.setUrl(newFileUrl);
|
|
|
+ timFileElem.setUUID(UUID.randomUUID().toString());
|
|
|
+ timFileElem.setFileName(name);
|
|
|
+ timFileElem.setFileSize(Integer.valueOf(size));
|
|
|
+ timFileElem.setDownload_Flag(2);
|
|
|
+
|
|
|
+ TencentRequest.MessageBody messageBody = new TencentRequest.MessageBody();
|
|
|
+ messageBody.setMsgType("TIMFileElem");
|
|
|
+ messageBody.setMsgContent(timFileElem);
|
|
|
+ return messageBody;
|
|
|
+ }
|
|
|
+
|
|
|
+ //构建视频请求体
|
|
|
+ public TencentRequest.MessageBody getTimVideoFileElem(String sightUrl, String size, int duration, String content) throws IOException {
|
|
|
+ if (StringUtils.isEmpty(sightUrl) && StringUtils.isEmpty(sightUrl) && duration == 0) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ ByteArrayInputStream bais = null;
|
|
|
+ String format = "";
|
|
|
+ //判断是否有前缀
|
|
|
+ if (content.contains(",")){
|
|
|
+ String[] split = content.split(",");
|
|
|
+ String s = split[0];
|
|
|
+ format = s.substring(s.indexOf("/")+ 1,s.indexOf(";"));
|
|
|
+ content = split[1];
|
|
|
+ } else {
|
|
|
+ format = "JPG";
|
|
|
+ }
|
|
|
+
|
|
|
+ byte[] bytes = Base64.getDecoder().decode(content);
|
|
|
+ //构建字节数组输入流
|
|
|
+ bais = new ByteArrayInputStream(bytes);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ UploadReturnBean uploadReturnBean = uploadFileService.uploadFile(bais, format);
|
|
|
+ String url = uploadReturnBean.getUrl();
|
|
|
+
|
|
|
+ String newUrl = urlTypeChange(url);
|
|
|
+ URL url2 = new URL(newUrl);
|
|
|
+ BufferedImage read = ImageIO.read(url2);
|
|
|
+ int width = read.getWidth();
|
|
|
+ int height = read.getHeight();
|
|
|
+
|
|
|
+ ImageUtil.ImageInfo imageReq = ImageUtil.ImageInfo.builder()
|
|
|
+ .imgUrl(newUrl)
|
|
|
+ .suffix(format)
|
|
|
+ .build();
|
|
|
+
|
|
|
+ // 获取图片基本信息
|
|
|
+ ImageUtil.imageToBase64(imageReq);
|
|
|
+
|
|
|
+ ImHistoryMessageWrapper.TimVideoFileElem timVideoFileElem = new ImHistoryMessageWrapper.TimVideoFileElem();
|
|
|
+ String newSightUrl = urlTypeChange(sightUrl);
|
|
|
+ timVideoFileElem.setVideoUrl(newSightUrl);
|
|
|
+ timVideoFileElem.setVideoUUID(UUID.randomUUID().toString());
|
|
|
+ timVideoFileElem.setVideoSize(Integer.valueOf(size));
|
|
|
+ timVideoFileElem.setVideoSecond(duration);
|
|
|
+ timVideoFileElem.setVideoFormat("mp4");
|
|
|
+ timVideoFileElem.setVideoDownloadFlag(2);
|
|
|
+ timVideoFileElem.setThumbUrl(newUrl);
|
|
|
+ timVideoFileElem.setThumbUUID(imageReq.getMd5());
|
|
|
+ timVideoFileElem.setThumbWidth( width);
|
|
|
+ timVideoFileElem.setThumbHeight( height);
|
|
|
+ //timVideoFileElem.setThumbSize((imageReq.getSize().intValue()));
|
|
|
+ timVideoFileElem.setThumbDownloadFlag(2);
|
|
|
+ timVideoFileElem.setThumbFormat(format);
|
|
|
+
|
|
|
+ TencentRequest.MessageBody messageBody = new TencentRequest.MessageBody();
|
|
|
+ messageBody.setMsgType("TIMVideoFileElem");
|
|
|
+ messageBody.setMsgContent(timVideoFileElem);
|
|
|
+ return messageBody;
|
|
|
+ }
|
|
|
+
|
|
|
+ //构建位置请求体
|
|
|
+ private TencentRequest.MessageBody getTimLocationElem(double latitude, double longitude, String poi) {
|
|
|
+ if (latitude == 0 && longitude == 0 && StringUtils.isEmpty(poi)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ ImHistoryMessageWrapper.TimLocationElem timLocationElem = new ImHistoryMessageWrapper.TimLocationElem();
|
|
|
+ timLocationElem.setDesc(poi);
|
|
|
+ timLocationElem.setLatitude(latitude);
|
|
|
+ timLocationElem.setLongitude(longitude);
|
|
|
+
|
|
|
+ TencentRequest.MessageBody messageBody = new TencentRequest.MessageBody();
|
|
|
+ messageBody.setMsgType("TIMLocationElem");
|
|
|
+ messageBody.setMsgContent(timLocationElem);
|
|
|
+ return messageBody;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //构建合并转发请求体
|
|
|
+ private TencentRequest.MessageBody getTimRelayElem() {
|
|
|
+ ImHistoryMessageWrapper.TimRelayElem timRelayElem = new ImHistoryMessageWrapper.TimRelayElem();
|
|
|
+ //todo
|
|
|
+ //timRelayElem.setMsgNum();
|
|
|
+
|
|
|
+ TencentRequest.MessageBody messageBody = new TencentRequest.MessageBody();
|
|
|
+ messageBody.setMsgType("TIMRelayElem");
|
|
|
+ messageBody.setMsgContent(timRelayElem);
|
|
|
+ return messageBody;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //url路径改造
|
|
|
+ private static String urlTypeChange(String url){
|
|
|
+ if (url.isEmpty()){
|
|
|
+ throw new BizException("链接地址为空!!!");
|
|
|
+ }
|
|
|
+ String replace;
|
|
|
+ if (url.startsWith("https://ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com");
|
|
|
+ } else if (url.startsWith("https://daya.ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://daya.ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com/daya");
|
|
|
+ } else if (url.startsWith("https://appstore.ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://appstore.ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com/appstore");
|
|
|
+ } else if (url.startsWith("https://cloud-coach.ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://cloud-coach.ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com/cloud-coach");
|
|
|
+ } else if (url.startsWith("https://contracts.ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://contracts.ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com/contracts");
|
|
|
+ } else if (url.startsWith("https://cooperation.ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://cooperation.ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com/cooperation");
|
|
|
+ } else if (url.startsWith("https://daya-docs.ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://daya-docs.ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com/daya-docs");
|
|
|
+ } else if (url.startsWith("https://gyt.ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://gyt.ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com/gyt");
|
|
|
+ } else if (url.startsWith("https://homework.ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://homework.ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com/homework");
|
|
|
+ } else if (url.startsWith("https://i-m.ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://i-m.ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com/i-m");
|
|
|
+ } else if (url.startsWith("https://live-rewind.ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://live-rewind.ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com/live-rewind");
|
|
|
+ } else if (url.startsWith("https://mall.ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://mall.ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com/mall");
|
|
|
+ } else if (url.startsWith("https://musescoreconverresult.ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://musescoreconverresult.ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com/musescoreconverresult");
|
|
|
+ } else if (url.startsWith("https://news-info.ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://news-info.ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com/news-info");
|
|
|
+ } else if (url.startsWith("https://question-bank.ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://question-bank.ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com/question-bank");
|
|
|
+ } else if (url.startsWith("https://video-course.ks3-cn-beijing.ksyuncs.com")){
|
|
|
+ replace = url.replace("https://video-course.ks3-cn-beijing.ksyuncs.com", "https://oss.dayaedu.com/video-course");
|
|
|
+ } else {
|
|
|
+ return url;
|
|
|
+ }
|
|
|
+ return replace;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|