mirror of
https://gitee.com/republicline/rax-remote-v2.git
synced 2025-08-23 23:34:56 +08:00
add: 给socket的远程相关功能添加日志记录
This commit is contained in:
parent
33821e5af5
commit
f2d7305ed7
2
pom.xml
2
pom.xml
|
@ -91,7 +91,7 @@
|
|||
<!-- 代码生成模块 -->
|
||||
<!--<module>codegen</module>-->
|
||||
<!-- Quartz模块 -->
|
||||
<module>quartz</module>
|
||||
<!-- <module>quartz</module>-->
|
||||
<!-- 身份验证模块 -->
|
||||
<module>auth</module>
|
||||
<!-- 用户管理系统模块 -->
|
||||
|
|
|
@ -21,10 +21,10 @@
|
|||
<artifactId>auth</artifactId>
|
||||
</dependency>
|
||||
<!-- 引入quartz依赖 -->
|
||||
<dependency>
|
||||
<groupId>com.rax</groupId>
|
||||
<artifactId>quartz</artifactId>
|
||||
</dependency>
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>com.rax</groupId>-->
|
||||
<!-- <artifactId>quartz</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
<!--upms api、model 模块-->
|
||||
<dependency>
|
||||
<groupId>com.rax</groupId>
|
||||
|
|
|
@ -126,17 +126,27 @@ public class SysHospitalServiceImpl extends ServiceImpl<SysHospitalMapper, SysHo
|
|||
return status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 这里的currentHospital, 针对管理员Role_ADMIN是获取当前医院
|
||||
* 其余的角色则直接从token获取,无需存储到redis
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String getCurrentHospital() {
|
||||
RaxUser user = SecurityUtils.getUser();
|
||||
List<String> roleCodeList = user.getRoleCodeList();
|
||||
// 管理员
|
||||
if (roleCodeList.contains(RoleRecord.ADMIN_ROLE_CODE)) {
|
||||
String key = CacheConstants.CURRENT_HOSPITAL + ":" + user.getId();
|
||||
if (RedisUtils.hasKey(key)) {
|
||||
return Convert.toStr(RedisUtils.get(key));
|
||||
} else {
|
||||
}
|
||||
RedisUtils.set(key, user.getHospitalId());
|
||||
return Convert.toStr(user.getHospitalId());
|
||||
|
||||
}
|
||||
// 其余角色
|
||||
return Convert.toStr(user.getHospitalId());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -13,6 +13,7 @@ import com.rax.admin.service.SysLogService;
|
|||
import com.rax.admin.utils.AuthUtils;
|
||||
import com.rax.common.security.service.RaxUser;
|
||||
import com.rax.common.security.util.SecurityUtils;
|
||||
import org.jacoco.agent.rt.internal_3570298.core.internal.flow.IFrame;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
@ -114,12 +115,14 @@ public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> impleme
|
|||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean saveLog(SysLog sysLog) {
|
||||
if (sysLog.getHospitalId() == null) {
|
||||
// 获取到医院ID
|
||||
LambdaQueryWrapper<SysUser> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
userLambdaQueryWrapper.eq(SysUser::getUsername, sysLog.getCreateBy());
|
||||
SysUser sysUser = sysUserMapper.selectOne(userLambdaQueryWrapper);
|
||||
// 设置到日志对象中
|
||||
sysLog.setHospitalId(sysUser.getHospitalId());
|
||||
}
|
||||
baseMapper.insert(sysLog);
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
package com.rax.admin.timmer;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.rax.admin.api.entity.SysLog;
|
||||
import com.rax.admin.mapper.SysLogMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* project_name: remote-control-backend
|
||||
* author republicline
|
||||
* time: 2024/9/4 16:20
|
||||
* description: 日志定时任务清除
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@Service
|
||||
public class LogTimerTask {
|
||||
|
||||
@Autowired
|
||||
private SysLogMapper sysLogMapper;
|
||||
|
||||
|
||||
//每天晚上12:00定时删除30天之前的数据
|
||||
@Scheduled(cron = "0 0 0 * * ?")
|
||||
public void scheduled() {
|
||||
// 查询系统的全部用户的集合
|
||||
QueryWrapper<SysLog> sysLogQueryWrapper = new QueryWrapper<>();
|
||||
sysLogQueryWrapper.select("distinct create_by");
|
||||
List<String> userList = sysLogMapper.selectList(sysLogQueryWrapper)
|
||||
.stream().map(SysLog::getCreateBy).toList();
|
||||
// 获取30天前的时间
|
||||
String agoDate = getDate(new Date(), 30);
|
||||
for (String user : userList) {
|
||||
// 查询指定用户的日志集合id
|
||||
List<Long> idList = sysLogMapper.selectListByTime(user, agoDate)
|
||||
.stream()
|
||||
.map(SysLog::getId)
|
||||
.toList();
|
||||
if (!idList.isEmpty()) {
|
||||
sysLogMapper.deleteBatchByIds(idList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Description: 获取时间
|
||||
* @param: [now, days]
|
||||
* @return: java.lang.String
|
||||
*/
|
||||
public static String getDate(Date now, int days) {
|
||||
// 将 java.util.Date 转换为 java.time.LocalDateTime
|
||||
LocalDateTime localDateTime = now.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
||||
|
||||
// 计算 days 天前的日期时间
|
||||
LocalDateTime daysAgo = localDateTime.minusDays(days);
|
||||
|
||||
// 格式化为年月日时分秒
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
return daysAgo.format(formatter);
|
||||
}
|
||||
}
|
|
@ -12,6 +12,7 @@ import org.springframework.security.oauth2.server.authorization.OAuth2TokenType;
|
|||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.socket.WebSocketSession;
|
||||
|
||||
import java.net.URI;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.HashMap;
|
||||
|
@ -20,17 +21,21 @@ import java.util.Map;
|
|||
/**
|
||||
* project_name: remote-control-backend
|
||||
* time: 2024/9/3 15:17
|
||||
* 根据解析到的Token, 构造一个日志对象, 添加日志表中
|
||||
* author: republicline
|
||||
* description: 日志对象构造, 根据解析到的Token, 构造一个日志对象, 添加日志表中
|
||||
*/
|
||||
@Component
|
||||
public class SysLoggerBuilder {
|
||||
|
||||
@Autowired
|
||||
private OAuth2AuthorizationService authorizationService;
|
||||
private TokenUtil tokenUtil;
|
||||
|
||||
public SysLog buildSysLog(String title, String logType, WebSocketSession session) {
|
||||
|
||||
String query = session.getUri().getQuery();
|
||||
String token = GetHttpParamUtil.getParam(query, "token");
|
||||
|
||||
|
||||
public SysLog buildSysLog(String token, String title, String logType, WebSocketSession session) {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
// 从session中获取一些信息
|
||||
String ip = session.getRemoteAddress() != null ? session.getRemoteAddress().toString() : "unknown";
|
||||
String uri = session.getUri() != null ? session.getUri().toString() : "unknown";
|
||||
|
@ -40,11 +45,9 @@ public class SysLoggerBuilder {
|
|||
session.getUri().getQuery() : "unknown";
|
||||
|
||||
// 解析token
|
||||
OAuth2Authorization byToken = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN);
|
||||
Map<String, Object> stringObjectMap = parseToken(token);
|
||||
Map<String, Object> stringObjectMap = tokenUtil.parseToken(token);
|
||||
Long hospitalId = (Long) stringObjectMap.get("hospitalId");
|
||||
String userName = (String) stringObjectMap.get("userName");
|
||||
|
||||
String userName = (String) stringObjectMap.get("username");
|
||||
|
||||
// 填充属性
|
||||
SysLog sysLog = new SysLog();
|
||||
|
@ -52,6 +55,7 @@ public class SysLoggerBuilder {
|
|||
sysLog.setTitle(title);
|
||||
sysLog.setCreateTime(LocalDateTime.now());
|
||||
sysLog.setRemoteAddr(ip);
|
||||
sysLog.setMethod("ws");
|
||||
sysLog.setDelFlag("0");
|
||||
sysLog.setParams(params);
|
||||
sysLog.setUserAgent(userAgent);
|
||||
|
@ -65,15 +69,15 @@ public class SysLoggerBuilder {
|
|||
|
||||
// 获取信息
|
||||
HttpHeaders headers = request.getHeaders();
|
||||
String req_url = headers.getFirst("origin");
|
||||
String agent = headers.getFirst("User-Agent");
|
||||
String req_addr = request.getRemoteAddress().toString();
|
||||
|
||||
// 获取解析token
|
||||
String query = request.getURI().getQuery();
|
||||
String token = GetHttpParamUtil.getParam(query, "token");
|
||||
Map<String, Object> stringObjectMap = parseToken(token);
|
||||
Map<String, Object> stringObjectMap = tokenUtil.parseToken(token);
|
||||
|
||||
String userName = (String) stringObjectMap.get("userName");
|
||||
String userName = (String) stringObjectMap.get("username");
|
||||
Long hospitalId = (Long) stringObjectMap.get("hospitalId");
|
||||
|
||||
// 填充属性
|
||||
|
@ -83,24 +87,30 @@ public class SysLoggerBuilder {
|
|||
sysLog.setDelFlag("0");
|
||||
sysLog.setCreateBy(userName);
|
||||
sysLog.setParams(query);
|
||||
sysLog.setRemoteAddr(req_url);
|
||||
sysLog.setRemoteAddr(req_addr);
|
||||
sysLog.setMethod("ws");
|
||||
sysLog.setHospitalId(hospitalId);
|
||||
sysLog.setCreateTime(LocalDateTime.now());
|
||||
sysLog.setUserAgent(agent);
|
||||
return sysLog;
|
||||
}
|
||||
|
||||
|
||||
private Map<String,Object> parseToken(String token) {
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
OAuth2Authorization byToken = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN);
|
||||
String userName = byToken.getPrincipalName();
|
||||
map.put("userName", userName);
|
||||
OAuth2Authorization.Token<OAuth2AccessToken> accessToken = byToken.getAccessToken();
|
||||
RaxUser o = (RaxUser) accessToken.getClaims().get("user_info");
|
||||
Long hospitalId = o.getHospitalId();
|
||||
map.put("hospitalId", hospitalId);
|
||||
return map;
|
||||
public SysLog buildLongWithLogType(ServerHttpRequest request){
|
||||
URI uri = request.getURI();
|
||||
String uriStr = uri.toString();
|
||||
if (uriStr.contains("/rax/vitalSignsMedicine")) {
|
||||
return buildSysLog("连接生命体征接口","0",request);
|
||||
}
|
||||
if (uriStr.contains("/rax/chatRoom")) {
|
||||
return buildSysLog("连接聊天室接口","0",request);
|
||||
}
|
||||
if (uriStr.contains("/rax/addMedicine")){
|
||||
return buildSysLog("网页端连接给药接口","0",request);
|
||||
}
|
||||
if (uriStr.contains("/rax/getMedicine")){
|
||||
return buildSysLog("仪器端连接收药接口","0",request);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
package com.rax.vital.common.util;
|
||||
|
||||
import com.rax.common.security.service.RaxUser;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.security.oauth2.core.OAuth2AccessToken;
|
||||
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.stereotype.Component;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* project_name: remote-control-backend
|
||||
* time: 2024/9/4 14:56
|
||||
* author: republicline
|
||||
* description:
|
||||
*/
|
||||
@Component
|
||||
public class TokenUtil {
|
||||
|
||||
@Resource
|
||||
private OAuth2AuthorizationService authorizationService;
|
||||
|
||||
public Map<String,Object> parseToken(String token) {
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
OAuth2Authorization byToken = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN);
|
||||
String username = byToken.getPrincipalName();
|
||||
map.put("username", username);
|
||||
OAuth2Authorization.Token<OAuth2AccessToken> accessToken = byToken.getAccessToken();
|
||||
RaxUser o = (RaxUser) accessToken.getClaims().get("user_info");
|
||||
Long hospitalId = o.getHospitalId();
|
||||
map.put("hospitalId", hospitalId);
|
||||
return map;
|
||||
}
|
||||
}
|
|
@ -6,9 +6,7 @@ import com.rax.vital.v2.handler.MachineFeedbackHandler;
|
|||
import com.rax.vital.v2.handler.MedicineHandler;
|
||||
import com.rax.vital.v2.interceptor.WebSocketInterceptors;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.socket.WebSocketHandler;
|
||||
import org.springframework.web.socket.config.annotation.EnableWebSocket;
|
||||
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
|
||||
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
|
||||
|
@ -21,37 +19,28 @@ public class WebSocketConfig implements WebSocketConfigurer {
|
|||
@Autowired
|
||||
private WebSocketInterceptors webSocketInterceptors;
|
||||
|
||||
@Autowired
|
||||
private AddMedicineHandler addMedicineHandler;
|
||||
|
||||
@Autowired
|
||||
private ChatHandler chatHandler;
|
||||
|
||||
@Autowired
|
||||
private MachineFeedbackHandler machineFeedbackHandler;
|
||||
|
||||
@Autowired
|
||||
private MedicineHandler medicineHandler;
|
||||
|
||||
|
||||
@Override
|
||||
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
|
||||
registry.addHandler(medicineHandler(), "/rax/vitalSignsMedicine")
|
||||
.addHandler(chatHandler(), "/rax/chatRoom")
|
||||
.addHandler(addMedicineHandler(), "/rax/addMedicine")
|
||||
.addHandler(machineFeedbackHandler(),"/rax/getMedicine")
|
||||
registry.addHandler(medicineHandler, "/rax/vitalSignsMedicine")
|
||||
.addHandler(chatHandler,"/rax/chatRoom")
|
||||
.addHandler(addMedicineHandler, "/rax/addMedicine")
|
||||
.addHandler(machineFeedbackHandler,"/rax/getMedicine")
|
||||
.addInterceptors(new HttpSessionHandshakeInterceptor())
|
||||
.addInterceptors(webSocketInterceptors)
|
||||
.setAllowedOrigins("*");
|
||||
}
|
||||
|
||||
@Bean
|
||||
public WebSocketHandler medicineHandler() {
|
||||
return new MedicineHandler();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public WebSocketHandler chatHandler() {
|
||||
return new ChatHandler();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public WebSocketHandler addMedicineHandler() {
|
||||
return new AddMedicineHandler();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public WebSocketHandler machineFeedbackHandler() {
|
||||
return new MachineFeedbackHandler();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,20 +1,18 @@
|
|||
package com.rax.vital.v2.handler;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.rax.admin.api.entity.SysLog;
|
||||
import com.rax.admin.service.SysLogService;
|
||||
import com.rax.vital.common.util.DatabaseNameUtil;
|
||||
import com.rax.vital.common.util.GetHttpParamUtil;
|
||||
import com.rax.vital.common.util.SysLoggerBuilder;
|
||||
import com.rax.vital.common.util.TokenUtil;
|
||||
import com.rax.vital.v2.timer.AIMedicineTimer;
|
||||
import com.rax.vital.v2.timer.VitalSignTimerV2;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
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.stereotype.Component;
|
||||
import org.springframework.web.socket.*;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URLDecoder;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.*;
|
||||
|
@ -23,38 +21,37 @@ import java.util.concurrent.*;
|
|||
* 网站发送给仪器给药信息
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class AddMedicineHandler implements WebSocketHandler {
|
||||
|
||||
|
||||
@Autowired
|
||||
private VitalSignTimerV2 vitalSignTimerV2;
|
||||
|
||||
@Resource
|
||||
private OAuth2AuthorizationService authorizationService;
|
||||
@Autowired
|
||||
private SysLoggerBuilder sysLoggerBuilder;
|
||||
|
||||
@Autowired
|
||||
private SysLogService sysLogService;
|
||||
|
||||
@Autowired
|
||||
private TokenUtil tokenUtil;
|
||||
|
||||
@Autowired
|
||||
private AIMedicineTimer aiMedicineTimer;
|
||||
|
||||
// 发送心跳任务的定时任务容器
|
||||
private Map<String, ScheduledExecutorService> timerTaskMap = new ConcurrentHashMap<>();
|
||||
|
||||
|
||||
@Autowired
|
||||
private AIMedicineTimer aiMedicineTimer;
|
||||
|
||||
|
||||
@Override
|
||||
public void afterConnectionEstablished(WebSocketSession session) {
|
||||
URI uri = session.getUri();
|
||||
System.out.println("uri = " + uri);
|
||||
startHeartbeat(session);
|
||||
}
|
||||
|
||||
|
||||
@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);
|
||||
String username = authorization.getPrincipalName();
|
||||
|
||||
JSONObject jsonObject = JSONObject.parseObject((String) message.getPayload());
|
||||
String msgType = jsonObject.getString("msgType");
|
||||
|
@ -88,7 +85,12 @@ public class AddMedicineHandler implements WebSocketHandler {
|
|||
// 处理发送给药相关
|
||||
if ("addMedicine".equals(msgType) && aiMedicineTimer.getWebSession(databaseName) != null && aiMedicineTimer.getUnitySession(databaseName) != null
|
||||
&& aiMedicineTimer.isReady(databaseName)) {
|
||||
// todo 注意修改
|
||||
// 解析获取username
|
||||
String query = session.getUri().getQuery();
|
||||
String token = GetHttpParamUtil.getParam(query, "token");
|
||||
Map<String, Object> map = tokenUtil.parseToken(token);
|
||||
String username = (String) map.get("username");
|
||||
|
||||
// flag 0 代表人工给药, 1代表AI给药
|
||||
vitalSignTimerV2.sendMedicalMessageToUnity(databaseName, username, session, jsonObject.getString("flag"),
|
||||
jsonObject.getString("medicine"), jsonObject.getString("value"));
|
||||
|
@ -123,12 +125,16 @@ public class AddMedicineHandler implements WebSocketHandler {
|
|||
public void handleTransportError(WebSocketSession session, Throwable exception) {
|
||||
stopHeartbeat(session);
|
||||
aiMedicineTimer.closeConnection(session);
|
||||
SysLog sysLog = sysLoggerBuilder.buildSysLog("给药接口异常中断:"+exception.getMessage(), "4", session);
|
||||
sysLogService.saveLog(sysLog);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) {
|
||||
stopHeartbeat(session);
|
||||
aiMedicineTimer.closeConnection(session);
|
||||
SysLog sysLog = sysLoggerBuilder.buildSysLog("给药接口客户端,断开连接", "0", session);
|
||||
sysLogService.saveLog(sysLog);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,25 +1,42 @@
|
|||
package com.rax.vital.v2.handler;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.rax.admin.api.entity.SysLog;
|
||||
import com.rax.admin.service.SysLogService;
|
||||
import com.rax.vital.common.util.DatabaseNameUtil;
|
||||
import com.rax.vital.common.util.GetHttpParamUtil;
|
||||
import com.rax.vital.common.util.SysLoggerBuilder;
|
||||
import com.rax.vital.common.util.TokenUtil;
|
||||
import com.rax.vital.v2.medicine.service.ChatService;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.socket.*;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Component
|
||||
public class ChatHandler implements WebSocketHandler {
|
||||
@Resource
|
||||
private OAuth2AuthorizationService authorizationService;
|
||||
|
||||
@Resource
|
||||
private ChatService chatService;
|
||||
|
||||
@Autowired
|
||||
private SysLoggerBuilder sysLoggerBuilder;
|
||||
|
||||
@Autowired
|
||||
private SysLogService sysLogService;
|
||||
|
||||
@Autowired
|
||||
private TokenUtil tokenUtil;
|
||||
|
||||
|
||||
private Map<String, ScheduledExecutorService> timerTaskMap = new ConcurrentHashMap();
|
||||
|
||||
@Override
|
||||
|
@ -29,35 +46,40 @@ public class ChatHandler implements WebSocketHandler {
|
|||
|
||||
@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);
|
||||
if (!"heartbeat".equals(jsonObject.getString("msgType"))) {
|
||||
|
||||
String query = Objects.requireNonNull(session.getUri()).getQuery();
|
||||
String token = GetHttpParamUtil.getParam(query, "token");
|
||||
Map<String, Object> map = tokenUtil.parseToken(token);
|
||||
String username = (String) map.get("username");
|
||||
|
||||
String patientName = jsonObject.getString("patientName");
|
||||
String idNum = jsonObject.getString("idNum");
|
||||
String date = jsonObject.getString("date");
|
||||
// 消息内容
|
||||
String msg = jsonObject.getString("msg");
|
||||
String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date;
|
||||
chatService.sendMessage(databaseName,"admin",session, msg);
|
||||
chatService.sendMessage(databaseName, username, session, msg);
|
||||
}
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleTransportError(WebSocketSession session, Throwable exception) {
|
||||
System.out.println("Error: " + exception.getMessage());
|
||||
SysLog sysLog = sysLoggerBuilder.buildSysLog("聊天室接口异常中断:"+exception.getMessage(), "4", session);
|
||||
sysLogService.saveLog(sysLog);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) {
|
||||
stopHeartbeat(session);
|
||||
chatService.stopTask(session.getId());
|
||||
SysLog sysLog = sysLoggerBuilder.buildSysLog("聊天室接口关闭", "0", session);
|
||||
sysLogService.saveLog(sysLog);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,11 +1,16 @@
|
|||
package com.rax.vital.v2.handler;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.rax.admin.api.entity.SysLog;
|
||||
import com.rax.admin.service.SysLogService;
|
||||
import com.rax.vital.common.util.DatabaseNameUtil;
|
||||
import com.rax.vital.common.util.SysLoggerBuilder;
|
||||
import com.rax.vital.common.util.TokenUtil;
|
||||
import com.rax.vital.v2.timer.AIMedicineTimer;
|
||||
import com.rax.vital.v2.timer.VitalSignTimerV2;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.socket.*;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -17,11 +22,21 @@ import java.util.concurrent.*;
|
|||
* 仪器获取网站给药信息
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class MachineFeedbackHandler implements WebSocketHandler {
|
||||
|
||||
@Autowired
|
||||
private VitalSignTimerV2 vitalSignTimerV2;
|
||||
|
||||
@Autowired
|
||||
private SysLoggerBuilder sysLoggerBuilder;
|
||||
|
||||
@Autowired
|
||||
private SysLogService sysLogService;
|
||||
|
||||
@Autowired
|
||||
private TokenUtil tokenUtil;
|
||||
|
||||
private Map<String, ScheduledExecutorService> timerTaskMap = new ConcurrentHashMap();
|
||||
|
||||
@Autowired
|
||||
|
@ -54,7 +69,6 @@ public class MachineFeedbackHandler implements WebSocketHandler {
|
|||
|
||||
if ("init".equals(msgType)) {
|
||||
aiMedicineTimer.initUnity(databaseName, session);
|
||||
// vitalSignTimerWS.initUnity(databaseName, session);
|
||||
}
|
||||
|
||||
// Unity获取到给药信息后回复
|
||||
|
@ -135,12 +149,16 @@ public class MachineFeedbackHandler implements WebSocketHandler {
|
|||
public void handleTransportError(WebSocketSession session, Throwable exception) {
|
||||
stopHeartbeat(session);
|
||||
aiMedicineTimer.closeConnection(session);
|
||||
SysLog sysLog = sysLoggerBuilder.buildSysLog("仪器端获取收药口异常中断", "4", session);
|
||||
sysLogService.saveLog(sysLog);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) {
|
||||
stopHeartbeat(session);
|
||||
aiMedicineTimer.closeConnection(session);
|
||||
SysLog sysLog = sysLoggerBuilder.buildSysLog("仪器端收药接口关闭", "0", session);
|
||||
sysLogService.saveLog(sysLog);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,17 +1,19 @@
|
|||
package com.rax.vital.v2.handler;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.rax.admin.api.entity.SysLog;
|
||||
import com.rax.admin.service.SysLogService;
|
||||
import com.rax.vital.common.util.DatabaseNameUtil;
|
||||
import com.rax.vital.common.util.GetHttpParamUtil;
|
||||
import com.rax.vital.common.util.SysLoggerBuilder;
|
||||
import com.rax.vital.common.util.TokenUtil;
|
||||
import com.rax.vital.v2.timer.VitalSignTimerV2;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
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.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.socket.*;
|
||||
|
||||
import java.net.URLDecoder;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.Executors;
|
||||
|
@ -23,14 +25,20 @@ import java.util.concurrent.TimeUnit;
|
|||
*/
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class MedicineHandler implements WebSocketHandler {
|
||||
|
||||
|
||||
@Resource
|
||||
@Autowired
|
||||
private VitalSignTimerV2 vitalSignTimerV2;
|
||||
|
||||
@Resource
|
||||
private OAuth2AuthorizationService authorizationService;
|
||||
@Autowired
|
||||
private SysLoggerBuilder sysLoggerBuilder;
|
||||
|
||||
@Autowired
|
||||
private SysLogService sysLogService;
|
||||
|
||||
@Autowired
|
||||
private TokenUtil tokenUtil;
|
||||
|
||||
private Map<String, ScheduledExecutorService> timerTaskMap = new ConcurrentHashMap<>();
|
||||
|
||||
|
@ -41,16 +49,18 @@ public class MedicineHandler implements WebSocketHandler {
|
|||
|
||||
@Override
|
||||
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) {
|
||||
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);
|
||||
String username = authorization.getPrincipalName();
|
||||
|
||||
|
||||
String payload = (String) message.getPayload();
|
||||
JSONObject jsonObject = JSONObject.parseObject(payload);
|
||||
|
||||
if (!"heartbeat".equals(jsonObject.getString("msgType"))) {
|
||||
|
||||
String query = session.getUri().getQuery();
|
||||
String token = GetHttpParamUtil.getParam(query, "token");
|
||||
Map<String, Object> map = tokenUtil.parseToken(token);
|
||||
String username = (String) map.get("username");
|
||||
|
||||
String patientName = jsonObject.getString("patientName");
|
||||
String idNum = jsonObject.getString("idNum");
|
||||
String date = jsonObject.getString("date");
|
||||
|
@ -63,12 +73,16 @@ public class MedicineHandler implements WebSocketHandler {
|
|||
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
|
||||
stopHeartbeat(session);
|
||||
vitalSignTimerV2.stopTimerTask(session.getId());
|
||||
SysLog sysLog = sysLoggerBuilder.buildSysLog("生命体征接口异常中断", "4", session);
|
||||
sysLogService.saveLog(sysLog);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
|
||||
stopHeartbeat(session);
|
||||
vitalSignTimerV2.stopTimerTask(session.getId());
|
||||
SysLog sysLog = sysLoggerBuilder.buildSysLog("生命体征接口连接关闭", "0", session);
|
||||
sysLogService.saveLog(sysLog);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
package com.rax.vital.v2.interceptor;
|
||||
|
||||
import com.rax.admin.api.entity.SysLog;
|
||||
import com.rax.admin.service.SysLogService;
|
||||
import com.rax.vital.common.util.GetHttpParamUtil;
|
||||
import com.rax.vital.common.util.SysLoggerBuilder;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.server.ServerHttpRequest;
|
||||
import org.springframework.http.server.ServerHttpResponse;
|
||||
import org.springframework.security.oauth2.server.authorization.OAuth2Authorization;
|
||||
|
@ -20,8 +24,16 @@ public class WebSocketInterceptors implements HandshakeInterceptor {
|
|||
@Resource
|
||||
private OAuth2AuthorizationService authorizationService;
|
||||
|
||||
@Autowired
|
||||
private SysLoggerBuilder sysLoggerBuilder;
|
||||
|
||||
|
||||
@Autowired
|
||||
private SysLogService sysLogService;
|
||||
|
||||
/**
|
||||
* 在这里做一个全局的日志插入根据路径匹配不同的操作title
|
||||
*
|
||||
* @param request
|
||||
* @param response
|
||||
* @param wsHandler
|
||||
|
@ -37,11 +49,14 @@ public class WebSocketInterceptors implements HandshakeInterceptor {
|
|||
if (authorization == null) {
|
||||
return false;
|
||||
}
|
||||
// 适配一下,根据req中不同的路径做不同的操作title
|
||||
SysLog sysLog = sysLoggerBuilder.buildLongWithLogType(request);
|
||||
sysLogService.saveLog(sysLog);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
|
||||
System.out.println("request = " + request + ", response = " + response + ", wsHandler = " + wsHandler + ", exception = " + exception);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user