diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/MessageHandleApplication.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/MessageHandleApplication.java index b98d06b0..0184df8b 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/MessageHandleApplication.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/MessageHandleApplication.java @@ -2,6 +2,7 @@ package com.ruoyi.cai.ws.handler; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; +import com.esotericsoftware.minlog.Log; import com.ruoyi.cai.chat.ChatManager; import com.ruoyi.cai.ws.bean.FdCtxData; import com.ruoyi.cai.ws.bean.Room; @@ -12,6 +13,7 @@ import com.ruoyi.cai.ws.service.CheckConnectionDTO; import com.ruoyi.cai.ws.service.RoomService; import com.ruoyi.cai.ws.util.WsExceptionUtil; import jodd.util.StringUtil; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.socket.TextMessage; @@ -23,6 +25,7 @@ import java.util.Map; * ws消息处理器统一入口 */ @Component +@Slf4j public class MessageHandleApplication { @Autowired @@ -36,6 +39,7 @@ public class MessageHandleApplication { public void processOn(WebSocketSession session, TextMessage message) { String payload = message.getPayload(); + log.info("调试日志:收到websocket的请求 message={}",payload); if(StringUtil.isEmpty(payload)){ return; } @@ -48,17 +52,20 @@ public class MessageHandleApplication { WsToken wsToken = chatManager.getToken(String.valueOf(attributes.get("token"))); if(wsToken == null){ WsExceptionUtil.throwExceptionFast(session,"无效token"); + log.info("调试日志:无效的token token={}", attributes.get("token")); return; } Long roomId = wsToken.getRoomId(); Room room = roomService.load(roomId); if(room == null){ WsExceptionUtil.throwException(session, "房间不可用" ,HangUpEnums.OTHER, roomId); + log.info("调试日志:房间不可用 wsToken={}", JSON.toJSONString(wsToken)); return; } CheckConnectionDTO checkConnect = roomService.checkConnect(room); if(checkConnect != null){ WsExceptionUtil.throwException(session,checkConnect.getMessage(),checkConnect.getHangUpEnums(),roomId); + log.info("调试日志:链接已完毕 room={}", JSON.toJSONString(room)); return; } IMessageHandler handler = map.get(String.valueOf(method)); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/job/RoomCheckJobService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/job/RoomCheckJobService.java index 6413176c..ed6ab1f8 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/job/RoomCheckJobService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/job/RoomCheckJobService.java @@ -1,6 +1,7 @@ package com.ruoyi.cai.ws.job; import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.cai.domain.UserCall; import com.ruoyi.cai.notice.YunxinWsServiceV2; @@ -18,12 +19,14 @@ import com.ruoyi.cai.ws.service.SettleService; import com.ruoyi.cai.ws.util.RoomWebSocketUtil; import com.ruoyi.yunxin.Yunxin; import com.ruoyi.cai.notice.enums.CallNoticeEnum; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; @Component +@Slf4j public class RoomCheckJobService { @Autowired @@ -39,23 +42,33 @@ public class RoomCheckJobService { public JobResp checkRoom(Long roomId){ Room room = roomService.load(roomId); + log.info("调试日志:开始检查房间 room={}" , JSON.toJSONString(room)); if(room == null){ return JobResp.builder().nextCreateJob(false).build(); } // 检查是否三分钟没有接听 + log.info("调试日志:检查是否三分钟没有接听 roomId={}" , roomId); JobResp resp = this.checkRoomCallerTimeOut(room); if(!resp.isNextCreateJob()){ + log.info("调试日志:三分钟没有接听,可能关闭了 roomId={}" , roomId); return resp; } // 检查心跳 + log.info("调试日志:检查心跳是否超时 roomId={}" , roomId); JobResp heartbeat = checkRoomHeartbeat(room); if(!heartbeat.isNextCreateJob()){ + log.info("调试日志:心跳超时了,可能关闭了 roomId={}" , roomId); return heartbeat; } this.checkCanCallTime(room); // 尝试结算一下 + log.info("调试日志:开始尝试结算 roomId={}" , roomId); SettleResp settleResp = settleService.processOn(roomId); - return JobResp.builder().nextCreateJob(settleResp.isNextRun()).build(); + JobResp build = JobResp.builder().nextCreateJob(settleResp.isNextRun()).build(); + if(!build.isNextCreateJob()){ + log.info("调试日志:结算成功了,可能关闭了 roomId={}" , roomId); + } + return build; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/WebSocketUtils.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/WebSocketUtils.java index 0827fc09..9a44f8f3 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/WebSocketUtils.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/WebSocketUtils.java @@ -27,11 +27,17 @@ public class WebSocketUtils { * @param message 消息文本 */ public static void sendMessage(String sessionKey, String message) { + if(sessionKey == null){ + return; + } WebSocketSession session = WebSocketSessionHolder.getSessions(sessionKey); sendMessage(session, message); } public static boolean close(String sessionKey) { + if(sessionKey == null){ + return false; + } WebSocketSession sessions = WebSocketSessionHolder.getSessions(sessionKey); return close(sessions); } diff --git a/ruoyi-cai/src/main/resources/mapper/cai/UserCallMapper.xml b/ruoyi-cai/src/main/resources/mapper/cai/UserCallMapper.xml index d07d4440..4a030c36 100644 --- a/ruoyi-cai/src/main/resources/mapper/cai/UserCallMapper.xml +++ b/ruoyi-cai/src/main/resources/mapper/cai/UserCallMapper.xml @@ -24,6 +24,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and t3.mobile = #{bo.fromMobile} + + and t1.id = #{bo.id} + and t1.status = #{bo.status}