package com.rax.vital.handler; import com.alibaba.fastjson.JSONObject; import com.rax.vital.medicine.service.ChatService; import com.rax.vital.util.GetHttpParamUtil; import jakarta.annotation.Resource; import org.springframework.security.oauth2.server.authorization.OAuth2Authorization; import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService; import org.springframework.security.oauth2.server.authorization.OAuth2TokenType; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketMessage; import org.springframework.web.socket.WebSocketSession; import java.net.URLDecoder; import java.util.Map; public class ChatHandler implements WebSocketHandler { @Resource private OAuth2AuthorizationService authorizationService; @Resource private ChatService chatService; @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { } @Override public void handleMessage(WebSocketSession session, WebSocketMessage message) throws Exception { String decode = URLDecoder.decode(session.getUri().getQuery()); Map params = GetHttpParamUtil.getParams(decode); String token = (String) params.get("token"); OAuth2Authorization authorization = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN); if (authorization != null) { String username = authorization.getPrincipalName(); String payload = (String) message.getPayload(); JSONObject jsonObject = JSONObject.parseObject(payload); String patientName = jsonObject.getString("patientName"); String idNum = jsonObject.getString("idNum"); String date = jsonObject.getString("date"); // 消息内容 String msg = jsonObject.getString("msg"); chatService.sendMessage(username, patientName, idNum, date, session, msg); } else { } } @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { chatService.stopTaskMongo(session.getId()); } @Override public boolean supportsPartialMessages() { return false; } }