Browse Source

直播间控制状态

liujc 2 years ago
parent
commit
b6e15ead10

+ 41 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/LiveRoomStatus.java

@@ -0,0 +1,41 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2023-03-09
+ */
+@Data
+@ApiModel(value = "更新直播间状态")
+public class LiveRoomStatus {
+
+    @ApiModelProperty(value = "房间uid",required = true)
+    @NotBlank(message = "房间号不能为空")
+    private String roomUid;
+
+    @ApiModelProperty(value = "主播状态: 0离开;1在播")
+    private Integer speakerStatus;
+
+    @ApiModelProperty(value = "推流状态: 0 暂停; 1在播")
+    private Integer pushStatus;
+
+    @ApiModelProperty(value = "禁言状态: 0 取消;1禁言")
+    private Integer banStatus;
+
+    @ApiModelProperty(value = "主播摄像头状态 1:开启 0:关闭")
+    private Integer cameraStatus;
+
+    @ApiModelProperty(value = "直播时长")
+    private Integer liveTotalTime;
+
+    @ApiModelProperty(value = "全员闭麦状态 1:开启 0:关闭")
+    private Integer micStatus;
+
+}

+ 43 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/live/EAnchorStatus.java

@@ -0,0 +1,43 @@
+package com.yonge.cooleshow.biz.dal.enums.live;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2023-03-20
+ */
+public enum EAnchorStatus {
+
+    /**
+     * 主讲人状态
+     */
+    ONLINE("在线"),
+    OFFLINE("离线"),
+
+
+    ;
+    private String code;
+
+    private String msg;
+
+    EAnchorStatus(String msg) {
+        this.msg = msg;
+        this.code = this.name();
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

+ 40 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/live/EOnOffStatus.java

@@ -0,0 +1,40 @@
+package com.yonge.cooleshow.biz.dal.enums.live;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2023-03-20
+ */
+public enum EOnOffStatus {
+
+
+    ON("是"),
+    OFF("否"),
+
+    ;
+    private String code;
+
+    private String msg;
+
+    EOnOffStatus(String msg) {
+        this.msg = msg;
+        this.code = this.name();
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomService.java

@@ -6,6 +6,7 @@ import java.util.Map;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.LiveRoomDao;
+import com.yonge.cooleshow.biz.dal.dto.LiveRoomStatus;
 import com.yonge.cooleshow.biz.dal.dto.TencentData;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.RoomTypeEnum;
@@ -171,5 +172,15 @@ public interface LiveRoomService extends IService<LiveRoom> {
     void destroyLiveRoom();
 
     boolean tryDestroyLiveRoom(LiveRoom liveRoom);
+
+
+    /**
+     * 更新主播直播间状态
+     *
+     * @param status 直播间状态
+     * @return
+     */
+    Boolean updateRoomStatus(LiveRoomStatus status);
+
 }
 

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

@@ -31,8 +31,11 @@ import com.microsvc.toolkit.middleware.live.LivePluginService;
 import com.microsvc.toolkit.middleware.live.impl.RongCloudLivePlugin;
 import com.microsvc.toolkit.middleware.live.impl.TencentCloudLivePlugin;
 import com.microsvc.toolkit.middleware.live.message.*;
+import com.yonge.cooleshow.biz.dal.dto.LiveRoomStatus;
 import com.yonge.cooleshow.biz.dal.dto.TencentData;
 import com.yonge.cooleshow.biz.dal.entity.*;
+import com.yonge.cooleshow.biz.dal.enums.live.EAnchorStatus;
+import com.yonge.cooleshow.biz.dal.enums.live.EOnOffStatus;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.wrapper.liveroom.LiveRoomWrapper;
@@ -1640,5 +1643,51 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         }
         return true;
     }
+
+
+    /**
+     * 更新主播直播间状态
+     *
+     * @param liveRoom 直播间状态
+     */
+    @Override
+    public Boolean updateRoomStatus(LiveRoomStatus liveRoom) {
+        // 获取直播间信息
+        LiveRoom room = this.getByRoomUid(liveRoom.getRoomUid());
+        if (room == null) {
+            throw new BizException("直播间不存在");
+        }
+        // 设置直播群组自定义数据
+        if (liveRoom.getSpeakerStatus() != null) {
+            setGroupDefinedData(room, EGroupDefinedDataType.ANCHOR_STATUS,
+                    liveRoom.getSpeakerStatus() == 0 ? EAnchorStatus.OFFLINE.getCode() : EAnchorStatus.ONLINE.getCode());
+        }
+
+        if (liveRoom.getPushStatus() != null) {
+            // 设置推流状态
+            setGroupDefinedData(room, EGroupDefinedDataType.LIVE_STATUS, liveRoom.getPushStatus() == 1 ?
+                    EOnOffStatus.ON.getCode() : EOnOffStatus.OFF.getCode());
+        }
+
+
+        if (liveRoom.getBanStatus() != null) {
+            setGroupDefinedData(room, EGroupDefinedDataType.GLOBAL_BAN, liveRoom.getBanStatus() == 1 ?
+                    EOnOffStatus.ON.getCode() : EOnOffStatus.OFF.getCode());
+        }
+
+        // 设置摄像头状态
+        if (liveRoom.getCameraStatus() != null) {
+            setGroupDefinedData(room, EGroupDefinedDataType.ANCHOR_CAMERA,
+                    liveRoom.getCameraStatus() == 1 ? EOnOffStatus.ON.getCode():EOnOffStatus.OFF.getCode());
+        }
+
+        // 设置全员闭麦状态
+        if (Objects.nonNull(liveRoom.getMicStatus())) {
+            setGroupDefinedData(room, EGroupDefinedDataType.ANCHOR_MIC,
+                    liveRoom.getMicStatus() == 1 ? EOnOffStatus.ON.getCode() : EOnOffStatus.OFF.getCode());
+        }
+        return true;
+    }
+
 }
 

+ 11 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherLiveRoomController.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.teacher.controller;
 
 import com.alibaba.fastjson.JSONObject;
+import com.yonge.cooleshow.biz.dal.dto.LiveRoomStatus;
 import com.yonge.cooleshow.biz.dal.entity.ImUserStateSync;
 import com.yonge.cooleshow.biz.dal.entity.LiveRoom;
 import com.yonge.cooleshow.biz.dal.entity.RoomInfoCache;
@@ -14,6 +15,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.validation.Valid;
 import java.util.List;
 import java.util.Map;
 
@@ -109,6 +111,15 @@ public class TeacherLiveRoomController extends BaseController {
         liveRoomService.opsRoom(userState);
     }
 
+
+
+    @ApiOperation("更新直播间状态")
+    @PostMapping("/updateRoomStatus")
+    public HttpResponseResult<Boolean> updateRoomStatus(@RequestBody @Valid LiveRoomStatus status ) {
+        return succeed(liveRoomService.updateRoomStatus(status));
+    }
+
+
     @ApiOperation("方便测试观察房间数据的方法")
     @GetMapping("/test")
     public Object destroyExpiredLiveRoom(@RequestParam("roomUid") String roomUid) {