diff --git a/pom.xml b/pom.xml index b447e68..d234320 100644 --- a/pom.xml +++ b/pom.xml @@ -91,7 +91,7 @@ - quartz + auth diff --git a/upms/upms-biz/pom.xml b/upms/upms-biz/pom.xml index d293642..3316ef9 100644 --- a/upms/upms-biz/pom.xml +++ b/upms/upms-biz/pom.xml @@ -21,10 +21,10 @@ auth - - com.rax - quartz - + + + + com.rax diff --git a/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysHospitalServiceImpl.java b/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysHospitalServiceImpl.java index 2445f62..67b3b5f 100644 --- a/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysHospitalServiceImpl.java +++ b/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysHospitalServiceImpl.java @@ -126,17 +126,27 @@ public class SysHospitalServiceImpl extends ServiceImpl 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)); + } RedisUtils.set(key, user.getHospitalId()); return Convert.toStr(user.getHospitalId()); + } + // 其余角色 + return Convert.toStr(user.getHospitalId()); } @Override diff --git a/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysLogServiceImpl.java b/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysLogServiceImpl.java index 053cda5..97a4d25 100644 --- a/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysLogServiceImpl.java +++ b/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysLogServiceImpl.java @@ -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 impleme @Override @Transactional(rollbackFor = Exception.class) public Boolean saveLog(SysLog sysLog) { - // 获取到医院ID - LambdaQueryWrapper userLambdaQueryWrapper = new LambdaQueryWrapper<>(); - userLambdaQueryWrapper.eq(SysUser::getUsername, sysLog.getCreateBy()); - SysUser sysUser = sysUserMapper.selectOne(userLambdaQueryWrapper); - // 设置到日志对象中 - sysLog.setHospitalId(sysUser.getHospitalId()); + if (sysLog.getHospitalId() == null) { + // 获取到医院ID + LambdaQueryWrapper userLambdaQueryWrapper = new LambdaQueryWrapper<>(); + userLambdaQueryWrapper.eq(SysUser::getUsername, sysLog.getCreateBy()); + SysUser sysUser = sysUserMapper.selectOne(userLambdaQueryWrapper); + // 设置到日志对象中 + sysLog.setHospitalId(sysUser.getHospitalId()); + } baseMapper.insert(sysLog); return Boolean.TRUE; } diff --git a/upms/upms-biz/src/main/java/com/rax/admin/timmer/LogTimerTask.java b/upms/upms-biz/src/main/java/com/rax/admin/timmer/LogTimerTask.java new file mode 100644 index 0000000..bcbf627 --- /dev/null +++ b/upms/upms-biz/src/main/java/com/rax/admin/timmer/LogTimerTask.java @@ -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 sysLogQueryWrapper = new QueryWrapper<>(); + sysLogQueryWrapper.select("distinct create_by"); + List userList = sysLogMapper.selectList(sysLogQueryWrapper) + .stream().map(SysLog::getCreateBy).toList(); + // 获取30天前的时间 + String agoDate = getDate(new Date(), 30); + for (String user : userList) { + // 查询指定用户的日志集合id + List 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); + } +} diff --git a/upms/upms-biz/src/main/java/com/rax/vital/common/util/SysLoggerBuilder.java b/upms/upms-biz/src/main/java/com/rax/vital/common/util/SysLoggerBuilder.java index d6b3bfc..74293bb 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/common/util/SysLoggerBuilder.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/common/util/SysLoggerBuilder.java @@ -12,25 +12,30 @@ 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; import java.util.Map; /** - * project_name:remote-control-backend - * time:2024/9/3 15:17 - * 根据解析到的Token, 构造一个日志对象, 添加日志表中 + * project_name: remote-control-backend + * time: 2024/9/3 15:17 + * 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 stringObjectMap = parseToken(token); + Map 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 stringObjectMap = parseToken(token); + Map 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 parseToken(String token) { - HashMap map = new HashMap<>(); - OAuth2Authorization byToken = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN); - String userName = byToken.getPrincipalName(); - map.put("userName", userName); - OAuth2Authorization.Token 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; } - } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/common/util/TokenUtil.java b/upms/upms-biz/src/main/java/com/rax/vital/common/util/TokenUtil.java new file mode 100644 index 0000000..2c1b588 --- /dev/null +++ b/upms/upms-biz/src/main/java/com/rax/vital/common/util/TokenUtil.java @@ -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 parseToken(String token) { + HashMap map = new HashMap<>(); + OAuth2Authorization byToken = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN); + String username = byToken.getPrincipalName(); + map.put("username", username); + OAuth2Authorization.Token accessToken = byToken.getAccessToken(); + RaxUser o = (RaxUser) accessToken.getClaims().get("user_info"); + Long hospitalId = o.getHospitalId(); + map.put("hospitalId", hospitalId); + return map; + } +} diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v2/config/WebSocketConfig.java b/upms/upms-biz/src/main/java/com/rax/vital/v2/config/WebSocketConfig.java index c3eab0c..7823960 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v2/config/WebSocketConfig.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v2/config/WebSocketConfig.java @@ -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(); - } - } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/AddMedicineHandler.java b/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/AddMedicineHandler.java index 40d3918..81c3cc4 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/AddMedicineHandler.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/AddMedicineHandler.java @@ -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 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 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 diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/ChatHandler.java b/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/ChatHandler.java index 025e64d..351807b 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/ChatHandler.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/ChatHandler.java @@ -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 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 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); - } -// } + + 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 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, 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 diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/MachineFeedbackHandler.java b/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/MachineFeedbackHandler.java index d934a32..bbe2bc6 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/MachineFeedbackHandler.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/MachineFeedbackHandler.java @@ -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 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获取到给药信息后回复 @@ -79,7 +93,7 @@ public class MachineFeedbackHandler implements WebSocketHandler { // u3d相应网页端的请求 if ("unityResponseConnection".equals(msgType)) { String unityConnectionFlag = jsonObject.getString("unityConnectionFlag"); - aiMedicineTimer.sendConnectionResponseToWeb(patientName, idNum, date,databaseName, unityConnectionFlag); + aiMedicineTimer.sendConnectionResponseToWeb(patientName, idNum, date, databaseName, unityConnectionFlag); } if (aiMedicineTimer.getUnitySession(databaseName) != null && aiMedicineTimer.getWebSession(databaseName) != null @@ -106,7 +120,7 @@ public class MachineFeedbackHandler implements WebSocketHandler { if (aiMedicineTimer.getUnitySession(databaseName) != null) { result.put("unityMsg", "unity端已登录"); - }else { + } else { result.put("unityMsg", "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 diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/MedicineHandler.java b/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/MedicineHandler.java index a83649d..cedea82 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/MedicineHandler.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/MedicineHandler.java @@ -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 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 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 diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v2/interceptor/WebSocketInterceptors.java b/upms/upms-biz/src/main/java/com/rax/vital/v2/interceptor/WebSocketInterceptors.java index 4353072..96f18a9 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v2/interceptor/WebSocketInterceptors.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v2/interceptor/WebSocketInterceptors.java @@ -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 @@ -34,14 +46,17 @@ public class WebSocketInterceptors implements HandshakeInterceptor { String query = request.getURI().getQuery(); String token = GetHttpParamUtil.getParam(query, "token"); OAuth2Authorization authorization = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN); - if (authorization == null ) { + 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); + } } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v2/timer/VitalSignTimerV2.java b/upms/upms-biz/src/main/java/com/rax/vital/v2/timer/VitalSignTimerV2.java index a723669..f9cffe9 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v2/timer/VitalSignTimerV2.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v2/timer/VitalSignTimerV2.java @@ -22,9 +22,9 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; /** - * project_name:remote-control-backend - * time:2024/8/20 15:09 - * author:republicline + * project_name: remote-control-backend + * time: 2024/8/20 15:09 + * author: republicline * 新的计时器任务, 和一期代码解耦 */ @RefreshScope