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