|  | @@ -0,0 +1,115 @@
 | 
	
		
			
				|  |  | +package com.yonge.cooleshow.biz.dal.service.impl;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.auth.api.entity.SysUser;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.constant.SysConfigConstant;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomDao;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomMemberDao;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.dao.SysConfigDao;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.dto.CourseScheduleStudentMusicScoreResult;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.dto.ImNetworkRoomResult;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.dto.NetworkRoomResult;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoom;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.service.*;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.common.exception.BizException;
 | 
	
		
			
				|  |  | +import org.springframework.beans.BeanUtils;
 | 
	
		
			
				|  |  | +import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import org.slf4j.Logger;
 | 
	
		
			
				|  |  | +import org.slf4j.LoggerFactory;
 | 
	
		
			
				|  |  | +import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import javax.annotation.Resource;
 | 
	
		
			
				|  |  | +import java.util.Date;
 | 
	
		
			
				|  |  | +import java.util.List;
 | 
	
		
			
				|  |  | +import java.util.Objects;
 | 
	
		
			
				|  |  | +import java.util.Optional;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 网络教室房间(ImNetworkRoom)表服务实现类
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @author zx
 | 
	
		
			
				|  |  | + * @since 2022-03-30 16:36:36
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +@Service("imNetworkRoomService")
 | 
	
		
			
				|  |  | +public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNetworkRoom> implements ImNetworkRoomService {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private final static Logger log = LoggerFactory.getLogger(ImNetworkRoomServiceImpl.class);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Resource
 | 
	
		
			
				|  |  | +    private SysUserFeignService sysUserFeignService;
 | 
	
		
			
				|  |  | +    @Resource
 | 
	
		
			
				|  |  | +    private ImNetworkRoomMemberService imNetworkRoomMemberService;
 | 
	
		
			
				|  |  | +    @Resource
 | 
	
		
			
				|  |  | +    private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
 | 
	
		
			
				|  |  | +    @Resource
 | 
	
		
			
				|  |  | +    private CourseScheduleStudentMusicScoreService courseScheduleStudentMusicScoreService;
 | 
	
		
			
				|  |  | +    @Resource
 | 
	
		
			
				|  |  | +    private SysConfigDao sysConfigDao;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public ImNetworkRoomDao getDao() {
 | 
	
		
			
				|  |  | +        return this.baseMapper;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public NetworkRoomResult joinRoom(Long courseScheduleId, UserRoleEnum userRole) {
 | 
	
		
			
				|  |  | +        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
 | 
	
		
			
				|  |  | +                orElseThrow(()-> new BizException("请登录"));
 | 
	
		
			
				|  |  | +        Date now = new Date();
 | 
	
		
			
				|  |  | +        String roomId = courseScheduleId.toString();
 | 
	
		
			
				|  |  | +        ImNetworkRoomResult joinRoomResult = new ImNetworkRoomResult();
 | 
	
		
			
				|  |  | +        //获取房间
 | 
	
		
			
				|  |  | +        ImNetworkRoom room = initRoom(roomId,courseScheduleId,userRole,sysUser.getId());
 | 
	
		
			
				|  |  | +        BeanUtils.copyProperties(room,joinRoomResult);
 | 
	
		
			
				|  |  | +        //创建群聊
 | 
	
		
			
				|  |  | +        //定时销毁房间
 | 
	
		
			
				|  |  | +        //获取房间用户信息
 | 
	
		
			
				|  |  | +        ImNetworkRoomMember roomMember = imNetworkRoomMemberService.initRoomMember(roomId,sysUser,userRole);
 | 
	
		
			
				|  |  | +        joinRoomResult.setRoomMember(roomMember);
 | 
	
		
			
				|  |  | +        //获取房间所有成员
 | 
	
		
			
				|  |  | +        List<ImNetworkRoomMember> roomMemberList = imNetworkRoomMemberService.getDao().queryByRoomId(roomId);
 | 
	
		
			
				|  |  | +        joinRoomResult.setRoomMemberList(roomMemberList);
 | 
	
		
			
				|  |  | +        //如果是老师,重置节拍器数据
 | 
	
		
			
				|  |  | +        if(userRole == UserRoleEnum.TEACHER){
 | 
	
		
			
				|  |  | +            courseScheduleStudentPaymentService.getDao().cleanPlayMidi(courseScheduleId);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //获取用户已下载的伴奏列表
 | 
	
		
			
				|  |  | +        List<CourseScheduleStudentMusicScoreResult> musicScoreResults = courseScheduleStudentMusicScoreService.getDao().
 | 
	
		
			
				|  |  | +                queryByScoreIdAndCourseId(null,courseScheduleId,sysUser.getId(),null,null);
 | 
	
		
			
				|  |  | +        joinRoomResult.setMusicScoreResults(musicScoreResults);
 | 
	
		
			
				|  |  | +        //网络教室配置项
 | 
	
		
			
				|  |  | +        String autoCloseNetworkRoomTime = sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_LIVE_ROOM_MINUTE, courseSchedule.getTenantId());
 | 
	
		
			
				|  |  | +        return null;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public ImNetworkRoom initRoom(String roomId,Long courseId,UserRoleEnum userRole,Long userId){
 | 
	
		
			
				|  |  | +        ImNetworkRoom room = baseMapper.findByRoomId(roomId);
 | 
	
		
			
				|  |  | +        if(Objects.isNull(room)){
 | 
	
		
			
				|  |  | +            Date date = new Date();
 | 
	
		
			
				|  |  | +            room = new ImNetworkRoom();
 | 
	
		
			
				|  |  | +            //创建房间
 | 
	
		
			
				|  |  | +            room.setCourseScheduleId(courseId);
 | 
	
		
			
				|  |  | +            room.setRoomId(roomId);
 | 
	
		
			
				|  |  | +            room.setCreateTime(date);
 | 
	
		
			
				|  |  | +            room.setUpdateTime(date);
 | 
	
		
			
				|  |  | +            baseMapper.insert(room);
 | 
	
		
			
				|  |  | +        }else {
 | 
	
		
			
				|  |  | +            if(userRole == UserRoleEnum.TEACHER){
 | 
	
		
			
				|  |  | +                room.setDisplay(new StringBuilder("display://type=1?userId=")
 | 
	
		
			
				|  |  | +                        .append(userId)
 | 
	
		
			
				|  |  | +                        .append("?uri=").toString());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return room;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public void updateDisplay(){
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 |