diff --git a/ruoyi-cai/pom.xml b/ruoyi-cai/pom.xml
index 56fca0ff..f9bc96ed 100644
--- a/ruoyi-cai/pom.xml
+++ b/ruoyi-cai/pom.xml
@@ -32,9 +32,8 @@
2.0.32
- com.ruoyi
- ruoyi-websocket
- 4.8.2
+ org.springframework.boot
+ spring-boot-starter-websocket
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/chat/ChatManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/chat/ChatManager.java
index a1d2f7c6..5fd7d75c 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/chat/ChatManager.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/chat/ChatManager.java
@@ -59,11 +59,11 @@ public class ChatManager {
if(anchor == null){
throw new ServiceException("主播技能不存在");
}
- String roomId = null;
+ Long 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()+"");
+ roomId = webSocketManager.createRoom(call.getId());
}
String weSocketUrl = String.format(properties.getWebSocketUrl(),"token",roomId);
Long guardPrice = systemConfigManager.getSystemConfigOfLong(SystemConfigEnum.GUARD_PRICE);
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/CallResp.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/CallResp.java
index 2b099f75..c711d364 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/CallResp.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/CallResp.java
@@ -9,7 +9,7 @@ import java.math.BigDecimal;
@Schema(description = "拨打视频返回模型")
public class CallResp {
@Schema(description = "房间号")
- private String roomId;
+ private Long roomId;
@Schema(description = "拨打者-用户ID")
private Long fromUid;
@Schema(description = "拨打者-昵称")
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Agora.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Agora.java
index 2c36d9fa..636f77f0 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Agora.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Agora.java
@@ -26,7 +26,7 @@ public class Agora {
}
- public List getChannelUsers(String roomId){
+ public List getChannelUsers(Long roomId){
String url = "http://api.sd-rtn.com/dev/v1/channel/user/%s/%s";
url = String.format(url, agoraProperties.getAppId(), roomId);
HttpHeaders headers = new HttpHeaders();
@@ -42,7 +42,7 @@ public class Agora {
return jsonArray.toJavaList(String.class);
}
- public void closeChannel(String roomId){
+ public void closeChannel(Long roomId){
String url = "http://api.sd-rtn.com/dev/v1/kicking-rule";
Map bodyData = new HashMap<>();
bodyData.put("appid",agoraProperties.getAppId());
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImDataRes.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImDataRes.java
index 34c6c608..15b82a74 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImDataRes.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImDataRes.java
@@ -11,8 +11,8 @@ public class ImDataRes {
public static class ImData {
private Integer callType;
private Integer status;
- private String fromUid;
- private String toUid;
- private Integer callTime;
+ private Long fromUid;
+ private Long toUid;
+ private Long callTime;
}
}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImMsgGen.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImMsgGen.java
index 5f27603d..39b1beb9 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImMsgGen.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImMsgGen.java
@@ -9,7 +9,7 @@ public class ImMsgGen {
* @param to
* @param callTime
*/
- public static ImDataRes callNotice(int status,String from,String to,int callTime){
+ public static ImDataRes callNotice(int status,Long from,Long to,long callTime){
ImDataRes imDataRes = new ImDataRes();
imDataRes.setType(15);
ImDataRes.ImData imData = new ImDataRes.ImData();
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Yunxin.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Yunxin.java
index 4e333b16..5976bd39 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Yunxin.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Yunxin.java
@@ -5,7 +5,6 @@ import cn.hutool.core.lang.UUID;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.cai.util.RestTemplateUtil;
-import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
@@ -23,7 +22,7 @@ public class Yunxin {
private final static String SEND_URL = "https://api.netease.im/nimserver/msg/sendMsg.action";
private final static String SEND_ATTR_URL = "https://api.netease.im/nimserver/msg/sendAttachMsg.action";
- public void sendTo(String toUid,Object data,String fromUid){
+ public void sendTo(Long toUid,Object data,Long fromUid){
Map option = new HashMap<>();
option.put("push",true); // 该消息是否需要APNS推送或安卓系统通知栏推送
option.put("roam",false); // 该消息是否需要漫游(需要app开通漫游消息功能)
@@ -32,7 +31,7 @@ public class Yunxin {
option.put("route",false); // 该消息是否需要抄送第三方 (需要app开通消息抄送功能)
Map bodyData = new HashMap<>();
- bodyData.put("from", StringUtils.isBlank(fromUid) ? yunxinProperties.getDefaultFromUid() :fromUid);
+ bodyData.put("from", fromUid == null ? yunxinProperties.getDefaultFromUid() :fromUid);
bodyData.put("ope", 0);
bodyData.put("to", toUid);
bodyData.put("type", 100);
@@ -49,7 +48,7 @@ public class Yunxin {
RestTemplateUtil.restTemplate.postForObject(SEND_URL,httpEntity, JSONObject.class);
}
- public void sendAttachMsg(String toUid,Object data,String fromUid){
+ public void sendAttachMsg(Long toUid,Object data,Long fromUid){
Map option = new HashMap<>();
option.put("push",true); // 该消息是否需要APNS推送或安卓系统通知栏推送
option.put("roam",false); // 该消息是否需要漫游(需要app开通漫游消息功能)
@@ -58,7 +57,7 @@ public class Yunxin {
option.put("route",false); // 该消息是否需要抄送第三方 (需要app开通消息抄送功能)
Map bodyData = new HashMap<>();
- bodyData.put("from", StringUtils.isBlank(fromUid) ? yunxinProperties.getDefaultFromUid() :fromUid);
+ bodyData.put("from", fromUid == null ? yunxinProperties.getDefaultFromUid() :fromUid);
bodyData.put("ope", 0);
bodyData.put("to", toUid);
bodyData.put("type", 100);
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/CallerRoom.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/CallerRoom.java
deleted file mode 100644
index 108a0524..00000000
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/CallerRoom.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.ruoyi.cai.ws.bean;
-
-public class CallerRoom {
-}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/FdCtxData.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/FdCtxData.java
index 9b813a37..219ebdf7 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/FdCtxData.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/FdCtxData.java
@@ -7,7 +7,7 @@ import lombok.Data;
public class FdCtxData {
private String sessionKey;
- private String roomId;
+ private Long roomId;
private Long userId;
private Integer userType;
private Long tarUserId;
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/Room.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/Room.java
index 0e7387de..a1974294 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/Room.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/Room.java
@@ -10,7 +10,7 @@ public class Room {
private UserData callUserData;
private UserData receiverUserData;
- public String getRoomId(){
+ public Long getRoomId(){
return roomData.getRoomId();
}
@@ -26,4 +26,20 @@ public class Room {
return RoomStatusEnums.STATUS_AGREE.getCode().equals(roomData.getStatus());
}
+ /**
+ * 房间是否已经结算
+ * @return
+ */
+ public boolean isSettle() {
+ return roomData.getSettleTime() != null && roomData.getSettleTime() > 0;
+ }
+
+
+ /**
+ * 是否已经释放房间资源
+ * @return
+ */
+ public boolean isReleaseRes(){
+ return roomData.isReleaseRes();
+ }
}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/RoomData.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/RoomData.java
index e705ce87..3d8c683b 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/RoomData.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/RoomData.java
@@ -6,14 +6,18 @@ import java.math.BigDecimal;
@Data
public class RoomData {
- private String roomId;
+ private Long roomId;
private Long callPrice;
private String skillName;
private Integer status;
private BigDecimal videoDivide;
- private Integer payCoin = 0;
- private Integer payIncome = 0;
+ private Long payCoin = 0L;
+ private Long payIncome = 0L;
private Long hangUpTime;
+ private Long settleTime;
+
private Long beginTime;
+
+ private boolean releaseRes = false;
}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/UserData.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/UserData.java
index 0373be91..e89723cd 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/UserData.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/UserData.java
@@ -7,7 +7,7 @@ import java.math.BigDecimal;
@Data
public class UserData {
private Long id;
- private String roomId;
+ private Long roomId;
private int userType;
private String nickname;
private String userCode;
@@ -18,4 +18,6 @@ public class UserData {
private Long unionUserId;
private BigDecimal unionUserRate;
private Boolean unionIsGet;
+
+ private Long connectTime;
}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/CallerRoomCache.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/CallerRoomCache.java
index 56e6cf88..65b4ec50 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/CallerRoomCache.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/CallerRoomCache.java
@@ -1,10 +1,13 @@
package com.ruoyi.cai.ws.cache;
import com.ruoyi.cai.ws.constant.RedisConstant;
+import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.stereotype.Component;
+import java.util.Collections;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@@ -17,10 +20,10 @@ public class CallerRoomCache {
return String.format(RedisConstant.CALLER_ROOM_DATA,fromUserId);
}
- public String getRoomId(Long fromUserId, Long toUserId){
+ public Long getRoomId(Long fromUserId, Long toUserId){
String key = getKey(fromUserId);
Object roomId = redisTemplate.opsForHash().get(key, toUserId);
- return roomId == null ? null : String.valueOf(roomId);
+ return roomId == null ? null : Long.valueOf(roomId.toString());
}
public void addRoom(Long fromUid, Long toUid, Long roomId) {
@@ -38,4 +41,17 @@ public class CallerRoomCache {
String key = getKey(fromUid);
redisTemplate.delete(key);
}
+
+ private final static String DEL_ROOM_LUA = "return KEYS[1]\n" +
+ "local r = tonumber(redis.call('hget',KEYS[1],ARGV[1]))\n" +
+ "if r == tonumber(ARGV[2]) then\n" +
+ " return redis.call('hdel',KEYS[1],ARGV[1])\n" +
+ "end\n" +
+ "return 0";
+
+ public boolean delRoom(Long receiverId, Long roomId) {
+ DefaultRedisScript redisScript = new DefaultRedisScript<>(DEL_ROOM_LUA,Boolean.class);
+ Boolean execute = redisTemplate.execute(redisScript, Collections.singletonList(getKey(roomId)), receiverId,roomId);
+ return BooleanUtils.isTrue(execute);
+ }
}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/OnlineDataCache.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/OnlineDataCache.java
index 7ae68e1c..6b581465 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/OnlineDataCache.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/OnlineDataCache.java
@@ -14,7 +14,11 @@ public class OnlineDataCache {
return RedisConstant.ONLINE_ROOM_DATA;
}
- public void add(String roomId){
- redisTemplate.opsForSet().add(getKey(),roomId);
+ public void add(Long roomId){
+ redisTemplate.opsForSet().add(getKey(), String.valueOf(roomId));
+ }
+
+ public void remove(Long roomId) {
+ redisTemplate.opsForSet().remove(getKey(),roomId);
}
}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/RoomCtxCache.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/RoomCtxCache.java
index 7cd0e4f2..af6cd2cb 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/RoomCtxCache.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/RoomCtxCache.java
@@ -2,7 +2,7 @@ package com.ruoyi.cai.ws.cache;
import com.ruoyi.cai.ws.constant.RedisConstant;
import com.ruoyi.cai.ws.constant.UserDataConstant;
-import com.ruoyi.websocket.holder.WebSocketSessionHolder;
+import com.ruoyi.cai.ws.holder.WebSocketSessionHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
@@ -17,17 +17,17 @@ public class RoomCtxCache {
@Autowired
private StringRedisTemplate redisTemplate;
- public String getKey(String roomId){
+ public String getKey(Long roomId){
return String.format(RedisConstant.FDCTX_ROOM_DATA,roomId);
}
- public void addFd(String sessionKey,String roomId,Integer userType){
+ public void addFd(String sessionKey,Long roomId,Integer userType){
String key = getKey(roomId);
redisTemplate.opsForHash().putIfAbsent(key,sessionKey,userType);
redisTemplate.expire(key,7, TimeUnit.DAYS);
}
- public List getSessionKeysByRoomId(String roomId){
+ public List getSessionKeysByRoomId(Long roomId){
String key = getKey(roomId);
Map