|
@@ -41,6 +41,7 @@ import com.ym.mec.biz.dal.enums.EOnOffStatus;
|
|
|
import com.ym.mec.biz.dal.enums.MessageTypeEnum;
|
|
|
import com.ym.mec.biz.dal.page.LiveRoomGoodsOrderQueryInfo;
|
|
|
import com.ym.mec.biz.dal.vo.*;
|
|
|
+import com.ym.mec.biz.redisson.RedissonMessageService;
|
|
|
import com.ym.mec.biz.service.*;
|
|
|
import com.ym.mec.common.entity.ImRoomMessage;
|
|
|
import com.ym.mec.common.entity.ImUserState;
|
|
@@ -118,6 +119,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
private ImLiveRoomVideoService imLiveRoomVideoService;
|
|
|
@Autowired
|
|
|
private LivePluginContext livePluginContext;
|
|
|
+ @Autowired
|
|
|
+ private RedissonMessageService redissonMessageService;
|
|
|
|
|
|
@Autowired
|
|
|
private ImFeignService imFeignService;
|
|
@@ -351,6 +354,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
if (now.getTime() > dto.getLiveStartTime().getTime()) {
|
|
|
throw new BizException("设置的直播开始时间不能小于当前时间");
|
|
|
}
|
|
|
+ if (StringUtils.isBlank(dto.getServiceProvider())) {
|
|
|
+ //查询房间过期时间
|
|
|
+ String liveClient = sysConfigDao.findConfigValue("live_client");
|
|
|
+ dto.setServiceProvider(liveClient);
|
|
|
+ }
|
|
|
ImLiveBroadcastRoom obj = new ImLiveBroadcastRoom();
|
|
|
BeanUtils.copyProperties(dto, obj);
|
|
|
String roomUid = "LIVE-" + sysUser.getId() + "-" + now.getTime();
|
|
@@ -705,6 +713,15 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
//销毁直播间
|
|
|
pluginService.chatRoomDestroy(roomUid);
|
|
|
|
|
|
+
|
|
|
+ TencentWrapper.LiveStreamState liveStreamState = pluginService.liveStreamState(
|
|
|
+ getStreamId(room.getRoomUid(), room.getSpeakerId()));
|
|
|
+ if (liveStreamState == null) {
|
|
|
+ log.error("查询直播间流失败,返回结果为空");
|
|
|
+ } else if ("active".equals(liveStreamState.getStreamState())) {
|
|
|
+ pluginService.liveStreamStop(getStreamId(room.getRoomUid(), room.getSpeakerId()));
|
|
|
+ }
|
|
|
+
|
|
|
// 录制任务Id
|
|
|
if (room.getServiceProvider().equals(TencentCloudLivePlugin.PLUGIN_NAME)) {
|
|
|
|
|
@@ -894,11 +911,14 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
// 用户进入直播间,发送统计数据
|
|
|
// sendLiveRoomStatMessage(userid, roomVo);
|
|
|
|
|
|
- // 直播间统计数据
|
|
|
- getRoomData(roomVo);
|
|
|
- // 设置群组属性
|
|
|
- setGroupDefinedData(roomVo,EGroupDefinedDataType.MEMBER_ONLINE,roomVo.getLookNum().toString());
|
|
|
- setGroupDefinedData(roomVo,EGroupDefinedDataType.MEMBER_TOTAL,roomVo.getTotalLookNum().toString());
|
|
|
+ // 缓存JoinRoom用户信息到redis
|
|
|
+ RBucket<Object> bucket = redissonClient.getBucket(RedissonMessageService.LIVE_ROOM_MEMBER + roomUid);
|
|
|
+ if (!bucket.isExists()) {
|
|
|
+ bucket.set(roomUid, 30, TimeUnit.MINUTES);
|
|
|
+ // 发布删除缓存消息
|
|
|
+ redissonMessageService.publish(RedissonMessageService.TOPIC_MESSAGE, roomUid);
|
|
|
+ }
|
|
|
+
|
|
|
log.debug("opsRoom>>>> user enter room, userState: {}", JSON.toJSONString(userState));
|
|
|
return;
|
|
|
}
|
|
@@ -971,6 +991,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
*/
|
|
|
private void sendLiveRoomStatMessage(String userid, ImLiveBroadcastRoomVo roomVo) {
|
|
|
|
|
|
+ userid = setFromUserId(userid,roomVo);
|
|
|
// 消息发送用户
|
|
|
LiveRoomMessage.MessageUser messageUser = null;
|
|
|
SysUser sysUser = sysUserFeignService.queryUserInfo();
|
|
@@ -995,7 +1016,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
LiveRoomMessage message = LiveRoomMessage.builder()
|
|
|
.isIncludeSender(1)
|
|
|
.objectName(LiveRoomMessage.STAT_SYNC)
|
|
|
- .fromUserId(roomVo.getSpeakerId().toString())
|
|
|
+ .fromUserId(userid)
|
|
|
.toChatRoomId(roomVo.getRoomUid())
|
|
|
.content(messageContent)
|
|
|
.build();
|
|
@@ -1011,6 +1032,13 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
|
|
|
}
|
|
|
|
|
|
+ private String setFromUserId(String fromUserId, ImLiveBroadcastRoomVo roomVo) {
|
|
|
+ if (roomVo.getServiceProvider().equals(RongCloudLivePlugin.PLUGIN_NAME)) {
|
|
|
+ return fromUserId;
|
|
|
+ }
|
|
|
+ return roomVo.getSpeakerId().toString();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 直播间用户离开消息
|
|
|
* @param userid 用户id
|
|
@@ -1018,6 +1046,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
*/
|
|
|
private void sendLiveRoomLoginOutMessage(String userid, ImLiveBroadcastRoomVo roomVo) {
|
|
|
|
|
|
+ String fromUserId = setFromUserId(userid, roomVo);
|
|
|
// 消息发送用户
|
|
|
LiveRoomMessage.MessageUser messageUser = null;
|
|
|
SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(userid));
|
|
@@ -1033,14 +1062,14 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
|
|
|
LiveRoomMessage.MessageContent messageContent = LiveRoomMessage.MessageContent
|
|
|
.builder()
|
|
|
- .targetId(userid)
|
|
|
+ .targetId(sysUser.getId().toString())
|
|
|
.sendUserInfo(messageUser)
|
|
|
.build();
|
|
|
|
|
|
LiveRoomMessage message = LiveRoomMessage.builder()
|
|
|
.isIncludeSender(1)
|
|
|
- .objectName(LiveRoomMessage.LEAVE)
|
|
|
- .fromUserId(roomVo.getSpeakerId().toString())
|
|
|
+ .objectName(LiveRoomMessage.LOOKER_LOGIN_OUT)
|
|
|
+ .fromUserId(fromUserId)
|
|
|
.toChatRoomId(roomVo.getRoomUid())
|
|
|
.content(messageContent)
|
|
|
.build();
|
|
@@ -1079,9 +1108,14 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
// 直播间统计数据
|
|
|
getRoomData(roomVo);
|
|
|
|
|
|
- // 设置群组属性
|
|
|
- setGroupDefinedData(roomVo,EGroupDefinedDataType.MEMBER_ONLINE,roomVo.getLookNum().toString());
|
|
|
- setGroupDefinedData(roomVo,EGroupDefinedDataType.MEMBER_TOTAL,roomVo.getTotalLookNum().toString());
|
|
|
+ String userId = setFromUserId(fromUserId.toString(),roomVo);
|
|
|
+ // 缓存JoinRoom用户信息到redis
|
|
|
+ RBucket<Object> bucket = redissonClient.getBucket(RedissonMessageService.LIVE_ROOM_MEMBER + roomUid);
|
|
|
+ if (!bucket.isExists()) {
|
|
|
+ bucket.set(roomUid, 30, TimeUnit.MINUTES);
|
|
|
+ // 发布删除缓存消息
|
|
|
+ redissonMessageService.publish(RedissonMessageService.TOPIC_MESSAGE, roomUid);
|
|
|
+ }
|
|
|
|
|
|
// 消息发送用户
|
|
|
LiveRoomMessage.MessageUser messageUser = null;
|
|
@@ -1108,7 +1142,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
LiveRoomMessage message = LiveRoomMessage.builder()
|
|
|
.isIncludeSender(1)
|
|
|
.objectName(LiveRoomMessage.MEMBER_COUNT)
|
|
|
- .fromUserId(roomVo.getSpeakerId().toString())
|
|
|
+ .fromUserId(userId)
|
|
|
.toChatRoomId(roomUid)
|
|
|
.content(messageContent)
|
|
|
.build();
|
|
@@ -1271,6 +1305,31 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
return roomVo;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void setGroupMemberDefinedData(ImLiveBroadcastRoomVo roomVo, Integer onlineUser, Integer totalUser) {
|
|
|
+ List<TencentRequest.ChatRoomGroupDefinedData> appDefinedData = new ArrayList<>();
|
|
|
+ appDefinedData.add(TencentRequest.ChatRoomGroupDefinedData.builder()
|
|
|
+ .key(EGroupDefinedDataType.MEMBER_ONLINE.getCode())
|
|
|
+ .value(onlineUser.toString())
|
|
|
+ .build());
|
|
|
+ appDefinedData.add(TencentRequest.ChatRoomGroupDefinedData.builder()
|
|
|
+ .key(EGroupDefinedDataType.MEMBER_TOTAL.getCode())
|
|
|
+ .value(totalUser.toString())
|
|
|
+ .build());
|
|
|
+ try {
|
|
|
+ livePluginContext.getPluginService(roomVo.getServiceProvider())
|
|
|
+ .chatRoomGroupDefinedData(TencentRequest.ChatRoomGroup.builder()
|
|
|
+ .groupId(roomVo.getRoomUid())
|
|
|
+ .appDefinedData(appDefinedData)
|
|
|
+ .build());
|
|
|
+ log.info("设置直播群观看人数 roomUid:{}, data {}",roomVo.getRoomUid(), JSONObject.toJSONString(appDefinedData));
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("设置直播群观看人数失败", e);
|
|
|
+ throw new BizException("设置直播群观看人数失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void setGroupDefinedData(ImLiveBroadcastRoomVo roomVo, EGroupDefinedDataType type, String value) {
|
|
|
List<TencentRequest.ChatRoomGroupDefinedData> appDefinedData = new ArrayList<>();
|
|
|
appDefinedData.add(TencentRequest.ChatRoomGroupDefinedData.builder()
|
|
@@ -1390,6 +1449,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ String fromUserid = setFromUserId(userId.toString(),roomVo);
|
|
|
// 消息发送用户
|
|
|
LiveRoomMessage.MessageUser messageUser = null;
|
|
|
SysUser sysUser = sysUserFeignService.queryUserById(userId);
|
|
@@ -1412,7 +1472,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
LiveRoomMessage message = LiveRoomMessage.builder()
|
|
|
.isIncludeSender(1)
|
|
|
.objectName(LiveRoomMessage.WELCOME)
|
|
|
- .fromUserId(roomVo.getSpeakerId().toString())
|
|
|
+ .fromUserId(fromUserid)
|
|
|
.toChatRoomId(roomUid)
|
|
|
.content(messageContent)
|
|
|
.build();
|
|
@@ -2529,15 +2589,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public int syncLikeCount(String roomUid) {
|
|
|
- ImLiveBroadcastRoom room = getById(roomUid);
|
|
|
+ ImLiveBroadcastRoomVo room = getImLiveBroadcastRoomVo(roomUid);
|
|
|
if (room == null) {
|
|
|
return 0;
|
|
|
}
|
|
|
- ImLiveBroadcastRoomDetailVo imLiveBroadcastRoomDetailVo = liveBroadcastRoomDataService.getDao()
|
|
|
- .queryByRoomUid(roomUid);
|
|
|
- if (imLiveBroadcastRoomDetailVo == null) {
|
|
|
- return 0;
|
|
|
- }
|
|
|
+
|
|
|
if (room.getServiceProvider().equals(RongCloudLivePlugin.PLUGIN_NAME)) {
|
|
|
//点赞数
|
|
|
Object like = redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, roomUid)).get();
|
|
@@ -2565,8 +2621,18 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
|
|
|
if (first.isPresent()) {
|
|
|
int i = Integer.parseInt(first.get().getValue());
|
|
|
- imLiveBroadcastRoomDetailVo.setTotalLikeNum(i);
|
|
|
- updateById(room);
|
|
|
+
|
|
|
+ ImLiveBroadcastRoomData one = liveBroadcastRoomDataService.lambdaQuery()
|
|
|
+ .eq(ImLiveBroadcastRoomData::getRoomUid, roomUid)
|
|
|
+ .last("limit 1")
|
|
|
+ .one();
|
|
|
+ if (one != null) {
|
|
|
+ ImLiveBroadcastRoomData imLiveBroadcastRoomData = new ImLiveBroadcastRoomData();
|
|
|
+ imLiveBroadcastRoomData.setId(one.getId());
|
|
|
+ imLiveBroadcastRoomData.setLikeNum(i);
|
|
|
+ liveBroadcastRoomDataService.updateById(imLiveBroadcastRoomData);
|
|
|
+ }
|
|
|
+
|
|
|
return i;
|
|
|
}
|
|
|
return 0;
|