Parcourir la source

修改:
直播间功能bug

hgw il y a 3 ans
Parent
commit
0fb91246b8

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImLiveBroadcastRoomDataDao.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomData;
+import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomDetailVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -16,5 +17,7 @@ public interface ImLiveBroadcastRoomDataDao extends BaseMapper<ImLiveBroadcastRo
 
     int insertBatch(@Param("entities") List<ImLiveBroadcastRoomData> entities);
 
+    ImLiveBroadcastRoomDetailVo queryByRoomUid(@Param("roomUid") String roomUid);
+
 }
 

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImLiveBroadcastRoomMemberDao.java

@@ -1,10 +1,14 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomMember;
+import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomMemberVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 直播间人员关系表(ImLiveBroadcastRoomMember)表数据库访问层
@@ -16,5 +20,7 @@ public interface ImLiveBroadcastRoomMemberDao extends BaseMapper<ImLiveBroadcast
 
     int insertBatch(@Param("entities") List<ImLiveBroadcastRoomMember> entities);
 
+    IPage<ImLiveBroadcastRoomMemberVo> queryMemberPage(Page<ImLiveBroadcastRoomMemberVo> page, @Param("param") Map<String, Object> param);
+
 }
 

+ 0 - 12
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ImLiveBroadcastRoomDetailVo.java

@@ -3,7 +3,6 @@ package com.ym.mec.biz.dal.vo;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
-import java.util.List;
 
 /**
  * @author hgw
@@ -32,9 +31,6 @@ public class ImLiveBroadcastRoomDetailVo implements Serializable {
     @ApiModelProperty(value = "直播时长")
     private Integer totalLiveTime;
 
-    @ApiModelProperty(value = "参与人员列表")
-    private List<ImLiveBroadcastRoomMemberVo> list;
-
     public String getRoomUid() {
         return roomUid;
     }
@@ -90,12 +86,4 @@ public class ImLiveBroadcastRoomDetailVo implements Serializable {
     public void setTotalLiveTime(Integer totalLiveTime) {
         this.totalLiveTime = totalLiveTime;
     }
-
-    public List<ImLiveBroadcastRoomMemberVo> getList() {
-        return list;
-    }
-
-    public void setList(List<ImLiveBroadcastRoomMemberVo> list) {
-        this.list = list;
-    }
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveBroadcastRoomDataService.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.dao.ImLiveBroadcastRoomDataDao;
 import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomData;
 
 /**
@@ -11,5 +12,7 @@ import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomData;
  */
 public interface ImLiveBroadcastRoomDataService extends IService<ImLiveBroadcastRoomData> {
 
+    ImLiveBroadcastRoomDataDao getDao();
+
 }
 

+ 5 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomDataServiceImpl.java

@@ -4,10 +4,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ym.mec.biz.dal.dao.ImLiveBroadcastRoomDataDao;
 import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomData;
 import com.ym.mec.biz.service.ImLiveBroadcastRoomDataService;
-import org.springframework.stereotype.Service;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 /**
  * 直播房间数据表(ImLiveBroadcastRoomData)表服务实现类
@@ -20,6 +19,10 @@ public class ImLiveBroadcastRoomDataServiceImpl extends ServiceImpl<ImLiveBroadc
 
     private final static Logger log = LoggerFactory.getLogger(ImLiveBroadcastRoomDataServiceImpl.class);
 
+    @Override
+    public ImLiveBroadcastRoomDataDao getDao() {
+        return this.baseMapper;
+    }
 
 }
 

+ 13 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomMemberServiceImpl.java

@@ -1,14 +1,19 @@
 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.entity.ImLiveBroadcastRoomMember;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomDetailVo;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomMemberVo;
+import com.ym.mec.biz.service.ImLiveBroadcastRoomDataService;
 import com.ym.mec.biz.service.ImLiveBroadcastRoomMemberService;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.PageUtil;
+import com.ym.mec.common.page.WrapperUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Map;
@@ -24,8 +29,11 @@ public class ImLiveBroadcastRoomMemberServiceImpl extends ServiceImpl<ImLiveBroa
 
     private final static Logger log = LoggerFactory.getLogger(ImLiveBroadcastRoomMemberServiceImpl.class);
 
+    @Autowired
+    private ImLiveBroadcastRoomDataService imLiveBroadcastRoomDataService;
+
     @Override
-    public ImLiveBroadcastRoomMemberDao getDao(){
+    public ImLiveBroadcastRoomMemberDao getDao() {
         return this.baseMapper;
     }
 
@@ -34,12 +42,14 @@ public class ImLiveBroadcastRoomMemberServiceImpl extends ServiceImpl<ImLiveBroa
      */
     @Override
     public ImLiveBroadcastRoomDetailVo queryRoomDetail(Map<String, Object> param) {
-        return new ImLiveBroadcastRoomDetailVo();
+        String roomUid = WrapperUtil.toStr(param, "roomUid", "请传入房间编号");
+        return imLiveBroadcastRoomDataService.getDao().queryByRoomUid(roomUid);
     }
 
     @Override
     public PageInfo<ImLiveBroadcastRoomMemberVo> queryRoomMember(Map<String, Object> param) {
-        return null;
+        Page<ImLiveBroadcastRoomMemberVo> pageInfo = PageUtil.getPageInfo(param);
+        return PageUtil.pageInfo(baseMapper.queryMemberPage(pageInfo, param));
     }
 
 }

+ 35 - 23
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -17,11 +17,7 @@ import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomMember;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo;
 import com.ym.mec.biz.dal.vo.RoomUserInfoVo;
-import com.ym.mec.biz.service.ImLiveBroadcastRoomDataService;
-import com.ym.mec.biz.service.ImLiveBroadcastRoomMemberService;
-import com.ym.mec.biz.service.ImLiveBroadcastRoomService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.entity.ImRoomMessage;
 import com.ym.mec.common.entity.ImUserState;
 import com.ym.mec.common.exception.BizException;
@@ -32,6 +28,7 @@ import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RBucket;
 import org.redisson.api.RList;
@@ -42,7 +39,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
 
 import java.io.Serializable;
 import java.util.*;
@@ -183,6 +179,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             obj.setRoomTitle(dto.getRoomTitle());
         } else {
             BeanUtils.copyProperties(dto, obj);
+            obj.setRoomConfig(JSONObject.toJSONString(dto.getRoomConfig()));
         }
         obj.setUpdatedBy(getSysUser().getId());
         obj.setUpdatedTime(new Date());
@@ -230,6 +227,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         }
         //获取所有直播间缓存数据并写入数据库
         insertLiveAllData(room.getRoomUid(), room.getSpeakerId());
+        //todo 删除直播间缓存数据
 
         //将房间状态改为已销毁
         Date date = new Date();
@@ -262,7 +260,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             member.setTotalTime(v.getTotalViewTime());
             memberList.add(member);
         });
-        liveBroadcastRoomMemberService.getDao().insertBatch(memberList);
+        if (CollectionUtils.isNotEmpty(memberList)) {
+            liveBroadcastRoomMemberService.getDao().insertBatch(memberList);
+        }
 
         //获取直播间数据
         ImLiveBroadcastRoomVo roomVo = queryRoomInfo(roomUid);
@@ -359,18 +359,18 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 
     }
 
-
     /**
      * 主讲人登录专用
+     *
      * @param roomUid
      */
-    public void speakerJoinRoom(String roomUid){
+    public void speakerJoinRoom(String roomUid) {
         ImLiveBroadcastRoomVo roomVo = Optional.ofNullable(roomUid)
                 .map(this::queryRoomInfo)
                 .orElseThrow(() -> new BizException("直播间不存在"));
         Integer userId = getSysUser().getId();
-        if(!userId.equals(roomVo.getSpeakerId())){
-            throw new BizException("您不是该直播间的主讲人");
+        if (!userId.equals(roomVo.getSpeakerId())) {
+            throw new BizException("您不是该直播间的主讲人");
         }
         Date now = new Date();
         //获取直播间信息
@@ -428,7 +428,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         //查询房间信息是否允许录像
         RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId.toString()));
         RoomSpeakerInfo roomSpeakerInfo = speakerCache.get();
-        if (roomSpeakerInfo.getWhetherVideo() == 0) {
+        if (Objects.nonNull(roomSpeakerInfo.getWhetherVideo()) && roomSpeakerInfo.getWhetherVideo() == 0) {
             //开始录制视频
             imFeignService.startRecord(roomUid);
         }
@@ -447,16 +447,19 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         //关闭直播
         RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId.toString()));
         RoomSpeakerInfo roomSpeakerInfo = speakerCache.get();
-        roomSpeakerInfo.setState(1);
-        if (roomSpeakerInfo.getWhetherVideo() == 0) {
+
+        if (Objects.nonNull(roomSpeakerInfo.getWhetherVideo()) && roomSpeakerInfo.getWhetherVideo() == 0) {
             //停止录制视频
             imFeignService.stopRecord(roomUid);
         }
-        //计算时长
-        int minutesBetween = getMinutesBetween(roomSpeakerInfo.getStartLiveTime(), new Date());
-        int i = Objects.isNull(roomSpeakerInfo.getTotalLiveTime()) ? 0 : roomSpeakerInfo.getTotalLiveTime();
-        roomSpeakerInfo.setTotalLiveTime(i + minutesBetween);
-        speakerCache.set(roomSpeakerInfo);
+        if (Objects.nonNull(roomSpeakerInfo.getState()) && roomSpeakerInfo.getState() == 0) {
+            roomSpeakerInfo.setState(1);
+            //计算时长
+            int minutesBetween = getMinutesBetween(roomSpeakerInfo.getStartLiveTime(), new Date());
+            int i = Objects.isNull(roomSpeakerInfo.getTotalLiveTime()) ? 0 : roomSpeakerInfo.getTotalLiveTime();
+            roomSpeakerInfo.setTotalLiveTime(i + minutesBetween);
+            speakerCache.set(roomSpeakerInfo);
+        }
     }
 
     /**
@@ -493,18 +496,28 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             speakerInfo.setCreateRoomTime(now);
             speakerInfo.setRoomUid(room.getRoomUid());
             speakerInfo.setTenantId(sysUser.getTenantId());
+            speakerInfo.setTotalLiveTime(0);
 
             //查询房间信息是否允许录像
             ImLiveBroadcastRoom one = this.getOne(new QueryWrapper<ImLiveBroadcastRoom>().eq("room_uid_", room.getRoomUid()));
-            Optional.ofNullable(one.getRoomConfig())
+            boolean video = Optional.ofNullable(one.getRoomConfig())
                     .map(c -> JSON.parseObject(c, ImLiveBroadcastRoomDto.RoomConfig.class))
                     .filter(c -> Objects.nonNull(c.getWhether_video()))
-                    .filter(c -> c.getWhether_video() == 0)
-                    .ifPresent(c -> speakerInfo.setWhetherVideo(0));//可以录制视频
+                    .map(c -> c.getWhether_video() == 0)
+                    .orElse(false);
+            if (video) {
+                //可以录制视频
+                speakerInfo.setWhetherVideo(0);
+            } else {
+                //不可以录制视频
+                speakerInfo.setWhetherVideo(1);
+            }
+            //写入主讲人信息
             redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, room.getSpeakerId().toString())).set(speakerInfo);
 
             //生成0点赞
             redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, room.getRoomUid())).set(0);
+
             //修改房间状态为开始
             room.setLiveState(1);
             room.setUpdatedTime(now);
@@ -513,7 +526,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 
             //去融云创建房间
             imFeignService.createLiveRoom(room.getRoomUid(), room.getRoomTitle());
-
         } catch (Exception e) {
             log.error(">>>>>>>>>> createLiveRoom error roomUid:{} msg:{}", room.getRoomUid(), e.getMessage());
         }

+ 14 - 0
mec-biz/src/main/resources/config/mybatis/ImLiveBroadcastRoomDataMapper.xml

@@ -28,4 +28,18 @@
         </foreach>
     </insert>
 
+    <select id="queryByRoomUid" resultType="com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomDetailVo">
+        select a.room_uid_                 as roomUid,
+               r.room_title_               as roomTitle,
+               b.real_name_                AS speakerName,
+               r.live_remark_              AS liveRemark,
+               ifnull(a.look_user_num_, 0) AS totalLookNum,
+               ifnull(a.like_num_, 0)      as totalLikeNum,
+               ifnull(a.live_time_, 0)     as totalLiveTime
+        from im_live_broadcast_room_data as a
+                 left join im_live_broadcast_room AS r on a.room_uid_ = r.room_uid_
+                 left join sys_user AS b on r.speaker_id_ = b.id_
+        where a.room_uid_ = #{roomUid}
+    </select>
+
 </mapper>

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

@@ -24,4 +24,19 @@
         </foreach>
     </insert>
 
+    <select id="queryMemberPage" resultType="com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomMemberVo">
+        select
+            a.user_id_ as studentId,
+            su.username_ as studentName,
+            su.phone_ as phone,
+            b.name_ as subName,
+            a.join_time_ as joinTime,
+            a.total_time_ as totalViewTime
+        from im_live_broadcast_room_member as a
+                 left join sys_user as su on su.id_ = a.user_id_
+                 left join student st on su.id_ = st.user_id_
+                 left join subject as b on st.subject_id_list_ = b.id_
+        where a.room_uid_ = #{param.roomUid}
+    </select>
+
 </mapper>

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

@@ -7,6 +7,7 @@ import com.ym.mec.biz.dal.vo.RoomUserInfoVo;
 import com.ym.mec.biz.service.ImLiveBroadcastRoomService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.entity.ImUserState;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.WrapperUtil;
 import io.swagger.annotations.*;
@@ -109,6 +110,12 @@ public class ImLiveBroadcastRoomController extends BaseController {
         return succeed();
     }
 
+    @PostMapping("/quitRoom")
+    public HttpResponseResult quitRoom(@RequestBody List<ImUserState> userState) {
+        imLiveBroadcastRoomService.quitRoom(userState);
+        return succeed();
+    }
+
     @ApiOperation("主讲人进入房间")
     @GetMapping("/speakerJoinRoom")
     public HttpResponseResult speakerJoinRoom(String roomUid) {

+ 3 - 6
mec-web/src/main/java/com/ym/mec/web/controller/ImLiveBroadcastRoomMemberController.java

@@ -1,9 +1,5 @@
 package com.ym.mec.web.controller;
-import java.util.Date;
-import com.google.common.collect.Lists;
 
-
-import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomDetailVo;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomMemberVo;
 import com.ym.mec.biz.service.ImLiveBroadcastRoomMemberService;
@@ -15,6 +11,7 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -42,7 +39,7 @@ public class ImLiveBroadcastRoomMemberController extends BaseController {
     })
     @ApiOperation("直播间详情")
     @PostMapping("/queryRoomDetail")
-    public HttpResponseResult<ImLiveBroadcastRoomDetailVo> queryRoomDetail(Map<String, Object> param) {
+    public HttpResponseResult<ImLiveBroadcastRoomDetailVo> queryRoomDetail(@RequestBody Map<String, Object> param) {
         return succeed(imLiveBroadcastRoomMemberService.queryRoomDetail(param));
     }
 
@@ -54,7 +51,7 @@ public class ImLiveBroadcastRoomMemberController extends BaseController {
     })
     @ApiOperation("分页查询直播间人员列表")
     @PostMapping("/queryRoomMember")
-    public HttpResponseResult<PageInfo<ImLiveBroadcastRoomMemberVo>> queryRoomMember(Map<String, Object> param) {
+    public HttpResponseResult<PageInfo<ImLiveBroadcastRoomMemberVo>> queryRoomMember(@RequestBody Map<String, Object> param) {
         return succeed(imLiveBroadcastRoomMemberService.queryRoomMember(param));
     }