|  | @@ -9,9 +9,7 @@ import com.yonge.cooleshow.biz.dal.dao.SysConfigDao;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.dto.*;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.entity.*;
 | 
	
		
			
				|  |  | -import com.yonge.cooleshow.biz.dal.enums.ImNetworkRoomErrorEnum;
 | 
	
		
			
				|  |  | -import com.yonge.cooleshow.biz.dal.enums.ImNetworkRoomMemberChangedEnum;
 | 
	
		
			
				|  |  | -import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.enums.*;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.service.*;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.support.IMHelper;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.common.constant.SysConfigConstant;
 | 
	
	
		
			
				|  | @@ -24,6 +22,7 @@ import org.slf4j.LoggerFactory;
 | 
	
		
			
				|  |  |  import org.springframework.beans.BeanUtils;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  | +import org.springframework.util.CollectionUtils;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import javax.annotation.Resource;
 | 
	
		
			
				|  |  |  import java.util.*;
 | 
	
	
		
			
				|  | @@ -58,6 +57,8 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
 | 
	
		
			
				|  |  |      private IMHelper imHelper;
 | 
	
		
			
				|  |  |      @Resource
 | 
	
		
			
				|  |  |      private MusicSheetAccompanimentService musicSheetAccompanimentService;
 | 
	
		
			
				|  |  | +    @Resource
 | 
	
		
			
				|  |  | +    private MusicSheetService musicSheetService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public ImNetworkRoomDao getDao() {
 | 
	
	
		
			
				|  | @@ -112,7 +113,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
 | 
	
		
			
				|  |  |          IMApiResultInfo resultInfo = imHelper.joinGroup(new String[]{sysUser.getUserId().toString()}, roomId, roomId);
 | 
	
		
			
				|  |  |          if(resultInfo.getCode() != 200){
 | 
	
		
			
				|  |  |              log.error("加入群聊失败 resultInfo:{}",resultInfo);
 | 
	
		
			
				|  |  | -            throw new BizException("加入网络教室失败,请联系管理员");
 | 
	
		
			
				|  |  | +//            throw new BizException("加入网络教室失败,请联系管理员");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          return HttpResponseResult.succeed(joinRoomResult);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -166,7 +167,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
 | 
	
		
			
				|  |  |          long courseScheduleId = Long.parseLong(roomId);
 | 
	
		
			
				|  |  |          if (userRole == UserRoleEnum.TEACHER){
 | 
	
		
			
				|  |  |              //如果老师退出房间,关闭伴奏
 | 
	
		
			
				|  |  | -            courseScheduleStudentMusicSheetService.getDao().closePlayStatus(courseScheduleId);
 | 
	
		
			
				|  |  | +            courseScheduleStudentMusicSheetService.getDao().closePlayStatus(courseScheduleId,null);
 | 
	
		
			
				|  |  |              courseScheduleStudentPaymentService.getDao().adjustPlayMidi(courseScheduleId, null, null);
 | 
	
		
			
				|  |  |              courseScheduleStudentPaymentService.getDao().adjustExamSong(courseScheduleId, null, null);
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -193,19 +194,31 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
 | 
	
		
			
				|  |  |          if(Objects.equals(courseSchedule.getTeacherId(),userId)){
 | 
	
		
			
				|  |  |              roleEnum = UserRoleEnum.TEACHER;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        BasicUserInfo sysUser = Optional.ofNullable(teacherDao.getBasicUserInfo(userId)).
 | 
	
		
			
				|  |  | -                orElseThrow(()-> new BizException("用户信息不存在"));
 | 
	
		
			
				|  |  | -        Date now = new Date();
 | 
	
		
			
				|  |  | -        //删房间用户信息
 | 
	
		
			
				|  |  | -        imNetworkRoomMemberService.getDao().delByRidAndUid(roomId, userId);
 | 
	
		
			
				|  |  | +        //记录考勤信息
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          ImNetworkRoom room = baseMapper.findByRoomId(roomId);
 | 
	
		
			
				|  |  |          if (roleEnum == UserRoleEnum.TEACHER){
 | 
	
		
			
				|  |  |              if (isUserDisplay(room.getDisplay(), userId)) {
 | 
	
		
			
				|  |  | +                room.setDisplay("");
 | 
	
		
			
				|  |  |                  this.updateDisplay(userId,room);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            courseScheduleStudentPaymentService.adjustPlayMidiAndMusicSheet(courseSchedule.getId(), null, null,null);
 | 
	
		
			
				|  |  | +            //老师退出房间,初始化节拍器和伴奏播放配置
 | 
	
		
			
				|  |  | +            courseScheduleStudentPaymentService.adjustPlayMidiAndMusicSheet(courseSchedule.getId(), null, null,"");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +        ImNetworkRoomMember roomMember = imNetworkRoomMemberService.getDao().findByRidAndUid(roomId, userId);
 | 
	
		
			
				|  |  | +        int memberNum = imNetworkRoomMemberService.getDao().countByRoomId(roomId);
 | 
	
		
			
				|  |  | +        if (memberNum <= 1) {
 | 
	
		
			
				|  |  | +            imHelper.dismiss(userId.toString(), roomId);
 | 
	
		
			
				|  |  | +            courseScheduleStudentMusicSheetService.getDao().closePlayStatus(courseSchedule.getId(),null);
 | 
	
		
			
				|  |  | +            log.info("leaveRoomSuccess dismiss the room: {},userId: {}", roomId, userId);
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            ImNetworkRoomMemberChangedMessage msg = new ImNetworkRoomMemberChangedMessage(roomMember,ImNetworkRoomMemberChangedEnum.LEAVE);
 | 
	
		
			
				|  |  | +            imHelper.publishMessage(userId.toString(), roomId, msg);
 | 
	
		
			
				|  |  | +            imHelper.quit(new String[]{userId.toString()}, roomId);
 | 
	
		
			
				|  |  | +            log.info("leaveRoomSuccess quit group: roomId={},userId: {}", roomId, userId);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //删房间用户信息
 | 
	
		
			
				|  |  | +        imNetworkRoomMemberService.getDao().deleteById(roomMember.getId());
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
	
		
			
				|  | @@ -224,41 +237,266 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | -    public void pushDownloadMusicSheetMsg(ImNetworkRoomMusicSheetData musicSheetData) {
 | 
	
		
			
				|  |  | -//        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
 | 
	
		
			
				|  |  | -//                orElseThrow(()-> new BizException("请登录"));
 | 
	
		
			
				|  |  | -//        Long userId = sysUser.getId();
 | 
	
		
			
				|  |  | -//        Long courseScheduleId = musicSheetData.getCourseScheduleId();
 | 
	
		
			
				|  |  | -//        log.info("pushDownloadMusicSheetMsg: roomId={}, userId={}", courseScheduleId, userId);
 | 
	
		
			
				|  |  | -//        //获取已通知下载的伴奏列表
 | 
	
		
			
				|  |  | -//        List<CourseScheduleStudentMusicSheetResult> musicSheetResults = courseScheduleStudentMusicSheetService.getDao().queryBySheetIdAndCourseId(musicSheetData.getMusicSheetAccompanimentId(),
 | 
	
		
			
				|  |  | -//                courseScheduleId, null, null, UserRoleEnum.STUDENT.ordinal());
 | 
	
		
			
				|  |  | -//        ImNetworkMusicSheetDownloadMessageContent downloadMessageContent = musicSheetAccompanimentService.getDao().findMsgContentByAccompanimentId(musicSheetData.getMusicSheetAccompanimentId());
 | 
	
		
			
				|  |  | -//        if (musicSheetResults.size() == 0) {
 | 
	
		
			
				|  |  | -//            //第一次下载,生成数据
 | 
	
		
			
				|  |  | -//            List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentService.getDao().queryByCourseId(courseScheduleId);
 | 
	
		
			
				|  |  | -//            Set<Long> studentIds = courseScheduleStudentPayments.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
 | 
	
		
			
				|  |  | -//            studentIds.forEach(e -> {
 | 
	
		
			
				|  |  | -//                CourseScheduleStudentMusicSheetResult musicSheetResult = new CourseScheduleStudentMusicSheetResult();
 | 
	
		
			
				|  |  | -//                musicSheetResult.setMusicSheetAccompanimentId(accompaniment.getId());
 | 
	
		
			
				|  |  | -//                musicSheetResult.setSpeed(100);
 | 
	
		
			
				|  |  | -//                musicSheetResult.setCourseScheduleId(courseScheduleId);
 | 
	
		
			
				|  |  | -//                musicSheetResult.setUserId(e);
 | 
	
		
			
				|  |  | -//                musicSheetResult.setUserType(UserRoleEnum.STUDENT.ordinal());
 | 
	
		
			
				|  |  | -//                musicSheetResults.add(musicSheetResult);
 | 
	
		
			
				|  |  | -//            });
 | 
	
		
			
				|  |  | -//            CourseScheduleStudentMusicSheetResult musicSheetResult = new CourseScheduleStudentMusicSheetResult();
 | 
	
		
			
				|  |  | -//            musicSheetResult.setMusicSheetAccompanimentId(accompaniment.getId());
 | 
	
		
			
				|  |  | -//            musicSheetResult.setSpeed(100);
 | 
	
		
			
				|  |  | -//            musicSheetResult.setCourseScheduleId(courseScheduleId);
 | 
	
		
			
				|  |  | -//            musicSheetResult.setUserId(userId);
 | 
	
		
			
				|  |  | -//            musicSheetResult.setUserType(UserRoleEnum.TEACHER.ordinal());
 | 
	
		
			
				|  |  | -//            musicSheetResults.add(musicSheetResult);
 | 
	
		
			
				|  |  | -//            courseScheduleStudentMusicSheetService.getDao().batchInsert(musicSheetResults);
 | 
	
		
			
				|  |  | -//        }
 | 
	
		
			
				|  |  | -//        ImNetworkRoomMusicSheetData musicScoreMessage = JSON.parseObject(JSON.toJSONString(accompaniment), ImNetworkRoomMusicSheetData.class);
 | 
	
		
			
				|  |  | -//        ImNetworkMusicSheetDownloadMessage msg = new ImNetworkMusicSheetDownloadMessage(musicScoreMessage);
 | 
	
		
			
				|  |  | -//        imHelper.publishMessage(sysUser.getId().toString(), courseScheduleId.toString(), msg, 0);
 | 
	
		
			
				|  |  | +    public void pushDownloadMusicSheetMsg(String roomId,Long accompanimentId) throws Exception {
 | 
	
		
			
				|  |  | +        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
 | 
	
		
			
				|  |  | +                orElseThrow(()-> new BizException("请登录"));
 | 
	
		
			
				|  |  | +        Long courseScheduleId = Long.parseLong(roomId);
 | 
	
		
			
				|  |  | +        List<CourseScheduleStudentMusicSheetResult> scheduleStudentMusicSheetResults = courseScheduleStudentMusicSheetService.getDao().
 | 
	
		
			
				|  |  | +                queryBySheetIdAndCourseId(accompanimentId, courseScheduleId, null, null, 0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        MusicSheetAccompaniment accompaniment = musicSheetAccompanimentService.getById(accompanimentId);
 | 
	
		
			
				|  |  | +        if (scheduleStudentMusicSheetResults.size() == 0) {
 | 
	
		
			
				|  |  | +            //第一次下载,生成数据
 | 
	
		
			
				|  |  | +            List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentService.getDao().queryByCourseId(courseScheduleId);
 | 
	
		
			
				|  |  | +            Set<Long> studentIds = courseScheduleStudentPayments.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
 | 
	
		
			
				|  |  | +            studentIds.forEach(e -> {
 | 
	
		
			
				|  |  | +                CourseScheduleStudentMusicSheetResult musicSheet = new CourseScheduleStudentMusicSheetResult();
 | 
	
		
			
				|  |  | +                musicSheet.setMusicSheetAccompanimentId(accompanimentId);
 | 
	
		
			
				|  |  | +                musicSheet.setSpeed(accompaniment.getSpeed());
 | 
	
		
			
				|  |  | +                musicSheet.setCourseScheduleId(courseScheduleId);
 | 
	
		
			
				|  |  | +                musicSheet.setUserId(e);
 | 
	
		
			
				|  |  | +                scheduleStudentMusicSheetResults.add(musicSheet);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +            CourseScheduleStudentMusicSheetResult musicSheet = new CourseScheduleStudentMusicSheetResult();
 | 
	
		
			
				|  |  | +            musicSheet.setMusicSheetAccompanimentId(accompanimentId);
 | 
	
		
			
				|  |  | +            musicSheet.setSpeed(accompaniment.getSpeed());
 | 
	
		
			
				|  |  | +            musicSheet.setCourseScheduleId(courseScheduleId);
 | 
	
		
			
				|  |  | +            musicSheet.setUserId(sysUser.getId());
 | 
	
		
			
				|  |  | +            musicSheet.setUserType(1);
 | 
	
		
			
				|  |  | +            scheduleStudentMusicSheetResults.add(musicSheet);
 | 
	
		
			
				|  |  | +            courseScheduleStudentMusicSheetService.getDao().batchInsert(scheduleStudentMusicSheetResults);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        ImNetworkMusicSheetDownloadMessage msg = new ImNetworkMusicSheetDownloadMessage(
 | 
	
		
			
				|  |  | +                JSON.parseObject(JSON.toJSONString(accompaniment), ImNetworkMusicSheetDownloadMessageContent.class));
 | 
	
		
			
				|  |  | +        imHelper.publishMessage(sysUser.getId().toString(), roomId, msg, 0);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public void display(ImNetworkDisplayDataDto displayData) throws Exception {
 | 
	
		
			
				|  |  | +        log.info("display in data = {}", displayData);
 | 
	
		
			
				|  |  | +        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
 | 
	
		
			
				|  |  | +                orElseThrow(()-> new BizException("请登录"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        StringBuffer display = new StringBuffer("display://type=").append(displayData.getType().ordinal()).append("?userId=");
 | 
	
		
			
				|  |  | +        switch (displayData.getType()) {
 | 
	
		
			
				|  |  | +            case NONE:
 | 
	
		
			
				|  |  | +                //清空当前 room 的 display
 | 
	
		
			
				|  |  | +                display = new StringBuffer();
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            case TEACHER:
 | 
	
		
			
				|  |  | +                CourseSchedule courseSchedule = courseScheduleService.getById(displayData.getRoomId());
 | 
	
		
			
				|  |  | +                display.append(courseSchedule.getTeacherId()).append("?uri=");
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            case SCREEN:
 | 
	
		
			
				|  |  | +                display.append(sysUser.getId()).append("?uri=");
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            case STUDENT:
 | 
	
		
			
				|  |  | +                display.append(displayData.getUserId()).append("?uri=").append(displayData.getUri());
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            default:
 | 
	
		
			
				|  |  | +                display.append(sysUser.getId()).append("?uri=").append(displayData.getUri());
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        ImNetworkRoom room = baseMapper.findByRoomId(displayData.getRoomId());
 | 
	
		
			
				|  |  | +        room.setDisplay(display.toString());
 | 
	
		
			
				|  |  | +        this.updateDisplay(sysUser.getId(),room);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public void batchControlDevice(ImNetworkDeviceControlDto deviceControl) throws Exception {
 | 
	
		
			
				|  |  | +        ImNetworkDeviceTypeEnum deviceType = deviceControl.getDeviceType();
 | 
	
		
			
				|  |  | +        if (deviceControl.getUserId() != null) {
 | 
	
		
			
				|  |  | +            controlDevice(deviceControl);
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            if (deviceType == ImNetworkDeviceTypeEnum.EXAM_SONG ||
 | 
	
		
			
				|  |  | +                    deviceType == ImNetworkDeviceTypeEnum.MUSIC_SHEET ||
 | 
	
		
			
				|  |  | +                    deviceType == ImNetworkDeviceTypeEnum.ACCOMPANIMENT) {
 | 
	
		
			
				|  |  | +                List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentService.getDao().queryByCourseId(Long.parseLong(deviceControl.getRoomId()));
 | 
	
		
			
				|  |  | +                for (CourseScheduleStudentPayment studentPayment : studentPayments) {
 | 
	
		
			
				|  |  | +                    deviceControl.setUserId(studentPayment.getUserId());
 | 
	
		
			
				|  |  | +                    controlDevice(deviceControl);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }else {
 | 
	
		
			
				|  |  | +                List<ImNetworkRoomMember> roomMembers = imNetworkRoomMemberService.getDao().findByRoomAndRole(deviceControl.getRoomId(), 0);
 | 
	
		
			
				|  |  | +                if (!CollectionUtils.isEmpty(roomMembers)) {
 | 
	
		
			
				|  |  | +                    for (ImNetworkRoomMember roomMember : roomMembers) {
 | 
	
		
			
				|  |  | +                        deviceControl.setUserId(roomMember.getUserId());
 | 
	
		
			
				|  |  | +                        controlDevice(deviceControl);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public void controlDevice(ImNetworkDeviceControlDto deviceControl) throws Exception {
 | 
	
		
			
				|  |  | +        log.info("controlDevice in deviceControl = {}", deviceControl);
 | 
	
		
			
				|  |  | +        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
 | 
	
		
			
				|  |  | +                orElseThrow(()-> new BizException("请登录"));
 | 
	
		
			
				|  |  | +        String roomId = deviceControl.getRoomId();
 | 
	
		
			
				|  |  | +        Long userId = deviceControl.getUserId();
 | 
	
		
			
				|  |  | +        if(deviceControl.getEnable()){
 | 
	
		
			
				|  |  | +            long scheduleId = Long.parseLong(roomId);
 | 
	
		
			
				|  |  | +            ImNetworkDeviceStateChangedMessage deviceResourceMessage = new ImNetworkDeviceStateChangedMessage(deviceControl.getDeviceType().ordinal(),deviceControl.getEnable());
 | 
	
		
			
				|  |  | +            deviceResourceMessage.setUserId(userId.toString());
 | 
	
		
			
				|  |  | +            switch (deviceControl.getDeviceType()) {
 | 
	
		
			
				|  |  | +                case EXAM_SONG:
 | 
	
		
			
				|  |  | +                    ImNetworkRoomMusicSheetDownloadData msg = courseScheduleStudentPaymentService.getMemberExamSong(scheduleId, userId);
 | 
	
		
			
				|  |  | +                    msg.setEnable(deviceControl.getEnable());
 | 
	
		
			
				|  |  | +                    courseScheduleStudentPaymentService.getDao().adjustExamSong(scheduleId,userId, JSON.toJSONString(msg));
 | 
	
		
			
				|  |  | +                    imHelper.publishMessage(userId.toString(), deviceControl.getRoomId(), deviceResourceMessage, 1);
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                case MUSIC_SHEET:
 | 
	
		
			
				|  |  | +                    //关闭所有曲目播放
 | 
	
		
			
				|  |  | +                    courseScheduleStudentMusicSheetService.getDao().closePlayStatus(scheduleId,userId);
 | 
	
		
			
				|  |  | +                    //打开原音
 | 
	
		
			
				|  |  | +                    courseScheduleStudentMusicSheetService.getDao().openPlayStatus(scheduleId,deviceControl.getMusicScoreAccompanimentId(),userId);
 | 
	
		
			
				|  |  | +                    deviceResourceMessage.setMusicScoreAccompanimentId(deviceControl.getMusicScoreAccompanimentId());
 | 
	
		
			
				|  |  | +                    deviceResourceMessage.setUserId(userId.toString());
 | 
	
		
			
				|  |  | +                    deviceResourceMessage.setSoundVolume(deviceControl.getSoundVolume());
 | 
	
		
			
				|  |  | +                    imHelper.publishMessage(sysUser.getId().toString(), roomId, deviceResourceMessage, 1);
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                case ACCOMPANIMENT:
 | 
	
		
			
				|  |  | +                    //关闭所有曲目播放
 | 
	
		
			
				|  |  | +                    courseScheduleStudentMusicSheetService.getDao().closePlayStatus(scheduleId,userId);
 | 
	
		
			
				|  |  | +                    //打开伴奏
 | 
	
		
			
				|  |  | +                    courseScheduleStudentMusicSheetService.getDao().openAccompanimentPlayStatus(scheduleId, deviceControl.getMusicScoreAccompanimentId(),userId);
 | 
	
		
			
				|  |  | +                    deviceResourceMessage.setMusicScoreAccompanimentId(deviceControl.getMusicScoreAccompanimentId());
 | 
	
		
			
				|  |  | +                    deviceResourceMessage.setUserId(userId.toString());
 | 
	
		
			
				|  |  | +                    deviceResourceMessage.setSoundVolume(deviceControl.getSoundVolume());
 | 
	
		
			
				|  |  | +                    imHelper.publishMessage(sysUser.getId().toString(), roomId, deviceResourceMessage, 1);
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                default:
 | 
	
		
			
				|  |  | +                    //邀请打开指定设备权限
 | 
	
		
			
				|  |  | +                    ImNetworkControlDeviceNotifyMessage message = new ImNetworkControlDeviceNotifyMessage(ImNetworkActionEnum.INVITE.ordinal());
 | 
	
		
			
				|  |  | +//                    msg.setTicket(ticket);
 | 
	
		
			
				|  |  | +                    message.setType(deviceControl.getDeviceType().ordinal());
 | 
	
		
			
				|  |  | +                    message.setOpUserId(sysUser.getId().toString());
 | 
	
		
			
				|  |  | +                    message.setOpUserName(sysUser.getUsername());
 | 
	
		
			
				|  |  | +                    imHelper.publishMessage(sysUser.getId().toString(), userId.toString(), roomId, message);
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }else {
 | 
	
		
			
				|  |  | +            ImNetworkRoomMember roomMember = imNetworkRoomMemberService.getById(roomId);
 | 
	
		
			
				|  |  | +            long scheduleId = Long.parseLong(roomId);
 | 
	
		
			
				|  |  | +            switch (deviceControl.getDeviceType()) {
 | 
	
		
			
				|  |  | +                case CAMERA:
 | 
	
		
			
				|  |  | +                    roomMember.setCameraFlag(deviceControl.getEnable());
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                case MICROPHONE:
 | 
	
		
			
				|  |  | +                    roomMember.setMicFlag(deviceControl.getEnable());
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                case HAND_UP:
 | 
	
		
			
				|  |  | +                    roomMember.setHandFlag(deviceControl.getEnable());
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                case MUSIC_MODE:
 | 
	
		
			
				|  |  | +                    roomMember.setMusicModeFlag(deviceControl.getEnable());
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                case EXAM_SONG:
 | 
	
		
			
				|  |  | +                    ImNetworkRoomMusicSheetDownloadData msg = courseScheduleStudentPaymentService.getMemberExamSong(scheduleId, userId);
 | 
	
		
			
				|  |  | +                    msg.setEnable(deviceControl.getEnable());
 | 
	
		
			
				|  |  | +                    courseScheduleStudentPaymentService.getDao().adjustExamSong(scheduleId,userId, JSON.toJSONString(msg));
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                case MUSIC_SHEET:
 | 
	
		
			
				|  |  | +                case ACCOMPANIMENT:
 | 
	
		
			
				|  |  | +                    //关闭所有曲目播放
 | 
	
		
			
				|  |  | +                    courseScheduleStudentMusicSheetService.getDao().closePlayStatus(scheduleId,userId);
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if(deviceControl.getDeviceType() != ImNetworkDeviceTypeEnum.MUSIC_SHEET &&
 | 
	
		
			
				|  |  | +                    deviceControl.getDeviceType() != ImNetworkDeviceTypeEnum.EXAM_SONG &&
 | 
	
		
			
				|  |  | +                    deviceControl.getDeviceType() != ImNetworkDeviceTypeEnum.ACCOMPANIMENT){
 | 
	
		
			
				|  |  | +                imNetworkRoomMemberService.getDao().updateById(roomMember);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            ImNetworkDeviceStateChangedMessage deviceResourceMessage = new ImNetworkDeviceStateChangedMessage(deviceControl.getDeviceType().ordinal(),deviceControl.getEnable());
 | 
	
		
			
				|  |  | +            deviceResourceMessage.setUserId(userId.toString());
 | 
	
		
			
				|  |  | +            BasicUserInfo basicUserInfo = teacherDao.getBasicUserInfo(userId);
 | 
	
		
			
				|  |  | +            if (Objects.nonNull(basicUserInfo)) {
 | 
	
		
			
				|  |  | +                deviceResourceMessage.setUserName(basicUserInfo.getUsername());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            imHelper.publishMessage(sysUser.getId().toString(), roomId, deviceResourceMessage, 1);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public void approveControlDevice(ImNetworkDeviceControlDto deviceControl) throws Exception {
 | 
	
		
			
				|  |  | +        log.info("approveControlDevice: deviceControl={}", deviceControl);
 | 
	
		
			
				|  |  | +        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
 | 
	
		
			
				|  |  | +                orElseThrow(()-> new BizException("请登录"));
 | 
	
		
			
				|  |  | +        ImNetworkRoomMember roomMember = imNetworkRoomMemberService.getById(deviceControl.getRoomId());
 | 
	
		
			
				|  |  | +        switch (deviceControl.getDeviceType()) {
 | 
	
		
			
				|  |  | +            case CAMERA:
 | 
	
		
			
				|  |  | +                roomMember.setCameraFlag(deviceControl.getEnable());
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            case EXAM_SONG:
 | 
	
		
			
				|  |  | +                long scheduleId = Long.parseLong(deviceControl.getRoomId());
 | 
	
		
			
				|  |  | +                ImNetworkRoomMusicSheetDownloadData msg = courseScheduleStudentPaymentService.getMemberExamSong(scheduleId, sysUser.getId());
 | 
	
		
			
				|  |  | +                msg.setEnable(deviceControl.getEnable());
 | 
	
		
			
				|  |  | +                courseScheduleStudentPaymentService.getDao().adjustExamSong(scheduleId, sysUser.getId(), JSON.toJSONString(msg));
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            case MICROPHONE:
 | 
	
		
			
				|  |  | +                roomMember.setMicFlag(deviceControl.getEnable());
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if(deviceControl.getDeviceType() == ImNetworkDeviceTypeEnum.CAMERA ||
 | 
	
		
			
				|  |  | +                deviceControl.getDeviceType() == ImNetworkDeviceTypeEnum.MICROPHONE){
 | 
	
		
			
				|  |  | +            imNetworkRoomMemberService.getDao().updateById(roomMember);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        ImNetworkControlDeviceNotifyMessage msg = new ImNetworkControlDeviceNotifyMessage(ImNetworkActionEnum.APPROVE.ordinal());
 | 
	
		
			
				|  |  | +        msg.setType(deviceControl.getDeviceType().ordinal());
 | 
	
		
			
				|  |  | +        msg.setOpUserId(sysUser.getId().toString());
 | 
	
		
			
				|  |  | +        msg.setOpUserName(sysUser.getUsername());
 | 
	
		
			
				|  |  | +        imHelper.publishMessage(sysUser.getId().toString(),deviceControl.getUserId().toString(), deviceControl.getRoomId(), msg);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        ImNetworkDeviceStateChangedMessage deviceResourceMessage = new ImNetworkDeviceStateChangedMessage(deviceControl.getDeviceType().ordinal(),deviceControl.getEnable());
 | 
	
		
			
				|  |  | +        deviceResourceMessage.setUserId(sysUser.getId().toString());
 | 
	
		
			
				|  |  | +        imHelper.publishMessage(sysUser.getId().toString(), deviceControl.getRoomId(), deviceResourceMessage, 1);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public void rejectControlDevice(ImNetworkDeviceControlDto deviceControl) throws Exception {
 | 
	
		
			
				|  |  | +        log.info("rejectControlDevice: deviceControl={}", deviceControl);
 | 
	
		
			
				|  |  | +        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
 | 
	
		
			
				|  |  | +                orElseThrow(()-> new BizException("请登录"));
 | 
	
		
			
				|  |  | +        ImNetworkControlDeviceNotifyMessage msg = new ImNetworkControlDeviceNotifyMessage(ImNetworkActionEnum.REJECT.ordinal());
 | 
	
		
			
				|  |  | +        msg.setType(deviceControl.getDeviceType().ordinal());
 | 
	
		
			
				|  |  | +        msg.setOpUserId(sysUser.getId().toString());
 | 
	
		
			
				|  |  | +        msg.setOpUserName(sysUser.getUsername());
 | 
	
		
			
				|  |  | +        imHelper.publishMessage(sysUser.getId().toString(),deviceControl.getUserId().toString(), deviceControl.getRoomId(), msg);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public void adjustExamSong(ImNetworkMusicSheetDownDto downDto) throws Exception {
 | 
	
		
			
				|  |  | +        SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
 | 
	
		
			
				|  |  | +                orElseThrow(()-> new BizException("请登录"));
 | 
	
		
			
				|  |  | +        log.info("adjustExamSong: downDto={}", downDto);
 | 
	
		
			
				|  |  | +        MusicSheet musicSheet = Optional.ofNullable(musicSheetService.getById(downDto.getMusicSheetId())).
 | 
	
		
			
				|  |  | +                orElseThrow(()-> new BizException("曲目信息不存在"));
 | 
	
		
			
				|  |  | +        long scheduleId = Long.parseLong(downDto.getRoomId());
 | 
	
		
			
				|  |  | +        String examJson = courseScheduleStudentPaymentService.getDao().getMusicSheetByCourseIdAndUserId(scheduleId, sysUser.getId());
 | 
	
		
			
				|  |  | +        ImNetworkRoomMusicSheetDownloadData msg;
 | 
	
		
			
				|  |  | +        if (StringUtils.isEmpty(examJson)) {
 | 
	
		
			
				|  |  | +            msg = new ImNetworkRoomMusicSheetDownloadData();
 | 
	
		
			
				|  |  | +            msg.setMusicSheetName(musicSheet.getMusicSheetName());
 | 
	
		
			
				|  |  | +            msg.setUrl(musicSheet.getUrl());
 | 
	
		
			
				|  |  | +            msg.setStatus(downDto.getStatus());
 | 
	
		
			
				|  |  | +            msg.setMusicSheetId(musicSheet.getId());
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            msg = JSON.parseObject(examJson, ImNetworkRoomMusicSheetDownloadData.class);
 | 
	
		
			
				|  |  | +            msg.setStatus(downDto.getStatus());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        courseScheduleStudentPaymentService.getDao().adjustExamSong(scheduleId,sysUser.getId(),JSON.toJSONString(msg));
 | 
	
		
			
				|  |  | +        //给老师发送学员曲目下载状态
 | 
	
		
			
				|  |  | +        CourseSchedule courseSchedule = courseScheduleService.getById(scheduleId);
 | 
	
		
			
				|  |  | +        ImNetworkMusicSheetDownloadStatusMessage deviceResourceMessage = new ImNetworkMusicSheetDownloadStatusMessage(downDto.getStatus(), sysUser.getId(), downDto.getMusicSheetId());
 | 
	
		
			
				|  |  | +        imHelper.publishMessage(sysUser.getId().toString(), courseSchedule.getTeacherId().toString(), downDto.getRoomId(), deviceResourceMessage);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      //校验用户是否提前进入教室
 | 
	
	
		
			
				|  | @@ -274,6 +512,10 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public ImNetworkRoom initRoom(String roomId,Long courseId,UserRoleEnum userRole,Long userId,Date now) throws Exception {
 | 
	
		
			
				|  |  |          ImNetworkRoom room = baseMapper.findByRoomId(roomId);
 | 
	
		
			
				|  |  | +        String display = "";
 | 
	
		
			
				|  |  | +        if (userRole == UserRoleEnum.TEACHER) {
 | 
	
		
			
				|  |  | +            display = "display://type=1?userId=" + userId + "?uri=";
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          if(Objects.isNull(room)){
 | 
	
		
			
				|  |  |              room = new ImNetworkRoom();
 | 
	
		
			
				|  |  |              //创建房间
 | 
	
	
		
			
				|  | @@ -281,6 +523,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
 | 
	
		
			
				|  |  |              room.setRoomId(roomId);
 | 
	
		
			
				|  |  |              room.setCreateTime(now);
 | 
	
		
			
				|  |  |              room.setUpdateTime(now);
 | 
	
		
			
				|  |  | +            room.setDisplay(display);
 | 
	
		
			
				|  |  |              baseMapper.insert(room);
 | 
	
		
			
				|  |  |              IMApiResultInfo resultInfo = imHelper.createGroup(new String[]{userId.toString()}, roomId, roomId);
 | 
	
		
			
				|  |  |              if(resultInfo.getCode() != 200){
 | 
	
	
		
			
				|  | @@ -290,6 +533,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
 | 
	
		
			
				|  |  |          }else {
 | 
	
		
			
				|  |  |              if(userRole == UserRoleEnum.TEACHER){
 | 
	
		
			
				|  |  |                  //修改节拍器
 | 
	
		
			
				|  |  | +                room.setDisplay(display);
 | 
	
		
			
				|  |  |                  this.updateDisplay(userId,room);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -298,13 +542,9 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      //修改节拍器
 | 
	
		
			
				|  |  |      public void updateDisplay(Long userId,ImNetworkRoom room) throws Exception {
 | 
	
		
			
				|  |  | -        String display = new StringBuilder("display://type=1?userId=")
 | 
	
		
			
				|  |  | -                .append(userId)
 | 
	
		
			
				|  |  | -                .append("?uri=").toString();
 | 
	
		
			
				|  |  | -        room.setDisplay(display);
 | 
	
		
			
				|  |  |          baseMapper.updateById(room);
 | 
	
		
			
				|  |  |          //发送display改动通知
 | 
	
		
			
				|  |  | -        ImNetworkDisplayMessage displayMessage = new ImNetworkDisplayMessage(display);
 | 
	
		
			
				|  |  | +        ImNetworkDisplayMessage displayMessage = new ImNetworkDisplayMessage(room.getDisplay());
 | 
	
		
			
				|  |  |          imHelper.publishMessage(userId.toString(), room.getRoomId(), displayMessage, 0);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 |