|
@@ -80,11 +80,8 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
private StudentAttendanceService studentAttendanceService;
|
|
|
@Resource
|
|
|
private TeacherAttendanceService teacherAttendanceService;
|
|
|
- @Autowired
|
|
|
- private RTCRoomPluginContext rtcRoomPluginContext;
|
|
|
@Resource
|
|
|
private RedisTemplate<String,Object> redisTemplate;
|
|
|
-
|
|
|
@Autowired
|
|
|
private ImGroupService imGroupService;
|
|
|
@Autowired
|
|
@@ -94,8 +91,6 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
@Autowired
|
|
|
private ImService imService;
|
|
|
|
|
|
- private String QUIT_ROOM_SUCCESS = "quitRoomSuccess:";
|
|
|
-
|
|
|
@Override
|
|
|
public ImNetworkRoomDao getDao() {
|
|
|
return this.baseMapper;
|
|
@@ -103,18 +98,18 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public BaseResponse<ImNetworkRoomResult> joinRoom(Long courseScheduleId, ClientEnum clientType) throws Exception {
|
|
|
+ public BaseResponse<ImNetworkRoomResult> joinRoom(String roomId, ClientEnum clientType) throws Exception {
|
|
|
// 当前登录用户ID
|
|
|
Long userId = sysUserService.getUserId();
|
|
|
- CourseSchedule courseSchedule = Optional.ofNullable(courseScheduleService.getById(courseScheduleId)).
|
|
|
+ CourseSchedule courseSchedule = Optional.ofNullable(courseScheduleService.getById(roomId)).
|
|
|
orElseThrow(()->new BizException("房间信息不存在"));
|
|
|
|
|
|
RoleEnum userRole = RoleEnum.RoleStudent;
|
|
|
- if(courseSchedule.getTeacherId().equals(userId) && ClientEnum.TEACHER == clientType){
|
|
|
- // 与老师帐号匹配,且来自老师客户端
|
|
|
+ if(clientType == ClientEnum.TEACHER
|
|
|
+ || courseSchedule.getTeacherId().equals(userId)){
|
|
|
userRole = RoleEnum.RoleTeacher;
|
|
|
}
|
|
|
- log.info("joinRoom params:courseScheduleId:{},userRole:{},userId:{}",courseScheduleId,userRole,userId);
|
|
|
+ log.info("joinRoom params:roomId:{},userRole:{},userId:{}",roomId,userRole,userId);
|
|
|
BasicUserInfo sysUser = Optional.ofNullable(teacherDao.getBasicUserInfo(userId)).
|
|
|
orElseThrow(()-> new BizException("用户信息不存在"));
|
|
|
Date now = new Date();
|
|
@@ -123,7 +118,6 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
if (roomNotStart(courseSchedule)) {
|
|
|
return BaseResponse.failed(ErrorEnum.ROOM_NOT_START);
|
|
|
}
|
|
|
- String roomId = courseScheduleId.toString();
|
|
|
ImNetworkRoomResult joinRoomResult = new ImNetworkRoomResult();
|
|
|
//初始化房间信息
|
|
|
ImNetworkRoom room = roomService.initRoom(roomId,userRole,sysUser.getUserId());
|
|
@@ -144,7 +138,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
imNetworkRoomMemberStatusService.lambdaUpdate().set(ImNetworkRoomMemberStatus::getPlayMidi,null)
|
|
|
.eq(ImNetworkRoomMemberStatus::getRoomId,roomId).update();
|
|
|
//获取所有学员的伴奏下载详情
|
|
|
- setMusicSheetList(roomMemberList,courseScheduleId);
|
|
|
+ setMusicSheetList(roomMemberList,Long.parseLong(roomId));
|
|
|
}else {
|
|
|
//获取节拍器信息
|
|
|
joinRoomResult.setMidiJson(imNetworkRoomMemberStatusService.getMemberMidi(roomId, sysUser.getUserId()));
|
|
@@ -156,8 +150,9 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
//获取老师基本信息
|
|
|
BasicUserInfo basicUserInfo = teacherDao.getBasicUserInfo(courseSchedule.getTeacherId());
|
|
|
//获取学员列表
|
|
|
- List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentService.getDao().queryByCourseId(courseScheduleId);
|
|
|
- List<Long> studentIds = studentPayments.stream().map(e -> e.getUserId()).collect(Collectors.toList());
|
|
|
+ List<CourseScheduleStudentPayment> studentPayments =
|
|
|
+ courseScheduleStudentPaymentService.lambdaQuery().eq(CourseScheduleStudentPayment::getCourseId,roomId).list();
|
|
|
+ List<Long> studentIds = studentPayments.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toList());
|
|
|
//创建并加入群组
|
|
|
imGroupService.joinImGroup(roomId, basicUserInfo,
|
|
|
courseSchedule.getServiceProvider(), studentIds);
|
|
@@ -167,13 +162,64 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
return BaseResponse.success(joinRoomResult);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public BaseResponse<ImNetworkRoomResult> roomInfo(ImNetworkBaseDto imNetworkBaseDto) {
|
|
|
+ // 当前登录用户ID
|
|
|
+ String roomId = imNetworkBaseDto.getRoomId();
|
|
|
+ Long userId = sysUserService.getUserId();
|
|
|
+ CourseSchedule courseSchedule = Optional.ofNullable(courseScheduleService.getById(imNetworkBaseDto.getRoomId())).
|
|
|
+ orElseThrow(()->new BizException("房间信息不存在"));
|
|
|
+
|
|
|
+ RoleEnum userRole = RoleEnum.RoleStudent;
|
|
|
+ if((imNetworkBaseDto.getClientType() != null && imNetworkBaseDto.getClientType() == ClientEnum.TEACHER)
|
|
|
+ || courseSchedule.getTeacherId().equals(userId)){
|
|
|
+ userRole = RoleEnum.RoleTeacher;
|
|
|
+ }
|
|
|
+ log.info("joinRoom params:roomId:{},userRole:{},userId:{}",roomId,userRole,userId);
|
|
|
+ BasicUserInfo sysUser = Optional.ofNullable(teacherDao.getBasicUserInfo(userId)).
|
|
|
+ orElseThrow(()-> new BizException("用户信息不存在"));
|
|
|
+
|
|
|
+ ImNetworkRoomResult joinRoomResult = new ImNetworkRoomResult();
|
|
|
+ //初始化房间信息
|
|
|
+ ImNetworkRoom room = roomService.getById(roomId);
|
|
|
+ if(Objects.isNull(room)){
|
|
|
+ return BaseResponse.failed(ErrorEnum.ROOM_NOT_START);
|
|
|
+ }
|
|
|
+ BeanUtils.copyProperties(room,joinRoomResult);
|
|
|
+ //定时销毁房间
|
|
|
+ //初始化房间用户信息
|
|
|
+ ImNetworkRoomMember roomMember = imNetworkRoomMemberService.lambdaQuery().eq(ImNetworkRoomMember::getRoomId,roomId)
|
|
|
+ .eq(ImNetworkRoomMember::getUserId,userId).last("LIMIT 1").one();
|
|
|
+ joinRoomResult.setRoomMember(roomMember);
|
|
|
+ //获取教室剩余时长
|
|
|
+ joinRoomResult.setSurplusTime(DateUtil.secondsBetween(new Date(), courseSchedule.getEndTime()));
|
|
|
+ //获取房间所有成员
|
|
|
+ List<ImNetworkRoomMember> roomMemberList = imNetworkRoomMemberService.queryByRoomId(roomId);
|
|
|
+
|
|
|
+ joinRoomResult.setRoomMemberList(roomMemberList);
|
|
|
+ //如果是老师,
|
|
|
+ if(userRole == RoleEnum.RoleTeacher){
|
|
|
+ //获取所有学员的伴奏下载详情
|
|
|
+ setMusicSheetList(roomMemberList,Long.parseLong(roomId));
|
|
|
+ }else {
|
|
|
+ //获取节拍器信息
|
|
|
+ joinRoomResult.setMidiJson(imNetworkRoomMemberStatusService.getMemberMidi(roomId, sysUser.getUserId()));
|
|
|
+ }
|
|
|
+ //课程结束后关闭教室的时间
|
|
|
+ joinRoomResult.setAutoCloseNetworkRoomTime(sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
|
|
|
+ //获取腾讯所需基本信息配置
|
|
|
+ joinRoomResult.setRtcRoomConfig(roomService.getRtcRoomConfig(courseSchedule.getServiceProvider(),sysUser));
|
|
|
+ joinRoomResult.setGroupId(roomId);
|
|
|
+ return BaseResponse.success(joinRoomResult);
|
|
|
+ }
|
|
|
+
|
|
|
private void setMusicSheetList(List<ImNetworkRoomMember> roomMemberList,Long courseScheduleId){
|
|
|
List<CourseScheduleStudentMusicSheetResult> musicSheetResults = courseScheduleStudentMusicSheetService.getDao().
|
|
|
queryBySheetIdAndCourseId(null,courseScheduleId,null,null,null);
|
|
|
if (!CollectionUtils.isEmpty(musicSheetResults)) {
|
|
|
//分组塞到学员列表中
|
|
|
Map<Long, List<CourseScheduleStudentMusicSheetResult>> musicSheetResultMap = musicSheetResults.stream().
|
|
|
- collect(Collectors.groupingBy(e -> e.getUserId()));
|
|
|
+ collect(Collectors.groupingBy(CourseScheduleStudentMusicSheet::getUserId));
|
|
|
roomMemberList.forEach(e -> {
|
|
|
if (musicSheetResultMap.containsKey(e.getUserId())) {
|
|
|
e.setMusicSheetResults(musicSheetResultMap.get(e.getUserId()));
|
|
@@ -216,20 +262,6 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
imService.sendDisplay(imUserId, room,courseSchedule.getServiceProvider());
|
|
|
}
|
|
|
|
|
|
- private RTCRoomMessage.MessageUser getSendUser(SysUser sysUser,RoleEnum role) {
|
|
|
- String imUserId = imGroupService.getImUserId(sysUser.getId(), role);
|
|
|
- RTCRoomMessage.MessageUser build = RTCRoomMessage.MessageUser.builder()
|
|
|
- .sendUserId(imUserId)
|
|
|
- .sendUserName(sysUser.getUsername())
|
|
|
- .avatarUrl(sysUser.getAvatar())
|
|
|
- .build();
|
|
|
- if (role == RoleEnum.RoleTeacher) {
|
|
|
- build.setSendUserName(sysUser.getRealName());
|
|
|
- }
|
|
|
- return build;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void joinRoomFailure(String roomId, ClientEnum clientType) {
|
|
@@ -259,8 +291,9 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
UserRoleEnum userRole = UserRoleEnum.convert(clientType);
|
|
|
log.info("quitRoomSuccess: roomId={}, userId={}", roomId, userId);
|
|
|
//防止幂等
|
|
|
- StringBuffer sb = new StringBuffer(QUIT_ROOM_SUCCESS).append(roomId).append(userId);
|
|
|
- if (!redisTemplate.opsForValue().setIfAbsent(sb.toString(),userId,1l, TimeUnit.SECONDS)){
|
|
|
+ String QUIT_ROOM_SUCCESS = "quitRoomSuccess:";
|
|
|
+ StringBuilder sb = new StringBuilder(QUIT_ROOM_SUCCESS).append(roomId).append(userId);
|
|
|
+ if (Boolean.FALSE.equals(redisTemplate.opsForValue().setIfAbsent(sb.toString(), userId, 1L, TimeUnit.SECONDS))){
|
|
|
log.info("quitRoomSuccess break: roomId={}, userId={}", roomId, userId);
|
|
|
return;
|
|
|
}
|
|
@@ -306,80 +339,52 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
imNetworkRoomMemberStatusService.lambdaUpdate()
|
|
|
.eq(ImNetworkRoomMemberStatus::getRoomId,customMessage.getRoomId())
|
|
|
.in(ImNetworkRoomMemberStatus::getUserId,collect)
|
|
|
- .set(ImNetworkRoomMemberStatus::getPlayMidi,customMessage.toString());
|
|
|
+ .set(ImNetworkRoomMemberStatus::getPlayMidi,customMessage.getContent());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void pushDownloadMusicSheetMsg(ImNetworkMusicSheetDto musicSheetDto) throws Exception {
|
|
|
- Long courseScheduleId = Optional.ofNullable(musicSheetDto).map(ImNetworkBaseDto::getRoomId).orElseThrow(() -> new BizException("房间编号不能为空"));
|
|
|
- Long accompanimentId = Optional.ofNullable(musicSheetDto).map(ImNetworkMusicSheetDto::getAccompanimentId).orElseThrow(() -> new BizException("伴奏编号不能为空"));
|
|
|
- log.info("pushDownloadMusicSheetMsg: courseScheduleId:{} ,accompanimentId:{} ,deviceType:{}", courseScheduleId,accompanimentId);
|
|
|
- SysUser user = sysUserService.getUser();
|
|
|
+ String roomId = Optional.ofNullable(musicSheetDto).map(ImNetworkBaseDto::getRoomId).orElseThrow(() -> new BizException("房间编号不能为空"));
|
|
|
+ Long accompanimentId = Optional.of(musicSheetDto).map(ImNetworkMusicSheetDto::getAccompanimentId).orElseThrow(() -> new BizException("伴奏编号不能为空"));
|
|
|
+ log.info("pushDownloadMusicSheetMsg: roomId:{} ,accompanimentId:{}", roomId,accompanimentId);
|
|
|
+ Long userId = sysUserService.getUserId();
|
|
|
List<CourseScheduleStudentMusicSheetResult> scheduleStudentMusicSheetResults = courseScheduleStudentMusicSheetService.getDao().
|
|
|
- queryBySheetIdAndCourseId(accompanimentId, courseScheduleId, null, null, 0);
|
|
|
+ queryBySheetIdAndCourseId(accompanimentId, Long.parseLong(roomId), null, null, 0);
|
|
|
|
|
|
MusicSheetAccompaniment accompaniment = musicSheetAccompanimentService.getById(accompanimentId);
|
|
|
- if (scheduleStudentMusicSheetResults.size() == 0) {
|
|
|
+ if (scheduleStudentMusicSheetResults.isEmpty()) {
|
|
|
//第一次下载,生成数据
|
|
|
- List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentService.getDao().queryByCourseId(courseScheduleId);
|
|
|
- Set<Long> studentIds = courseScheduleStudentPayments.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
|
|
|
+ List<CourseScheduleStudentPayment> studentPayments =
|
|
|
+ courseScheduleStudentPaymentService.lambdaQuery().eq(CourseScheduleStudentPayment::getCourseId,roomId).list();
|
|
|
+ Set<Long> studentIds = studentPayments.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toSet());
|
|
|
studentIds.forEach(e -> {
|
|
|
CourseScheduleStudentMusicSheetResult musicSheet = new CourseScheduleStudentMusicSheetResult();
|
|
|
musicSheet.setMusicSheetAccompanimentId(accompanimentId);
|
|
|
musicSheet.setSpeed(accompaniment.getSpeed());
|
|
|
- musicSheet.setCourseScheduleId(courseScheduleId);
|
|
|
+ musicSheet.setCourseScheduleId(Long.parseLong(roomId));
|
|
|
musicSheet.setUserId(e);
|
|
|
scheduleStudentMusicSheetResults.add(musicSheet);
|
|
|
});
|
|
|
CourseScheduleStudentMusicSheetResult musicSheet = new CourseScheduleStudentMusicSheetResult();
|
|
|
musicSheet.setMusicSheetAccompanimentId(accompanimentId);
|
|
|
musicSheet.setSpeed(accompaniment.getSpeed());
|
|
|
- musicSheet.setCourseScheduleId(courseScheduleId);
|
|
|
- musicSheet.setUserId(user.getId());
|
|
|
+ musicSheet.setCourseScheduleId(Long.parseLong(roomId));
|
|
|
+ musicSheet.setUserId(userId);
|
|
|
musicSheet.setUserType(1);
|
|
|
scheduleStudentMusicSheetResults.add(musicSheet);
|
|
|
courseScheduleStudentMusicSheetService.getDao().batchInsert(scheduleStudentMusicSheetResults);
|
|
|
}
|
|
|
+ //通知学员下载伴奏
|
|
|
// IM用户ID
|
|
|
- String imUserId = imGroupService.getImUserId(user.getId(),musicSheetDto.getClientType());
|
|
|
+ String imUserId = imGroupService.getImUserId(userId,musicSheetDto.getClientType());
|
|
|
ImNetworkMusicSheetDownloadMessageContent content = JSON.parseObject(JSON.toJSONString(accompaniment), ImNetworkMusicSheetDownloadMessageContent.class);
|
|
|
- // 发送消息
|
|
|
- CourseSchedule courseSchedule = courseScheduleService.getById(courseScheduleId);
|
|
|
- if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(courseSchedule.getServiceProvider())) {
|
|
|
-
|
|
|
- RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(courseSchedule.getServiceProvider());
|
|
|
- // 腾讯消息推送
|
|
|
- RTCRoomMessage.MessageContent messageContent = RTCRoomMessage.MessageContent
|
|
|
- .builder()
|
|
|
- .url(content.getUrl())
|
|
|
- .mp3Url(content.getMp3Url())
|
|
|
- .songId(String.valueOf(content.getId()))
|
|
|
- .speed(content.getSpeed())
|
|
|
- .sendUserInfo(RTCRoomMessage.MessageUser.builder()
|
|
|
- .sendUserId(imUserId)
|
|
|
- .sendUserName(user.getUsername())
|
|
|
- .avatarUrl(user.getAvatar())
|
|
|
- .build())
|
|
|
- .build();
|
|
|
-
|
|
|
- RTCRoomMessage roomMessage = RTCRoomMessage.builder()
|
|
|
- .objectName(RTCRoomMessage.MUSIC_SCORE_MESSAGE)
|
|
|
- .content(messageContent)
|
|
|
- .toChatRoomId(courseScheduleId.toString())
|
|
|
- .fromUserId(imUserId)
|
|
|
- .isIncludeSender(1)
|
|
|
- .isPersisted(1)
|
|
|
- .build();
|
|
|
-
|
|
|
- // 发送消息
|
|
|
- pluginService.sendChatRoomMessage(roomMessage);
|
|
|
-
|
|
|
- } else {
|
|
|
- ImNetworkMusicSheetDownloadMessage msg = new ImNetworkMusicSheetDownloadMessage(content);
|
|
|
- // 融云消息推送
|
|
|
- imHelper.publishMessage(imUserId, courseScheduleId.toString(), msg, 0);
|
|
|
- }
|
|
|
+ BasicUserInfo basicUserInfo = teacherDao.getBasicUserInfo(userId);
|
|
|
+ basicUserInfo.setImUserId(imUserId);
|
|
|
+ CourseSchedule courseSchedule = courseScheduleService.getById(roomId);
|
|
|
+ content.setServiceProvider(courseSchedule.getServiceProvider());
|
|
|
+ content.setRoomId(roomId);
|
|
|
+ imService.pushDownloadMusicSheetMsg(content,basicUserInfo);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -407,7 +412,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentService.getDao().queryByCourseId(Long.parseLong(deviceControl.getRoomId()));
|
|
|
|
|
|
for (CourseScheduleStudentPayment studentPayment : studentPayments) {
|
|
|
- deviceControl.setUserId(imGroupService.getImUserId(String.valueOf(studentPayment.getUserId()), ClientEnum.STUDENT.name()));
|
|
|
+ deviceControl.setImUserId(imGroupService.getImUserId(String.valueOf(studentPayment.getUserId()), ClientEnum.STUDENT.name()));
|
|
|
controlDevice(deviceControl);
|
|
|
}
|
|
|
|
|
@@ -415,7 +420,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
List<ImNetworkRoomMember> roomMembers = imNetworkRoomMemberService.getDao().findByRoomAndRole(deviceControl.getRoomId(), 0);
|
|
|
if (!CollectionUtils.isEmpty(roomMembers)) {
|
|
|
for (ImNetworkRoomMember roomMember : roomMembers) {
|
|
|
- deviceControl.setUserId(imGroupService.getImUserId(String.valueOf(roomMember.getUserId()), ClientEnum.STUDENT.name()));
|
|
|
+ deviceControl.setImUserId(imGroupService.getImUserId(String.valueOf(roomMember.getUserId()), ClientEnum.STUDENT.name()));
|
|
|
controlDevice(deviceControl);
|
|
|
}
|
|
|
}
|
|
@@ -430,261 +435,69 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
SysUser sysUser = sysUserService.getUser();
|
|
|
String roomId = deviceControl.getRoomId();
|
|
|
|
|
|
- String[] values = deviceControl.getUserId().split(":");
|
|
|
+ String[] values = deviceControl.getImUserId().split(":");
|
|
|
// 学生信息
|
|
|
Long userId = Long.parseLong(values[0]);
|
|
|
Boolean enable = deviceControl.getEnable();
|
|
|
log.info("controlDevice: roomId:{} ,deviceType:{} ,enable:{} ,userId:{}", roomId,deviceControl.getDeviceType(),enable,userId);
|
|
|
|
|
|
- UserRoleEnum userRole = UserRoleEnum.TEACHER;
|
|
|
- if (values.length > 1 && ClientEnum.STUDENT.match(values[1])) {
|
|
|
-
|
|
|
- userRole = UserRoleEnum.STUDENT;
|
|
|
- }
|
|
|
- // IM用户ID
|
|
|
- String imUserId = deviceControl.getUserId();
|
|
|
// RTC服务对象
|
|
|
CourseSchedule courseSchedule = courseScheduleService.getById(roomId);
|
|
|
- SysUser teacher = sysUserService.findUserById(courseSchedule.getTeacherId());
|
|
|
- if (Objects.nonNull(sysUser)) {
|
|
|
- deviceControl.setSendUserId(imGroupService.getImUserId(teacher.getId(),RoleEnum.RoleTeacher));
|
|
|
- deviceControl.setSendUserName(teacher.getRealName());
|
|
|
- deviceControl.setAvatar(teacher.getAvatar());
|
|
|
- }
|
|
|
- RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(courseSchedule.getServiceProvider());
|
|
|
- // 通知消息
|
|
|
- RTCRoomMessage.MessageContent notifyContent = RTCRoomMessage.MessageContent
|
|
|
- .builder()
|
|
|
- .type(deviceControl.getDeviceType().ordinal())
|
|
|
- .enable(enable)
|
|
|
- .targetId(imUserId)
|
|
|
- .targetName(sysUser.getUsername())
|
|
|
- .songId(Optional.ofNullable(deviceControl.getMusicSheetAccompanimentId()).map(String::valueOf).orElse(null))
|
|
|
- .songVolume(deviceControl.getSoundVolume())
|
|
|
- .sendUserInfo(RTCRoomMessage.MessageUser.builder()
|
|
|
- .sendUserId(deviceControl.getSendUserId())
|
|
|
- .sendUserName(deviceControl.getSendUserName())
|
|
|
- .avatarUrl(deviceControl.getAvatar())
|
|
|
- .build())
|
|
|
- .build();
|
|
|
-
|
|
|
- // 腾讯云消息推送
|
|
|
- RTCRoomMessage message = RTCRoomMessage.builder()
|
|
|
- .objectName(RTCRoomMessage.CONTROL_DEVICE_NOTIFY_MESSAGE)
|
|
|
- .fromUserId(imUserId)
|
|
|
- .toChatRoomId(roomId)
|
|
|
- .content(notifyContent)
|
|
|
- .isPersisted(1)
|
|
|
- .isIncludeSender(0)
|
|
|
- .build();
|
|
|
+ BasicUserInfo teacher = teacherDao.getBasicUserInfo(sysUser.getId());
|
|
|
+ teacher.setImUserId(imGroupService.getImUserId(teacher.getUserId(),RoleEnum.RoleTeacher));
|
|
|
+
|
|
|
+ deviceControl.setServiceProvider(courseSchedule.getServiceProvider());
|
|
|
|
|
|
if(enable){
|
|
|
long scheduleId = Long.parseLong(roomId);
|
|
|
- ImNetworkDeviceStateChangedMessage deviceResourceMessage = new ImNetworkDeviceStateChangedMessage(deviceControl.getDeviceType().ordinal(),enable);
|
|
|
- deviceResourceMessage.setUserId(imUserId);
|
|
|
switch (deviceControl.getDeviceType()) {
|
|
|
- case EXAM_SONG:
|
|
|
- ImNetworkRoomMusicSheetDownloadData msg = imNetworkRoomMemberStatusService.getMemberExamSong(roomId, userId);
|
|
|
- msg.setEnable(enable);
|
|
|
- courseScheduleStudentPaymentService.getDao().adjustExamSong(scheduleId,userId, JSON.toJSONString(msg));
|
|
|
-
|
|
|
- // 消息发送
|
|
|
- if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
|
|
|
- // 腾讯云推送
|
|
|
- pluginService.sendChatRoomMessage(message.objectName(RTCRoomMessage.CONTROL_DEVICE_NOTIFY_MESSAGE).content(notifyContent));
|
|
|
- } else {
|
|
|
- // 融云推送
|
|
|
- imHelper.publishMessage(imUserId, roomId, deviceResourceMessage, 1);
|
|
|
- }
|
|
|
- break;
|
|
|
case MUSIC_SHEET:
|
|
|
- Integer musicSheetId = Optional.ofNullable(deviceControl.getMusicSheetAccompanimentId()).
|
|
|
+ Integer musicSheetId = Optional.ofNullable(deviceControl.getAccompanimentId()).
|
|
|
orElseThrow(()-> new BizException("请选择曲目"));
|
|
|
//关闭所有曲目播放
|
|
|
courseScheduleStudentMusicSheetService.getDao().closePlayStatus(scheduleId,userId);
|
|
|
//打开原音
|
|
|
courseScheduleStudentMusicSheetService.getDao().openPlayStatus(scheduleId,musicSheetId,userId);
|
|
|
- deviceResourceMessage.setMusicSheetAccompanimentId(musicSheetId);
|
|
|
- deviceResourceMessage.setUserId(imUserId);
|
|
|
- deviceResourceMessage.setSoundVolume(deviceControl.getSoundVolume());
|
|
|
- if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
|
|
|
- // 腾讯云推送
|
|
|
- pluginService.sendChatRoomMessage(message.objectName(RTCRoomMessage.CONTROL_DEVICE_NOTIFY_MESSAGE).content(notifyContent));
|
|
|
- } else {
|
|
|
- // 融云推送
|
|
|
- imHelper.publishMessage(deviceControl.getSendUserId(), roomId, deviceResourceMessage, 1);
|
|
|
- }
|
|
|
break;
|
|
|
case ACCOMPANIMENT:
|
|
|
- Integer musicSheetAccompanimentId = Optional.ofNullable(deviceControl.getMusicSheetAccompanimentId()).
|
|
|
+ Integer musicSheetAccompanimentId = Optional.ofNullable(deviceControl.getAccompanimentId()).
|
|
|
orElseThrow(()-> new BizException("请选择曲目"));
|
|
|
//关闭所有曲目播放
|
|
|
courseScheduleStudentMusicSheetService.getDao().closePlayStatus(scheduleId,userId);
|
|
|
//打开伴奏
|
|
|
courseScheduleStudentMusicSheetService.getDao().openAccompanimentPlayStatus(scheduleId,musicSheetAccompanimentId,userId);
|
|
|
- deviceResourceMessage.setMusicSheetAccompanimentId(musicSheetAccompanimentId);
|
|
|
- deviceResourceMessage.setUserId(imUserId);
|
|
|
- deviceResourceMessage.setSoundVolume(deviceControl.getSoundVolume());
|
|
|
- if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
|
|
|
- // 腾讯云推送
|
|
|
- pluginService.sendChatRoomMessage(message.objectName(RTCRoomMessage.CONTROL_DEVICE_NOTIFY_MESSAGE).content(notifyContent));
|
|
|
- } else {
|
|
|
- // 融云推送
|
|
|
- imHelper.publishMessage(deviceControl.getSendUserId(), roomId, deviceResourceMessage, 1);
|
|
|
- }
|
|
|
- break;
|
|
|
- default:
|
|
|
- // 发送消息
|
|
|
- if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
|
|
|
- // 腾讯消息
|
|
|
- pluginService.sendChatRoomMessage(message.objectName(RTCRoomMessage.CONTROL_DEVICE_NOTIFY_MESSAGE).content(notifyContent));
|
|
|
- } else {
|
|
|
- // 融云消息
|
|
|
- //邀请打开指定设备权限
|
|
|
- ImNetworkControlDeviceNotifyMessage message1 = new ImNetworkControlDeviceNotifyMessage(ImNetworkActionEnum.INVITE.ordinal());
|
|
|
- message1.setType(deviceControl.getDeviceType().ordinal());
|
|
|
- message1.setOpUserId(deviceControl.getSendUserId());
|
|
|
- message1.setOpUserName(sysUser.getUsername());
|
|
|
- imHelper.publishMessage(deviceControl.getSendUserId(), imUserId, roomId, message1);
|
|
|
- }
|
|
|
break;
|
|
|
}
|
|
|
}else {
|
|
|
- ImNetworkRoomMember roomMember = Optional.ofNullable(imNetworkRoomMemberService.getDao().findByRidAndUid(roomId, userId, userRole.ordinal()))
|
|
|
- .orElseThrow(()-> new BizException("用户不在房间内"));
|
|
|
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 = imNetworkRoomMemberStatusService.getMemberExamSong(roomId, 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);
|
|
|
- }
|
|
|
- if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
|
|
|
- // 腾讯消息
|
|
|
- pluginService.sendChatRoomMessage(message.objectName(RTCRoomMessage.CONTROL_DEVICE_NOTIFY_MESSAGE).content(notifyContent));
|
|
|
- } else {
|
|
|
- // 融云消息
|
|
|
- ImNetworkDeviceStateChangedMessage deviceResourceMessage = new ImNetworkDeviceStateChangedMessage(deviceControl.getDeviceType().ordinal(),deviceControl.getEnable());
|
|
|
- deviceResourceMessage.setUserId(imUserId);
|
|
|
- BasicUserInfo basicUserInfo = teacherDao.getBasicUserInfo(userId);
|
|
|
- if (Objects.nonNull(basicUserInfo)) {
|
|
|
- deviceResourceMessage.setUserName(basicUserInfo.getUsername());
|
|
|
- }
|
|
|
- imHelper.publishMessage(deviceControl.getSendUserId(), roomId, deviceResourceMessage, 1);
|
|
|
- }
|
|
|
}
|
|
|
+ imService.pushDeviceResourceMessage(deviceControl,teacher);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void approveControlDevice(ImNetworkDeviceControlDto deviceControl) throws Exception {
|
|
|
log.info("approveControlDevice: roomId:{} ,deviceType:{} ,enable:{}", deviceControl.getRoomId(),deviceControl.getDeviceType(),deviceControl.getEnable());
|
|
|
- SysUser sysUser = sysUserService.getUser();
|
|
|
-
|
|
|
UserRoleEnum userRole = UserRoleEnum.TEACHER;
|
|
|
if (ClientEnum.STUDENT == deviceControl.getClientType()) {
|
|
|
userRole = UserRoleEnum.STUDENT;
|
|
|
}
|
|
|
- String imUserId = imGroupService.getImUserId(sysUser.getId(),deviceControl.getClientType());
|
|
|
-
|
|
|
- ImNetworkRoomMember roomMember = Optional.ofNullable(imNetworkRoomMemberService.getDao().findByRidAndUid(deviceControl.getRoomId(), sysUser.getId(),
|
|
|
+ ImNetworkRoomMember roomMember = Optional.ofNullable(imNetworkRoomMemberService.getDao().findByRidAndUid(deviceControl.getRoomId(),sysUserService.getUserId(),
|
|
|
userRole.ordinal())).
|
|
|
orElseThrow(()-> new BizException("用户不在房间内"));
|
|
|
- switch (deviceControl.getDeviceType()) {
|
|
|
- case CAMERA:
|
|
|
- roomMember.setCameraFlag(deviceControl.getEnable());
|
|
|
- break;
|
|
|
- case EXAM_SONG:
|
|
|
- long scheduleId = Long.parseLong(deviceControl.getRoomId());
|
|
|
- ImNetworkRoomMusicSheetDownloadData msg = imNetworkRoomMemberStatusService.getMemberExamSong(roomMember.getRoomId(), 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);
|
|
|
- }
|
|
|
-
|
|
|
CourseSchedule courseSchedule = courseScheduleService.getById(deviceControl.getRoomId());
|
|
|
- if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(courseSchedule.getServiceProvider())) {
|
|
|
-
|
|
|
- // 获取RTC服务提供方
|
|
|
- RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(TencentCloudRTCPlugin.PLUGIN_NAME);
|
|
|
- // 腾讯云RTC服务
|
|
|
- RTCRoomMessage.MessageContent.MessageContentBuilder action = RTCRoomMessage.MessageContent.builder()
|
|
|
- .type(ImNetworkActionEnum.APPROVE.ordinal())
|
|
|
- .enable(deviceControl.getEnable())
|
|
|
- .targetId(imUserId)
|
|
|
- .targetName(sysUser.getUsername())
|
|
|
- .sendUserInfo(getSendUser(sysUserService.findUserById(courseSchedule.getTeacherId()), RoleEnum.RoleTeacher));
|
|
|
-
|
|
|
-
|
|
|
- RTCRoomMessage roomMessage = RTCRoomMessage.builder()
|
|
|
- .objectName(RTCRoomMessage.CONTROL_DEVICE_NOTIFY_MESSAGE)
|
|
|
- .content(action.build())
|
|
|
- .toChatRoomId(roomMember.getRoomId())
|
|
|
- .fromUserId(imUserId)
|
|
|
- .isIncludeSender(1)
|
|
|
- .isPersisted(1)
|
|
|
- .build();
|
|
|
-
|
|
|
- pluginService.sendChatRoomMessage(roomMessage);
|
|
|
-
|
|
|
- // 腾讯云RTC服务
|
|
|
- action = RTCRoomMessage.MessageContent.builder()
|
|
|
- .type(ImNetworkActionEnum.APPROVE.ordinal())
|
|
|
- .enable(deviceControl.getEnable())
|
|
|
- .sendUserInfo(getSendUser(sysUser,RoleEnum.getEnumByValue(roomMember.getRole())));
|
|
|
-
|
|
|
- // 腾讯云消息推送
|
|
|
- RTCRoomMessage message = RTCRoomMessage.builder()
|
|
|
- .objectName(RTCRoomMessage.DEVICE_MESSAGE)
|
|
|
- .fromUserId(imUserId)
|
|
|
- .toChatRoomId(roomMember.getRoomId())
|
|
|
- .content(action.build())
|
|
|
- .isPersisted(1)
|
|
|
- .isIncludeSender(0)
|
|
|
- .build();
|
|
|
-
|
|
|
- pluginService.sendChatRoomMessage(message);
|
|
|
- }else {
|
|
|
- ImNetworkControlDeviceNotifyMessage msg = new ImNetworkControlDeviceNotifyMessage(ImNetworkActionEnum.APPROVE.ordinal());
|
|
|
- msg.setType(deviceControl.getDeviceType().ordinal());
|
|
|
- msg.setOpUserId(sysUser.getId().toString());
|
|
|
- msg.setOpUserName(sysUser.getUsername());
|
|
|
- //获取老师编号
|
|
|
- String imUserId1 = imGroupService.getImUserId(courseSchedule.getTeacherId(), RoleEnum.RoleTeacher);
|
|
|
- imHelper.publishMessage(imUserId, imUserId1, deviceControl.getRoomId(), msg);
|
|
|
- //发送设备状态变更消息
|
|
|
- this.sendDeviceStateChangedMessage(deviceControl, imUserId);
|
|
|
- }
|
|
|
+ deviceControl.setServiceProvider(courseSchedule.getServiceProvider());
|
|
|
+
|
|
|
+ imService.pushApproveControlDevice(deviceControl,roomMember,
|
|
|
+ teacherDao.getBasicUserInfo(roomMember.getUserId()),
|
|
|
+ teacherDao.getBasicUserInfo(courseSchedule.getTeacherId()));
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -698,88 +511,25 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
if (ClientEnum.STUDENT == deviceStatusSync.getClientType()) {
|
|
|
userRole = UserRoleEnum.STUDENT;
|
|
|
}
|
|
|
- String imUserId = imGroupService.getImUserId(userId,deviceStatusSync.getClientType());
|
|
|
|
|
|
- ImNetworkDeviceTypeEnum deviceType = deviceStatusSync.getDeviceType();
|
|
|
+ CourseSchedule courseSchedule = courseScheduleService.getById(deviceStatusSync.getRoomId());
|
|
|
+ deviceStatusSync.setServiceProvider(courseSchedule.getServiceProvider());
|
|
|
ImNetworkRoomMember roomMember = Optional.ofNullable(imNetworkRoomMemberService.getDao().
|
|
|
findByRidAndUid(deviceStatusSync.getRoomId(), userId, userRole.ordinal()))
|
|
|
.orElseThrow(()-> new BizException("用户不在房间内"));
|
|
|
- switch (deviceType) {
|
|
|
- case CAMERA:
|
|
|
- roomMember.setCameraFlag(deviceStatusSync.getEnable());
|
|
|
- break;
|
|
|
- case MICROPHONE:
|
|
|
- roomMember.setMicFlag(deviceStatusSync.getEnable());
|
|
|
- break;
|
|
|
- case HAND_UP:
|
|
|
- roomMember.setHandFlag(deviceStatusSync.getEnable());
|
|
|
- break;
|
|
|
- case MUSIC_MODE:
|
|
|
- roomMember.setMusicModeFlag(deviceStatusSync.getEnable());
|
|
|
- break;
|
|
|
- case EXAM_SONG:
|
|
|
- long scheduleId = Long.parseLong(deviceStatusSync.getRoomId());
|
|
|
- ImNetworkRoomMusicSheetDownloadData msg = imNetworkRoomMemberStatusService.getMemberExamSong(deviceStatusSync.getRoomId(), userId);
|
|
|
- msg.setEnable(deviceStatusSync.getEnable());
|
|
|
- courseScheduleStudentPaymentService.getDao().adjustExamSong(scheduleId, userId, JSON.toJSONString(msg));
|
|
|
- break;
|
|
|
- }
|
|
|
- if(deviceType == ImNetworkDeviceTypeEnum.CAMERA ||
|
|
|
- deviceType == ImNetworkDeviceTypeEnum.MICROPHONE ||
|
|
|
- deviceType == ImNetworkDeviceTypeEnum.HAND_UP ||
|
|
|
- deviceType == ImNetworkDeviceTypeEnum.MUSIC_MODE){
|
|
|
- imNetworkRoomMemberService.getDao().updateById(roomMember);
|
|
|
- }
|
|
|
- CourseSchedule courseSchedule = courseScheduleService.getById(deviceStatusSync.getRoomId());
|
|
|
- //发送设备状态同步消息
|
|
|
- if (TencentCloudRTCPlugin.PLUGIN_NAME.matches(courseSchedule.getServiceProvider())) {
|
|
|
- // RTC服务对象
|
|
|
- RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(courseSchedule.getServiceProvider());
|
|
|
- // 消息内容
|
|
|
- RTCRoomMessage.MessageContent messageContent = RTCRoomMessage.MessageContent
|
|
|
- .builder()
|
|
|
- .type(deviceType.ordinal())
|
|
|
- .enable(deviceStatusSync.getEnable())
|
|
|
- .sendUserInfo(getSendUser(user, RoleEnum.RoleTeacher))
|
|
|
- .build();
|
|
|
- // 腾讯云消息推送
|
|
|
- RTCRoomMessage message = RTCRoomMessage.builder()
|
|
|
- .objectName(RTCRoomMessage.DEVICE_MESSAGE)
|
|
|
- .fromUserId(imUserId)
|
|
|
- .toChatRoomId(deviceStatusSync.getRoomId())
|
|
|
- .content(messageContent)
|
|
|
- .isPersisted(1)
|
|
|
- .isIncludeSender(0)
|
|
|
- .build();
|
|
|
- // 发送消息
|
|
|
- pluginService.sendChatRoomMessage(message);
|
|
|
- } else {
|
|
|
- // 融云消息推送
|
|
|
- this.sendDeviceStateChangedMessage(deviceStatusSync, imUserId);
|
|
|
- }
|
|
|
+ imService.sendDeviceStatusSync(deviceStatusSync,roomMember);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<BasicUserInfo> queryNoJoinStu(Long roomId) {
|
|
|
-
|
|
|
+ public List<BasicUserInfo> queryNoJoinStu(String roomId) {
|
|
|
List<BasicUserInfo> userInfos = courseScheduleStudentPaymentService.getDao().queryNoJoinStu(roomId);
|
|
|
|
|
|
for (BasicUserInfo item : userInfos) {
|
|
|
item.setImUserId(imGroupService.getImUserId(String.valueOf(item.getUserId()),ClientEnum.STUDENT.name()));
|
|
|
}
|
|
|
-
|
|
|
return userInfos;
|
|
|
}
|
|
|
|
|
|
- //发送设备状态同步消息
|
|
|
- private void sendDeviceStateChangedMessage(ImNetworkDeviceControlDto deviceStatusSync,String imUserId) throws Exception {
|
|
|
- ImNetworkRoom room = baseMapper.findByRoomId(deviceStatusSync.getRoomId());
|
|
|
- ImNetworkDeviceStateChangedMessage deviceResourceMessage = new ImNetworkDeviceStateChangedMessage(deviceStatusSync.getDeviceType().ordinal(),deviceStatusSync.getEnable());
|
|
|
- deviceResourceMessage.setUserId(imUserId);
|
|
|
- deviceResourceMessage.setSoundVolume(room.getSoundVolume());
|
|
|
- imHelper.publishMessage(imUserId, deviceStatusSync.getRoomId(), deviceResourceMessage, 1);
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void rejectControlDevice(ImNetworkDeviceControlDto deviceControl) throws Exception {
|
|
@@ -787,50 +537,25 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
SysUser sysUser = sysUserService.getUser();
|
|
|
|
|
|
CourseSchedule courseSchedule = courseScheduleService.getById(deviceControl.getRoomId());
|
|
|
- String imUserId = imGroupService.getImUserId(sysUser.getId(), RoleEnum.RoleStudent);
|
|
|
- if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(courseSchedule.getServiceProvider())) {
|
|
|
-
|
|
|
- // 获取RTC服务提供方
|
|
|
- RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(TencentCloudRTCPlugin.PLUGIN_NAME);
|
|
|
-
|
|
|
- RTCRoomMessage.MessageContent.MessageContentBuilder action = RTCRoomMessage.MessageContent.builder()
|
|
|
- .type(ImNetworkActionEnum.REJECT.ordinal())
|
|
|
- .enable(deviceControl.getEnable())
|
|
|
- .targetId(imUserId)
|
|
|
- .targetName(sysUser.getUsername())
|
|
|
- .sendUserInfo(getSendUser(sysUserService.findUserById(courseSchedule.getTeacherId()), RoleEnum.RoleTeacher));
|
|
|
-
|
|
|
-
|
|
|
- RTCRoomMessage roomMessage = RTCRoomMessage.builder()
|
|
|
- .objectName(RTCRoomMessage.CONTROL_DEVICE_NOTIFY_MESSAGE)
|
|
|
- .content(action.build())
|
|
|
- .toChatRoomId(deviceControl.getRoomId())
|
|
|
- .fromUserId(imUserId)
|
|
|
- .isIncludeSender(1)
|
|
|
- .isPersisted(1)
|
|
|
- .build();
|
|
|
-
|
|
|
- pluginService.sendChatRoomMessage(roomMessage);
|
|
|
- } else {
|
|
|
- ImNetworkControlDeviceNotifyMessage msg = new ImNetworkControlDeviceNotifyMessage(ImNetworkActionEnum.REJECT.ordinal());
|
|
|
- msg.setType(deviceControl.getDeviceType().ordinal());
|
|
|
- msg.setOpUserId(imUserId);
|
|
|
- msg.setOpUserName(sysUser.getUsername());
|
|
|
- //获取老师编号
|
|
|
- String imUserId1 = imGroupService.getImUserId(courseSchedule.getTeacherId(), RoleEnum.RoleTeacher);
|
|
|
- imHelper.publishMessage(imUserId,imUserId1, deviceControl.getRoomId(), msg);
|
|
|
- }
|
|
|
+ deviceControl.setServiceProvider(courseSchedule.getServiceProvider());
|
|
|
+ ImNetworkRoomMember roomMember = imNetworkRoomMemberService.lambdaQuery()
|
|
|
+ .eq(ImNetworkRoomMember::getUserId, sysUser.getId())
|
|
|
+ .eq(ImNetworkRoomMember::getRoomId, deviceControl.getRoomId())
|
|
|
+ .last("LIMIT 1").one();
|
|
|
+ imService.sendRejectControlDevice(deviceControl,roomMember,
|
|
|
+ teacherDao.getBasicUserInfo(courseSchedule.getTeacherId()));
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void musicSheetDownNotify(ImNetworkMusicSheetDto musicSheetDto) throws Exception {
|
|
|
- Long roomId = Optional.ofNullable(musicSheetDto).map(ImNetworkBaseDto::getRoomId).orElseThrow(() -> new BizException("房间编号不能为空"));
|
|
|
- Long accompanimentId = Optional.ofNullable(musicSheetDto).map(ImNetworkMusicSheetDto::getAccompanimentId).orElseThrow(() -> new BizException("伴奏编号不能为空"));
|
|
|
- Integer status = Optional.ofNullable(musicSheetDto).map(ImNetworkMusicSheetDto::getStatus).orElseThrow(() -> new BizException("伴奏下载状态不能为空"));
|
|
|
+ String roomId = Optional.ofNullable(musicSheetDto).map(ImNetworkBaseDto::getRoomId).orElseThrow(() -> new BizException("房间编号不能为空"));
|
|
|
+ Long accompanimentId = Optional.of(musicSheetDto).map(ImNetworkMusicSheetDto::getAccompanimentId).orElseThrow(() -> new BizException("伴奏编号不能为空"));
|
|
|
+ Integer status = Optional.of(musicSheetDto).map(ImNetworkMusicSheetDto::getStatus).orElseThrow(() -> new BizException("伴奏下载状态不能为空"));
|
|
|
log.info("musicSheetDownNotify: roomId:{} ,accompanimentId:{} ,status:{}", roomId,accompanimentId,status);
|
|
|
Long userId = sysUserService.getUserId();
|
|
|
- List<CourseScheduleStudentMusicSheetResult> studentMusicSheetResults = courseScheduleStudentMusicSheetService.getDao().queryBySheetIdAndCourseId(accompanimentId, roomId,userId, null, null);
|
|
|
+ List<CourseScheduleStudentMusicSheetResult> studentMusicSheetResults = courseScheduleStudentMusicSheetService.getDao().
|
|
|
+ queryBySheetIdAndCourseId(accompanimentId, Long.parseLong(roomId),userId, null, null);
|
|
|
if(CollectionUtils.isEmpty(studentMusicSheetResults)){
|
|
|
return;
|
|
|
}
|
|
@@ -847,7 +572,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
// IM用户ID
|
|
|
String imUserId = imGroupService.getImUserId(userId,musicSheetDto.getClientType());
|
|
|
|
|
|
- imHelper.publishMessage(imUserId, courseSchedule.getTeacherId().toString(), roomId.toString(), statusMessage);
|
|
|
+ imHelper.publishMessage(imUserId, courseSchedule.getTeacherId().toString(), roomId, statusMessage);
|
|
|
}
|
|
|
|
|
|
//校验用户是否提前进入教室
|
|
@@ -860,22 +585,4 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
Date addMinutes = DateUtil.addMinutes(courseSchedule.getStartTime(), Integer.parseInt(courseBeforeBufferTime));
|
|
|
return courseSchedule.getStartTime().compareTo(addMinutes) > 0;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- //修改节拍器
|
|
|
- public void updateDisplay(String imUserId,ImNetworkRoom room,String serviceProvider) throws Exception {
|
|
|
- roomService.updateById(room);
|
|
|
- //节拍器修改消息发送
|
|
|
- imService.sendDisplay(imUserId,room,serviceProvider);
|
|
|
- }
|
|
|
-
|
|
|
- public boolean isUserDisplay(String display, Long userId) {
|
|
|
- boolean result = false;
|
|
|
- if (!display.isEmpty() && display.contains("userId=" + userId)) {
|
|
|
- if (display.contains("type=0") || display.contains("type=2")) {
|
|
|
- result = true;
|
|
|
- }
|
|
|
- }
|
|
|
- return result;
|
|
|
- }
|
|
|
}
|