feat: 视频通话相关功能

This commit is contained in:
曹鹏飞 2025-05-21 11:03:45 +08:00
parent 1f3e0968cc
commit 91d3d78c9b
4 changed files with 55 additions and 11 deletions

View File

@ -4,12 +4,14 @@ import cn.hutool.core.collection.CollectionUtil;
import com.nflg.mobilebroken.admin.pojo.dto.ShengWangChannelDTO;
import com.nflg.mobilebroken.admin.pojo.dto.ShengWangChannelInfoDTO;
import com.nflg.mobilebroken.admin.service.ShengWangService;
import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.util.IdUtil;
import com.nflg.mobilebroken.repository.entity.TicketCall;
import com.nflg.mobilebroken.repository.entity.TicketCallJoin;
import com.nflg.mobilebroken.repository.service.ITicketCallJoinService;
import com.nflg.mobilebroken.repository.service.ITicketCallService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@ -73,23 +75,54 @@ public class ShengWangScheduledTasks {
.one();
if (Objects.nonNull(ticketCall)) {
log.info("获取频道用户");
List<Integer> userIds = shengWangService.getChannelUsers(info.getChannelName());
if (CollectionUtil.isEmpty(userIds)) {
List<Integer> channelUsers = shengWangService.getChannelUsers(info.getChannelName());
log.info("频道用户:{}", channelUsers);
if (CollectionUtil.isEmpty(channelUsers)) {
ticketCallJoinService.lambdaUpdate()
.set(TicketCallJoin::getState, 2)
.set(TicketCallJoin::getHangupTime, LocalDateTime.now())
.eq(TicketCallJoin::getCallId, ticketCall.getId())
.update();
} else {
ticketCallJoinService.lambdaUpdate()
.set(TicketCallJoin::getState, 2)
.set(TicketCallJoin::getHangupTime, LocalDateTime.now())
.eq(TicketCallJoin::getCallId, ticketCall.getId())
.notIn(TicketCallJoin::getUserId, userIds)
.update();
//用户端
List<Integer> userIds = channelUsers.stream()
.map(String::valueOf)
.filter(userId -> String.valueOf(userId).startsWith("1"))
.map(this::getUserId)
.collect(Collectors.toList());
log.info("客户端用户:{}", userIds);
if (CollectionUtil.isNotEmpty(userIds)) {
ticketCallJoinService.lambdaUpdate()
.set(TicketCallJoin::getState, 2)
.set(TicketCallJoin::getHangupTime, LocalDateTime.now())
.eq(TicketCallJoin::getCallId, ticketCall.getId())
.eq(TicketCallJoin::getFrom, Constant.FROM_APP)
.notIn(TicketCallJoin::getUserId, userIds)
.update();
}
//管理端
userIds = channelUsers.stream()
.map(String::valueOf)
.filter(userId -> String.valueOf(userId).startsWith("2"))
.map(this::getUserId)
.collect(Collectors.toList());
log.info("管理端用户:{}", userIds);
if (CollectionUtil.isNotEmpty(userIds)) {
ticketCallJoinService.lambdaUpdate()
.set(TicketCallJoin::getState, 2)
.set(TicketCallJoin::getHangupTime, LocalDateTime.now())
.eq(TicketCallJoin::getCallId, ticketCall.getId())
.eq(TicketCallJoin::getFrom, Constant.FROM_ADMIN)
.notIn(TicketCallJoin::getUserId, userIds)
.update();
}
}
}
}
log.info("执行声网通话状态同步完毕");
}
private Integer getUserId(String userId){
return Integer.valueOf(StringUtils.stripStart(userId.substring(1),"0"));
}
}

View File

@ -25,4 +25,6 @@ public interface ITicketCallJoinService extends IService<TicketCallJoin> {
void hangUp(Integer callId, Integer userId, String from, boolean reject);
void add(Integer callId, Integer userId, String from);
void hangUpAll(Integer id);
}

View File

@ -116,4 +116,12 @@ public class TicketCallJoinServiceImpl extends ServiceImpl<TicketCallJoinMapper,
);
}
}
@Override
public void hangUpAll(Integer id) {
lambdaUpdate()
.set(TicketCallJoin::getState, 2)
.eq(TicketCallJoin::getCallId, id)
.update();
}
}

View File

@ -63,14 +63,15 @@ public class TicketCallServiceImpl extends ServiceImpl<TicketCallMapper, TicketC
TicketCall ticketCall = lambdaQuery()
.eq(TicketCall::getTicketId, ticketId)
.ne(TicketCall::getState, 2)
// .eq(TicketCall::getCallerUserId, userId)
// .eq(TicketCall::getFrom, from)
.one();
if (Objects.nonNull(ticketCall)){
if ((Objects.equals(ticketCall.getCallerUserId(), userId) && StrUtil.equals(ticketCall.getFrom(), Constant.FROM_APP))
|| ticketCallJoinService.allIsHangUp(ticketCall.getId())){
ticketCall.setState(2);
ticketCall.setHangupTime(LocalDateTime.now());
ticketCallJoinService.hangUpAll(ticketCall.getId());
if (!reject) {
ticketCall.setHangupTime(LocalDateTime.now());
}
updateById(ticketCall);
}
ticketCallJoinService.hangUp(ticketCall.getId(), userId, from, reject);