|
@@ -70,44 +70,17 @@ public class RoomServiceImpl implements RoomService {
|
|
|
@Autowired
|
|
|
private RedisTemplate<String,String> redisTemplate;
|
|
|
|
|
|
- @Override
|
|
|
- public void roomQuery(String roomId) throws Exception {
|
|
|
- imHelper.roomQuery(roomId);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void configRecord(String roomId) throws Exception {
|
|
|
- List<RoomMember> roomMembers = roomMemberDao.findByRid(roomId);
|
|
|
- if(roomMembers.size() > 0){
|
|
|
- imHelper.configRecord(roomId,roomMembers);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void startRecord(String roomId,String userId,String extra) throws Exception {
|
|
|
- List<RoomMember> roomMembers = roomMemberDao.findByRid(roomId);
|
|
|
- imHelper.startRecord(userId,roomId,null,roomMembers);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void stopRecord(String userId,String roomId) throws Exception {
|
|
|
-// SysUser sysUser = sysUserFeignService.queryUserInfo();
|
|
|
- imHelper.stopRecord(userId,roomId);
|
|
|
- }
|
|
|
-
|
|
|
private BaseResponse getBaseResponse(BaseResponse baseResponse){
|
|
|
baseResponse.setErrCode(500);
|
|
|
return baseResponse;
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
- @Override
|
|
|
- public BaseResponse joinRoom(Long registrationId, boolean isAudience, boolean isDisableCamera, boolean isMusicMode, String roomId) throws ApiException, Exception {
|
|
|
+ public void joinRoomSuccess(Long registrationId,String roomId,String userId) throws Exception {
|
|
|
StudentExamResultApiDto examResult = null;
|
|
|
- log.info("joinRoom: roomId={}, isAudience={}, isDisableCamera={},isMusicMode={}", roomId, isAudience, isDisableCamera,isMusicMode);
|
|
|
+ log.info("joinRoomSuccess: roomId={}, isAudience={}, isDisableCamera={},isMusicMode={}", roomId);
|
|
|
|
|
|
- SysUser sysUser = sysUserFeignService.queryUserInfo();
|
|
|
- String userId = sysUser.getId().toString();
|
|
|
+ SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(userId));
|
|
|
String realName = sysUser.getRealName();
|
|
|
if(registrationId != null){
|
|
|
examResult = eduUserFeignService.getExamResult(registrationId);
|
|
@@ -116,7 +89,12 @@ public class RoomServiceImpl implements RoomService {
|
|
|
if(byRidAndRole != null && byRidAndRole.size() > 0){
|
|
|
log.info("学员加入时,将其他学员退出房间 byRidAndRole{}",byRidAndRole);
|
|
|
for (RoomMember e: byRidAndRole) {
|
|
|
- leaveRoom(e.getExamRegistrationId(),roomId,userId);
|
|
|
+ roomMemberDao.deleteUserByRidAndUid(roomId, e.getUid());
|
|
|
+ MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Leave, userId, 3);
|
|
|
+ msg.setUserName(e.getName());
|
|
|
+ userDao.deleteByUid(userId);
|
|
|
+ imHelper.publishMessage(userId, roomId, msg);
|
|
|
+// leaveRoom(e.getExamRegistrationId(),roomId,userId);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -137,6 +115,84 @@ public class RoomServiceImpl implements RoomService {
|
|
|
saveRoom(roomId, roomId, curTime, null);
|
|
|
}
|
|
|
RoleEnum roleEnum;
|
|
|
+ RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
|
|
|
+ if (roomMember == null) {
|
|
|
+ if(sysUser.getId().equals(examRoom.getMainTeacherUserId())){
|
|
|
+ roleEnum = RoleEnum.MainTeacher;
|
|
|
+ }else if(isAssistant){
|
|
|
+ roleEnum = RoleEnum.AssistantTeacher;
|
|
|
+ }else {
|
|
|
+ roleEnum = Student;
|
|
|
+ }
|
|
|
+ saveRoomMember(userId,sysUser.getAvatar(), realName, roomId, roleEnum.getValue(),true, curTime,registrationId);
|
|
|
+ } else {
|
|
|
+ roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
|
|
|
+ }
|
|
|
+ log.info("user exist in the room: roomId={} , userId={}, use the last role={}", roomId, userId, roleEnum);
|
|
|
+ MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Join, userId, roleEnum.getValue());
|
|
|
+ msg.setTimestamp(curTime);
|
|
|
+ msg.setUserName(realName);
|
|
|
+ msg.setCamera(true);
|
|
|
+ imHelper.publishMessage(userId, roomId, msg);
|
|
|
+
|
|
|
+ List<UserInfo> userInfoList = userDao.findByUid(userId);
|
|
|
+ if (userInfoList.isEmpty()) {
|
|
|
+ UserInfo userInfo = new UserInfo();
|
|
|
+ userInfo.setUid(userId);
|
|
|
+ userInfo.setName(realName);
|
|
|
+ userInfo.setCreateDt(curTime);
|
|
|
+ userInfo.setUpdateDt(curTime);
|
|
|
+ userDao.save(userInfo);
|
|
|
+ } else {
|
|
|
+ UserInfo user = userInfoList.get(0);
|
|
|
+ user.setUpdateDt(curTime);
|
|
|
+ userDao.save(user);
|
|
|
+ }
|
|
|
+ List<RoomMember> roomMembers = roomMemberDao.findByRid(roomId);
|
|
|
+ log.info("join success: roomId = {}, userId = {}, userName={}, role = {}", roomId, userId, roleEnum);
|
|
|
+ if(registrationId != null){
|
|
|
+ if(examResult.getIsFinishedExam() == 1){
|
|
|
+ eduUserFeignService.updateFinishedExam(registrationId,0);
|
|
|
+ }
|
|
|
+ this.publishMessage(eduUserFeignService.getPublishMessage(registrationId));
|
|
|
+ eduUserFeignService.upsetStudentAttendance(registrationId,0);
|
|
|
+ imHelper.startRecord(roomId, registrationId,roomMembers);
|
|
|
+ }else {
|
|
|
+ eduUserFeignService.upsetTeacherAttendance(examRoom.getId(),sysUser.getId(),0);
|
|
|
+ imHelper.configRecord(roomId,roomMembers);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BaseResponse joinRoom(Long registrationId, String roomId){
|
|
|
+ StudentExamResultApiDto examResult = null;
|
|
|
+ log.info("joinRoom: roomId={}, registrationId={}", roomId,registrationId);
|
|
|
+
|
|
|
+ SysUser sysUser = sysUserFeignService.queryUserInfo();
|
|
|
+ String userId = sysUser.getId().toString();
|
|
|
+ String realName = sysUser.getRealName();
|
|
|
+ if(registrationId != null){
|
|
|
+ examResult = eduUserFeignService.getExamResult(registrationId);
|
|
|
+ roomId = examResult.getRoomId();
|
|
|
+ }
|
|
|
+
|
|
|
+ CheckUtils.checkArgument(roomId != null, "roomId must't be null");
|
|
|
+
|
|
|
+ ExamRoom examRoom = eduUserFeignService.getExamRoom(Integer.parseInt(roomId));
|
|
|
+
|
|
|
+ boolean isAssistant = false;
|
|
|
+ if (StringUtils.isNotEmpty(examRoom.getAssistantTeacherUserIdList())){
|
|
|
+ List<String> list = Arrays.asList(examRoom.getAssistantTeacherUserIdList().split(","));
|
|
|
+ if(list.contains(userId)){
|
|
|
+ isAssistant = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Date curTime = DateTimeUtils.currentUTC();
|
|
|
+ List<Room> roomList = roomDao.findByRid(roomId);
|
|
|
+ if (roomList.isEmpty()) {
|
|
|
+ saveRoom(roomId, roomId, curTime, null);
|
|
|
+ }
|
|
|
+ RoleEnum roleEnum;
|
|
|
RoomResult roomResult = new RoomResult();
|
|
|
BaseResponse baseResponse = new BaseResponse(roomResult);
|
|
|
RoomResult.MemberResult userResult = new RoomResult.MemberResult();
|
|
@@ -161,13 +217,8 @@ public class RoomServiceImpl implements RoomService {
|
|
|
}
|
|
|
roleEnum = Student;
|
|
|
}
|
|
|
- saveRoomMember(userId,sysUser.getAvatar(), realName, roomId, roleEnum.getValue(), !isDisableCamera,!isMusicMode, curTime,registrationId);
|
|
|
-
|
|
|
- userResult.setMicrophone(true);
|
|
|
- userResult.setCamera(!isDisableCamera);
|
|
|
- userResult.setHandUp(false);
|
|
|
- userResult.setJoinTime(curTime);
|
|
|
log.info("user join the room: roomId={} , userId={}, roleEnum={}", roomId, userId, roleEnum);
|
|
|
+ saveRoomMember(userId,sysUser.getAvatar(), realName, roomId, roleEnum.getValue(),true, curTime,registrationId);
|
|
|
} else {
|
|
|
roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
|
|
|
if(roleEnum == Student){
|
|
@@ -183,32 +234,13 @@ public class RoomServiceImpl implements RoomService {
|
|
|
return getBaseResponse(baseResponse);
|
|
|
}
|
|
|
}
|
|
|
- userResult.setCamera(roomMember.isCamera());
|
|
|
- userResult.setHandUp(roomMember.isHand());
|
|
|
- userResult.setJoinTime(roomMember.getJoinDt());
|
|
|
log.info("user exist in the room: roomId={} , userId={}, use the last role={}", roomId, userId, roleEnum);
|
|
|
}
|
|
|
-
|
|
|
- MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Join, userId, roleEnum.getValue());
|
|
|
- msg.setTimestamp(curTime);
|
|
|
- msg.setUserName(realName);
|
|
|
- msg.setCamera(!isDisableCamera);
|
|
|
- imHelper.publishMessage(userId, roomId, msg);
|
|
|
-
|
|
|
- List<UserInfo> userInfoList = userDao.findByUid(userId);
|
|
|
- if (userInfoList.isEmpty()) {
|
|
|
- UserInfo userInfo = new UserInfo();
|
|
|
- userInfo.setUid(userId);
|
|
|
- userInfo.setName(realName);
|
|
|
- userInfo.setCreateDt(curTime);
|
|
|
- userInfo.setUpdateDt(curTime);
|
|
|
- userDao.save(userInfo);
|
|
|
- } else {
|
|
|
- UserInfo user = userInfoList.get(0);
|
|
|
- user.setUpdateDt(curTime);
|
|
|
- userDao.save(user);
|
|
|
- }
|
|
|
-
|
|
|
+ roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
|
|
|
+ userResult.setMicrophone(roomMember.isMic());
|
|
|
+ userResult.setCamera(roomMember.isCamera());
|
|
|
+ userResult.setHandUp(roomMember.isHand());
|
|
|
+ userResult.setJoinTime(roomMember.getJoinDt());
|
|
|
userResult.setUserName(realName);
|
|
|
userResult.setUserId(userId);
|
|
|
userResult.setRole(roleEnum.getValue());
|
|
@@ -218,21 +250,7 @@ public class RoomServiceImpl implements RoomService {
|
|
|
roomResult.setRegistrationId(registrationId);
|
|
|
}
|
|
|
roomResult.setExamFlag(examRoom.getExamFlag());
|
|
|
-
|
|
|
- List<RoomMember> roomMembers = roomMemberDao.findByRid(roomId);
|
|
|
- roomResult.setMembers(roomMembers,examRoom.getShieldUserId());
|
|
|
- log.info("join success: roomId = {}, userId = {}, userName={}, role = {}", roomId, userId, roleEnum);
|
|
|
- if(registrationId != null){
|
|
|
- if(examResult.getIsFinishedExam() == 1){
|
|
|
- eduUserFeignService.updateFinishedExam(registrationId,0);
|
|
|
- }
|
|
|
- this.publishMessage(eduUserFeignService.getPublishMessage(registrationId));
|
|
|
- eduUserFeignService.upsetStudentAttendance(registrationId,0);
|
|
|
- imHelper.startRecord(userId,roomId, registrationId,roomMembers);
|
|
|
- //踢出其他学员
|
|
|
- }else {
|
|
|
- eduUserFeignService.upsetTeacherAttendance(examRoom.getId(),sysUser.getId(),0);
|
|
|
- }
|
|
|
+ roomResult.setMembers(roomMemberDao.findByRid(roomId),examRoom.getShieldUserId());
|
|
|
return baseResponse;
|
|
|
}
|
|
|
|
|
@@ -249,7 +267,7 @@ public class RoomServiceImpl implements RoomService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void saveRoomMember(String userId, String headUrl, String userName, String roomId, int role, boolean cameraOn,boolean musicModeOn, Date joinTime,Long examRegistrationId) {
|
|
|
+ private void saveRoomMember(String userId, String headUrl, String userName, String roomId, int role, boolean cameraOn, Date joinTime,Long examRegistrationId) {
|
|
|
RoomMember roomMember = new RoomMember();
|
|
|
roomMember.setUid(userId);
|
|
|
roomMember.setName(userName);
|
|
@@ -257,41 +275,34 @@ public class RoomServiceImpl implements RoomService {
|
|
|
roomMember.setRole(role);
|
|
|
roomMember.setCamera(cameraOn);
|
|
|
roomMember.setJoinDt(joinTime);
|
|
|
- roomMember.setMusicMode(musicModeOn);
|
|
|
roomMember.setHeadUrl(headUrl);
|
|
|
roomMember.setExamRegistrationId(examRegistrationId);
|
|
|
roomMemberDao.save(roomMember);
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
- @Override
|
|
|
- public Boolean leaveRoom(Long registrationId,String roomId,String userId) throws Exception {
|
|
|
+ public void leaveRoomSuccess(Long registrationId,String roomId,String userId) throws Exception {
|
|
|
if(registrationId != null){
|
|
|
StudentExamResultApiDto examResult = eduUserFeignService.getExamResult(registrationId);
|
|
|
roomId = examResult.getRoomId();
|
|
|
}
|
|
|
- SysUser user;
|
|
|
- if(StringUtils.isEmpty(userId)){
|
|
|
- user = sysUserFeignService.queryUserInfo();
|
|
|
- userId = user.getId().toString();
|
|
|
- }else {
|
|
|
- user = sysUserFeignService.queryUserById(Integer.parseInt(userId));
|
|
|
- }
|
|
|
+
|
|
|
+ SysUser user = sysUserFeignService.queryUserById(Integer.parseInt(userId));
|
|
|
log.info("leaveRoom: roomId={}, userId={}", roomId,userId);
|
|
|
|
|
|
CheckUtils.checkArgument(userId != null, "userId must't be null");
|
|
|
CheckUtils.checkArgument(roomId != null, "roomId must't be null");
|
|
|
+
|
|
|
List<Room> roomList = roomDao.findByRid(roomId);
|
|
|
if (roomList.size() == 0) {
|
|
|
log.error("room : {} not exist ", roomId);
|
|
|
- return false;
|
|
|
+ return;
|
|
|
}
|
|
|
RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
|
|
|
if (roomMember == null) {
|
|
|
log.error("{} not exist in room: {}", userId, roomId);
|
|
|
- return false;
|
|
|
+ return;
|
|
|
}
|
|
|
-
|
|
|
int userRole = roomMember.getRole();
|
|
|
log.info("leaveRoom: roomId={}, role={}", roomId, RoleEnum.getEnumByValue(userRole));
|
|
|
|
|
@@ -308,10 +319,15 @@ public class RoomServiceImpl implements RoomService {
|
|
|
userDao.deleteByUid(userId);
|
|
|
if(registrationId != null){
|
|
|
eduUserFeignService.upsetStudentAttendance(registrationId,1);
|
|
|
- imHelper.stopRecord(userId,roomId);
|
|
|
+ imHelper.stopRecord(roomId);
|
|
|
}else {
|
|
|
eduUserFeignService.upsetTeacherAttendance(Long.parseLong(roomId),Integer.parseInt(userId),1);
|
|
|
+ imHelper.configRecord(roomId,roomMemberDao.findByRid(roomId));
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean leaveRoom(Long registrationId,String roomId,String userId) throws Exception {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
@@ -333,6 +349,11 @@ public class RoomServiceImpl implements RoomService {
|
|
|
imHelper.dismiss(userId,groupId);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void joinFailure(String roomId, String userId) {
|
|
|
+ roomMemberDao.deleteUserByRidAndUid(roomId, userId);
|
|
|
+ }
|
|
|
+
|
|
|
private void deleteWhiteboardByUser(String roomId, String userId) throws Exception {
|
|
|
List<Whiteboard> whiteboardList = whiteboardDao.findByRidAndCreator(roomId, userId);
|
|
|
if (!whiteboardList.isEmpty()) {
|
|
@@ -439,7 +460,7 @@ public class RoomServiceImpl implements RoomService {
|
|
|
if("3".equals(e.getRole())){
|
|
|
try {
|
|
|
eduUserFeignService.upsetStudentAttendance(e.getExamRegistrationId(),1);
|
|
|
- imHelper.stopRecord(e.getUid(),e.getRid());
|
|
|
+ imHelper.stopRecord(e.getRid());
|
|
|
} catch (Exception e1) {
|
|
|
e1.printStackTrace();
|
|
|
}
|
|
@@ -478,7 +499,7 @@ public class RoomServiceImpl implements RoomService {
|
|
|
if("recorded".equals(data.getType())){
|
|
|
msg.setRoomId("recorded" + roomId);
|
|
|
}*/
|
|
|
- imHelper.stopRecord(userId,roomId);
|
|
|
+ imHelper.stopRecord(roomId);
|
|
|
IMApiResultInfo apiResultInfo = imHelper.publishMessage(userId, roomId, msg, 1);
|
|
|
if (!apiResultInfo.isSuccess()) {
|
|
|
throw new ApiException(ErrorEnum.ERR_MESSAGE_ERROR);
|
|
@@ -1235,9 +1256,14 @@ public class RoomServiceImpl implements RoomService {
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
public boolean statusSync(ChannelStateNotify notify) throws Exception {
|
|
|
+ log.info("statusSync notify:{}",notify);
|
|
|
String roomId = notify.getChannelId();
|
|
|
String userId = notify.getUserId();
|
|
|
RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
|
|
|
+ log.info("statusSync roomMember:{}",roomMember);
|
|
|
+ if(roomMember == null){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
if(notify.getEvent() == 1){
|
|
|
//同步房间信息
|
|
|
}else if(notify.getEvent() == 2){
|
|
@@ -1246,19 +1272,10 @@ public class RoomServiceImpl implements RoomService {
|
|
|
//房间销毁
|
|
|
}else if(notify.getEvent() == 11){
|
|
|
//成员加入
|
|
|
-// if(roomMember.getRole() != 3){
|
|
|
-// this.configRecord(roomId);
|
|
|
-// }else {
|
|
|
-// this.startRecord(roomId,userId,notify.getTimestamp() + "");
|
|
|
-// }
|
|
|
+ joinRoomSuccess(roomMember.getExamRegistrationId(),roomId,userId);
|
|
|
}else if(notify.getEvent() == 12){
|
|
|
//成员退出
|
|
|
- /*if(roomMember.getRole() != 3){
|
|
|
- this.configRecord(roomId,userId);
|
|
|
- }else {
|
|
|
- this.stopRecord(roomId,userId);
|
|
|
- }*/
|
|
|
- this.leaveRoom(null,roomId,userId);
|
|
|
+ leaveRoomSuccess(roomMember.getExamRegistrationId(),roomId,userId);
|
|
|
}else if(notify.getEvent() == 20){
|
|
|
//资源发生变动
|
|
|
}
|
|
@@ -1267,7 +1284,7 @@ public class RoomServiceImpl implements RoomService {
|
|
|
|
|
|
@Override
|
|
|
public void publishMessage(PublishMessageDto publishMessageDto) throws Exception {
|
|
|
- IMApiResultInfo apiResultInfo = imHelper.publishMessage(publishMessageDto.getUserId(),
|
|
|
+ imHelper.publishMessage(publishMessageDto.getUserId(),
|
|
|
publishMessageDto.getRoomId(),
|
|
|
publishMessageDto.getMemberChangedMessage(),
|
|
|
publishMessageDto.getIncludeSender());
|