|
@@ -1,902 +0,0 @@
|
|
-package com.ym.service.Impl;
|
|
|
|
-
|
|
|
|
-import com.alibaba.fastjson.JSON;
|
|
|
|
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
|
-import com.google.common.collect.Lists;
|
|
|
|
-import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
|
|
|
|
-import com.microsvc.toolkit.middleware.im.properties.ImConfigProperties;
|
|
|
|
-import com.microsvc.toolkit.middleware.rtc.RTCRoomPluginContext;
|
|
|
|
-import com.microsvc.toolkit.middleware.rtc.RTCRoomPluginService;
|
|
|
|
-import com.microsvc.toolkit.middleware.rtc.impl.TencentCloudRTCPlugin;
|
|
|
|
-import com.microsvc.toolkit.middleware.rtc.message.ImGroupMemberWrapper;
|
|
|
|
-import com.ym.mec.auth.api.entity.SysUser;
|
|
|
|
-import com.ym.mec.auth.api.enums.SysUserType;
|
|
|
|
-import com.ym.mec.biz.dal.dao.*;
|
|
|
|
-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.dto.im.BasicUserInfo;
|
|
|
|
-import com.ym.mec.biz.dal.entity.*;
|
|
|
|
-import com.ym.mec.biz.dal.enums.EFriendRoleType;
|
|
|
|
-import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
|
|
|
|
-import com.ym.mec.biz.dal.enums.im.RoleEnum;
|
|
|
|
-import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
|
|
|
|
-import com.ym.mec.biz.dal.mapper.SchoolStaffMapper;
|
|
|
|
-import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
|
|
|
|
-import com.ym.mec.biz.service.CooperationOrganService;
|
|
|
|
-import com.ym.mec.biz.service.ImGroupMemberService;
|
|
|
|
-import com.ym.mec.biz.service.SysConfigService;
|
|
|
|
-import com.ym.mec.biz.service.SysUserService;
|
|
|
|
-import com.ym.mec.biz.service.im.ImGroupCoreService;
|
|
|
|
-import com.ym.mec.common.exception.BizException;
|
|
|
|
-import com.ym.mec.common.tenant.TenantContextHolder;
|
|
|
|
-import com.ym.mec.im.IMHelper;
|
|
|
|
-import com.ym.service.GroupCoreService;
|
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
|
-import org.apache.commons.collections.CollectionUtils;
|
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
|
-import org.springframework.data.redis.core.RedisTemplate;
|
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
|
-
|
|
|
|
-import javax.annotation.Resource;
|
|
|
|
-import java.text.MessageFormat;
|
|
|
|
-import java.util.*;
|
|
|
|
-import java.util.concurrent.TimeUnit;
|
|
|
|
-import java.util.function.Function;
|
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
-
|
|
|
|
-@Service
|
|
|
|
-@Slf4j
|
|
|
|
-public class GroupCoreServiceImpl implements GroupCoreService {
|
|
|
|
-
|
|
|
|
- @Resource
|
|
|
|
- private ImGroupDao imGroupDao;
|
|
|
|
-
|
|
|
|
- @Resource
|
|
|
|
- private ImGroupMemberDao imGroupMemberDao;
|
|
|
|
-
|
|
|
|
- @Resource
|
|
|
|
- private ImGroupMemberService imGroupMemberService;
|
|
|
|
-
|
|
|
|
- @Resource
|
|
|
|
- private SysUserService sysUserService;
|
|
|
|
-
|
|
|
|
- @Resource
|
|
|
|
- private ImUserFriendDao imUserFriendDao;
|
|
|
|
-
|
|
|
|
- @Resource
|
|
|
|
- private SysConfigService sysConfigService;
|
|
|
|
-
|
|
|
|
- @Resource
|
|
|
|
- private CooperationOrganService cooperationOrganService;
|
|
|
|
-
|
|
|
|
- @Resource
|
|
|
|
- private MusicGroupDao musicGroupDao;
|
|
|
|
-
|
|
|
|
- @Resource
|
|
|
|
- private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
|
|
|
|
-
|
|
|
|
- @Resource
|
|
|
|
- private SchoolStaffMapper schoolStaffMapper;
|
|
|
|
- @Resource
|
|
|
|
- private RedisTemplate<String,Object> redisTemplate;
|
|
|
|
- @Resource
|
|
|
|
- private RTCRoomPluginContext rtcRoomPluginContext;
|
|
|
|
-
|
|
|
|
- @Resource
|
|
|
|
- private IMHelper imHelper;
|
|
|
|
-
|
|
|
|
- @Resource
|
|
|
|
- private ImGroupCoreService imGroupCoreService;
|
|
|
|
-
|
|
|
|
- @Resource
|
|
|
|
- private ImConfigProperties imConfig;
|
|
|
|
-
|
|
|
|
- @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) {
|
|
|
|
- ImGroup imGroup = imGroupDao.get(id);
|
|
|
|
- if (imGroup != null) {
|
|
|
|
- return imGroup;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- imGroup = new ImGroup();
|
|
|
|
-
|
|
|
|
- Date date = new Date();
|
|
|
|
-
|
|
|
|
- imGroup.setId(id);
|
|
|
|
- imGroup.setCreateTime(date);
|
|
|
|
- imGroup.setIntroduce(introduce);
|
|
|
|
-
|
|
|
|
- if(userId != null){
|
|
|
|
- imGroup.setMemberNum(1);
|
|
|
|
- }else{
|
|
|
|
- imGroup.setMemberNum(0);
|
|
|
|
- }
|
|
|
|
- imGroup.setMemo(memo);
|
|
|
|
- imGroup.setName(name);
|
|
|
|
- imGroup.setTags(tags);
|
|
|
|
- imGroup.setImg(img);
|
|
|
|
- imGroup.setType(type);
|
|
|
|
- imGroup.setGroupType(groupType);
|
|
|
|
- imGroup.setUpdateTime(date);
|
|
|
|
-
|
|
|
|
- try {
|
|
|
|
- String imGroupId = createImGroup(imGroup, userId, null);
|
|
|
|
- imGroup.setId(imGroupId);
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("群组创建失败",e);
|
|
|
|
- throw new BizException("群组创建失败");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return imGroup;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- 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 imGroupCoreService.groupCreate(groupMember, group);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
- public String createGroup(ImGroupDto imGroupDto){
|
|
|
|
- List<String> userIdList = imGroupDto.getUserIdList();
|
|
|
|
- Integer currentUserId = null;
|
|
|
|
- if (CollectionUtils.isEmpty(userIdList)){
|
|
|
|
- userIdList.add(sysUserService.getUserId().toString());
|
|
|
|
- }
|
|
|
|
- String groupName = imGroupDto.getGroupName();
|
|
|
|
- String type = imGroupDto.getType();
|
|
|
|
- Optional.ofNullable(groupName).filter(StringUtils::isNotBlank).orElseThrow(() -> new BizException("群名称不能为空"));
|
|
|
|
- Optional.ofNullable(type).filter(StringUtils::isNotBlank).orElseThrow(() -> new BizException("群类型不能为空"));
|
|
|
|
- Date date = new Date();
|
|
|
|
- ImGroup imGroup = new ImGroup();
|
|
|
|
- String groupId = UUID.randomUUID().toString();
|
|
|
|
- imGroup.setId(groupId);
|
|
|
|
- imGroup.setCreateTime(date);
|
|
|
|
- imGroup.setIntroduce(groupName);
|
|
|
|
- imGroup.setMemo(groupName);
|
|
|
|
- imGroup.setMemberNum(userIdList.size());
|
|
|
|
- imGroup.setName(groupName);
|
|
|
|
- imGroup.setType(type);
|
|
|
|
- imGroup.setGroupType(imGroupDto.getGroupType());
|
|
|
|
- imGroup.setUpdateTime(date);
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- 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("乐团主管");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- 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) {
|
|
|
|
- try {
|
|
|
|
- imGroupCoreService.groupDismiss(imGroupId);
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("解散群组失败",e);
|
|
|
|
- throw new BizException("解散群组失败");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public List<ImGroup> queryByUserId(Integer userId, String search,String groupType) {
|
|
|
|
- return imGroupDao.queryByUserId(userId, search,groupType);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public List<ImGroupMemberDto> queryMemberById(String imGroupId) {
|
|
|
|
- return queryMemberById(imGroupId,null);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public List<ImGroupMemberDto> queryMemberById(String imGroupId,String search) {
|
|
|
|
- List<ImGroupMemberDto> imGroupMemberDtos = imGroupDao.queryMemberById(imGroupId,search);
|
|
|
|
-
|
|
|
|
- for (ImGroupMemberDto imGroupMemberDto : imGroupMemberDtos) {
|
|
|
|
- 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;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public ImGroupMemberDto queryMember(String imGroupId, Integer userId) {
|
|
|
|
- ImGroupMemberDto imGroupMemberDto = imGroupDao.queryMember(imGroupId, userId);
|
|
|
|
- if(Objects.isNull(imGroupMemberDto)){
|
|
|
|
- imGroupMemberDto = imGroupDao.queryMember(null, userId);
|
|
|
|
- if (Objects.nonNull(imGroupMemberDto)){
|
|
|
|
- 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;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
- public int updateNickName(Integer userId, String nickName) {
|
|
|
|
- //修改群成员备注
|
|
|
|
- int i = imGroupDao.updateNickname(userId, nickName);
|
|
|
|
- imGroupDao.updateUserFriendNickname(userId, nickName);
|
|
|
|
- return i;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
- public void updateNickName1(Integer userId, String nickName) {
|
|
|
|
- //修改群成员备注
|
|
|
|
- imGroupDao.updateNickname(userId, nickName);
|
|
|
|
- imGroupDao.updateUserFriendNickname(userId, nickName);
|
|
|
|
- //修改sysUser名称,如果包含学员的角色,那么修改userName。否则修改realName
|
|
|
|
- SysUser sysUser = sysUserService.queryUserById(userId);
|
|
|
|
- if(sysUser.getUserType().contains("STUDENT")){
|
|
|
|
- sysUser.setUsername(nickName);
|
|
|
|
- }else {
|
|
|
|
- sysUser.setRealName(nickName);
|
|
|
|
- }
|
|
|
|
- sysUserService.updateSysUser(sysUser);
|
|
|
|
-
|
|
|
|
- // IM用户信息更新
|
|
|
|
- try {
|
|
|
|
- imGroupCoreService.register(userId.toString(),"",nickName,sysUser.getAvatar());
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("更新用户信息失败",e);
|
|
|
|
- throw new BizException("更新用户信息失败");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
- public void updateImGroup(ImGroup imGroup) {
|
|
|
|
- imGroup.setMemberNum(null);
|
|
|
|
- imGroupDao.update(imGroup);
|
|
|
|
- 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) {
|
|
|
|
- try {
|
|
|
|
- imGroupCoreService.groupDismiss(imGroupId);
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("解散群组失败",e);
|
|
|
|
- throw new BizException("解散群组失败");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public List<NameDto> queryDetail(List<NameDto> nameDto) {
|
|
|
|
- List<NameDto> dtos = new ArrayList<>();
|
|
|
|
- if(CollectionUtils.isNotEmpty(nameDto)){
|
|
|
|
- Map<Integer, List<NameDto>> collect = nameDto.stream().collect(Collectors.groupingBy(NameDto::getType));
|
|
|
|
- for (Integer integer : collect.keySet()) {
|
|
|
|
- List<NameDto> nameDtos = collect.get(integer);
|
|
|
|
- if(CollectionUtils.isNotEmpty(nameDtos)){
|
|
|
|
- String idList = nameDtos.stream().map(e -> e.getId()).collect(Collectors.joining(","));
|
|
|
|
- if(integer.equals(3)){
|
|
|
|
- dtos.addAll(imGroupDao.queryNameByIds(idList));
|
|
|
|
- }else if (integer.equals(1)){
|
|
|
|
- Integer userId = sysUserService.getUserId();
|
|
|
|
- dtos.addAll(imUserFriendDao.queryNameByIds(idList,userId));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return dtos;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public List<ImGroup> queryByUserIdV2(Integer userId, String search, String groupType, String musicGroupId, String classType) {
|
|
|
|
- return imGroupDao.queryByUserIdV2(userId, search, groupType, musicGroupId, classType);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public List<ImGroupMemberDto> queryMemberByIdV2(String imGroupId, String search, Integer subjectId, Boolean vipFlag) {
|
|
|
|
- return imGroupDao.queryMemberByIdV2(imGroupId,search,subjectId,vipFlag);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 用户退出所有群
|
|
|
|
- * <p>
|
|
|
|
- * 删除时判断是否群主,
|
|
|
|
- * 如果是,则随机分配一个群主,
|
|
|
|
- * 如果删除的是最后一个群成员,那么解散群
|
|
|
|
- * @param userId 用户id
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
- public void quitAllGroup(Long userId) {
|
|
|
|
-
|
|
|
|
- List<ImGroupMember> imGroupMembers = imGroupMemberDao.queryMembersByUserId(userId);
|
|
|
|
-
|
|
|
|
- if (CollectionUtils.isEmpty(imGroupMembers)) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- for (ImGroupMember imGroupMember : imGroupMembers) {
|
|
|
|
- // 如果是群主,随机分配一个群主
|
|
|
|
- if (imGroupMember.getIsAdmin()) {
|
|
|
|
- try {
|
|
|
|
- // 获取一个群成员
|
|
|
|
- ImGroupMember imGroupMember1 = imGroupMemberDao.queryOneByGroupIdAndNotUser(imGroupMember.getImGroupId(), userId);
|
|
|
|
- if (Objects.nonNull(imGroupMember1)) {
|
|
|
|
- groupChangeOwner(imGroupMember1.getUserId(),imGroupMember.getImGroupId());
|
|
|
|
- }
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("更换群主失败{},{}", userId, imGroupMember.getImGroupId(), e);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- try {
|
|
|
|
- imGroupCoreService.groupQuit(userId,"",imGroupMember.getImGroupId());
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("用户退出群失败{},{}", userId, imGroupMember.getImGroupId(), e);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- List<String> imGroupIds = imGroupMembers.stream().map(ImGroupMember::getImGroupId).collect(Collectors.toList());
|
|
|
|
- // 群组没人,删除群组
|
|
|
|
- List<ImGroup> imGroups = imGroupDao.queryByUserId(userId.intValue(),null, ImGroup.GroupTypeEnum.SCHOOL.getCode());
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- imGroupMemberDao.deleteByUserId(userId);
|
|
|
|
- // 更新群组人员数
|
|
|
|
- imGroupDao.addMemberNum(imGroupIds,-1);
|
|
|
|
-
|
|
|
|
- if (CollectionUtils.isEmpty(imGroups)) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- List<ImGroup> groups = imGroups.stream().filter(imGroup -> imGroup.getMemberNum().equals(1)).collect(Collectors.toList());
|
|
|
|
- for (ImGroup group : groups) {
|
|
|
|
- try {
|
|
|
|
- dismissGroup(group.getId());
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("解散群组失败{},{}", userId, group.getId(), e);
|
|
|
|
- }
|
|
|
|
- imGroupDao.delete(group.getId());
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 用户加入群
|
|
|
|
- *
|
|
|
|
- * @param schoolId 学校id
|
|
|
|
- * @param userId 用户id
|
|
|
|
- * @param schoolStaffType 是否是群主
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
- public void addSchoolStaffGroup(Long schoolId, Integer userId,String name,String avatar, ESchoolStaffType schoolStaffType) throws Exception {
|
|
|
|
-
|
|
|
|
- // 查询群是否存在
|
|
|
|
- ImGroup imGroup = imGroupDao.queryBySchoolId(schoolId);
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- // 注册主播用户信息到三方平台
|
|
|
|
- imGroupCoreService.register(userId.toString(),"", name, avatar);
|
|
|
|
-
|
|
|
|
- // 群组不存在,先创建群组
|
|
|
|
- if (Objects.isNull(imGroup)) {
|
|
|
|
- CooperationOrgan cooperationOrgan = cooperationOrganService.get(schoolId.intValue());
|
|
|
|
- imGroup = new ImGroup();
|
|
|
|
- imGroup.setSchoolId(schoolId);
|
|
|
|
- imGroup.setId(IdWorker.getIdStr());
|
|
|
|
- imGroup.setName("教学团队衔接群");
|
|
|
|
- imGroup.setIntroduce(imGroup.getName());
|
|
|
|
- imGroup.setMemo(imGroup.getName());
|
|
|
|
- imGroup.setMemberNum(0);
|
|
|
|
- imGroup.setImg(sysConfigService.findByParamName(SysConfigService.SCHOOL_IM_GROUP_IMG).getParanValue());
|
|
|
|
- imGroup.setType(ImGroup.GroupTypeEnum.SCHOOL.getCode());
|
|
|
|
- imGroup.setGroupType(ImGroup.GroupTypeEnum.SCHOOL);
|
|
|
|
- imGroup.setCreateTime(new Date());
|
|
|
|
- imGroup.setUpdateTime(new Date());
|
|
|
|
- imGroup.setTenantId(cooperationOrgan.getTenantId());
|
|
|
|
-
|
|
|
|
- createImGroup(imGroup,userId,"");
|
|
|
|
-
|
|
|
|
- initSchoolGroup(imGroup.getSchoolId());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- if (schoolStaffType.equals(ESchoolStaffType.ORCHESTRA_LEADER)) {
|
|
|
|
- groupChangeOwner(userId, imGroup.getId());
|
|
|
|
- }
|
|
|
|
- ImGroupMember imGroupMember = new ImGroupMember();
|
|
|
|
- imGroupMember.setImGroupId(imGroup.getId());
|
|
|
|
- imGroupMember.setUserId(userId);
|
|
|
|
- imGroupMember.setIsAdmin(schoolStaffType.equals(ESchoolStaffType.ORCHESTRA_LEADER));
|
|
|
|
- imGroupMember.setRoleType(schoolStaffType.getDescribe());
|
|
|
|
- imGroupMember.setType(EFriendRoleType.getByName(schoolStaffType.getDescribe()).name());
|
|
|
|
- imGroupMember.setTenantId(imGroup.getTenantId());
|
|
|
|
- imGroupMemberDao.insert(imGroupMember);
|
|
|
|
-
|
|
|
|
- updateImGroupUserNumber(imGroup.getId());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private void initSchoolGroup(Long schoolId) {
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- // 查询乐团主管
|
|
|
|
- List<MusicGroup> musicGroupList = musicGroupDao.findByCooperationId(schoolId.intValue());
|
|
|
|
- if (CollectionUtils.isEmpty(musicGroupList)) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- musicGroupList = musicGroupList.stream()
|
|
|
|
- .filter(o -> o.getStatus().equals(MusicGroupStatusEnum.PROGRESS))
|
|
|
|
- .collect(Collectors.toList());
|
|
|
|
- if (CollectionUtils.isEmpty(musicGroupList)) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 乐团主管
|
|
|
|
- List<Integer> groupLeaderIds = musicGroupList.stream().map(MusicGroup::getEducationalTeacherId).collect(Collectors.toList());
|
|
|
|
-
|
|
|
|
- // 乐团ID集合
|
|
|
|
- List<String> musicGroupIds = musicGroupList.stream().map(MusicGroup::getId).collect(Collectors.toList());
|
|
|
|
-
|
|
|
|
- // 班级列表主教/助教老师
|
|
|
|
- List<ClassGroupTeacherMapper> teacherMapperList = classGroupTeacherMapperDao.findAllByMusicGroupIds(musicGroupIds);
|
|
|
|
-
|
|
|
|
- List<Integer> teacherIds = new ArrayList<>();
|
|
|
|
- if (CollectionUtils.isNotEmpty(teacherMapperList)) {
|
|
|
|
- teacherIds.addAll(teacherMapperList.stream().map( o -> o.getUserId()).collect(Collectors.toSet()));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- List<GroupMemberWrapper.ImGroupMember> imGroupMembers = new ArrayList<>();
|
|
|
|
- for (Integer groupLeaderId : groupLeaderIds) {
|
|
|
|
- imGroupMembers.add(GroupMemberWrapper.ImGroupMember.builder()
|
|
|
|
- .userId(groupLeaderId.longValue()).roleType(EFriendRoleType.ORCHESTRA_MANAGER.getMsg()).imUserIdFormat(false).build());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for (Integer teacherId : teacherIds) {
|
|
|
|
- imGroupMembers.add(GroupMemberWrapper.ImGroupMember.builder()
|
|
|
|
- .userId(teacherId.longValue()).roleType(EFriendRoleType.ORCHESTRA_TEACHER.getMsg()).imUserIdFormat(false).build());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- addSchoolGroup(schoolId, imGroupMembers);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 加入学校群聊
|
|
|
|
- *
|
|
|
|
- * @param schoolId
|
|
|
|
- * @param imGroupMembers
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
- public void addSchoolGroup(Long schoolId, List<GroupMemberWrapper.ImGroupMember> imGroupMembers) {
|
|
|
|
- // 添加乐团领队,班级老师
|
|
|
|
- List<ImGroupMember> imGroupMemberList =new ArrayList<>();
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- // 查询群是否存在
|
|
|
|
- ImGroup imGroup = imGroupDao.queryBySchoolId(schoolId);
|
|
|
|
- if (imGroup == null) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- if (CollectionUtils.isEmpty(imGroupMembers)) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for (GroupMemberWrapper.ImGroupMember groupMember : imGroupMembers) {
|
|
|
|
- ImGroupMember imGroupMember = new ImGroupMember();
|
|
|
|
- imGroupMember.setImGroupId(imGroup.getId());
|
|
|
|
- imGroupMember.setUserId(groupMember.getUserId().intValue());
|
|
|
|
- imGroupMember.setIsAdmin(false);
|
|
|
|
- imGroupMember.setRoleType(groupMember.getRoleType());
|
|
|
|
- imGroupMember.setType(EFriendRoleType.getByName(groupMember.getRoleType()).name());
|
|
|
|
- imGroupMember.setTenantId(imGroup.getTenantId());
|
|
|
|
- imGroupMemberList.add(imGroupMember);
|
|
|
|
- groupMember.setImUserIdFormat(false);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- addImGroupMember(imGroup.getId(), imGroupMemberList);
|
|
|
|
- updateImGroupUserNumber(imGroup.getId());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
- public void quitSchoolGroup(Long schoolId, List<GroupMemberWrapper.ImGroupMember> imGroupMembers) {
|
|
|
|
- // 添加乐团领队,班级老师
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- // 查询群是否存在
|
|
|
|
- ImGroup imGroup = imGroupDao.queryBySchoolId(schoolId);
|
|
|
|
- if (imGroup == null) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (CollectionUtils.isEmpty(imGroupMembers)) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- List<Integer> userIds = new ArrayList<>();
|
|
|
|
- for (GroupMemberWrapper.ImGroupMember imGroupMember : imGroupMembers) {
|
|
|
|
- imGroupMember.setImUserIdFormat(false);
|
|
|
|
- userIds.add(imGroupMember.getUserId().intValue());
|
|
|
|
- }
|
|
|
|
- try {
|
|
|
|
- imGroupCoreService.groupQuit(imGroupMembers,imGroup.getId());
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("退出群成员失败{}", imGroup.getId(), e);
|
|
|
|
- }
|
|
|
|
- updateImGroupUserNumber(imGroup.getId());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private void updateImGroupUserNumber(String imGroupId) {
|
|
|
|
- ImGroup imGroup = new ImGroup();
|
|
|
|
- imGroup.setId(imGroupId);
|
|
|
|
- imGroup.setMemberNum(imGroupMemberDao.getByGroupId(Lists.newArrayList(imGroupId)).size());
|
|
|
|
- imGroupDao.updateMember(imGroup.getId(),imGroup.getMemberNum());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 群主移交
|
|
|
|
- * @param userId 用户id
|
|
|
|
- * @param imGroupId 群组id
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
- public Boolean groupChangeOwner(Integer userId, String imGroupId) throws Exception {
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- ImGroupMember imGroupMember = imGroupMemberDao.getAdmin(imGroupId);
|
|
|
|
- Integer adminId = userId;
|
|
|
|
- if (Objects.nonNull(imGroupMember)) {
|
|
|
|
- adminId = imGroupMember.getUserId();
|
|
|
|
- imGroupMember.setIsAdmin(false);
|
|
|
|
- imGroupMemberDao.update(imGroupMember);
|
|
|
|
- }
|
|
|
|
- imGroupCoreService.changeGroupOwner(imGroupId, userId.toString(), adminId.toString());
|
|
|
|
-
|
|
|
|
- imGroupMemberDao.updateAdmin(imGroupId, userId);
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 加群
|
|
|
|
- *
|
|
|
|
- * @param imGroupIds 群组ID
|
|
|
|
- * @param userId 用户信息
|
|
|
|
- * @param roleType 用户类型
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
- public void addImGroup(List<String> imGroupIds, Long userId, String roleType) {
|
|
|
|
- if (CollectionUtils.isEmpty(imGroupIds)) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- List<ImGroup> groupList = imGroupDao.getByIds(imGroupIds);
|
|
|
|
-
|
|
|
|
- // id 分组
|
|
|
|
- Map<String, ImGroup> map = groupList.stream().collect(Collectors.toMap(ImGroup::getId, Function.identity()));
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- for (String musicGroupId : imGroupIds) {
|
|
|
|
- ImGroup imGroup = map.get(musicGroupId);
|
|
|
|
- if (imGroup == null) {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- try {
|
|
|
|
- imGroupCoreService.groupJoin(userId,"",imGroup.getId());
|
|
|
|
-
|
|
|
|
- updateImGroupUserNumber(imGroup.getId());
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("加入群聊失败",e);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 查询群组
|
|
|
|
- *
|
|
|
|
- * @param query 查询条件
|
|
|
|
- * @return 群组列表
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- public List<ImGroup> queryByUserId(ImGroupWrapper.ImQuery query) {
|
|
|
|
- return imGroupDao.getByUserId(query);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 退出群组
|
|
|
|
- *
|
|
|
|
- * @param imGroupIds 群组ID
|
|
|
|
- * @param userId 用户ID
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
- public void quitGroup(List<String> imGroupIds, Integer userId) {
|
|
|
|
- if (CollectionUtils.isEmpty(imGroupIds)) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- List<ImGroup> groupList = imGroupDao.getByIds(imGroupIds);
|
|
|
|
-
|
|
|
|
- List<ImGroupMember> imGroupMemberList = new ArrayList<>();
|
|
|
|
- for (ImGroup imGroup : groupList) {
|
|
|
|
- try {
|
|
|
|
- imGroupCoreService.groupQuit(userId.longValue(), "",imGroup.getId());
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("退出群聊失败",e);
|
|
|
|
- }
|
|
|
|
- ImGroupMember imGroupMember = new ImGroupMember();
|
|
|
|
- imGroupMember.setImGroupId(imGroup.getId());
|
|
|
|
- imGroupMember.setUserId(userId);
|
|
|
|
- imGroupMemberList.add(imGroupMember);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- imGroupMemberService.batchDeleteByGroupIdAndUserId(imGroupMemberList);
|
|
|
|
- for (String imGroupId : imGroupIds) {
|
|
|
|
- updateImGroupUserNumber(imGroupId);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 学校人员加入群组
|
|
|
|
- *
|
|
|
|
- * @param cooperationOrganId 合作机构id
|
|
|
|
- * @param imGroupId 群组id
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
- public void schoolJoinGroup(Integer cooperationOrganId, String imGroupId) {
|
|
|
|
-
|
|
|
|
- CooperationOrgan cooperationOrgan = cooperationOrganService.get(cooperationOrganId);
|
|
|
|
- if (cooperationOrgan == null) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- List<SchoolStaff> schoolStaffs = schoolStaffMapper.getByCoopIdAndType(cooperationOrganId, ESchoolStaffType.ORCHESTRA_LEADER);
|
|
|
|
- if (CollectionUtils.isEmpty(schoolStaffs)) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- // 查询群是否存在
|
|
|
|
- ImGroup imGroup = imGroupDao.get(imGroupId);
|
|
|
|
- if (imGroup == null) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- SchoolStaff schoolStaff = schoolStaffs.get(0);
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- addImGroup(Lists.newArrayList(imGroup.getId()),schoolStaff.getUserId(),ESchoolStaffType.ORCHESTRA_LEADER.getDescribe());
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 解析IM用户规则
|
|
|
|
- *
|
|
|
|
- * @param imUserId IM用户Id
|
|
|
|
- * @return String
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- public String analysisImUserId(String imUserId) {
|
|
|
|
- if (StringUtils.isNotBlank(imConfig.getAppPrefix()) && imUserId.startsWith(imConfig.getAppPrefix())) {
|
|
|
|
- return imUserId.replace(imConfig.getAppPrefix() + "_", "").split("_")[0];
|
|
|
|
- }
|
|
|
|
- return imUserId;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 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}_{2}", imConfig.getAppPrefix(), userId, clientType);
|
|
|
|
- }*/
|
|
|
|
- return userId;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public String getImUserId(Long userId, RoleEnum userRole) {
|
|
|
|
- /*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 String.valueOf(userId);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public String analysisImUserClient(String imUserId) {
|
|
|
|
- if (StringUtils.isNotBlank(imConfig.getAppPrefix()) && imUserId.startsWith(imConfig.getAppPrefix())) {
|
|
|
|
- imUserId = imUserId.replace(imConfig.getAppPrefix() + "_", "");
|
|
|
|
- String[] s = imUserId.split("_");
|
|
|
|
- if (s.length > 1) {
|
|
|
|
- return imUserId.replace(s[0] + "_", "");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return imUserId;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
- public void joinImGroup(String roomId, BasicUserInfo userInfo, String serverProvider, List<Long> studentIds) throws Exception {
|
|
|
|
-
|
|
|
|
- String joinImGroupKey = "joinImGroup:" + roomId;
|
|
|
|
- // VIP课或网络课,IM群聊已创建标识
|
|
|
|
- Boolean exists = redisTemplate.opsForValue().setIfAbsent(joinImGroupKey, roomId, 1L, TimeUnit.DAYS);
|
|
|
|
- RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(serverProvider);
|
|
|
|
- if (Optional.ofNullable(exists).orElse(false)) {
|
|
|
|
- // 群组老师信息
|
|
|
|
- List<ImGroupMemberWrapper.ImGroupMember> groupMembers = Lists.newArrayList(ImGroupMemberWrapper.ImGroupMember
|
|
|
|
- .builder()
|
|
|
|
- .userId(userInfo.getUserId())
|
|
|
|
- .imUserId(this.getImUserId(userInfo.getUserId().toString(), "TEACHER"))
|
|
|
|
- .imUserIdFormat(false)
|
|
|
|
- .build());
|
|
|
|
-
|
|
|
|
- for (Long studentId : studentIds) {
|
|
|
|
- groupMembers.add(ImGroupMemberWrapper.ImGroupMember
|
|
|
|
- .builder()
|
|
|
|
- .userId(studentId)
|
|
|
|
- .imUserId(this.getImUserId(studentId.toString(),"STUDENT"))
|
|
|
|
- .imUserIdFormat(false)
|
|
|
|
- .build());
|
|
|
|
- }
|
|
|
|
- try {
|
|
|
|
- // 创建群组
|
|
|
|
- log.info("createImGroup: roomId = {}, userId = {}", roomId, userInfo.getUserId());
|
|
|
|
- if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
|
|
|
|
-
|
|
|
|
- // 群组帐号注册
|
|
|
|
- try {
|
|
|
|
- pluginService.register(userInfo.getImUserId(), userInfo.getRealName(), userInfo.getAvatar());
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("直播房间群主注册失败: userId={}",userInfo.getUserId(), e);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 生成群组
|
|
|
|
- pluginService.chatRoomCreate(roomId, roomId, userInfo.getImUserId());
|
|
|
|
-
|
|
|
|
- // 加入群组成员
|
|
|
|
-// log.info("joinImGroup: roomId = {}, serviceProvider={}, userIds = {}", roomId,serverProvider, groupMembers);
|
|
|
|
-// pluginService.chatRoomGroupJoin(roomId, roomId, groupMembers);
|
|
|
|
- } else {
|
|
|
|
- String[] integers = groupMembers.stream().map(e->e.getImUserId()).collect(Collectors.toList()).toArray(new String[]{});
|
|
|
|
- imHelper.joinGroup(integers, roomId, roomId);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- } catch (Exception e) {
|
|
|
|
-
|
|
|
|
- redisTemplate.delete(joinImGroupKey);
|
|
|
|
- // 异常抛出,删除缓存标识
|
|
|
|
- throw e;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public RTCRoomPluginService getRTCRoomPluginService(String serviceProvider) {
|
|
|
|
- return rtcRoomPluginContext.getPluginService(serviceProvider);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-}
|
|
|