소스 검색

直播间学生分享接口

Eric 2 년 전
부모
커밋
72ef89df14

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

@@ -10,6 +10,7 @@ import com.yonge.cooleshow.biz.dal.entity.ImUserStateSync;
 import com.yonge.cooleshow.biz.dal.entity.LiveRoom;
 import com.yonge.cooleshow.biz.dal.entity.RoomInfoCache;
 import com.yonge.cooleshow.biz.dal.vo.TeacherLivingInfoVo;
+import com.yonge.cooleshow.biz.dal.wrapper.liveroom.LiveRoomWrapper;
 import com.yonge.toolset.base.page.PageInfo;
 
 /**
@@ -136,5 +137,13 @@ public interface LiveRoomService extends IService<LiveRoom> {
      * @param whetherMic 是否连麦 0: 是 1:否
      */
     void whetherMic(String roomUid, Integer whetherMic);
+
+    /**
+     * 直播间详情信息
+     * @param liveRoomId 直播间编号
+     * @param userId 分享用户ID
+     * @return LiveRoomWrapper
+     */
+    LiveRoomWrapper findLiveRoomDetailInfoByRoomId(String liveRoomId, Long userId);
 }
 

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

@@ -30,6 +30,9 @@ import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
+import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
+import com.yonge.cooleshow.biz.dal.wrapper.liveroom.LiveRoomWrapper;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RBucket;
@@ -126,6 +129,8 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
 
     @Autowired
     private LiveBroadcastRoomMemberService liveBroadcastRoomMemberService;
+    @Autowired
+    private SysUserMapper sysUserMapper;
     /**
      * 生成房间UID
      *
@@ -1140,5 +1145,41 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         roomInfo.setWhether_mic(whetherMic);
         roomInfoCache.set(roomInfo);
     }
+
+    /**
+     * 直播间详情信息
+     *
+     * @param liveRoomId 直播间编号
+     * @param userId 分享用户ID
+     * @return LiveRoomWrapper
+     */
+    @Override
+    public LiveRoomWrapper findLiveRoomDetailInfoByRoomId(String liveRoomId, Long userId) {
+
+        // 直播间信息
+        LiveRoom liveRoom = getBaseMapper().selectOne(Wrappers.<LiveRoom>lambdaQuery()
+                .eq(LiveRoom::getRoomUid, liveRoomId));
+        if (Objects.isNull(liveRoom)) {
+            return null;
+        }
+
+        LiveRoomWrapper roomWrapper = LiveRoomWrapper.from(JSON.toJSONString(liveRoom));
+
+        // 直播老师信息
+        com.yonge.cooleshow.biz.dal.entity.SysUser teacher = sysUserMapper.selectById(roomWrapper.getSpeakerId());
+        if (Objects.nonNull(teacher)) {
+
+            roomWrapper.setTeacher(JSON.parseObject(JSON.toJSONString(teacher), LiveRoomWrapper.UserInfo.class));
+        }
+
+        // 分享同学信息
+        if (Optional.ofNullable(userId).orElse(0L) > 0) {
+
+            com.yonge.cooleshow.biz.dal.entity.SysUser student = sysUserMapper.selectById(userId);
+            roomWrapper.setStudent(JSON.parseObject(JSON.toJSONString(student), LiveRoomWrapper.UserInfo.class));
+        }
+
+        return roomWrapper;
+    }
 }
 

+ 77 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/liveroom/LiveRoomWrapper.java

@@ -0,0 +1,77 @@
+package com.yonge.cooleshow.biz.dal.wrapper.liveroom;
+
+import com.alibaba.fastjson.JSON;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 直播间详情信息
+ * Created by Eric.Shang on 2022/9/22.
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class LiveRoomWrapper implements Serializable {
+
+    // 课程组id
+    private Long courseGroupId;
+    // 课程id
+    private Long courseId;
+    // 主讲人id/老师id
+    private Long speakerId;
+    // 房间编号
+    private String roomUid;
+    private String roomTitle;
+    private Date liveStartTime;
+    private Date liveEndTime;
+    private String liveRemark;
+    private Integer liveState;
+    private Integer roomState;
+    private String type;
+    private String coverPic;
+
+    // 直播老师信息
+    private UserInfo teacher;
+
+    // 分享同学信息
+    private UserInfo student;
+
+    public static LiveRoomWrapper from(String jsonString) {
+        return JSON.parseObject(jsonString, LiveRoomWrapper.class);
+    }
+
+    public String jsonString() {
+        return JSON.toJSONString(this);
+    }
+
+    public LiveRoomWrapper teacher(UserInfo teacher) {
+        this.teacher = teacher;
+        return this;
+    }
+
+    public LiveRoomWrapper student(UserInfo student) {
+        this.student = student;
+        return this;
+    }
+
+
+    /**
+     * 直播间老师信息
+     */
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class UserInfo implements Serializable {
+
+        private String username;
+        private String phone;
+        private String avatar;
+        private String realName;
+    }
+}

+ 26 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/OpenClient.java

@@ -5,7 +5,9 @@ import com.yonge.cooleshow.biz.dal.entity.SysConfig;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.CheckVo;
 import com.yonge.cooleshow.biz.dal.vo.MemberPriceVo;
+import com.yonge.cooleshow.biz.dal.wrapper.liveroom.LiveRoomWrapper;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import com.yonge.cooleshow.student.io.request.LiveRoomVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -15,9 +17,11 @@ import io.swagger.annotations.ApiParam;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 import javax.validation.Valid;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -63,6 +67,8 @@ public class OpenClient extends BaseController {
 
     @Autowired
     private ActivityPlanService activityPlanService;
+    @Autowired
+    private LiveRoomService liveRoomService;
 
     @ApiOperation(value = "查询老师头像昵称信息")
     @GetMapping("/getTeacher")
@@ -165,4 +171,24 @@ public class OpenClient extends BaseController {
         List<SysConfig> configs = sysConfigService.findAll(params);
         return succeed(configs);
     }
+
+    @ApiOperation(value = "直播间详情信息", notes = "直播间ID")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "userId", value = "分享用户ID", dataType = "Long")
+    })
+    @GetMapping("/liveRoom/detail/{ID}")
+    public HttpResponseResult<LiveRoomVO> liveRoomDetailInfo(@PathVariable("ID") String liveRoomId,
+                                                             @RequestParam(value = "userId", required = false) Long userId) {
+
+        if (StringUtils.isEmpty(liveRoomId)) {
+            return failed("无效的直播间编号");
+        }
+
+        LiveRoomWrapper roomWrapper = liveRoomService.findLiveRoomDetailInfoByRoomId(liveRoomId, userId);
+        if (Objects.isNull(roomWrapper)) {
+            return failed("无效的直播间编号");
+        }
+
+        return succeed(LiveRoomVO.from(roomWrapper.jsonString()));
+    }
 }

+ 90 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/io/request/LiveRoomVO.java

@@ -0,0 +1,90 @@
+package com.yonge.cooleshow.student.io.request;
+
+import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.biz.dal.enums.MK;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Created by Eric.Shang on 2022/9/22.
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class LiveRoomVO implements Serializable {
+
+    @ApiModelProperty(value = "课程组id")
+    private Long courseGroupId;
+
+    @ApiModelProperty(value = "课程id")
+    private Long courseId;
+
+    @ApiModelProperty(value = "主讲人id/老师id")
+    private Long speakerId;
+
+    @ApiModelProperty(value = "房间编号")
+    private String roomUid;
+
+    @ApiModelProperty(value = "房间标题/最多12个字")
+    private String roomTitle;
+
+    @ApiModelProperty(value = "直播开始时间")
+    @JsonFormat(pattern = MK.TIME_PATTERN, timezone = MK.TIME_ZONE)
+    private Date liveStartTime;
+
+    @ApiModelProperty(value = "直播结束时间")
+    @JsonFormat(pattern = MK.TIME_PATTERN, timezone = MK.TIME_ZONE)
+    private Date liveEndTime;
+
+    @ApiModelProperty(value = "直播内容/最多200个字")
+    private String liveRemark;
+
+    @ApiModelProperty(value = "直播状态 0未开始 1已开始 2已结束")
+    private Integer liveState;
+
+    @ApiModelProperty(value = "房间状态 0正常 1已删除 2已销毁")
+    private Integer roomState;
+
+    @ApiModelProperty(value = "房间类型 live直播课  temp临时直播间")
+    private String type;
+
+    @ApiModelProperty(value = "封面图片")
+    private String coverPic;
+
+    @ApiModelProperty(value = "直播老师信息")
+    private UserInfo teacher;
+
+    @ApiModelProperty(value = "分享同学信息")
+    private UserInfo student;
+
+    public static LiveRoomVO from(String jsonString) {
+        return JSON.parseObject(jsonString, LiveRoomVO.class);
+    }
+
+    /**
+     * 直播间老师信息
+     */
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class UserInfo implements Serializable {
+
+        @ApiModelProperty("用户名")
+        private String username;
+
+        @ApiModelProperty("手机号")
+        private String phone;
+
+        @ApiModelProperty("头像")
+        private String avatar;
+
+        @ApiModelProperty("真实姓名")
+        private String realName;
+    }
+}