Explorar o código

Merge branch 'feature/0414-trtc' into master_saas

Eric %!s(int64=2) %!d(string=hai) anos
pai
achega
5187ee8081

+ 2 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -174,7 +174,8 @@
         cs.valid_start_time_,
         cs.pre_course_flag_,
         cs.tenant_id_,
-        cs.evaluate_flag_
+        cs.evaluate_flag_,
+        cs.service_provider_
     </sql>
 
     <sql id="courseIgnore">

+ 88 - 10
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -6,6 +6,8 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.google.common.collect.Lists;
 import com.microsvc.toolkit.middleware.rtc.RTCRoomPluginContext;
 import com.microsvc.toolkit.middleware.rtc.RTCRoomPluginService;
+import com.microsvc.toolkit.middleware.rtc.enums.EMemberAction;
+import com.microsvc.toolkit.middleware.rtc.enums.EMemberRole;
 import com.microsvc.toolkit.middleware.rtc.impl.TencentCloudRTCPlugin;
 import com.microsvc.toolkit.middleware.rtc.message.ImGroupMemberWrapper;
 import com.microsvc.toolkit.middleware.rtc.message.RTCRoomMessage;
@@ -267,7 +269,7 @@ public class RoomServiceImpl implements RoomService {
         String rtcServiceProvider = Optional.ofNullable(sysConfigDao.findConfigValue("rtc_service_provider")).orElse("rongCloud");
 
         RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(rtcServiceProvider);
-        if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(rtcServiceProvider)) {
+        if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
             // 腾讯云RTC
             // 用户IM帐号创建
             String userSig = "";
@@ -317,12 +319,17 @@ public class RoomServiceImpl implements RoomService {
                     }
                 }
 
-                // 加入群组成员
-                log.info("joinImGroup: roomId = {}, userIds = {}", roomId, groupMembers);
-                pluginService.chatRoomGroupJoin(roomId, courseSchedule.getName(), groupMembers);
+                // 生成群组,更新服务提供方
+                if (StringUtils.isBlank(courseSchedule.getServiceProvider())) {
+
+                    // 加入群组成员
+                    log.info("joinImGroup: roomId = {}, userIds = {}", roomId, groupMembers);
+                    pluginService.chatRoomGroupJoin(roomId, courseSchedule.getName(), groupMembers);
+
+                    // 更新网络课服务提供方
+                    courseScheduleDao.updateServiceProvider(courseSchedule.getId(), rtcServiceProvider);
+                }
 
-                // 更新网络课服务提供方
-                courseScheduleDao.updateServiceProvider(courseSchedule.getId(), rtcServiceProvider);
             }
         }
 
@@ -528,7 +535,45 @@ public class RoomServiceImpl implements RoomService {
         msg.setHandUpOn(roomMember.isHand());
         msg.setMetronomeSwitch(playMidi);
         msg.setExamSongSwitch(examSong);
-        imHelper.publishMessage(userId, roomId, msg);
+
+
+        // 获取RTC服务提供方
+        String rtcServiceProvider = Optional.ofNullable(sysConfigDao.findConfigValue("rtc_service_provider")).orElse("rongCloud");
+
+        RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(rtcServiceProvider);
+        if (rtcServiceProvider.equals(TencentCloudRTCPlugin.PLUGIN_NAME)) {
+            // 腾讯云RTC服务
+            RTCRoomMessage.MessageContent.MessageContentBuilder action = RTCRoomMessage.MessageContent.builder()
+                    .action(EMemberAction.JOIN.getValue());
+
+            if (roleEnum == RoleTeacher) {
+                action.role(EMemberRole.TEACHER.getValue());
+            } else {
+                action.role(EMemberRole.STUDENT.getValue());
+            }
+            action.handUpOn(roomMember.isHand())
+                    .microphone(playMidi)
+                    .camera(true)
+                    .sendUserInfo(RTCRoomMessage.MessageUser.builder()
+                            .sendUserId(userId)
+                            .sendUserName(userInfo.getName())
+                            .avatarUrl(roomMember.getHeadUrl())
+                            .build());
+
+
+            RTCRoomMessage roomMessage = RTCRoomMessage.builder()
+                    .objectName(RTCRoomMessage.MEMBER_CHANGE_MESSAGE)
+                    .fromUserId(userId)
+                    .content(action.build())
+                    .toChatRoomId(roomId)
+                    .isPersisted(1)
+                    .isIncludeSender(1)
+                    .build();
+
+            pluginService.sendChatRoomMessage(roomMessage);
+        } else {
+            imHelper.publishMessage(userId, roomId, msg);
+        }
         log.info("join room success: roomId = {}, userId = {}, role = {}", roomId, userId, roleEnum);
         signInSuccess(roomMember, deviceNum);
     }
@@ -641,10 +686,43 @@ public class RoomServiceImpl implements RoomService {
             log.info("leaveRoomSuccess dismiss the room: {},userId: {}", roomId, userId);
         } else {
             roomMemberDao.deleteUserByRidAndUid(roomId, userId);
-            MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Leave, userId, roleEnum.getValue());
-            msg.setUserName(username);
-            imHelper.publishMessage(userId, roomId, msg);
+
+            // 获取RTC服务提供方
+            String rtcServiceProvider = Optional.ofNullable(sysConfigDao.findConfigValue("rtc_service_provider")).orElse("rongCloud");
+
+            RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(rtcServiceProvider);
+            if (rtcServiceProvider.equals(TencentCloudRTCPlugin.PLUGIN_NAME)) {
+                // 腾讯云RTC服务
+                RTCRoomMessage.MessageContent.MessageContentBuilder action = RTCRoomMessage.MessageContent.builder()
+                        .action(EMemberAction.LEAVE.getValue());
+
+                if (roleEnum == RoleTeacher) {
+                    action.role(EMemberRole.TEACHER.getValue());
+                } else {
+                    action.role(EMemberRole.STUDENT.getValue());
+                }
+                action.handUpOn(false)
+                      .microphone(false)
+                      .camera(false).sendUserInfo(RTCRoomMessage.MessageUser.builder()
+                                .sendUserId(userId)
+                                .sendUserName(username)
+                                .avatarUrl(sysUser.getAvatar())
+                                .build());
+
+
+                RTCRoomMessage roomMessage = RTCRoomMessage.builder()
+                        .objectName(RTCRoomMessage.MEMBER_CHANGE_MESSAGE)
+                        .content(action.build())
+                        .build();
+
+                pluginService.sendChatRoomMessage(roomMessage);
+            } else {
+                MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Leave, userId, roleEnum.getValue());
+                msg.setUserName(username);
+                imHelper.publishMessage(userId, roomId, msg);
 //            imHelper.quit(new String[]{userId}, roomId);
+            }
+
             log.info("leaveRoomSuccess quit group: roomId={},userId: {}", roomId, userId);
         }
         userDao.deleteByUid(userId);