Jelajahi Sumber

增加定时任务-每3秒像正在直播的直播间发送在线人数

hgw 3 tahun lalu
induk
melakukan
db1ed29025

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveBroadcastRoomService.java

@@ -52,6 +52,11 @@ public interface ImLiveBroadcastRoomService extends IService<ImLiveBroadcastRoom
 
     void syncLike(String roomUid, Integer likeNum);
 
+    /**
+     * 同步直播间在线人数 - 3秒一次发送到直播间消息中
+     */
+    void sendLiveOnlineNum();
+
     void opsRoom(List<ImUserState> userState);
 
     ImLiveBroadcastRoomVo speakerJoinRoom(String roomUid);

+ 31 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -517,6 +517,37 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     }
 
     /**
+     * 同步直播间在线人数 - 3秒一次发送到直播间消息中
+     */
+    @Override
+    public void sendLiveOnlineNum() {
+        //获取所有在直播中的直播间
+        List<ImLiveBroadcastRoom> liveRooms = this.list(Wrappers.<ImLiveBroadcastRoom>lambdaQuery()
+                .eq(ImLiveBroadcastRoom::getRoomState, 0)
+                .eq(ImLiveBroadcastRoom::getLiveState, 1)
+        );
+        if (CollectionUtils.isNotEmpty(liveRooms)) {
+            return;
+        }
+        log.info("sendLiveOnlineNum>>>> liveRooms{}", JSONObject.toJSONString(liveRooms));
+        liveRooms.forEach(room -> {
+            //发送消息到直播间
+            ImRoomMessage message = new ImRoomMessage();
+            message.setFromUserId(room.getSpeakerId().toString());
+            message.setToChatroomId(room.getRoomUid());
+            message.setObjectName(ImRoomMessage.MEMBER_COUNT);
+            message.setContent(getNum.apply(this::getOnlineUserCache, room.getRoomUid()));
+            try {
+                imFeignService.publishRoomMsg(message);
+                log.info("sendLiveOnlineNum>>>> room:{}", JSONObject.toJSONString(message));
+            } catch (Exception e) {
+                log.error("sendLiveOnlineNum>>>>  error {}", e.getMessage());
+                log.error("sendLiveOnlineNum>>>>  sendMessage {} :", JSONObject.toJSONString(message));
+            }
+        });
+    }
+
+    /**
      * <p>主讲人处理进入和退出房间数据
      * <p>观看者只处理退出房间数据
      *

+ 6 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -256,6 +256,12 @@ public interface TaskRemoteService {
     void destroyExpiredLiveRoom();
 
     /**
+     * 同步直播间在线人数 - 3秒一次发送到直播间消息中
+     */
+    @GetMapping("task/sendLiveOnlineNum")
+    void sendLiveOnlineNum();
+
+    /**
      * 学员小课统计
      */
     @GetMapping("task/studentSmallClassStatistics")

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -306,6 +306,11 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
     }
 
     @Override
+    public void sendLiveOnlineNum(){
+    	logger.error("直播间在线人数推送失败");
+    }
+
+    @Override
     public void studentSmallClassStatistics() {
         logger.error("学员小课统计失败");
     }

+ 3 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/entity/ImRoomMessage.java

@@ -12,6 +12,9 @@ public class ImRoomMessage extends BaseMessage {
     //objectName 类型-观看者退出房间
     public static final String LOOKER_LOGIN_OUT = "RC:LookerLoginOut";
 
+    //objectName 类型-观看者数量
+    public static final String MEMBER_COUNT = "RC:Chatroom:MemberCount";
+
     /**
      * 消息类型
      */

+ 20 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/SendLiveOnlineNumTask.java

@@ -0,0 +1,20 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SendLiveOnlineNumTask extends BaseTask {
+
+    @Autowired
+    private TaskRemoteService taskRemoteService;
+
+    @Override
+    public void execute() throws TaskException {
+        taskRemoteService.sendLiveOnlineNum();
+    }
+
+}

+ 6 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -583,6 +583,12 @@ public class TaskController extends BaseController {
         imLiveBroadcastRoomService.destroyExpiredLiveRoom();
     }
 
+    @ApiOperation("同步直播间在线人数 - 3秒一次发送到直播间消息中")
+    @GetMapping(value = "/sendLiveOnlineNum")
+    public void sendLiveOnlineNum(){
+        imLiveBroadcastRoomService.sendLiveOnlineNum();
+    }
+
     @ApiOperation("学员小课统计")
     @GetMapping(value = "/studentSmallClassStatistics")
     public void studentSmallClassStatistics(){