فهرست منبع

修复直播课老师签退异常

Eric 1 سال پیش
والد
کامیت
4acf1f66f1

+ 1 - 1
mec-im/src/main/java/com/ym/controller/RoomController.java

@@ -116,7 +116,7 @@ public class RoomController{
                     break;
                 case 12:
                     //成员退出
-                    roomService.leaveRoomSuccess(roomId, userId,null, notify.getTimestamp());
+                    roomService.leaveRoomSuccess(roomId, userId, null, notify.getTimestamp());
                     break;
             }
         }catch (Exception e){

+ 27 - 6
mec-im/src/main/java/com/ym/controller/UserController.java

@@ -126,22 +126,39 @@ public class UserController {
             callbackOnMemberStateChange.setClientIP(clientIP);
             callbackOnMemberStateChange.setOptPlatform(optPlatform);
             if (callbackOnMemberStateChange.getGroupId().startsWith("LIVE")) {
+                // 直播间成员状态变更
                 imLiveBroadcastRoomService.callbackOnMemberStateChange(callbackOnMemberStateChange);
 
                 // 直播课学生签退
                 String[] values = callbackOnMemberStateChange.getGroupId().split("-");
                 String roomId = values.length > 2 ? values[1] : "";
 
+                // 直播课学生签退、签退
                 if ((roomId.startsWith("S") || roomId.startsWith("I"))
-                        && CollectionUtils.isNotEmpty(callbackOnMemberStateChange.getMemberList())
-                        && "Offline".equals(callbackOnMemberStateChange.getEventType())) {
+                        && CollectionUtils.isNotEmpty(callbackOnMemberStateChange.getMemberList())) {
 
                     // 学生编号
                     String userId = callbackOnMemberStateChange.getMemberList().get(0).getMemberAccount();
-                    try {
-                        roomService.leaveRoomSuccess(roomId, userId, null);
-                    } catch (Exception e) {
-                        log.error("tencentImCallback leaveRoomSuccess error, roomId={}, userId={}", roomId, userId, e);
+
+                    String eventType = callbackOnMemberStateChange.getEventType();
+                    // 学生离线消息通知
+                    if ("Offline".equals(eventType)) {
+
+                        try {
+                            roomService.leaveRoomSuccess(roomId, userId, null);
+                        } catch (Exception e) {
+                            log.error("tencentImCallback leaveRoomSuccess error, roomId={}, userId={}", roomId, userId, e);
+                        }
+                    }
+
+                    // 学生在线消息通知
+                    if ("Online".equals(eventType)) {
+
+                        try {
+                            roomService.joinRoomSuccess(roomId, userId, null);
+                        } catch (Exception e) {
+                            log.error("tencentImCallback joinRoomSuccess error, roomId={}, userId={}", roomId, userId, e);
+                        }
                     }
 
                 }
@@ -158,12 +175,14 @@ public class UserController {
             callbackAfterMemberExit.setOptPlatform(optPlatform);
 
             if (callbackAfterMemberExit.getGroupId().startsWith("LIVE")) {
+                // 直播间成员状态变更
                 imLiveBroadcastRoomService.callbackAfterMemberExit(callbackAfterMemberExit);
 
                 // 直播课学生签退
                 String[] values = callbackAfterMemberExit.getGroupId().split("-");
                 String roomId = values.length > 2 ? values[1] : "";
 
+                // 直播课学生签退、签退
                 if ((roomId.startsWith("S") || roomId.startsWith("I"))
                         && CollectionUtils.isNotEmpty(callbackAfterMemberExit.getExitMemberList())) {
 
@@ -188,12 +207,14 @@ public class UserController {
             callbackAfterNewMemberJoin.setOptPlatform(optPlatform);
 
             if (callbackAfterNewMemberJoin.getGroupId().startsWith("LIVE")) {
+                // 直播间成员状态变更
                 imLiveBroadcastRoomService.callbackAfterNewMemberJoin(callbackAfterNewMemberJoin);
 
                 // 直播课学生签到
                 String[] values = callbackAfterNewMemberJoin.getGroupId().split("-");
                 String roomId = values.length > 2 ? values[1] : "";
 
+                // 直播课学生签退、签退
                 if ((roomId.startsWith("S") || roomId.startsWith("I"))
                         && CollectionUtils.isNotEmpty(callbackAfterNewMemberJoin.getNewMemberList())) {
 

+ 3 - 0
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -1122,6 +1122,9 @@ public class RoomServiceImpl implements RoomService {
 
         log.info("leaveRoomSuccess: roomId={}, userId={}, deviceNum={}, joinTs={}, callbackTs={}", roomId, userId, deviceNum,
                 roomMember.getJoinDt().getTime(), callbackTs);
+
+        // 若用户已经离开房间,先添加用户到房间
+
         // 用户离开事件
         leaveRoomSuccess(roomId, userId, deviceNum);
     }