This commit is contained in:
dute7liang
2024-01-14 03:38:50 +08:00
parent 7a6f9eecd3
commit d5deaacfe8
32 changed files with 323 additions and 135 deletions

View File

@@ -1,7 +1,6 @@
package com.ruoyi.cai.chat;
import cn.hutool.core.map.MapUtil;
import com.ruoyi.cai.config.CaiProperties;
import com.ruoyi.cai.domain.Account;
import com.ruoyi.cai.domain.Anchor;
import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.domain.UserCall;
@@ -12,10 +11,7 @@ import com.ruoyi.cai.dto.app.vo.chat.GetRoomResp;
import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.manager.IdManager;
import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.service.AnchorService;
import com.ruoyi.cai.service.GuardTotalService;
import com.ruoyi.cai.service.UserCallService;
import com.ruoyi.cai.service.UserService;
import com.ruoyi.cai.service.*;
import com.ruoyi.cai.ws.bean.Room;
import com.ruoyi.cai.ws.constant.RedisConstant;
import com.ruoyi.cai.ws.dto.WsToken;
@@ -23,15 +19,16 @@ import com.ruoyi.cai.ws.manager.WebSocketManager;
import com.ruoyi.cai.ws.util.MapGetUtil;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
import org.redisson.api.RMap;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.time.Duration;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -48,11 +45,11 @@ public class ChatManager {
@Autowired
private SystemConfigManager systemConfigManager;
@Autowired
private CaiProperties properties;
@Autowired
private GuardTotalService guardTotalService;
@Autowired
private StringRedisTemplate redisTemplate;
private RedissonClient redissonClient;
@Autowired
private AccountService accountService;
private String setWsToken(Long roomId,Long fromUid,Long toUid,Long userId){
String token = IdManager.nextIdStr();
@@ -62,14 +59,16 @@ public class ChatManager {
map.put("fromUid",fromUid);
map.put("toUid",toUid);
map.put("userId",userId);
redisTemplate.opsForHash().putAll(tokenKey,map);
redisTemplate.expire(tokenKey,1, TimeUnit.DAYS);
RMap<Object, Object> mapRedis = redissonClient.getMap(tokenKey);
mapRedis.putAll(map);
mapRedis.expire(Duration.ofDays(1));
return token;
}
public WsToken getToken(String token){
String tokenKey = String.format(RedisConstant.WS_TOKEN, token);
Map<Object, Object> entries = redisTemplate.opsForHash().entries(tokenKey);
RMap<Object, Object> mapRedis = redissonClient.getMap(tokenKey);
Map<Object, Object> entries = mapRedis.readAllMap();
if(entries.isEmpty()){
return null;
}
@@ -85,6 +84,9 @@ public class ChatManager {
Long userId = LoginHelper.getUserId();
User fromUser = userService.getById(userId);
User toUser = userService.getById(callReq.getToUid());
if(toUser == null){
throw new ServiceException("主播不存在");
}
if(toUser.getIsAnchor() != 1){
throw new ServiceException("对方未通过女神认证,不能接听视频");
}
@@ -95,11 +97,21 @@ public class ChatManager {
if(anchor == null){
throw new ServiceException("主播技能不存在");
}
Account account = accountService.getByUserId(userId);
if(account == null){
throw new ServiceException("账户异常,请联系客服");
}
long coin = account.getIncomeCoin() + account.getCoin();
if(coin < anchor.getPrice()*2){
throw new ServiceException("您的余额不足,请充值");
}
Long roomId = null;
Room room = webSocketManager.checkOnlineRoom(fromUser.getId(), toUser.getId());
if(room == null){
UserCall call = userCallService.createCall(fromUser, toUser, anchor);
roomId = webSocketManager.createRoom(call.getId());
}else{
roomId = room.getRoomId();
}
String wsSocketUrlFormat = systemConfigManager.getSystemConfig(SystemConfigEnum.WS_SOCKET_URL);
String token = setWsToken(roomId, fromUser.getId(), toUser.getId(),userId);