Browse Source

Merge remote-tracking branch 'origin/master_saas' into master_saas

zouxuan 2 years ago
parent
commit
fa826313ed

+ 31 - 16
mec-biz/src/main/java/com/mec/redisson/RedissonTopicListener.java

@@ -5,6 +5,7 @@ import com.ym.mec.biz.redisson.RedissonMessageService;
 import com.ym.mec.biz.service.ImLiveBroadcastRoomService;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RBucket;
+import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.ApplicationArguments;
@@ -43,24 +44,38 @@ public class RedissonTopicListener implements ApplicationRunner, Ordered {
                     log.error("RedissonMessageService subscribe sleep error", e);
                 }
 
-                // 缓存JoinRoom用户信息到redis
-                RBucket<Object> bucket = redissonClient.getBucket(RedissonMessageService.LIVE_ROOM_MEMBER + message);
-                if (!bucket.isExists()) {
-                   return;
-                }
-                bucket.delete();
-
-                ImLiveBroadcastRoomVo imLiveBroadcastRoomVo = imLiveBroadcastRoomService.queryRoomInfo(message);
-                if (Objects.isNull(imLiveBroadcastRoomVo)) {
-                    return;
-                }
+                RLock lock = redissonClient.getLock(RedissonMessageService.LIVE_ROOM_MEMBER_LOCK + message);
                 try {
-                    imLiveBroadcastRoomService.setGroupMemberDefinedData(imLiveBroadcastRoomVo,imLiveBroadcastRoomVo.getLookNum(),imLiveBroadcastRoomVo.getTotalLookNum());
-                } catch (Exception e) {
-                    log.error("RedissonMessageService subscribe setGroupMemberDefinedData error", e);
-                    bucket.set(message, 30, TimeUnit.MINUTES);
+                    if (lock.tryLock()) {
+                        // 缓存JoinRoom用户信息到redis
+                        RBucket<Object> bucket = redissonClient.getBucket(RedissonMessageService.LIVE_ROOM_MEMBER + message);
+                        if (!bucket.isExists()) {
+                            return;
+                        }
+                        Integer times = (Integer) bucket.get();
+                        bucket.delete();
+
+                        ImLiveBroadcastRoomVo imLiveBroadcastRoomVo = imLiveBroadcastRoomService.queryRoomInfo(message);
+                        if (Objects.isNull(imLiveBroadcastRoomVo)) {
+                            return;
+                        }
+                        try {
+                            imLiveBroadcastRoomService.setGroupMemberDefinedData(imLiveBroadcastRoomVo,imLiveBroadcastRoomVo.getLookNum(),imLiveBroadcastRoomVo.getTotalLookNum());
+                        } catch (Exception e) {
+                            log.error("RedissonMessageService subscribe setGroupMemberDefinedData error", e);
+                            if (times>=3) {
+                                return;
+                            }
+                            bucket.set(times +1, 30, TimeUnit.MINUTES);
+                        }
+                        redissonMessageService.publish(RedissonMessageService.TOPIC_MESSAGE, message);
+                    }
+                } finally {
+                    if (lock.getHoldCount() != 0 && lock.isHeldByCurrentThread()) {
+                        lock.unlock();
+                    }
                 }
-                redissonMessageService.publish(RedissonMessageService.TOPIC_MESSAGE, message);
+
 
             });
             log.info("---> RedissonMessageService subscribe success");

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LiveRoomStatus.java

@@ -35,4 +35,7 @@ public class LiveRoomStatus {
     @ApiModelProperty(value = "直播时长")
     private Integer liveTotalTime;
 
+    @ApiModelProperty(value = "全员闭麦状态 1:开启 0:关闭")
+    private Integer micStatus;
+
 }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/EGroupDefinedDataType.java

@@ -44,6 +44,10 @@ public enum EGroupDefinedDataType {
      */
     ANCHOR_CAMERA("主播摄像头状态"), // 开启摄像头 "ON" 关闭摄像头 "OFF"
 
+    /**
+     * 主播全员闭麦状态
+     */
+    ANCHOR_MIC("主播全员闭麦状态"), // 开启 "ON" 关闭 "OFF"
     ;
     private String code;
 

+ 61 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ImLiveBroadcastRoomMemberVo.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.vo;
 
+import com.alibaba.fastjson.JSON;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -54,6 +55,66 @@ public class ImLiveBroadcastRoomMemberVo implements java.io.Serializable {
     @ApiModelProperty(value = "是否黑名单")
     private boolean blackFlag;
 
+    public ImLiveBroadcastRoomSimpleMemberVo getSimpleMemberVo(ImLiveBroadcastRoomMemberVo memberVo) {
+        return JSON.parseObject(JSON.toJSONString(memberVo), ImLiveBroadcastRoomSimpleMemberVo.class);
+    }
+
+    public static class ImLiveBroadcastRoomSimpleMemberVo {
+
+        @ApiModelProperty(value = "学生头像")
+        private String avatar;
+        @ApiModelProperty(value = "是否黑名单")
+        private boolean blackFlag;
+        @ApiModelProperty(value = "进入房间时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private Date joinTime;
+        @ApiModelProperty(value = "学生编号")
+        private Integer studentId;
+
+        @ApiModelProperty(value = "学生姓名")
+        private String studentName;
+
+        public String getAvatar() {
+            return avatar;
+        }
+
+        public void setAvatar(String avatar) {
+            this.avatar = avatar;
+        }
+
+        public boolean isBlackFlag() {
+            return blackFlag;
+        }
+
+        public void setBlackFlag(boolean blackFlag) {
+            this.blackFlag = blackFlag;
+        }
+
+        public Date getJoinTime() {
+            return joinTime;
+        }
+
+        public void setJoinTime(Date joinTime) {
+            this.joinTime = joinTime;
+        }
+
+        public Integer getStudentId() {
+            return studentId;
+        }
+
+        public void setStudentId(Integer studentId) {
+            this.studentId = studentId;
+        }
+
+        public String getStudentName() {
+            return studentName;
+        }
+
+        public void setStudentName(String studentName) {
+            this.studentName = studentName;
+        }
+    }
+
     public boolean isBlackFlag() {
         return blackFlag;
     }

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

@@ -17,6 +17,7 @@ public class RedissonMessageService {
     public static final String TOPIC_MESSAGE = "topic:message";
     // 直播在线人数
     public static final String LIVE_ROOM_MEMBER = "delayQueue:liveRoomMember:";
+    public static final String LIVE_ROOM_MEMBER_LOCK = "LOCK:liveRoomMember:";
 
     private final RedissonClient redissonClient;
 

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

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomDetailVo;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomMemberVo;
 import com.ym.mec.common.page.PageInfo;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -30,5 +31,9 @@ public interface ImLiveBroadcastRoomMemberService extends IService<ImLiveBroadca
      */
     PageInfo<ImLiveBroadcastRoomMemberVo> queryRoomMember(Map<String, Object> param);
 
+    /**
+     * 查询在房间人员
+     */
+    List<Integer> getLiveRoomMember(String roomUid);
 }
 

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

@@ -1,6 +1,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.biz.dal.dto.ImLiveBroadcastRoomDto;
 import com.ym.mec.biz.dal.dto.LiveRoomStatus;
 import com.ym.mec.biz.dal.dto.RoomReservationUserSearch;
@@ -186,5 +187,12 @@ public interface ImLiveBroadcastRoomService extends IService<ImLiveBroadcastRoom
      * @param roomUid 直播间uid
      */
     int syncLikeCount(String roomUid);
+
+    /**
+     * 直播间推流状态查询
+     * @param roomUid 直播间ID
+     * @return TencentWrapper.LiveStreamState
+     */
+    TencentWrapper.LiveStreamState roomLiveStreamStatus(String roomUid);
 }
 

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomMemberServiceImpl.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service.impl;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ym.mec.biz.dal.dao.ImLiveBroadcastRoomMemberDao;
+import com.ym.mec.biz.dal.dto.LiveRoomStatus;
 import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomMember;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomDetailVo;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomMemberVo;
@@ -17,7 +18,10 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 直播间人员关系表(ImLiveBroadcastRoomMember)表服务实现类
@@ -57,5 +61,22 @@ public class ImLiveBroadcastRoomMemberServiceImpl extends ServiceImpl<ImLiveBroa
         return PageUtil.pageInfo(baseMapper.queryMemberPage(pageInfo, param));
     }
 
+    /**
+     * 查询在房间人员
+     *
+     * @param roomUid
+     */
+    @Override
+    public List<Integer> getLiveRoomMember(String roomUid) {
+        List<ImLiveBroadcastRoomMember> list = this.lambdaQuery()
+                                                   .eq(ImLiveBroadcastRoomMember::getRoomUid, roomUid)
+                                                   .eq(ImLiveBroadcastRoomMember::getLiveRoomStatus, true)
+                                                   .list();
+        if (list == null || list.isEmpty())
+            return new ArrayList<>();
+
+        return list.stream().map(ImLiveBroadcastRoomMember::getUserId).collect(Collectors.toList());
+    }
+
 }
 

+ 49 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -736,7 +736,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                     pluginService.rtcRoomRecordStop(taskId);
                 }
             }
-//            imFeignService.destroyLiveRoom(roomUid);
+
+            //            imFeignService.destroyLiveRoom(roomUid);
             log.info("roomDestroy>>>> destroyLiveRoom {}", JSONObject.toJSONString(message));
         } catch (Exception e) {
             log.error("roomDestroy>>>> errorMsg{}", e.getMessage(), e.getCause());
@@ -764,6 +765,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                 member.setTenantId(v.getTenantId());
                 member.setRoomUid(roomUid);
                 member.setUserId(v.getUserId());
+                member.setOnlineStatus(0);
+                member.setLiveRoomStatus(0);
                 member.setJoinTime(v.getFirstJoinTime());
                 member.setTotalTime(getLookMinutes(v.getDynamicLookTime(), now, v.getTotalViewTime()));
                 memberList.add(member);
@@ -921,7 +924,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                 // 缓存JoinRoom用户信息到redis
                 RBucket<Object> bucket = redissonClient.getBucket(RedissonMessageService.LIVE_ROOM_MEMBER + roomUid);
                 if (!bucket.isExists()) {
-                    bucket.set(roomUid, 30, TimeUnit.MINUTES);
+                    bucket.set(0, 30, TimeUnit.MINUTES);
                     // 发布删除缓存消息
                     redissonMessageService.publish(RedissonMessageService.TOPIC_MESSAGE, roomUid);
                 }
@@ -1119,7 +1122,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         // 缓存JoinRoom用户信息到redis
         RBucket<Object> bucket = redissonClient.getBucket(RedissonMessageService.LIVE_ROOM_MEMBER + roomUid);
         if (!bucket.isExists()) {
-            bucket.set(roomUid, 30, TimeUnit.MINUTES);
+            bucket.set(0, 30, TimeUnit.MINUTES);
             // 发布删除缓存消息
             redissonMessageService.publish(RedissonMessageService.TOPIC_MESSAGE, roomUid);
         }
@@ -2367,12 +2370,21 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 
         imLiveBroadcastRoom.setBanStatus(liveRoom.getBanStatus());
         whetherChat(room.getId(), liveRoom.getBanStatus());
+
         // 不用前端传时间
         // imLiveBroadcastRoom.setLiveTotalTime(liveRoom.getLiveTotalTime());
+
         // 设置摄像头状态
         if (liveRoom.getCameraStatus() != null) {
-            setGroupDefinedData(room,EGroupDefinedDataType.ANCHOR_CAMERA,liveRoom.getCameraStatus() == 1?
-                EOnOffStatus.ON.getCode():EOnOffStatus.OFF.getCode());
+            setGroupDefinedData(room, EGroupDefinedDataType.ANCHOR_CAMERA,
+                    liveRoom.getCameraStatus() == 1 ? EOnOffStatus.ON.getCode():EOnOffStatus.OFF.getCode());
+            return true;
+        }
+
+        // 设置全员闭麦状态
+        if (Objects.nonNull(liveRoom.getMicStatus())) {
+            setGroupDefinedData(room, EGroupDefinedDataType.ANCHOR_MIC,
+                    liveRoom.getMicStatus() == 1 ? EOnOffStatus.ON.getCode() : EOnOffStatus.OFF.getCode());
             return true;
         }
 
@@ -2648,6 +2660,38 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         return 0;
     }
 
+    /**
+     * 直播间推流状态查询
+     *
+     * @param roomUid 直播间ID
+     * @return TencentWrapper.LiveStreamState
+     */
+    @Override
+    public TencentWrapper.LiveStreamState roomLiveStreamStatus(String roomUid) {
+
+        // 直播间信息
+        ImLiveBroadcastRoomVo roomVo = getImLiveBroadcastRoomVo(roomUid);
+        if (Objects.isNull(roomVo)) {
+            throw new BizException("无效的直播间ID");
+        }
+
+        TencentWrapper.LiveStreamState liveStreamState = TencentWrapper.LiveStreamState
+                .builder()
+                .streamState("inactive")
+                .requestId("")
+                .build();
+        // 直播间推流状态
+        try {
+            LivePluginService pluginService = livePluginContext.getPluginService(roomVo.getServiceProvider());
+
+            liveStreamState = pluginService.liveStreamState(getStreamId(roomUid, roomVo.getSpeakerId()));
+        } catch (Exception e) {
+            log.error("roomLiveStreamStatus roomUid={}", roomUid, e);
+        }
+
+        return liveStreamState;
+    }
+
 
     /**
      * 查询直播间所有用户信息

+ 3 - 3
mec-biz/src/main/resources/config/mybatis/ImLiveBroadcastRoomMemberMapper.xml

@@ -17,11 +17,11 @@
 
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomMember">
-        insert into im_live_broadcast_room_member(tenant_id_, room_uid_, user_id_, join_time_, total_time_) values
+        insert into im_live_broadcast_room_member(tenant_id_, room_uid_, user_id_, join_time_, total_time_,online_status_,live_room_status_) values
         <foreach collection="entities" item="entity" separator=",">
-            (#{entity.tenantId}, #{entity.roomUid}, #{entity.userId}, #{entity.joinTime}, #{entity.totalTime})
+            (#{entity.tenantId}, #{entity.roomUid}, #{entity.userId}, #{entity.joinTime}, #{entity.totalTime},0,0)
         </foreach>
-        ON DUPLICATE KEY UPDATE join_time_ = VALUES(join_time_), total_time_ = VALUES(total_time_)
+        ON DUPLICATE KEY UPDATE join_time_ = VALUES(join_time_), total_time_ = VALUES(total_time_),online_status_ = 0,live_room_status_ = 0
     </insert>
 
     <select id="queryMemberPage" resultType="com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomMemberVo">

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/StudentApplication.java

@@ -22,7 +22,7 @@ import com.ym.mec.common.filters.EmojiEncodingFilter;
 @EnableDiscoveryClient
 @EnableFeignClients("com.ym.mec")
 @MapperScan(basePackages = {"com.ym.mec.biz.**.dao", "com.yonge.datasource.dao"})
-@ComponentScan(basePackages = {"com.ym.mec", "com.yonge.log", "com.mec.redisson", "com.yonge.datasource"})
+@ComponentScan(basePackages = {"com.ym.mec", "com.yonge.log",  "com.yonge.datasource"})
 @Configuration
 @EnableSwagger2Doc
 @EnableAsync

+ 1 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/TeacherApplication.java

@@ -22,7 +22,7 @@ import com.ym.mec.common.filters.EmojiEncodingFilter;
 @EnableDiscoveryClient
 @EnableFeignClients("com.ym.mec")
 @MapperScan(basePackages = {"com.ym.mec.biz.**.dao", "com.yonge.datasource.dao"})
-@ComponentScan(basePackages = { "com.ym.mec", "org.snaker.engine", "com.yonge.log", "com.mec.redisson", "com.yonge.datasource"})
+@ComponentScan(basePackages = { "com.ym.mec", "org.snaker.engine", "com.yonge.log",  "com.yonge.datasource"})
 @Configuration
 @EnableSwagger2Doc
 @EnableAsync

+ 12 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherImLiveBroadcastRoomController.java

@@ -1,5 +1,6 @@
 package com.ym.mec.teacher.controller;
 
+import com.microsvc.toolkit.middleware.live.message.TencentWrapper;
 import com.ym.mec.biz.dal.dto.LiveRoomStatus;
 import com.ym.mec.biz.dal.dto.RoomReservationUserSearch;
 import com.ym.mec.biz.dal.page.LiveRoomGoodsOrderQueryInfo;
@@ -199,5 +200,16 @@ public class TeacherImLiveBroadcastRoomController extends BaseController {
     public HttpResponseResult<Boolean> updateRoomStatus(@RequestBody @Valid LiveRoomStatus status ) {
         return succeed(imLiveBroadcastRoomService.updateRoomStatus(status));
     }
+
+    @ApiOperation("直播间推流状态")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "roomUid", dataType = "String", value = "房间Uid", required = true),
+    })
+    @GetMapping(value = "/liveStreamStatus")
+    public HttpResponseResult<TencentWrapper.LiveStreamState> roomLiveStream(String roomUid) {
+
+        // 直播间推流状态查询
+        return succeed(imLiveBroadcastRoomService.roomLiveStreamStatus(roomUid));
+    }
 }
 

+ 29 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherImLiveBroadcastRoomMemberController.java

@@ -1,11 +1,13 @@
 package com.ym.mec.teacher.controller;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomDetailVo;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomMemberVo;
 import com.ym.mec.biz.service.ImLiveBroadcastRoomMemberService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -16,7 +18,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 直播间人员关系表(ImLiveBroadcastRoomMember)表控制层
@@ -57,5 +61,30 @@ public class TeacherImLiveBroadcastRoomMemberController extends BaseController {
         return succeed(imLiveBroadcastRoomMemberService.queryRoomMember(param));
     }
 
+
+
+
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "search", dataType = "String", value = "模糊搜索 学员编号姓名"),
+        @ApiImplicitParam(name = "roomUid", dataType = "String", value = "房间uid"),
+        @ApiImplicitParam(name = "onlineStatus", dataType = "String ", value = "0:离线 1:在线  不传是全部"),
+        @ApiImplicitParam(name = "whetherMicStatus", dataType = "String", value = "连麦状态 0:未申请1:申请连麦中2:连麦中"),
+        @ApiImplicitParam(name = "page", dataType = "Integer", value = "页数"),
+        @ApiImplicitParam(name = "rows", dataType = "Integer", value = "每页数量"),
+    })
+    @ApiOperation("分页查询直播间人员列表")
+    @PostMapping("/queryRoomSimpleMember")
+    public HttpResponseResult<PageInfo<ImLiveBroadcastRoomMemberVo.ImLiveBroadcastRoomSimpleMemberVo>> queryRoomSimpleMember(@RequestBody Map<String, Object> param) {
+        PageInfo<ImLiveBroadcastRoomMemberVo> roomMember = imLiveBroadcastRoomMemberService.queryRoomMember(
+            param);
+
+        List<ImLiveBroadcastRoomMemberVo.ImLiveBroadcastRoomSimpleMemberVo> simpleMemberVos = roomMember.getRows().stream().map(
+            o -> o.getSimpleMemberVo(o)).collect(Collectors.toList());
+
+
+        Page<ImLiveBroadcastRoomMemberVo.ImLiveBroadcastRoomSimpleMemberVo> pageInfo = PageUtil.getPageInfo(param);
+        pageInfo.setRecords(simpleMemberVos);
+        return succeed(PageUtil.pageInfo(pageInfo));
+    }
 }
 

+ 13 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ImLiveBroadcastRoomController.java

@@ -1,5 +1,6 @@
 package com.ym.mec.web.controller;
 
+import com.microsvc.toolkit.middleware.live.message.TencentWrapper;
 import com.ym.mec.biz.dal.dto.ImLiveBroadcastRoomDto;
 import com.ym.mec.biz.dal.dto.LiveRoomStatus;
 import com.ym.mec.biz.dal.dto.RoomReservationUserSearch;
@@ -302,5 +303,17 @@ public class ImLiveBroadcastRoomController extends BaseController {
         imLiveBroadcastRoomService.whetherMic(roomUid,whetherMic);
         return succeed();
     }
+
+    @ApiOperation("直播间推流状态")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "roomUid", dataType = "String", value = "房间Uid", required = true),
+    })
+    @GetMapping(value = "/liveStreamStatus")
+    public HttpResponseResult<TencentWrapper.LiveStreamState> roomLiveStream(String roomUid) {
+
+        // 直播间推流状态查询
+        return succeed(imLiveBroadcastRoomService.roomLiveStreamStatus(roomUid));
+    }
+
 }
 

+ 28 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ImLiveBroadcastRoomMemberController.java

@@ -1,11 +1,13 @@
 package com.ym.mec.web.controller;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomDetailVo;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomMemberVo;
 import com.ym.mec.biz.service.ImLiveBroadcastRoomMemberService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -16,7 +18,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 直播间人员关系表(ImLiveBroadcastRoomMember)表控制层
@@ -57,5 +61,29 @@ public class ImLiveBroadcastRoomMemberController extends BaseController {
         return succeed(imLiveBroadcastRoomMemberService.queryRoomMember(param));
     }
 
+
+
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "search", dataType = "String", value = "模糊搜索 学员编号姓名"),
+        @ApiImplicitParam(name = "roomUid", dataType = "String", value = "房间uid"),
+        @ApiImplicitParam(name = "onlineStatus", dataType = "String ", value = "0:离线 1:在线  不传是全部"),
+        @ApiImplicitParam(name = "whetherMicStatus", dataType = "String", value = "连麦状态 0:未申请1:申请连麦中2:连麦中"),
+        @ApiImplicitParam(name = "page", dataType = "Integer", value = "页数"),
+        @ApiImplicitParam(name = "rows", dataType = "Integer", value = "每页数量"),
+    })
+    @ApiOperation("分页查询直播间人员列表")
+    @PostMapping("/queryRoomSimpleMember")
+    public HttpResponseResult<PageInfo<ImLiveBroadcastRoomMemberVo.ImLiveBroadcastRoomSimpleMemberVo>> queryRoomSimpleMember(@RequestBody Map<String, Object> param) {
+        PageInfo<ImLiveBroadcastRoomMemberVo> roomMember = imLiveBroadcastRoomMemberService.queryRoomMember(
+            param);
+
+        List<ImLiveBroadcastRoomMemberVo.ImLiveBroadcastRoomSimpleMemberVo> simpleMemberVos = roomMember.getRows().stream().map(
+            o -> o.getSimpleMemberVo(o)).collect(Collectors.toList());
+
+
+        Page<ImLiveBroadcastRoomMemberVo.ImLiveBroadcastRoomSimpleMemberVo> pageInfo = PageUtil.getPageInfo(param);
+        pageInfo.setRecords(simpleMemberVos);
+        return succeed(PageUtil.pageInfo(pageInfo));
+    }
 }