Browse Source

直播人数

刘俊驰 1 năm trước cách đây
mục cha
commit
0df9e479b0

+ 32 - 0
mec-application/src/main/java/com/ym/mec/web/controller/open/OpenLiveController.java

@@ -0,0 +1,32 @@
+package com.ym.mec.web.controller.open;
+
+import com.ym.mec.biz.dal.dto.RoomMemberNumDto;
+import com.ym.mec.biz.service.ImLiveBroadcastRoomMemberService;
+import com.ym.mec.biz.service.ImLiveBroadcastRoomService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("${app-config.url.web:}/open/live")
+@Slf4j
+public class OpenLiveController extends BaseController {
+
+    @Autowired
+    private ImLiveBroadcastRoomService imLiveBroadcastRoomService;
+
+    @ApiOperation("查询房间人数")
+    @GetMapping("/queryRoomInfo")
+    public HttpResponseResult<RoomMemberNumDto> queryRoomInfo(@ApiParam(value = "房间uid", required = true) String roomUid) {
+        return succeed(imLiveBroadcastRoomService.getRoomMemberNumDto(roomUid));
+    }
+}

+ 12 - 0
mec-biz/src/main/java/com/mec/redisson/RedissonTopicListener.java

@@ -3,6 +3,9 @@ package com.mec.redisson;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo;
 import com.ym.mec.biz.redisson.RedissonMessageService;
 import com.ym.mec.biz.service.ImLiveBroadcastRoomService;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.dto.RoomMemberNumDto;
+import com.ym.mec.web.KLXFeignService;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RBucket;
 import org.redisson.api.RLock;
@@ -30,6 +33,9 @@ public class RedissonTopicListener implements ApplicationRunner, Ordered {
 
     @Autowired
     private ImLiveBroadcastRoomService imLiveBroadcastRoomService;
+
+    @Autowired
+    private KLXFeignService klxFeignService;
  
     @Override
     public void run(ApplicationArguments args) {
@@ -60,6 +66,12 @@ public class RedissonTopicListener implements ApplicationRunner, Ordered {
                             return;
                         }
                         try {
+                            HttpResponseResult<RoomMemberNumDto> queriedRoomInfo =
+                                klxFeignService.queryRoomInfo(message);
+                            if(queriedRoomInfo.getStatus()){
+                                imLiveBroadcastRoomVo.setLookNum(queriedRoomInfo.getData().getOnlineNum() + imLiveBroadcastRoomVo.getTotalLookNum());
+                                imLiveBroadcastRoomVo.setTotalLookNum(queriedRoomInfo.getData().getTotalNum() + imLiveBroadcastRoomVo.getTotalLookNum());
+                            }
                             imLiveBroadcastRoomService.setGroupMemberDefinedData(imLiveBroadcastRoomVo,imLiveBroadcastRoomVo.getLookNum(),imLiveBroadcastRoomVo.getTotalLookNum());
                         } catch (Exception e) {
                             log.error("RedissonMessageService subscribe setGroupMemberDefinedData error", e);

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/redisson/RedissonMessageService.java

@@ -14,10 +14,10 @@ import org.springframework.stereotype.Service;
 public class RedissonMessageService {
 
     // 订阅消息通知
-    public static final String TOPIC_MESSAGE = "topic:message";
+    public static final String TOPIC_MESSAGE = "gym:topic:message";
     // 直播在线人数
-    public static final String LIVE_ROOM_MEMBER = "delayQueue:liveRoomMember:";
-    public static final String LIVE_ROOM_MEMBER_LOCK = "LOCK:liveRoomMember:";
+    public static final String LIVE_ROOM_MEMBER = "gym:delayQueue:liveRoomMember:";
+    public static final String LIVE_ROOM_MEMBER_LOCK = "gym:LOCK:liveRoomMember:";
 
     private final RedissonClient redissonClient;
 

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

@@ -3,10 +3,7 @@ package com.ym.mec.biz.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.microsvc.toolkit.middleware.live.message.TencentWrapper;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dto.ImLiveBroadcastRoomDto;
-import com.ym.mec.biz.dal.dto.LiveRoomStatus;
-import com.ym.mec.biz.dal.dto.RoomReservationUserSearch;
-import com.ym.mec.biz.dal.dto.TencentData;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoom;
 import com.ym.mec.biz.dal.page.LiveRoomGoodsOrderQueryInfo;
 import com.ym.mec.biz.dal.vo.BaseRoomUserVo;
@@ -16,6 +13,7 @@ import com.ym.mec.biz.dal.vo.LiveRoomGoodsOrderVo;
 import com.ym.mec.biz.dal.vo.RoomUserInfoVo;
 import com.ym.mec.common.entity.ImUserState;
 import com.ym.mec.common.page.PageInfo;
+import org.jetbrains.annotations.NotNull;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -135,6 +133,9 @@ public interface ImLiveBroadcastRoomService extends IService<ImLiveBroadcastRoom
 
     void createLiveRoomNoTransactional(ImLiveBroadcastRoom room);
 
+    @NotNull
+    RoomMemberNumDto getRoomMemberNumDto(String roomUid);
+
     Map<String, Object> test(String roomUid, String userFlag);
 
     /**

+ 14 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -2532,12 +2532,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 
         // 不在从缓存中获取观看人数,改为从数据库中获取
 
-        RoomMemberNumDto roomMemberNumDto = liveBroadcastRoomMemberDao.queryMemberNum(roomVo.getRoomUid());
-        if (roomMemberNumDto == null) {
-            roomMemberNumDto = new RoomMemberNumDto();
-            roomMemberNumDto.setTotalNum(0);
-            roomMemberNumDto.setOnlineNum(0);
-        }
+        RoomMemberNumDto roomMemberNumDto = getRoomMemberNumDto(roomVo.getRoomUid());
         roomVo.setTotalLookNum(roomMemberNumDto.getTotalNum() == null? 0 : roomMemberNumDto.getTotalNum());
         roomVo.setLookNum(roomMemberNumDto.getOnlineNum() == null? 0 : roomMemberNumDto.getOnlineNum());
 
@@ -2550,6 +2545,19 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         }
     }
 
+    @NotNull
+    @Override
+    public RoomMemberNumDto getRoomMemberNumDto(String roomUid) {
+        RoomMemberNumDto roomMemberNumDto = liveBroadcastRoomMemberDao.queryMemberNum(roomUid);
+        if (roomMemberNumDto == null) {
+            roomMemberNumDto = new RoomMemberNumDto();
+            roomMemberNumDto.setTotalNum(0);
+            roomMemberNumDto.setOnlineNum(0);
+        }
+        return roomMemberNumDto;
+    }
+
+
     /**
      * 获取房间缓存中的用户数量/观看人数
      *

+ 60 - 0
mec-client-api/src/main/java/com/ym/mec/dto/RoomMember.java

@@ -0,0 +1,60 @@
+package com.ym.mec.dto;
+
+import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class RoomMember {
+
+
+
+//    @ApiModelProperty(value = "房间编号")
+    private String roomUid;
+
+//    @ApiModelProperty(value = "房间标题")
+    private String roomTitle;
+
+//    @ApiModelProperty(value = "主讲人")
+    private String speakerName;
+
+//    @ApiModelProperty(value = "学生编号")
+    private Integer studentId;
+
+//    @ApiModelProperty(value = "学生姓名")
+    private String studentName;
+
+//    @ApiModelProperty(value = "学生头像")
+    private String avatar;
+
+//    @ApiModelProperty(value = "手机号")
+    private String phone;
+
+//    @ApiModelProperty(value = "声部名称")
+    private String subName;
+
+//    @ApiModelProperty(value = "进入房间时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date joinTime;
+
+//    @ApiModelProperty(value = "累计观看时长")
+    private Integer totalViewTime;
+
+//    @ApiModelProperty(value = "连麦状态 0:未申请1:申请连麦中2:连麦中")
+    private Integer whetherMicStatus;
+
+//    @ApiModelProperty(value = "是否黑名单")
+    private boolean blackFlag;
+
+//    @ApiModelProperty("游客凭据")
+    private String fingerprint;
+
+//    @ApiModelProperty(value = "是否能上麦:false否;true是")
+    private boolean microphoneFlag;
+    public String jsonString() {
+        return JSON.toJSONString(this);
+    }
+
+}

+ 19 - 0
mec-client-api/src/main/java/com/ym/mec/dto/RoomMemberNumDto.java

@@ -0,0 +1,19 @@
+package com.ym.mec.dto;
+
+import lombok.Data;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2023-03-29
+ */
+@Data
+public class RoomMemberNumDto {
+
+    private String roomUid;
+
+    private Integer onlineNum;
+
+    private Integer totalNum;
+}

+ 32 - 0
mec-client-api/src/main/java/com/ym/mec/web/KLXFeignService.java

@@ -0,0 +1,32 @@
+package com.ym.mec.web;
+
+import com.ym.mec.common.config.FeignConfiguration;
+import com.ym.mec.common.dto.SchoolDto;
+import com.ym.mec.common.entity.*;
+import com.ym.mec.dto.RoomMember;
+import com.ym.mec.dto.RoomMemberNumDto;
+import com.ym.mec.thirdparty.adapay.entity.BaseResult;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+import com.ym.mec.web.fallback.WebFeignServiceFallback;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+@FeignClient(name = "${app-config.open-feign.klx-server.name:klx-server}",
+		contextId = "KLXFeignService",
+		url = "${app-config.open-feign.klx-server.url:}",
+		configuration = FeignConfiguration.class, fallback = WebFeignServiceFallback.class)
+public interface KLXFeignService {
+
+
+    @GetMapping("/open/live/queryRoomInfo")
+    HttpResponseResult<RoomMemberNumDto> queryRoomInfo(@RequestParam("roomUid") String roomUid);
+
+
+    //("查询直播间人员列表")
+    @PostMapping("/open/live/queryRoomMember")
+    HttpResponseResult<List<RoomMember>> queryRoomMember(@RequestBody Map<String, Object> param) ;
+}

+ 23 - 0
mec-client-api/src/main/java/com/ym/mec/web/fallback/KLXFeignServiceFallback.java

@@ -0,0 +1,23 @@
+package com.ym.mec.web.fallback;
+
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.dto.RoomMember;
+import com.ym.mec.dto.RoomMemberNumDto;
+import com.ym.mec.web.KLXFeignService;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class KLXFeignServiceFallback implements KLXFeignService {
+    @Override
+    public HttpResponseResult<RoomMemberNumDto> queryRoomInfo(String roomUid) {
+        return null;
+    }
+
+    @Override
+    public HttpResponseResult<List<RoomMember>> queryRoomMember(Map<String, Object> param) {
+        return null;
+    }
+}