浏览代码

修改部分逻辑

hgw 3 年之前
父节点
当前提交
97dda94752

+ 17 - 7
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImLiveBroadcastRoomData.java

@@ -1,15 +1,13 @@
 package com.ym.mec.biz.dal.entity;
 
-
-import java.util.Date;
-
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import com.baomidou.mybatisplus.annotation.TableId;
 
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * 直播房间数据表(ImLiveBroadcastRoomData)表实体类
@@ -29,7 +27,7 @@ public class ImLiveBroadcastRoomData implements Serializable {
 
     @TableField("room_uid_")
     @ApiModelProperty(value = "房间uid")
-    private Integer roomUid;
+    private String roomUid;
 
     @TableField("like_num_")
     @ApiModelProperty(value = "累计点赞数")
@@ -47,6 +45,10 @@ public class ImLiveBroadcastRoomData implements Serializable {
     @ApiModelProperty(value = "更新时间")
     private Date updatedTime;
 
+    @TableField("live_time_")
+    @ApiModelProperty(value = "直播时长")
+    private Integer liveTime;
+
     private static final long serialVersionUID = 1L;
 
     public Integer getId() {
@@ -65,11 +67,11 @@ public class ImLiveBroadcastRoomData implements Serializable {
         this.tenantId = tenantId;
     }
 
-    public Integer getRoomUid() {
+    public String getRoomUid() {
         return roomUid;
     }
 
-    public void setRoomUid(Integer roomUid) {
+    public void setRoomUid(String roomUid) {
         this.roomUid = roomUid;
     }
 
@@ -105,5 +107,13 @@ public class ImLiveBroadcastRoomData implements Serializable {
         this.updatedTime = updatedTime;
     }
 
+    public Integer getLiveTime() {
+        return liveTime;
+    }
+
+    public void setLiveTime(Integer liveTime) {
+        this.liveTime = liveTime;
+    }
+
 }
 

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/RoomUserInfoVo.java

@@ -29,6 +29,11 @@ public class RoomUserInfoVo implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date lastOutTime;
 
+    /**
+     * 状态:0:online 上线、1:offline 离线、2:logout 登出  3:退出直播间
+     */
+    private String status;
+
     public Integer getUserId() {
         return userId;
     }

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

@@ -3,6 +3,8 @@ package com.ym.mec.biz.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 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.common.page.PageInfo;
 
 import java.util.Map;
 
@@ -14,7 +16,15 @@ import java.util.Map;
  */
 public interface ImLiveBroadcastRoomMemberService extends IService<ImLiveBroadcastRoomMember> {
 
+    /**
+     * 查询房间详情
+     */
     ImLiveBroadcastRoomDetailVo queryRoomDetail(Map<String, Object> param);
 
+    /**
+     * 查询房间观看人员详情
+     */
+    PageInfo<ImLiveBroadcastRoomMemberVo> queryRoomMember(Map<String, Object> param);
+
 }
 

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

@@ -4,7 +4,9 @@ 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.ImLiveBroadcastRoomMemberService;
+import com.ym.mec.common.page.PageInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -25,9 +27,15 @@ public class ImLiveBroadcastRoomMemberServiceImpl extends ServiceImpl<ImLiveBroa
     /**
      * 查询直播详情
      */
+    @Override
     public ImLiveBroadcastRoomDetailVo queryRoomDetail(Map<String, Object> param) {
         return new ImLiveBroadcastRoomDetailVo();
     }
 
+    @Override
+    public PageInfo<ImLiveBroadcastRoomMemberVo> queryRoomMember(Map<String, Object> param) {
+        return null;
+    }
+
 }
 

+ 25 - 44
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -26,7 +26,6 @@ import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RBucket;
-import org.redisson.api.RList;
 import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
@@ -67,8 +66,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     public static final String LIVE_ROOM_TOTAL_USER_LIST = "IM:LIVE_ROOM_TOTAL_USER_LIST:" + ROOM_UID;
     //用户对应的直播间Uid
     public static final String LIVE_USER_ROOM = "IM:LIVE_ROOM_USER:" + USER_ID;
-    //房间主讲人id
-    public static final String LIVE_ROOM_SPEAKERID = "IM:LIVE_ROOM_SPEAKERID:" + ROOM_UID;
     //房间点赞数
     public static final String LIVE_ROOM_LIKE = "IM:LIVE_ROOM_LIKE:" + ROOM_UID;
 
@@ -245,6 +242,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      */
     public void quitRoom(List<ImUserState> userState) {
         userState.forEach(user -> {
+            if (StringUtils.isBlank(user.getStatus()) || user.getStatus().equals("0")) {
+                return;
+            }
             //获取当前用户所在房间的uid
             RBucket<String> userRoom = redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, user.getUserid()));
             if (!userRoom.isExists()) {
@@ -253,31 +253,27 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             String roomUid = userRoom.get();
             Integer userId = Integer.valueOf(user.getUserid());
 
-            //发送退出房间消息给主讲人
-            ImRoomMessage message = new ImRoomMessage();
-            message.setFromUserId(userId.toString());
-            message.setToChatroomId(roomUid);
-            message.setObjectName(ImRoomMessage.LOOKER_LOGIN_OUT);
-            imFeignService.publishRoomMsg(message);
-
-            //将用户从该房间当前用户列表移除
-            removeUserCache(userId, roomUid);
+            //只有离线-发送退出房间消息给主讲人
+            if (user.getStatus().equals("1")) {
+                ImRoomMessage message = new ImRoomMessage();
+                message.setFromUserId(userId.toString());
+                message.setToChatroomId(roomUid);
+                message.setObjectName(ImRoomMessage.LOOKER_LOGIN_OUT);
+                imFeignService.publishRoomMsg(message);
+            }
 
             //从房间累计用户信息中查询该用户的信息
             RMap<Integer, RoomUserInfoVo> roomTotalUser = redissonClient.getMap(LIVE_ROOM_TOTAL_USER_LIST.replace(ROOM_UID, roomUid));
             Date now = new Date();
             RoomUserInfoVo userInfo;
-            //防止数据问题导致写漏了进入房间的数据,这里还是要判断一下是否有用户数据
-            if (roomTotalUser.containsKey(userId)) {
-                //查询到用户数据
-                userInfo = roomTotalUser.get(userId);
-            } else {
-                //未查询到用户数据则新建立用户数据  如果没有观看时长则取开播时间
-                userInfo = getUserInfo(userId);
-                ImLiveBroadcastRoomVo imLiveBroadcastRoomVo = queryRoomInfo(roomUid);
-                userInfo.setFirstJoinTime(imLiveBroadcastRoomVo.getLiveStartTime());
-                userInfo.setDynamicJoinTime(imLiveBroadcastRoomVo.getLiveStartTime());
+            //该房间未查询到用户数据则不处理
+            if (!roomTotalUser.containsKey(userId)) {
+                return;
             }
+            //查询到用户数据
+            userInfo = roomTotalUser.get(userId);
+            //将用户从该房间当前直播间用户列表移除
+            redissonClient.getList(LIVE_ROOM_USER_LIST.replace(ROOM_UID, roomUid)).remove(userInfo);
             //每次退出房间计算当前用户观看时长
             int minutesBetween = getMinutesBetween(userInfo.getDynamicJoinTime(), now);
             userInfo.setTotalViewTime(userInfo.getTotalViewTime() + minutesBetween);
@@ -285,6 +281,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             userInfo.setLastOutTime(now);
             roomTotalUser.put(userId, userInfo);
         });
+
     }
 
     /**
@@ -294,22 +291,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      * @param userId  用户id
      */
     public void joinRoom(String roomUid, Integer userId) {
-        //查询用户当前对应的直播间信息
-        RBucket<String> roomUserCache = redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userId.toString()));
-        //获取当前房间信息,如果当前有房间
-        if (roomUserCache.isExists()) {
-            //查出原有的房间uid
-            String lodRoomUid = roomUserCache.get();
-            //如果房间相同直接返回
-            if (roomUid.equals(lodRoomUid)) {
-                return;
-            } else {
-                //如果不同就把原房间的当前人员移除
-                removeUserCache(userId, lodRoomUid);
-            }
-        }
         //记录用户当前房间uid
-        roomUserCache.set(roomUid);
+        redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userId.toString())).set(roomUid);
         //房间累计用户信息-指只要进入到该房间的用户都要记录
         RMap<Integer, RoomUserInfoVo> roomTotalUser = redissonClient.getMap(LIVE_ROOM_TOTAL_USER_LIST.replace(ROOM_UID, roomUid));
         //判断是否第一次进房间
@@ -372,10 +355,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 
     //移除
     private void removeUserCache(Integer userId, String lodRoomUid) {
-        //将用户数据从直播间用户列表删除
-        RList<RoomUserInfoVo> list = redissonClient.getList(LIVE_ROOM_USER_LIST.replace(ROOM_UID, lodRoomUid));
-        RoomUserInfoVo userInfo = getUserInfo(userId);
-        list.remove(userInfo);
+
     }
 
     private RoomUserInfoVo getUserInfo(Integer userId) {
@@ -417,10 +397,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         }
         //生成0点赞
         redissonClient.getAtomicLong(LIVE_ROOM_LIKE.replace(ROOM_UID, room.getRoomUid())).set(0);
-        //主讲人id
-        redissonClient.getBucket(LIVE_ROOM_SPEAKERID.replace(ROOM_UID, room.getRoomUid())).set(room.getSpeakerId());
         //todo 修改房间状态
-
+        room.setLiveState(1);
+        room.setUpdatedTime(new Date());
+        room.setUpdatedBy(-1);
+        baseMapper.updateById(room);
     }
 
     private void getRoomData(ImLiveBroadcastRoomVo roomVo) {

+ 5 - 4
mec-biz/src/main/resources/config/mybatis/ImLiveBroadcastRoomDataMapper.xml

@@ -4,26 +4,27 @@
     <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomData">
         <id column="id_" jdbcType="INTEGER" property="id"/>
         <result column="tenant_id_" jdbcType="INTEGER" property="tenantId"/>
-        <result column="room_uid_" jdbcType="INTEGER" property="roomUid"/>
+        <result column="room_uid_" jdbcType="VARCHAR" property="roomUid"/>
         <result column="like_num_" jdbcType="INTEGER" property="likeNum"/>
         <result column="look_user_num_" jdbcType="INTEGER" property="lookUserNum"/>
         <result column="total_user_num_" jdbcType="INTEGER" property="totalUserNum"/>
         <result column="updated_time_" jdbcType="TIMESTAMP" property="updatedTime"/>
+        <result column="live_time_" jdbcType="INTEGER" property="liveTime"/>
     </resultMap>
 
     <sql id="Base_Column_List">
         id_
-        , tenant_id_, room_uid_, like_num_, look_user_num_, total_user_num_, updated_time_
+        , tenant_id_, room_uid_, like_num_, look_user_num_, total_user_num_, updated_time_, live_time_
     </sql>
 
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomData">
         insert into im_live_broadcast_room_data(tenant_id_, room_uid_, like_num_, look_user_num_, total_user_num_,
-        updated_time_)
+        updated_time_, live_time_)
         values
         <foreach collection="entities" item="entity" separator=",">
             (#{entity.tenantId}, #{entity.roomUid}, #{entity.likeNum}, #{entity.lookUserNum}, #{entity.totalUserNum},
-            #{entity.updatedTime})
+            #{entity.updatedTime}, #{entity.liveTime})
         </foreach>
     </insert>