|
@@ -9,7 +9,6 @@ import com.ym.mec.auth.api.entity.SysUser;
|
|
|
import com.ym.mec.biz.dal.dao.ImLiveBroadcastRoomDao;
|
|
|
import com.ym.mec.biz.dal.dto.ImLiveBroadcastRoomDto;
|
|
|
import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoom;
|
|
|
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
|
|
|
import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo;
|
|
|
import com.ym.mec.biz.service.ImLiveBroadcastRoomService;
|
|
|
import com.ym.mec.biz.service.SysMessageService;
|
|
@@ -20,8 +19,9 @@ import com.ym.mec.common.page.WrapperUtil;
|
|
|
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.lang3.StringUtils;
|
|
|
import org.redisson.api.RBucket;
|
|
|
+import org.redisson.api.RList;
|
|
|
import org.redisson.api.RedissonClient;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -30,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
+import java.io.Serializable;
|
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
@@ -55,8 +56,10 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
public static final String USER_ID = "${userId}";
|
|
|
public static final String ROOM_UID = "${roomUid}";
|
|
|
|
|
|
+ //直播间用户列表
|
|
|
+ public static final String LIVE_ROOM_USER_LIST = "IM:LIVE_ROOM_USER_LIST:" + ROOM_UID;
|
|
|
//用户对应的直播间Uid
|
|
|
- public static final String LIVE_ROOM_USER = "IM:LIVE_ROOM_USER:" + USER_ID;
|
|
|
+ public static final String LIVE_USER_ROOM = "IM:LIVE_ROOM_USER:" + USER_ID;
|
|
|
//用户进入房间时间
|
|
|
public static final String LIVE_ROOM_USER_JOIN_TIME = "IM:LIVE_ROOM_USER_JOIN_TIME:" + USER_ID;
|
|
|
//用户退出房间时间
|
|
@@ -231,12 +234,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
* @param userId 用户id
|
|
|
*/
|
|
|
public void joinRoom(String roomUid, Integer userId) {
|
|
|
- //查询有没有这个房间
|
|
|
-// RList<Object> roomInfoCache = redissonClient.getList(LIVE_ROOM_INFO.replace(ROOM_UID, roomUid));
|
|
|
-// roomInfoCache.contains()
|
|
|
-
|
|
|
//用户对应的直播间信息
|
|
|
- RBucket<String> roomUserCache = redissonClient.getBucket(LIVE_ROOM_USER.replace(USER_ID, userId.toString()));
|
|
|
+ RBucket<String> roomUserCache = redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userId.toString()));
|
|
|
//获取原有房间信息
|
|
|
if (roomUserCache.isExists()) {
|
|
|
//原有的房间uid
|
|
@@ -247,6 +246,10 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
} else {
|
|
|
//如果不同就把原房间的当前人员数量-1
|
|
|
redissonClient.getAtomicLong(LIVE_ROOM_LOOK.replace(ROOM_UID, lodRoomUid)).decrementAndGet();
|
|
|
+ //将用户数据从老直播间用户列表删除
|
|
|
+ RList<UserInfo> list = redissonClient.getList(LIVE_ROOM_USER_LIST.replace(ROOM_UID, lodRoomUid));
|
|
|
+ UserInfo userInfo = getUserInfo(userId);
|
|
|
+ list.remove(userInfo);
|
|
|
}
|
|
|
}
|
|
|
//写入用户房间uid
|
|
@@ -257,6 +260,47 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
redissonClient.getAtomicLong(LIVE_ROOM_LOOK.replace(ROOM_UID, roomUid)).incrementAndGet();
|
|
|
//添加房间中累计总用户数量
|
|
|
redissonClient.getAtomicLong(LIVE_ROOM_TOTAL_LOOK.replace(ROOM_UID, roomUid)).incrementAndGet();
|
|
|
+ //将用户数据写入直播间
|
|
|
+ RList<UserInfo> list = redissonClient.getList(LIVE_ROOM_USER_LIST.replace(ROOM_UID, roomUid));
|
|
|
+ UserInfo userInfo = getUserInfo(userId);
|
|
|
+ list.add(userInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ private UserInfo getUserInfo(Integer userId) {
|
|
|
+ UserInfo userInfo = new UserInfo();
|
|
|
+ userInfo.setUserId(userId);
|
|
|
+ SysUser sysUser = sysUserFeignService.queryUserById(userId);
|
|
|
+ String name = userId.toString();
|
|
|
+ if (Objects.nonNull(sysUser)) {
|
|
|
+ if (StringUtils.isNotBlank(sysUser.getRealName())) {
|
|
|
+ name = sysUser.getRealName();
|
|
|
+ } else {
|
|
|
+ name = sysUser.getPhone();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ userInfo.setUserName(name);
|
|
|
+ return userInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ static class UserInfo implements Serializable {
|
|
|
+ private Integer userId;
|
|
|
+ private String userName;
|
|
|
+
|
|
|
+ public Integer getUserId() {
|
|
|
+ return userId;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setUserId(Integer userId) {
|
|
|
+ this.userId = userId;
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getUserName() {
|
|
|
+ return userName;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setUserName(String userName) {
|
|
|
+ this.userName = userName;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -279,6 +323,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
list.forEach(this::createLiveRoom);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 去融云创建房间
|
|
|
+ */
|
|
|
private void createLiveRoom(ImLiveBroadcastRoom room) {
|
|
|
try {
|
|
|
//去融云创建房间
|
|
@@ -286,11 +333,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- //创建房间缓存
|
|
|
- RBucket<Object> roomInfoCache = redissonClient.getBucket(LIVE_ROOM_INFO.replace(ROOM_UID, room.getRoomUid()));
|
|
|
-
|
|
|
+ //初始化房间数据 点赞 人数 等 为0
|
|
|
//修改房间状态
|
|
|
|
|
|
}
|
|
@@ -311,20 +354,28 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
* 分享直播间
|
|
|
*/
|
|
|
public void test() {
|
|
|
-
|
|
|
+ //将用户数据写入直播间
|
|
|
+ RList<UserInfo> list = redissonClient.getList(LIVE_ROOM_USER_LIST.replace(ROOM_UID, "roomUid"));
|
|
|
+ UserInfo userInfo = new UserInfo();
|
|
|
+ userInfo.setUserId(1);
|
|
|
+ userInfo.setUserName("1");
|
|
|
+ boolean contains = list.contains(userInfo);
|
|
|
+ if (!contains) {
|
|
|
+ list.add(userInfo);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void shareGroup(String roomUid, String groupIds) {
|
|
|
- ImLiveBroadcastRoomVo imLiveBroadcastRoomVo = queryRoomInfo(roomUid);
|
|
|
- if (imLiveBroadcastRoomVo == null) {
|
|
|
- throw new BizException("直播间信息异常!");
|
|
|
- }
|
|
|
- SysUser sysUser = sysUserFeignService.queryUserInfo();
|
|
|
- sysMessageService.batchSendImMessage(MessageTypeEnum.IM_SHARE_LIVE_URL, sysUser.getId().toString(), null, groupIds.split(","), null,
|
|
|
- imLiveBroadcastRoomVo.getTenantName(), imLiveBroadcastRoomVo.getRoomTitle(), imLiveBroadcastRoomVo.getSpeakerName(),
|
|
|
- DateUtil.format(imLiveBroadcastRoomVo.getLiveStartTime(), DateUtil.CHINESE_DATA_FORMAT_1),
|
|
|
- imLiveBroadcastRoomVo.getLiveRemark(), HttpUtil.getSortUrl("https://test.dayaedu.com/"));
|
|
|
+// ImLiveBroadcastRoomVo imLiveBroadcastRoomVo = queryRoomInfo(roomUid);
|
|
|
+// if (imLiveBroadcastRoomVo == null) {
|
|
|
+// throw new BizException("直播间信息异常!");
|
|
|
+// }
|
|
|
+// SysUser sysUser = sysUserFeignService.queryUserInfo();
|
|
|
+// sysMessageService.batchSendImMessage(MessageTypeEnum.IM_SHARE_LIVE_URL, sysUser.getId().toString(), null, groupIds.split(","), null,
|
|
|
+// imLiveBroadcastRoomVo.getTenantName(), imLiveBroadcastRoomVo.getRoomTitle(), imLiveBroadcastRoomVo.getSpeakerName(),
|
|
|
+// DateUtil.format(imLiveBroadcastRoomVo.getLiveStartTime(), DateUtil.CHINESE_DATA_FORMAT_1),
|
|
|
+// imLiveBroadcastRoomVo.getLiveRemark(), HttpUtil.getSortUrl("https://test.dayaedu.com/"));
|
|
|
}
|
|
|
}
|
|
|
|