瀏覽代碼

Merge branch 'feature/0803-im' of http://git.dayaedu.com/yonge/cooleshow

# Conflicts:
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java
zouxuan 2 年之前
父節點
當前提交
0694732cf8

+ 30 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/ImController.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.admin.controller.open;
 
 import com.alibaba.fastjson.JSON;
 import com.google.common.collect.Lists;
+import com.microsvc.toolkit.middleware.im.properties.ImConfigProperties;
 import com.microsvc.toolkit.middleware.live.LivePluginContext;
 import com.microsvc.toolkit.middleware.live.LivePluginService;
 import com.microsvc.toolkit.middleware.live.impl.TencentCloudLivePlugin;
@@ -69,6 +70,10 @@ public class ImController extends BaseController {
     @Autowired
     private ImGroupService imGroupService;
 
+    @Autowired
+    private ImConfigProperties imConfig;
+
+
     @ApiOperation("新用户添加客服")
     @PostMapping(value = "/im/customerService")
     public HttpResponseResult<Boolean> customerService(@RequestBody UserFriendInfoVO info) {
@@ -156,6 +161,9 @@ public class ImController extends BaseController {
             callbackOnMemberStateChange.setClientIP(clientIP);
             callbackOnMemberStateChange.setOptPlatform(optPlatform);
             for (TencentData.MemberListDTO memberListDTO : callbackOnMemberStateChange.getMemberList()) {
+                if (imGroupService.checkImUserId(memberListDTO.getMemberAccount())) {
+                    return new TencentImCallbackResult();
+                }
                 memberListDTO.setMemberAccount(imGroupService.analysisImUserId(memberListDTO.getMemberAccount()));
             }
             // 直播间成员状态变更
@@ -169,6 +177,9 @@ public class ImController extends BaseController {
             callbackAfterMemberExit.setClientIP(clientIP);
             callbackAfterMemberExit.setOptPlatform(optPlatform);
             for (TencentData.MemberListDTO memberListDTO : callbackAfterMemberExit.getExitMemberList()) {
+                if (imGroupService.checkImUserId(memberListDTO.getMemberAccount())) {
+                    return new TencentImCallbackResult();
+                }
                 memberListDTO.setMemberAccount(imGroupService.analysisImUserId(memberListDTO.getMemberAccount()));
             }
             // 直播间成员状态变更
@@ -182,6 +193,9 @@ public class ImController extends BaseController {
             callbackAfterNewMemberJoin.setClientIP(clientIP);
             callbackAfterNewMemberJoin.setOptPlatform(optPlatform);
             for (TencentData.MemberListDTO memberListDTO : callbackAfterNewMemberJoin.getNewMemberList()) {
+                if (imGroupService.checkImUserId(memberListDTO.getMemberAccount())) {
+                    return new TencentImCallbackResult();
+                }
                 memberListDTO.setMemberAccount(imGroupService.analysisImUserId(memberListDTO.getMemberAccount()));
             }
             // 直播间成员状态变更
@@ -201,6 +215,10 @@ public class ImController extends BaseController {
 
         TencentData.CallbackStreamStateEvent event = TencentData.CallbackStreamStateEvent.from(body);
 
+        boolean b = checkStream(event.getStreamId());
+        if (!b) {
+            return TencentData.StreamEventCallbackResult.builder().code(0).build();
+        }
 
         ImUserStateSync imUserState = new ImUserStateSync();
         imUserState.setUserid(getSpeakerId(event.getStreamId()).toString());
@@ -232,6 +250,12 @@ public class ImController extends BaseController {
         return TencentData.StreamEventCallbackResult.builder().code(0).build();
     }
 
+
+    private boolean checkStream(String streamId) {
+        return imGroupService.checkImUserId(streamId.split("_",2)[1]);
+    }
+
+
     private Integer getSpeakerId(String streamId) {
         return Integer.parseInt(imGroupService.analysisImUserId(streamId.split("_",2)[1]));
     }
@@ -248,6 +272,12 @@ public class ImController extends BaseController {
 
         TencentData.CallbackSteamRecordEvent event = TencentData.CallbackSteamRecordEvent.from(body);
 
+
+        boolean b = checkStream(event.getStreamId());
+        if (!b) {
+            return TencentData.StreamEventCallbackResult.builder().code(0).build();
+        }
+
         // 直播录制事件通知
         if (event.getStreamId().startsWith("LIVE")) {
             log.info("taskId={}, url={}", event.getTaskId(), event.getVideoUrl());

+ 9 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupService.java

@@ -1,6 +1,5 @@
 package com.yonge.cooleshow.biz.dal.service;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
 import com.microsvc.toolkit.middleware.rtc.RTCRoomPluginService;
@@ -8,7 +7,6 @@ import com.yonge.cooleshow.biz.dal.dao.ImGroupDao;
 import com.yonge.cooleshow.biz.dal.dto.BasicUserInfo;
 import com.yonge.cooleshow.biz.dal.dto.ImGroupResultDto;
 import com.yonge.cooleshow.biz.dal.dto.ImGroupSearchDto;
-import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
 import com.yonge.cooleshow.biz.dal.entity.ImGroup;
 import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
 import com.yonge.cooleshow.biz.dal.entity.ImHistoryMessage;
@@ -64,6 +62,15 @@ public interface ImGroupService extends IService<ImGroup> {
      */
     String analysisImUserId(String imUserId);
 
+
+    /**
+     * 检测imUserid
+     *
+     * @param imUserId IM用户Id
+     * @return String
+     */
+    boolean checkImUserId(String imUserId);
+
     String analysisImUserClient(String imUserId);
 
     /**

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

@@ -281,6 +281,18 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         return imUserId;
     }
 
+
+    /**
+     * 检测imUserid
+     *
+     * @param imUserId IM用户Id
+     * @return String
+     */
+    @Override
+    public boolean checkImUserId(String imUserId) {
+       return imUserId.startsWith(imConfig.getAppPrefix());
+    }
+
     @Override
     public String analysisImUserClient(String imUserId) {
         if (StringUtils.isNotBlank(imConfig.getAppPrefix()) && imUserId.startsWith(imConfig.getAppPrefix())) {

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

@@ -100,8 +100,11 @@ public class ImServiceImpl implements ImService {
     @Override
     public void sendDisplay(String imUserId, ImNetworkRoom room,String serviceProvider) throws Exception {
         // IM发送用户消息
+        RoleEnum roleEnum = RoleEnum.valueOf(imGroupService.analysisImUserClient(imUserId));
         ImNetworkRoomMember roomMember = imNetworkRoomMemberService.lambdaQuery().eq(ImNetworkRoomMember::getUserId, imUserId)
-                .eq(ImNetworkRoomMember::getRoomId, room.getRoomId()).last("LIMIT 1").one();
+                .eq(ImNetworkRoomMember::getRoomId, room.getRoomId())
+                .eq(ImNetworkRoomMember::getRole,roleEnum.getValue())
+                .last("LIMIT 1").one();
         if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(serviceProvider) || StringUtils.isEmpty(serviceProvider)) {
             // 获取RTC服务提供方
             RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(TencentCloudRTCPlugin.PLUGIN_NAME);

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

@@ -831,6 +831,27 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             }
             //这里开始只处理观看者的数据,观看者只接受退出消息 status=0 是进入房间
             if (user.getStatus().equals("0")) {
+
+                // 更新用户在线状态
+                imLiveBroadcastRoomMemberService.lambdaUpdate()
+                        .eq(ImLiveBroadcastRoomMember::getRoomUid, roomVo.getRoomUid())
+                        .eq(ImLiveBroadcastRoomMember::getUserId, user.getUserid())
+                        .set(ImLiveBroadcastRoomMember::getOnlineStatus, 1)
+                        .update();
+
+
+                // 用户进入直播间,发送统计数据
+                // sendLiveRoomStatMessage(userid, roomVo);
+
+                // 缓存JoinRoom用户信息到redis
+                RBucket<Object> bucket = redissonClient.getBucket(RedissonMessageService.LIVE_ROOM_MEMBER + roomUid);
+                if (!bucket.isExists()) {
+                    bucket.set(0, 30, TimeUnit.MINUTES);
+                    // 发布删除缓存消息
+                    redissonMessageService.publish(RedissonMessageService.TOPIC_MESSAGE, roomUid);
+                }
+
+                log.debug("opsRoom>>>> user enter room, userState: {}", JSON.toJSONString(userState));
                 return;
             }
             //用户id