Files
cai-server/ruoyi-cai/src/main/java/com/ruoyi/cai/chat/ChatManager.java
张良(004796) 49922904ec 通话逻辑
2023-12-28 21:35:37 +08:00

130 lines
5.7 KiB
Java

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.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.bean.Room;
import com.ruoyi.cai.ws.manager.WebSocketManager;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
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
private CaiUserService userService;
@Autowired
private CaiAnchorService anchorService;
@Autowired
private WebSocketManager webSocketManager;
@Autowired
private CaiUserCallService userCallService;
@Autowired
private SystemConfigManager systemConfigManager;
@Autowired
private CaiProperties properties;
@Autowired
private CaiGuardTotalService guardTotalService;
public CallResp call(CallReq callReq){
Long userId = LoginHelper.getUserId();
CaiUser fromUser = userService.getById(userId);
CaiUser toUser = userService.getById(callReq.getToUid());
if(toUser.getIsAnchor() != 1){
throw new ServiceException("对方未通过女神认证,不能接听视频");
}
if(fromUser.getGender() == 1 && toUser.getGender() == 1){
throw new ServiceException("主播和主播之间,不可以拨打视频哦~");
}
CaiAnchor anchor = anchorService.getByUserId(toUser.getId());
if(anchor == null){
throw new ServiceException("主播技能不存在");
}
String roomId = null;
Room room = webSocketManager.checkOnlineRoom(fromUser.getId(), toUser.getId());
if(room == null){
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("无权限操作房间");
}
Room room = webSocketManager.checkOnlineRoom(userCall.getFromUid(), userCall.getToUid());
if (room == null) {
throw new ServiceException("'对方已取消通话'");
}
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;
}
}