|
@@ -1023,6 +1023,26 @@ public class RoomServiceImpl implements RoomService {
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean controlDevice(ReqDeviceControlData data) throws Exception {
|
|
|
+
|
|
|
+ // RTC服务方信息
|
|
|
+ if (StringUtils.isBlank(data.getServiceProvider())) {
|
|
|
+
|
|
|
+ // 课程信息
|
|
|
+ CourseSchedule courseSchedule = courseScheduleDao.get(Long.parseLong(data.getRoomId().substring(1)));
|
|
|
+ if (Objects.isNull(courseSchedule)) {
|
|
|
+ throw new BizException("无效的课程编号");
|
|
|
+ }
|
|
|
+ data.setServiceProvider(courseSchedule.getServiceProvider());
|
|
|
+
|
|
|
+ // 课程老师信息
|
|
|
+ SysUser sysUser = sysUserFeignService.queryUserById(courseSchedule.getTeacherId());
|
|
|
+ if (Objects.nonNull(sysUser)) {
|
|
|
+ data.setSendUserId(sysUser.getId().toString());
|
|
|
+ data.setSendUserName(sysUser.getRealName());
|
|
|
+ data.setAvatar(sysUser.getAvatar());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
String roomId = data.getRoomId();
|
|
|
String userId = data.getUserId();
|
|
|
DeviceTypeEnum typeEnum;
|
|
@@ -1062,6 +1082,45 @@ public class RoomServiceImpl implements RoomService {
|
|
|
SysUser authUser = sysUserFeignService.queryUserInfo();
|
|
|
log.info("controlDevice: userId = {}, typeEnum = {}, enable = {} ,roomId = {}", userId, typeEnum, enable, roomId);
|
|
|
|
|
|
+ // RTC服务对象
|
|
|
+ RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(data.getServiceProvider());
|
|
|
+
|
|
|
+ // 通知消息
|
|
|
+ RTCRoomMessage.MessageContent notifyContent = RTCRoomMessage.MessageContent
|
|
|
+ .builder()
|
|
|
+ .type(typeEnum.ordinal())
|
|
|
+ .enable(enable)
|
|
|
+ .targetId(userId)
|
|
|
+ .targetName(authUser.getUsername())
|
|
|
+ .sendUserInfo(RTCRoomMessage.MessageUser.builder()
|
|
|
+ .sendUserId(data.getSendUserId())
|
|
|
+ .sendUserName(data.getSendUserName())
|
|
|
+ .avatarUrl(data.getAvatar())
|
|
|
+ .build())
|
|
|
+ .build();
|
|
|
+
|
|
|
+ // 消息内容
|
|
|
+ RTCRoomMessage.MessageContent messageContent = RTCRoomMessage.MessageContent
|
|
|
+ .builder()
|
|
|
+ .type(typeEnum.ordinal())
|
|
|
+ .enable(enable)
|
|
|
+ .sendUserInfo(RTCRoomMessage.MessageUser.builder()
|
|
|
+ .sendUserId(userId)
|
|
|
+ .sendUserName(authUser.getUsername())
|
|
|
+ .avatarUrl(authUser.getAvatar())
|
|
|
+ .build())
|
|
|
+ .build();
|
|
|
+
|
|
|
+ // 腾讯云消息推送
|
|
|
+ RTCRoomMessage message = RTCRoomMessage.builder()
|
|
|
+ .objectName(RTCRoomMessage.DEVICE_MESSAGE)
|
|
|
+ .fromUserId(userId)
|
|
|
+ .toChatRoomId(roomId)
|
|
|
+ .content(messageContent)
|
|
|
+ .isPersisted(1)
|
|
|
+ .isIncludeSender(0)
|
|
|
+ .build();
|
|
|
+
|
|
|
if (enable) {
|
|
|
if (typeEnum.equals(DeviceTypeEnum.ExamSong)) {
|
|
|
long scheduleId = Long.parseLong(roomId.substring(1));
|
|
@@ -1076,7 +1135,15 @@ public class RoomServiceImpl implements RoomService {
|
|
|
courseScheduleStudentPaymentDao.adjustExamSong(scheduleId, Integer.parseInt(userId), JSON.toJSONString(msg));
|
|
|
DeviceStateChangedMessage deviceResourceMessage = new DeviceStateChangedMessage(typeEnum.ordinal(), enable);
|
|
|
deviceResourceMessage.setUserId(userId);
|
|
|
- imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
|
|
|
+
|
|
|
+ // 消息发送
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
|
|
|
+ // 腾讯云推送
|
|
|
+ pluginService.sendChatRoomMessage(message.objectName(RTCRoomMessage.DEVICE_MESSAGE).content(messageContent));
|
|
|
+ } else {
|
|
|
+ // 融云推送
|
|
|
+ imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
|
|
|
+ }
|
|
|
} else if (typeEnum.equals(DeviceTypeEnum.MusicScore)) {
|
|
|
long scheduleId = Long.parseLong(roomId.substring(1));
|
|
|
//关闭所有曲目播放
|
|
@@ -1113,7 +1180,15 @@ public class RoomServiceImpl implements RoomService {
|
|
|
msg.setType(taskInfo.getTypeEnum().ordinal());
|
|
|
msg.setOpUserId(authUser.getId().toString());
|
|
|
msg.setOpUserName(authUser.getUsername());
|
|
|
- imHelper.publishMessage(authUser.getId().toString(), userId, roomId, msg);
|
|
|
+
|
|
|
+ // 发送消息
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
|
|
|
+ // 腾讯消息
|
|
|
+ pluginService.sendChatRoomMessage(message.objectName(RTCRoomMessage.CONTROL_DEVICE_NOTIFY_MESSAGE).content(notifyContent));
|
|
|
+ } else {
|
|
|
+ // 融云消息
|
|
|
+ imHelper.publishMessage(authUser.getId().toString(), userId, roomId, msg);
|
|
|
+ }
|
|
|
}
|
|
|
} else {
|
|
|
if (typeEnum.equals(DeviceTypeEnum.Camera)) {
|
|
@@ -1150,7 +1225,15 @@ public class RoomServiceImpl implements RoomService {
|
|
|
if (userInfo != null) {
|
|
|
deviceResourceMessage.setUserName(userInfo.getName());
|
|
|
}
|
|
|
- imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
|
|
|
+
|
|
|
+ // 发送消息
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
|
|
|
+ // 腾讯消息
|
|
|
+ pluginService.sendChatRoomMessage(message.objectName(RTCRoomMessage.DEVICE_MESSAGE).content(messageContent));
|
|
|
+ } else {
|
|
|
+ // 融云消息
|
|
|
+ imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
|
|
|
+ }
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
@@ -1158,8 +1241,25 @@ public class RoomServiceImpl implements RoomService {
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean batchControlDevice(ReqDeviceControlData data) throws Exception {
|
|
|
+
|
|
|
+ // 课程ID
|
|
|
+ long courseScheduleId = Long.parseLong(data.getRoomId().substring(1));
|
|
|
+ CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId);
|
|
|
+ if (Objects.isNull(courseSchedule)) {
|
|
|
+ throw new BizException("无效的课程编号");
|
|
|
+ }
|
|
|
+ data.setServiceProvider(courseSchedule.getServiceProvider());
|
|
|
+
|
|
|
+ // 课程老师信息
|
|
|
+ SysUser sysUser = sysUserFeignService.queryUserById(courseSchedule.getTeacherId());
|
|
|
+ if (Objects.nonNull(sysUser)) {
|
|
|
+ data.setSendUserId(sysUser.getId().toString());
|
|
|
+ data.setSendUserName(sysUser.getRealName());
|
|
|
+ data.setAvatar(sysUser.getAvatar());
|
|
|
+ }
|
|
|
+
|
|
|
if (data.getExamSongOn() != null || data.getMusicScoreOn() != null || data.getAccompanimentOn() != null) {
|
|
|
- List<BasicUserDto> students = courseScheduleStudentPaymentDao.findStudents(Long.parseLong(data.getRoomId().substring(1)));
|
|
|
+ List<BasicUserDto> students = courseScheduleStudentPaymentDao.findStudents(courseScheduleId);
|
|
|
for (BasicUserDto e : students) {
|
|
|
data.setUserId(e.getUserId().toString());
|
|
|
controlDevice(data);
|
|
@@ -1295,7 +1395,46 @@ public class RoomServiceImpl implements RoomService {
|
|
|
deviceResourceMessage.setSoundVolume(room.getSoundVolume());
|
|
|
}
|
|
|
deviceResourceMessage.setUserId(userId);
|
|
|
- imHelper.publishMessage(userId, roomId, deviceResourceMessage, 1);
|
|
|
+
|
|
|
+ // 查询课程信息
|
|
|
+ CourseSchedule courseSchedule = courseScheduleDao.get(Long.parseLong(roomId.substring(1)));
|
|
|
+ if (Objects.isNull(courseSchedule)) {
|
|
|
+ throw new BizException("无效的课程ID");
|
|
|
+ }
|
|
|
+ data.setServiceProvider(courseSchedule.getServiceProvider());
|
|
|
+
|
|
|
+ // RTC服务对象
|
|
|
+ RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(data.getServiceProvider());
|
|
|
+ // 消息内容
|
|
|
+ RTCRoomMessage.MessageContent messageContent = RTCRoomMessage.MessageContent
|
|
|
+ .builder()
|
|
|
+ .type(deviceResourceMessage.getType())
|
|
|
+ .enable(deviceResourceMessage.isEnable())
|
|
|
+ .sendUserInfo(RTCRoomMessage.MessageUser.builder()
|
|
|
+ .sendUserId(authUser.getId().toString())
|
|
|
+ .sendUserName(authUser.getRealName())
|
|
|
+ .avatarUrl(authUser.getAvatar())
|
|
|
+ .build())
|
|
|
+ .build();
|
|
|
+
|
|
|
+ // 腾讯云消息推送
|
|
|
+ RTCRoomMessage message = RTCRoomMessage.builder()
|
|
|
+ .objectName(RTCRoomMessage.DEVICE_MESSAGE)
|
|
|
+ .fromUserId(userId)
|
|
|
+ .toChatRoomId(roomId)
|
|
|
+ .content(messageContent)
|
|
|
+ .isPersisted(1)
|
|
|
+ .isIncludeSender(0)
|
|
|
+ .build();
|
|
|
+
|
|
|
+ if (TencentCloudRTCPlugin.PLUGIN_NAME.matches(data.getServiceProvider())) {
|
|
|
+ // 发送消息
|
|
|
+ pluginService.sendChatRoomMessage(message);
|
|
|
+ } else {
|
|
|
+ // 融云消息推送
|
|
|
+ imHelper.publishMessage(userId, roomId, deviceResourceMessage, 1);
|
|
|
+ }
|
|
|
+
|
|
|
log.info("syncDeviceState : {}, {}", roomId, enable);
|
|
|
return true;
|
|
|
}
|