|
@@ -17,11 +17,13 @@ import com.microsvc.toolkit.middleware.live.message.RTCRoom;
|
|
|
import com.ym.mec.auth.api.client.SysUserFeignService;
|
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
|
import com.ym.mec.biz.dal.dao.ImLiveBroadcastRoomDao;
|
|
|
+import com.ym.mec.biz.dal.dao.ImLiveBroadcastRoomMemberDao;
|
|
|
import com.ym.mec.biz.dal.dao.LiveGoodsMapperDao;
|
|
|
import com.ym.mec.biz.dal.dao.SysConfigDao;
|
|
|
import com.ym.mec.biz.dal.dto.ImLiveBroadcastRoomDto;
|
|
|
import com.ym.mec.biz.dal.dto.LiveRoomStatus;
|
|
|
import com.ym.mec.biz.dal.dto.RoomReservationUserSearch;
|
|
|
+import com.ym.mec.biz.dal.dto.TencentData;
|
|
|
import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoom;
|
|
|
import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomData;
|
|
|
import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomMember;
|
|
@@ -63,6 +65,8 @@ import java.io.IOException;
|
|
|
import java.io.OutputStream;
|
|
|
import java.io.Serializable;
|
|
|
import java.text.MessageFormat;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneId;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
@@ -92,6 +96,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
@Autowired
|
|
|
private ImLiveBroadcastRoomMemberService liveBroadcastRoomMemberService;
|
|
|
@Autowired
|
|
|
+ private ImLiveBroadcastRoomMemberDao liveBroadcastRoomMemberDao;
|
|
|
+ @Autowired
|
|
|
private ImLiveBroadcastRoomDataService liveBroadcastRoomDataService;
|
|
|
@Autowired
|
|
|
private LiveGoodsMapperDao liveGoodsMapperDao;
|
|
@@ -1627,6 +1633,126 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
|
|
|
|
|
|
/**
|
|
|
+ * 直播群成员在线状态回调处理
|
|
|
+ *
|
|
|
+ * @param callbackOnMemberStateChange
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public void callbackOnMemberStateChange(TencentData.CallbackOnMemberStateChange callbackOnMemberStateChange) {
|
|
|
+
|
|
|
+ if (callbackOnMemberStateChange == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer onlineStatus = callbackOnMemberStateChange.getEventType().equals("Online")?1:0;
|
|
|
+
|
|
|
+ // 用户id
|
|
|
+ if (CollectionUtils.isEmpty(callbackOnMemberStateChange.getMemberList())) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<Long> userIds = callbackOnMemberStateChange.getMemberList()
|
|
|
+ .stream()
|
|
|
+ .map(o -> Long.parseLong(o.getMemberAccount()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+
|
|
|
+ List<ImLiveBroadcastRoomMember> imLiveBroadcastRoomMembers = liveBroadcastRoomMemberDao.queryMember(userIds,
|
|
|
+ callbackOnMemberStateChange.getGroupId());
|
|
|
+
|
|
|
+ // 根据用户id分组
|
|
|
+ Map<Integer, ImLiveBroadcastRoomMember> userMap = imLiveBroadcastRoomMembers.stream()
|
|
|
+ .collect(Collectors.toMap(ImLiveBroadcastRoomMember::getUserId,o ->o, (k1, k2) -> k1));
|
|
|
+
|
|
|
+ List<ImUserState> imUserStates = new ArrayList<>();
|
|
|
+ for (Long userId : userIds) {
|
|
|
+ Integer liveRoomStatus = userMap.getOrDefault(userId.intValue(), new ImLiveBroadcastRoomMember())
|
|
|
+ .getLiveRoomStatus();
|
|
|
+ ImUserState imUserState = new ImUserState();
|
|
|
+ imUserState.setUserid(userId.toString());
|
|
|
+ imUserState.setStatus(onlineStatus == 1 && liveRoomStatus == 1?"0":"1");
|
|
|
+ imUserState.setOs(callbackOnMemberStateChange.getOptPlatform());
|
|
|
+ imUserState.setTime(new Date().getTime());
|
|
|
+ imUserState.setClientIp(callbackOnMemberStateChange.getClientIP());
|
|
|
+ imUserStates.add(imUserState);
|
|
|
+ }
|
|
|
+ opsRoom(imUserStates);
|
|
|
+ liveBroadcastRoomMemberDao.updateOnlineStatus(userIds, callbackOnMemberStateChange.getGroupId(),onlineStatus);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void callbackAfterMemberExit(TencentData.CallbackAfterMemberExit callbackAfterMemberExit) {
|
|
|
+ if (callbackAfterMemberExit == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer liveRoomStatus = 0;
|
|
|
+
|
|
|
+ // 用户id
|
|
|
+ if (CollectionUtils.isEmpty(callbackAfterMemberExit.getExitMemberList())) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<Long> userIds = callbackAfterMemberExit.getExitMemberList()
|
|
|
+ .stream()
|
|
|
+ .map(o -> Long.parseLong(o.getMemberAccount()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+
|
|
|
+ List<ImUserState> imUserStates = new ArrayList<>();
|
|
|
+ for (Long userId : userIds) {
|
|
|
+ ImUserState imUserState = new ImUserState();
|
|
|
+ imUserState.setUserid(userId.toString());
|
|
|
+ imUserState.setStatus("3");
|
|
|
+ imUserState.setOs(callbackAfterMemberExit.getOptPlatform());
|
|
|
+ imUserState.setTime(callbackAfterMemberExit.getEventTime().atZone(ZoneId.systemDefault()).toEpochSecond());
|
|
|
+ imUserState.setClientIp(callbackAfterMemberExit.getClientIP());
|
|
|
+ imUserStates.add(imUserState);
|
|
|
+ }
|
|
|
+ opsRoom(imUserStates);
|
|
|
+ liveBroadcastRoomMemberDao.updateLiveRoomStatus(userIds, callbackAfterMemberExit.getGroupId(),liveRoomStatus);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void callbackAfterNewMemberJoin(TencentData.CallbackAfterNewMemberJoin callbackAfterNewMemberJoin) {
|
|
|
+ if (callbackAfterNewMemberJoin == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer liveRoomStatus = 1;
|
|
|
+
|
|
|
+ // 用户id
|
|
|
+ if (CollectionUtils.isEmpty(callbackAfterNewMemberJoin.getNewMemberList())) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<Long> userIds = callbackAfterNewMemberJoin.getNewMemberList()
|
|
|
+ .stream()
|
|
|
+ .map(o -> Long.parseLong(o.getMemberAccount()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+
|
|
|
+ List<ImLiveBroadcastRoomMember> imLiveBroadcastRoomMembers = liveBroadcastRoomMemberDao.queryMember(userIds,
|
|
|
+ callbackAfterNewMemberJoin.getGroupId());
|
|
|
+
|
|
|
+ // 根据用户id分组
|
|
|
+ Map<Integer, ImLiveBroadcastRoomMember> userMap = imLiveBroadcastRoomMembers.stream()
|
|
|
+ .collect(Collectors.toMap(ImLiveBroadcastRoomMember::getUserId,o ->o, (k1, k2) -> k1));
|
|
|
+
|
|
|
+ List<ImUserState> imUserStates = new ArrayList<>();
|
|
|
+ for (Long userId : userIds) {
|
|
|
+ ImUserState imUserState = new ImUserState();
|
|
|
+ imUserState.setUserid(userId.toString());
|
|
|
+ imUserState.setStatus(userMap.getOrDefault(userId.intValue(), new ImLiveBroadcastRoomMember()).getOnlineStatus() == 1 ? "0" : "1");
|
|
|
+ imUserState.setOs(callbackAfterNewMemberJoin.getOptPlatform());
|
|
|
+ imUserState.setTime(callbackAfterNewMemberJoin.getEventTime().atZone(ZoneId.systemDefault()).toEpochSecond());
|
|
|
+ imUserState.setClientIp(callbackAfterNewMemberJoin.getClientIP());
|
|
|
+ imUserStates.add(imUserState);
|
|
|
+ }
|
|
|
+ opsRoom(imUserStates);
|
|
|
+ liveBroadcastRoomMemberDao.updateLiveRoomStatus(userIds, callbackAfterNewMemberJoin.getGroupId(),liveRoomStatus);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
* 查询直播间所有用户信息
|
|
|
*
|
|
|
* @param roomUid 直播间uid
|