|
@@ -75,12 +75,16 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public HttpResponseResult<ImNetworkRoomResult> joinRoom(Long courseScheduleId) throws Exception {
|
|
|
+ public HttpResponseResult<ImNetworkRoomResult> joinRoom(Long courseScheduleId, ClientEnum clientType) throws Exception {
|
|
|
+
|
|
|
+ // 当前登录用户ID
|
|
|
Long userId = sysUserService.getUserId();
|
|
|
CourseSchedule courseSchedule = Optional.ofNullable(courseScheduleService.getById(courseScheduleId)).
|
|
|
orElseThrow(()->new BizException("房间信息不存在"));
|
|
|
+
|
|
|
UserRoleEnum userRole = UserRoleEnum.STUDENT;
|
|
|
- if(courseSchedule.getTeacherId().equals(userId)){
|
|
|
+ if(courseSchedule.getTeacherId().equals(userId) && ClientEnum.TEACHER == clientType){
|
|
|
+ // 与老师帐号匹配,且来自老师客户端
|
|
|
userRole = UserRoleEnum.TEACHER;
|
|
|
}
|
|
|
log.info("joinRoom params:courseScheduleId:{},userRole:{},userId:{}",courseScheduleId,userRole,userId);
|
|
@@ -116,7 +120,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
setMusicSheetList(roomMemberList,courseScheduleId);
|
|
|
}else {
|
|
|
//获取节拍器信息
|
|
|
- joinRoomResult.setMidiJson(courseScheduleStudentPaymentService.getMemberMidi(courseScheduleId,sysUser.getUserId()));
|
|
|
+ joinRoomResult.setMidiJson(courseScheduleStudentPaymentService.getMemberMidi(courseScheduleId, sysUser.getUserId()));
|
|
|
}
|
|
|
//课程结束后关闭教室的时间
|
|
|
joinRoomResult.setAutoCloseNetworkRoomTime(sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
|
|
@@ -153,14 +157,29 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void joinRoomSuccess(String roomId,Long userId) throws Exception {
|
|
|
+ public void joinRoomSuccess(String roomId, String imUserId) throws Exception {
|
|
|
+
|
|
|
+ String[] values = imUserId.split(":");
|
|
|
+ // 用户ID
|
|
|
+ long userId = Long.parseLong(values[0]);
|
|
|
+
|
|
|
+ // 客户端类型
|
|
|
+ ClientEnum clientType = ClientEnum.TEACHER;
|
|
|
+ if (values.length > 1 && ClientEnum.STUDENT.match(values[1])) {
|
|
|
+
|
|
|
+ clientType = ClientEnum.STUDENT;
|
|
|
+ }
|
|
|
+
|
|
|
log.info("joinRoomSuccess: roomId={}, userId={}", roomId, userId);
|
|
|
CourseSchedule courseSchedule = Optional.ofNullable(courseScheduleService.getById(roomId)).
|
|
|
orElseThrow(()->new BizException("房间信息不存在"));
|
|
|
BasicUserInfo sysUser = Optional.ofNullable(teacherDao.getBasicUserInfo(userId)).
|
|
|
orElseThrow(()-> new BizException("用户信息不存在"));
|
|
|
+
|
|
|
UserRoleEnum userRole = UserRoleEnum.STUDENT;
|
|
|
- if(Objects.equals(courseSchedule.getTeacherId(),userId)){
|
|
|
+ if(Objects.equals(courseSchedule.getTeacherId(),userId)
|
|
|
+ && ClientEnum.TEACHER == clientType){
|
|
|
+
|
|
|
userRole = UserRoleEnum.TEACHER;
|
|
|
teacherAttendanceService.signIn(userId,courseSchedule);
|
|
|
}else {
|
|
@@ -174,7 +193,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
//发送人员变动消息
|
|
|
publishMemberChangedMessage(roomMember);
|
|
|
//sendDisplay
|
|
|
- this.sendDisplay(userId,room);
|
|
|
+ this.sendDisplay(imUserId, room);
|
|
|
}
|
|
|
|
|
|
//发送人员变动消息
|
|
@@ -191,7 +210,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void joinRoomFailure(String roomId) {
|
|
|
+ public void joinRoomFailure(String roomId, ClientEnum clientType) {
|
|
|
Long userId = sysUserService.getUserId();
|
|
|
log.info("joinRoomFailure: roomId={}, userId={}", roomId, userId);
|
|
|
imNetworkRoomMemberService.getDao().delByRidAndUid(roomId, userId);
|
|
@@ -199,7 +218,19 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void quitRoomSuccess(String roomId, Long userId) throws Exception {
|
|
|
+ public void quitRoomSuccess(String roomId, String imUserId) throws Exception {
|
|
|
+
|
|
|
+ String[] values = imUserId.split(":");
|
|
|
+ // 用户ID
|
|
|
+ long userId = Long.parseLong(values[0]);
|
|
|
+
|
|
|
+ // 客户端类型
|
|
|
+ ClientEnum clientType = ClientEnum.TEACHER;
|
|
|
+ if (values.length > 1 && ClientEnum.STUDENT.match(values[1])) {
|
|
|
+
|
|
|
+ clientType = ClientEnum.STUDENT;
|
|
|
+ }
|
|
|
+
|
|
|
log.info("quitRoomSuccess: roomId={}, userId={}", roomId, userId);
|
|
|
//防止幂等
|
|
|
StringBuffer sb = new StringBuffer(QUIT_ROOM_SUCCESS).append(roomId).append(userId);
|
|
@@ -215,7 +246,9 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
.orElseThrow(()->new BizException("房间信息不存在"));
|
|
|
Long courseScheduleId = courseSchedule.getId();
|
|
|
UserRoleEnum roleEnum = UserRoleEnum.STUDENT;
|
|
|
- if(Objects.equals(courseSchedule.getTeacherId(),userId)){
|
|
|
+ if(Objects.equals(courseSchedule.getTeacherId(),userId)
|
|
|
+ && ClientEnum.TEACHER == clientType){
|
|
|
+
|
|
|
roleEnum = UserRoleEnum.TEACHER;
|
|
|
teacherAttendanceService.signOut(userId,courseSchedule);
|
|
|
}else {
|
|
@@ -230,20 +263,20 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
courseScheduleStudentPaymentService.getDao().adjustExamSong(courseScheduleId, null, null);
|
|
|
if (isUserDisplay(room.getDisplay(), userId)) {
|
|
|
room.setDisplay("");
|
|
|
- this.updateDisplay(userId,room);
|
|
|
+ this.updateDisplay(imUserId,room);
|
|
|
}
|
|
|
//老师退出房间,初始化节拍器和伴奏播放配置
|
|
|
courseScheduleStudentPaymentService.adjustPlayMidiAndMusicSheet(courseSchedule.getId(), null, null,"");
|
|
|
}
|
|
|
int memberNum = imNetworkRoomMemberService.getDao().countByRoomId(roomId);
|
|
|
if (memberNum <= 1) {
|
|
|
- imHelper.dismiss(userId.toString(), roomId);
|
|
|
+ imHelper.dismiss(imUserId, 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);
|
|
|
+ imHelper.publishMessage(imUserId, roomId, msg);
|
|
|
+ imHelper.quit(new String[]{imUserId}, roomId);
|
|
|
log.info("leaveRoomSuccess quit group: roomId={},userId: {}", roomId, userId);
|
|
|
}
|
|
|
//删房间用户信息
|
|
@@ -258,11 +291,18 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
log.info("sendImPlayMidiMessage: roomId={}, userId={}", roomId, userId);
|
|
|
ImNetworkMetronomeMessage displayMessage = new ImNetworkMetronomeMessage(customMessage);
|
|
|
|
|
|
- // IM用户ID
|
|
|
- String imUserId = MessageFormat.format("{0}:{1}", String.valueOf(userId), ClientEnum.STUDENT.name());
|
|
|
+ String imUserId = String.valueOf(userId);
|
|
|
+ if (ClientEnum.STUDENT == customMessage.getClientType()) {
|
|
|
+ imUserId = MessageFormat.format("{0}:{1}", imUserId, ClientEnum.STUDENT.name());
|
|
|
+ }
|
|
|
+ // 用户ID
|
|
|
imHelper.publishMessage(imUserId, roomId.toString(), displayMessage, 1);
|
|
|
+
|
|
|
//记录节拍器信息
|
|
|
- courseScheduleStudentPaymentService.getDao().adjustPlayMidi(roomId,customMessage.getUserId(),customMessage.toString());
|
|
|
+ String collect = Arrays.stream(customMessage.getUserId().split(","))
|
|
|
+ .map(x -> x.split(":")[0]).collect(Collectors.joining(","));
|
|
|
+
|
|
|
+ courseScheduleStudentPaymentService.getDao().adjustPlayMidi(roomId, collect, customMessage.toString());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -299,7 +339,14 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
}
|
|
|
ImNetworkMusicSheetDownloadMessage msg = new ImNetworkMusicSheetDownloadMessage(
|
|
|
JSON.parseObject(JSON.toJSONString(accompaniment), ImNetworkMusicSheetDownloadMessageContent.class));
|
|
|
- imHelper.publishMessage(userId.toString(), courseScheduleId.toString(), msg, 0);
|
|
|
+
|
|
|
+ // IM用户ID
|
|
|
+ String imUserId = String.valueOf(userId);
|
|
|
+ if (ClientEnum.STUDENT == musicSheetDto.getClientType()) {
|
|
|
+ imUserId = MessageFormat.format("{0}:{1}", imUserId, ClientEnum.STUDENT.name());
|
|
|
+ }
|
|
|
+
|
|
|
+ imHelper.publishMessage(imUserId, courseScheduleId.toString(), msg, 0);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -332,7 +379,13 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
}
|
|
|
ImNetworkRoom room = baseMapper.findByRoomId(displayData.getRoomId());
|
|
|
room.setDisplay(display.toString());
|
|
|
- this.updateDisplay(userId,room);
|
|
|
+
|
|
|
+ String imUserId = String.valueOf(userId);
|
|
|
+ if (ClientEnum.STUDENT == displayData.getClientType()) {
|
|
|
+ imUserId = MessageFormat.format("{0}:{1}", imUserId, ClientEnum.STUDENT.name());
|
|
|
+ }
|
|
|
+
|
|
|
+ this.updateDisplay(imUserId,room);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -348,15 +401,15 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentService.getDao().queryByCourseId(Long.parseLong(deviceControl.getRoomId()));
|
|
|
|
|
|
for (CourseScheduleStudentPayment studentPayment : studentPayments) {
|
|
|
- deviceControl.setUserId(studentPayment.getUserId());
|
|
|
+ deviceControl.setUserId(MessageFormat.format("{0}:{1}", String.valueOf(studentPayment.getUserId()), ClientEnum.STUDENT.name()));
|
|
|
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());
|
|
|
+ deviceControl.setUserId(MessageFormat.format("{0}:{1}", String.valueOf(roomMember.getUserId()), ClientEnum.STUDENT.name()));
|
|
|
controlDevice(deviceControl);
|
|
|
}
|
|
|
}
|
|
@@ -371,12 +424,12 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
SysUser sysUser = sysUserService.getUser();
|
|
|
String roomId = deviceControl.getRoomId();
|
|
|
// 学生信息
|
|
|
- Long userId = deviceControl.getUserId();
|
|
|
+ Long userId = Long.parseLong(deviceControl.getUserId().split(":")[0]);
|
|
|
Boolean enable = deviceControl.getEnable();
|
|
|
log.info("controlDevice: roomId:{} ,deviceType:{} ,enable:{} ,userId:{}", roomId,deviceControl.getDeviceType(),enable,userId);
|
|
|
|
|
|
// IM用户ID
|
|
|
- String imUserId = MessageFormat.format("{0}:{1}", String.valueOf(userId), ClientEnum.STUDENT.name());
|
|
|
+ String imUserId = deviceControl.getUserId();
|
|
|
|
|
|
if(enable){
|
|
|
long scheduleId = Long.parseLong(roomId);
|
|
@@ -470,6 +523,12 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
public void approveControlDevice(ImNetworkDeviceControlDto deviceControl) throws Exception {
|
|
|
log.info("approveControlDevice: roomId:{} ,deviceType:{} ,enable:{}", deviceControl.getRoomId(),deviceControl.getDeviceType(),deviceControl.getEnable());
|
|
|
SysUser sysUser = sysUserService.getUser();
|
|
|
+
|
|
|
+ String imUserId = String.valueOf(sysUser.getId());
|
|
|
+ if (ClientEnum.STUDENT == deviceControl.getClientType()) {
|
|
|
+ imUserId = MessageFormat.format("{0}:{1}", imUserId, ClientEnum.STUDENT.name());
|
|
|
+ }
|
|
|
+
|
|
|
ImNetworkRoomMember roomMember = Optional.ofNullable(imNetworkRoomMemberService.getDao().findByRidAndUid(deviceControl.getRoomId(), sysUser.getId())).
|
|
|
orElseThrow(()-> new BizException("用户不在房间内"));
|
|
|
switch (deviceControl.getDeviceType()) {
|
|
@@ -498,10 +557,10 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
Long teacherId = Optional.ofNullable(courseScheduleService.getById(deviceControl.getRoomId())).
|
|
|
map(CourseSchedule::getTeacherId).
|
|
|
orElseThrow(()->new BizException("房间信息不存在"));
|
|
|
- imHelper.publishMessage(sysUser.getId().toString(),teacherId.toString(), deviceControl.getRoomId(), msg);
|
|
|
+ imHelper.publishMessage(imUserId, teacherId.toString(), deviceControl.getRoomId(), msg);
|
|
|
|
|
|
//发送设备状态变更消息
|
|
|
- this.sendDeviceStateChangedMessage(deviceControl, sysUser.getId());
|
|
|
+ this.sendDeviceStateChangedMessage(deviceControl, imUserId);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -509,6 +568,12 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
public void deviceStatusSync(ImNetworkDeviceControlDto deviceStatusSync) throws Exception {
|
|
|
log.info("deviceStatusSync: enable:{} ,roomId:{} ,deviceType:{}", deviceStatusSync.getEnable(),deviceStatusSync.getRoomId(),deviceStatusSync.getDeviceType());
|
|
|
Long userId = sysUserService.getUserId();
|
|
|
+
|
|
|
+ String imUserId = String.valueOf(userId);
|
|
|
+ if (ClientEnum.STUDENT == deviceStatusSync.getClientType()) {
|
|
|
+ imUserId = MessageFormat.format("{0}:{1}", imUserId, ClientEnum.STUDENT.name());
|
|
|
+ }
|
|
|
+
|
|
|
ImNetworkDeviceTypeEnum deviceType = deviceStatusSync.getDeviceType();
|
|
|
ImNetworkRoomMember roomMember = Optional.ofNullable(imNetworkRoomMemberService.getDao().
|
|
|
findByRidAndUid(deviceStatusSync.getRoomId(), userId))
|
|
@@ -540,7 +605,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
imNetworkRoomMemberService.getDao().updateById(roomMember);
|
|
|
}
|
|
|
//发送设备状态同步消息
|
|
|
- this.sendDeviceStateChangedMessage(deviceStatusSync,userId);
|
|
|
+ this.sendDeviceStateChangedMessage(deviceStatusSync, imUserId);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -558,12 +623,12 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
}
|
|
|
|
|
|
//发送设备状态同步消息
|
|
|
- private void sendDeviceStateChangedMessage(ImNetworkDeviceControlDto deviceStatusSync,Long userId) throws Exception {
|
|
|
+ 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(userId.toString());
|
|
|
+ deviceResourceMessage.setUserId(imUserId);
|
|
|
deviceResourceMessage.setSoundVolume(room.getSoundVolume());
|
|
|
- imHelper.publishMessage(userId.toString(), deviceStatusSync.getRoomId(), deviceResourceMessage, 1);
|
|
|
+ imHelper.publishMessage(imUserId, deviceStatusSync.getRoomId(), deviceResourceMessage, 1);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -603,7 +668,14 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
//给老师发送学员曲目下载状态
|
|
|
CourseSchedule courseSchedule = courseScheduleService.getById(roomId);
|
|
|
ImNetworkMusicSheetDownloadStatusMessage statusMessage = new ImNetworkMusicSheetDownloadStatusMessage(status,studentMusicSheetResults);
|
|
|
- imHelper.publishMessage(userId.toString(), courseSchedule.getTeacherId().toString(), roomId.toString(), statusMessage);
|
|
|
+
|
|
|
+ // IM用户ID
|
|
|
+ String imUserId = String.valueOf(userId);
|
|
|
+ if (ClientEnum.STUDENT == musicSheetDto.getClientType()) {
|
|
|
+ imUserId = MessageFormat.format("{0}:{1}", imUserId, ClientEnum.STUDENT.name());
|
|
|
+ }
|
|
|
+
|
|
|
+ imHelper.publishMessage(imUserId, courseSchedule.getTeacherId().toString(), roomId.toString(), statusMessage);
|
|
|
}
|
|
|
|
|
|
//校验用户是否提前进入教室
|
|
@@ -646,15 +718,18 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
}
|
|
|
|
|
|
//修改节拍器
|
|
|
- public void updateDisplay(Long userId,ImNetworkRoom room) throws Exception {
|
|
|
+ public void updateDisplay(String imUserId,ImNetworkRoom room) throws Exception {
|
|
|
baseMapper.updateById(room);
|
|
|
- this.sendDisplay(userId,room);
|
|
|
+
|
|
|
+ // IM发送用户消息
|
|
|
+ this.sendDisplay(imUserId,room);
|
|
|
}
|
|
|
|
|
|
- public void sendDisplay(Long userId,ImNetworkRoom room) throws Exception {
|
|
|
+ public void sendDisplay(String imUserId,ImNetworkRoom room) throws Exception {
|
|
|
//发送display改动通知
|
|
|
ImNetworkDisplayMessage displayMessage = new ImNetworkDisplayMessage(room.getDisplay());
|
|
|
- imHelper.publishMessage(userId.toString(), room.getRoomId(), displayMessage, 0);
|
|
|
+
|
|
|
+ imHelper.publishMessage(imUserId, room.getRoomId(), displayMessage, 0);
|
|
|
}
|
|
|
|
|
|
public boolean isUserDisplay(String display, Long userId) {
|