Преглед изворни кода

Merge branch 'feature/0803-im'

zouxuan пре 2 година
родитељ
комит
5da1df9ae0

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImService.java

@@ -36,5 +36,7 @@ public interface ImService{
     void sendDeviceStatusSync(ImNetworkDeviceControlDto deviceStatusSync, ImNetworkRoomMember roomMember) throws Exception;
 
     void sendRejectControlDevice(ImNetworkDeviceControlDto deviceControl, ImNetworkRoomMember roomMember, BasicUserInfo teacher) throws Exception;
+
+    void sendQuitRoomMsg(ImNetworkRoomMember roomMember,String serviceProvider) throws Exception;
 }
 

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java

@@ -1216,6 +1216,9 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         String joinImGroupKey = "joinImGroup:" + roomId;
         // VIP课或网络课,IM群聊已创建标识
         Boolean exists = redisTemplate.opsForValue().setIfAbsent(joinImGroupKey, roomId, 1L, TimeUnit.DAYS);
+        if(){
+
+        }
 
         RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(serverProvider);
         if (Optional.ofNullable(exists).orElse(false)) {

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImNetworkRoomServiceImpl.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.microsvc.toolkit.middleware.rtc.RTCRoomPluginService;
+import com.microsvc.toolkit.middleware.rtc.impl.TencentCloudRTCPlugin;
 import com.microsvc.toolkit.middleware.rtc.message.TencentRequest;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomDao;

+ 27 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImServiceImpl.java

@@ -509,6 +509,33 @@ public class ImServiceImpl implements ImService {
         }
     }
 
+    @Override
+    public void sendQuitRoomMsg(ImNetworkRoomMember roomMember,String serviceProvider) throws Exception {
+        RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(serviceProvider);
+        // 腾讯云RTC服务
+        RTCRoomMessage.MessageContent messageContent = RTCRoomMessage.MessageContent
+                .builder()
+                .action(EMemberAction.LEAVE.getValue())
+                .role(roomMember.getRole())
+                .handUpOn(false)
+                .timestamp(System.currentTimeMillis())
+                .microphone(false)
+                .camera(false)
+                .sendUserInfo(getSendUser(roomMember))
+                .build();
+
+        RTCRoomMessage roomMessage = RTCRoomMessage.builder()
+                .objectName(RTCRoomMessage.MEMBER_CHANGE_MESSAGE)
+                .toChatRoomId(roomMember.getRoomId())
+                .content(messageContent)
+                .fromUserId(roomMember.getUserId())
+                .isPersisted(1)
+                .isIncludeSender(1)
+                .build();
+
+        pluginService.sendChatRoomMessage(roomMessage);
+    }
+
     private RTCRoomMessage.MessageUser getSendUser(ImNetworkRoomMember roomMember) {
         RTCRoomMessage.MessageUser build = RTCRoomMessage.MessageUser.builder()
                 .sendUserId(roomMember.getUserId())

+ 9 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/RoomServiceImpl.java

@@ -22,6 +22,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -49,8 +50,8 @@ public class RoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNetworkRoom
     private ImNetworkRoomMemberService imNetworkRoomMemberService;
     @Autowired
     private ImService imService;
-    @Autowired
-    private ImGroupService imGroupService;
+    @Resource
+    private RedisTemplate<String,Object> redisTemplate;
 
     @Override
     public ImNetworkRoomDao getDao() {
@@ -119,12 +120,14 @@ public class RoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNetworkRoom
         int memberNum = imNetworkRoomMemberService.lambdaQuery()
                 .eq(ImNetworkRoomMember::getRoomId,roomId).count();
         if (memberNum <= 1) {
-            imHelper.dismiss(roomMember.getUserId(), roomId);
+            RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(serviceProvider);
+            redisTemplate.delete("joinImGroup:" + roomId);
+            pluginService.chatRoomDestroy(roomId);
+            //删除房间
+            this.removeById(room.getId());
             log.info("leaveRoomSuccess dismiss the room: {},userId: {}", roomId, roomMember.getUserId());
         } else {
-            ImNetworkRoomMemberChangedMessage msg = new ImNetworkRoomMemberChangedMessage(roomMember, ImNetworkRoomMemberChangedEnum.LEAVE);
-            imHelper.publishMessage(roomMember.getUserId(), roomId, msg);
-            imHelper.quit(new String[]{roomMember.getUserId()}, roomId);
+            imService.sendQuitRoomMsg(roomMember,serviceProvider);
             log.info("leaveRoomSuccess quit group: roomId={},userId: {}", roomId, roomMember.getUserId());
         }
         //删房间用户信息