init
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user