通话逻辑
This commit is contained in:
@@ -1,10 +1,18 @@
|
||||
package com.ruoyi.cai.chat;
|
||||
|
||||
import com.ruoyi.cai.config.CaiProperties;
|
||||
import com.ruoyi.cai.domain.CaiAnchor;
|
||||
import com.ruoyi.cai.domain.CaiUser;
|
||||
import com.ruoyi.cai.dto.app.query.AnchorListQuery;
|
||||
import com.ruoyi.cai.domain.CaiUserCall;
|
||||
import com.ruoyi.cai.dto.app.dto.GuardNum;
|
||||
import com.ruoyi.cai.dto.app.query.CallReq;
|
||||
import com.ruoyi.cai.dto.app.vo.chat.CallResp;
|
||||
import com.ruoyi.cai.dto.app.vo.chat.GetRoomResp;
|
||||
import com.ruoyi.cai.enums.SystemConfigEnum;
|
||||
import com.ruoyi.cai.manager.SystemConfigManager;
|
||||
import com.ruoyi.cai.service.CaiAnchorService;
|
||||
import com.ruoyi.cai.service.CaiGuardTotalService;
|
||||
import com.ruoyi.cai.service.CaiUserCallService;
|
||||
import com.ruoyi.cai.service.CaiUserService;
|
||||
import com.ruoyi.cai.ws.manager.WebSocketManager;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
@@ -13,6 +21,12 @@ import com.ruoyi.common.utils.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
public class ChatManager {
|
||||
@Autowired
|
||||
@@ -21,27 +35,94 @@ public class ChatManager {
|
||||
private CaiAnchorService anchorService;
|
||||
@Autowired
|
||||
private WebSocketManager webSocketManager;
|
||||
@Autowired
|
||||
private CaiUserCallService userCallService;
|
||||
@Autowired
|
||||
private SystemConfigManager systemConfigManager;
|
||||
@Autowired
|
||||
private CaiProperties properties;
|
||||
@Autowired
|
||||
private CaiGuardTotalService guardTotalService;
|
||||
|
||||
public void call(CallReq callReq){
|
||||
public CallResp call(CallReq callReq){
|
||||
Long userId = LoginHelper.getUserId();
|
||||
CaiUser formUser = userService.getById(userId);
|
||||
CaiUser fromUser = userService.getById(userId);
|
||||
CaiUser toUser = userService.getById(callReq.getToUid());
|
||||
if(toUser.getIsAnchor() != 1){
|
||||
throw new ServiceException("对方未通过女神认证,不能接听视频");
|
||||
}
|
||||
if(formUser.getGender() == 1 && toUser.getGender() == 1){
|
||||
if(fromUser.getGender() == 1 && toUser.getGender() == 1){
|
||||
throw new ServiceException("主播和主播之间,不可以拨打视频哦~");
|
||||
}
|
||||
CaiAnchor anchor = anchorService.getByUserId(toUser.getId());
|
||||
if(anchor == null){
|
||||
throw new ServiceException("主播技能不存在");
|
||||
}
|
||||
String roomId = webSocketManager.checkOnlineRoom(formUser.getId(), toUser.getId());
|
||||
if (StringUtils.isNotEmpty(roomId)) {
|
||||
String roomId = webSocketManager.checkOnlineRoom(fromUser.getId(), toUser.getId());
|
||||
if(StringUtils.isEmpty(roomId)){
|
||||
CaiUserCall call = userCallService.createCall(fromUser, toUser, anchor);
|
||||
roomId = webSocketManager.createRoom(call.getId());
|
||||
}
|
||||
String weSocketUrl = String.format(properties.getWebSocketUrl(),"token",roomId);
|
||||
Long guardPrice = systemConfigManager.getSystemConfigOfLong(SystemConfigEnum.GUARD_PRICE);
|
||||
// 获取鉴黄规则 TODO
|
||||
CallResp callResp = new CallResp();
|
||||
callResp.setRoomId(roomId);
|
||||
callResp.setFromUid(fromUser.getId());
|
||||
callResp.setFromNickname(fromUser.getNickname());
|
||||
callResp.setFromAvatar(fromUser.getAvatar());
|
||||
callResp.setToUid(toUser.getId());
|
||||
callResp.setToNickname(toUser.getNickname());
|
||||
callResp.setToAvatar(toUser.getAvatar());
|
||||
callResp.setSocketUrl(weSocketUrl);
|
||||
callResp.setSkillName(anchor.getSkillName());
|
||||
callResp.setSkillIcon(anchor.getSkillIcon());
|
||||
callResp.setPrice(anchor.getPrice());
|
||||
callResp.setScore(anchor.getGiveScore());
|
||||
callResp.setServiceCount(anchor.getServiceCount());
|
||||
callResp.setServiceTime(anchor.getServiceTime());
|
||||
GuardNum guardNum = guardTotalService.getGuardNum(fromUser.getId(), toUser.getId());
|
||||
callResp.setGuardDiffNum(guardNum.getDiffNum());
|
||||
callResp.setGuardPrice(guardPrice);
|
||||
return callResp;
|
||||
}
|
||||
|
||||
public GetRoomResp getRoom(String roomId){
|
||||
Long userId = LoginHelper.getUserId();
|
||||
CaiUserCall userCall = userCallService.getById(roomId);
|
||||
if(userCall == null){
|
||||
throw new ServiceException("房间不存在");
|
||||
}
|
||||
if(!userCall.getFromUid().equals(userId) && !userCall.getToUid().equals(userId)){
|
||||
throw new ServiceException("无权限操作房间");
|
||||
}
|
||||
String roomIdNew = webSocketManager.checkOnlineRoom(userCall.getFromUid(), userCall.getToUid());
|
||||
if (StringUtils.isNotEmpty(roomIdNew)) {
|
||||
throw new ServiceException("'服务繁忙'");
|
||||
}
|
||||
|
||||
|
||||
// 判断房间号是否还存在 TODO
|
||||
List<CaiUser> userList = userService.listByIds(Arrays.asList(userCall.getFromUid(), userCall.getToUid()));
|
||||
Map<Long, CaiUser> userMap = userList.stream().collect(Collectors.toMap(CaiUser::getId, Function.identity()));
|
||||
CaiUser fromUser = userMap.get(userCall.getFromUid());
|
||||
CaiUser toUser = userMap.get(userCall.getToUid());
|
||||
CaiAnchor anchor = anchorService.getByUserId(toUser.getId());
|
||||
String weSocketUrl = String.format(properties.getWebSocketUrl(),"token",roomId);
|
||||
GetRoomResp getRoomResp = new GetRoomResp();
|
||||
getRoomResp.setRoomId(userCall.getId()+"");
|
||||
getRoomResp.setFromUid(userCall.getFromUid());
|
||||
getRoomResp.setFromNickname(fromUser.getNickname());
|
||||
getRoomResp.setFromAvatar(fromUser.getAvatar());
|
||||
getRoomResp.setToUid(userCall.getToUid());
|
||||
getRoomResp.setToNickname(toUser.getNickname());
|
||||
getRoomResp.setToAvatar(toUser.getAvatar());
|
||||
getRoomResp.setSocketUrl(weSocketUrl);
|
||||
getRoomResp.setSkillName(anchor.getSkillName());
|
||||
getRoomResp.setSkillIcon(anchor.getSkillIcon());
|
||||
getRoomResp.setPrice(anchor.getPrice());
|
||||
getRoomResp.setScore(anchor.getGiveScore());
|
||||
getRoomResp.setServiceCount(anchor.getServiceCount());
|
||||
getRoomResp.setServiceTime(anchor.getServiceTime());
|
||||
return getRoomResp;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user