| 
					
				 | 
			
			
				@@ -98,15 +98,17 @@ public class RoomServiceImpl implements RoomService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void joinRoomSuccess(Long registrationId,String roomId,String userId) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void joinRoomSuccess(RoomMember roomMember) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         StudentExamResultApiDto examResult = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        log.info("joinRoomSuccess: roomId={}, isAudience={}, isDisableCamera={},isMusicMode={}", roomId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String roomId = roomMember.getRid(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String userId = roomMember.getUid(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Long registrationId = roomMember.getExamRegistrationId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("joinRoomSuccess: roomId={}, userId={}", roomId,userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(userId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(roomMember.getUid())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String realName = sysUser.getRealName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(registrationId != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             examResult = eduUserFeignService.getExamResult(registrationId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            roomId = examResult.getRoomId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         CheckUtils.checkArgument(roomId != null, "roomId must't be null"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -125,7 +127,6 @@ 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; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -293,14 +294,17 @@ public class RoomServiceImpl implements RoomService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         roomMemberDao.save(roomMember); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void leaveRoomSuccess(Long registrationId,String roomId,String userId) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void leaveRoomSuccess(RoomMember roomMember) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String roomId = roomMember.getRid(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String userId = roomMember.getUid(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Long registrationId = roomMember.getExamRegistrationId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("leaveRoomSuccess: roomId={}, userId={}", roomId,userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(registrationId != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             StudentExamResultApiDto examResult = eduUserFeignService.getExamResult(registrationId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             roomId = examResult.getRoomId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         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"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -310,7 +314,6 @@ public class RoomServiceImpl implements RoomService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             log.error("room : {} not exist ", roomId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (roomMember == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             log.error("{} not exist in room: {}", userId, roomId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1220,13 +1223,7 @@ public class RoomServiceImpl implements RoomService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public boolean statusSync(ChannelStateNotify notify) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String roomId = notify.getRoomId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String userId = notify.getUserId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        log.info("statusSync roomMember:{}",roomMember); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(roomMember == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        RoomMember roomMember = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(notify.getEvent() == 1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //同步房间信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }else if(notify.getEvent() == 2){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1237,47 +1234,66 @@ public class RoomServiceImpl implements RoomService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             redisTemplate.delete("sessionId:" + roomId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }else if(notify.getEvent() == 11){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //成员加入 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            log.info("成员加入 roomId: {}, userId: {}",roomId, userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //            roomMemberDao.updateMsidByRidAndUid(roomId,userId,msidFlag); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            joinRoomSuccess(roomMember.getExamRegistrationId(),roomId,userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            roomMember = roomMemberDao.findByRidAndUid(roomId, userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(roomMember == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            joinRoomSuccess(roomMember); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }else if(notify.getEvent() == 12){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //成员退出 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            log.info("成员退出 roomId: {}, userId: {}",roomId, userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //            roomMemberDao.updateMsidByRidAndUid(roomId,userId,msidFlag); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            leaveRoomSuccess(roomMember.getExamRegistrationId(),roomId,userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            roomMember = roomMemberDao.findByRidAndUid(roomId, userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(roomMember == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            leaveRoomSuccess(roomMember); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }else if(notify.getEvent() == 20){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            log.info("资源变动 roomId: {}, userId: {}",roomId, userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            boolean msidFlag = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Integer state = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<Member> members = notify.getMembers(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(members != null && members.size() != 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Object uris = JSONObject.parseObject(members.get(0).getData().toJSONString()).get("uris"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(uris != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    List<UrisDto> jsonArray = JSONObject.parseArray(uris.toString(),UrisDto.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    for (UrisDto urisDto : jsonArray) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        //视频流 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if(urisDto.getMediaType() == 1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            state = urisDto.getState(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if(state == 1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                msidFlag = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            //音频流 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            roomMember = roomMemberDao.findByRidAndUid(roomId, userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(roomMember == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            resourceChange(roomMember,notify.getMembers()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void resourceChange(RoomMember roomMember,List<Member> members){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String roomId = roomMember.getRid(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String userId = roomMember.getUid(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("资源变动 roomId: {}, userId: {}",roomId, userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        boolean msidFlag = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer state = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(members != null && members.size() != 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Object uris = JSONObject.parseObject(members.get(0).getData().toJSONString()).get("uris"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(uris != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<UrisDto> jsonArray = JSONObject.parseArray(uris.toString(),UrisDto.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (UrisDto urisDto : jsonArray) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //视频流 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if(urisDto.getMediaType() == 1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        state = urisDto.getState(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if(state == 1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            msidFlag = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //音频流 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //同步录制资源 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //资源发生变动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(roomMember.isMsidFlag() != msidFlag){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                roomMemberDao.updateMsidFlagByRidAndUid(roomId,userId,state); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(roomMember.getExamRegistrationId() == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //同步录制资源 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //资源发生变动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(roomMember.isMsidFlag() != msidFlag){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            roomMemberDao.updateMsidFlagByRidAndUid(roomId,userId,state); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(roomMember.getExamRegistrationId() == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     imHelper.configRecord(roomId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 |