From f5ef4fd0b78676c808801324bdc0a6bf53b8e034 Mon Sep 17 00:00:00 2001 From: republicline <1464474399@qq.com> Date: Fri, 19 Jul 2024 18:11:49 +0800 Subject: [PATCH] V2 --- upms/upms-biz/pom.xml | 7 ++ .../rax/vital/handler/AddMedicineHandler.java | 6 ++ .../com/rax/vital/handler/ChatHandler.java | 5 +- .../vital/handler/MachineFeedbackHandler.java | 19 ++++- .../rax/vital/handler/MedicineHandler.java | 7 +- .../rax/vital/handler/MedicineHandlerV2.java | 29 ++++++++ .../handler/mysql/AddMedicineHandler.java | 1 + .../vital/medicine/service/ChatService.java | 2 +- .../service/impl/ChatServiceImpl.java | 36 +++++----- .../com/rax/vital/timer/AIMedicineTimer.java | 71 +++++++++++++++++++ .../com/rax/vital/timer/VitalSignTimerWS.java | 23 +++--- .../com/rax/vital/util/DatabaseNameUtil.java | 4 ++ .../src/main/resources/application.yml | 9 ++- .../src/main/resources/logback-spring.xml | 2 +- 14 files changed, 184 insertions(+), 37 deletions(-) create mode 100644 upms/upms-biz/src/main/java/com/rax/vital/handler/MedicineHandlerV2.java create mode 100644 upms/upms-biz/src/main/java/com/rax/vital/timer/AIMedicineTimer.java diff --git a/upms/upms-biz/pom.xml b/upms/upms-biz/pom.xml index 84ad3f1..b12e146 100644 --- a/upms/upms-biz/pom.xml +++ b/upms/upms-biz/pom.xml @@ -105,6 +105,13 @@ druid-spring-boot-starter 1.2.21 + + + + org.bouncycastle + bcprov-jdk15on + 1.68 + diff --git a/upms/upms-biz/src/main/java/com/rax/vital/handler/AddMedicineHandler.java b/upms/upms-biz/src/main/java/com/rax/vital/handler/AddMedicineHandler.java index 6ad4dae..d41e268 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/handler/AddMedicineHandler.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/handler/AddMedicineHandler.java @@ -1,10 +1,12 @@ package com.rax.vital.handler; import com.alibaba.fastjson.JSONObject; +import com.rax.vital.timer.AIMedicineTimer; import com.rax.vital.timer.VitalSignTimerWS; import com.rax.vital.util.DatabaseNameUtil; import com.rax.vital.util.GetHttpParamUtil; import jakarta.annotation.Resource; +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; @@ -27,6 +29,10 @@ public class AddMedicineHandler implements WebSocketHandler { @Resource private OAuth2AuthorizationService authorizationService; +// @Autowired +// private AIMedicineTimer aiMedicineTimer; + + // 发送心跳任务的定时任务容器 private Map timerTaskMap = new ConcurrentHashMap(); @Override diff --git a/upms/upms-biz/src/main/java/com/rax/vital/handler/ChatHandler.java b/upms/upms-biz/src/main/java/com/rax/vital/handler/ChatHandler.java index 97cacd6..52f679a 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/handler/ChatHandler.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/handler/ChatHandler.java @@ -2,6 +2,7 @@ package com.rax.vital.handler; import com.alibaba.fastjson.JSONObject; import com.rax.vital.medicine.service.ChatService; +import com.rax.vital.util.DatabaseNameUtil; import com.rax.vital.util.GetHttpParamUtil; import jakarta.annotation.Resource; import org.springframework.security.oauth2.server.authorization.OAuth2Authorization; @@ -47,7 +48,9 @@ public class ChatHandler implements WebSocketHandler { String date = jsonObject.getString("date"); // 消息内容 String msg = jsonObject.getString("msg"); - chatService.sendMessage(username, patientName, idNum, date, session, msg); + System.out.println("chatHandler-jsonObject = " + jsonObject.toJSONString()); + String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date; + chatService.sendMessage(databaseName,username,session, msg); } } } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/handler/MachineFeedbackHandler.java b/upms/upms-biz/src/main/java/com/rax/vital/handler/MachineFeedbackHandler.java index c7bfb26..7cd1409 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/handler/MachineFeedbackHandler.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/handler/MachineFeedbackHandler.java @@ -1,9 +1,12 @@ package com.rax.vital.handler; import com.alibaba.fastjson.JSONObject; +import com.rax.vital.timer.AIMedicineTimer; import com.rax.vital.timer.VitalSignTimerWS; import com.rax.vital.util.DatabaseNameUtil; import jakarta.annotation.Resource; +import org.checkerframework.checker.units.qual.A; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService; import org.springframework.web.socket.*; @@ -23,8 +26,13 @@ public class MachineFeedbackHandler implements WebSocketHandler { @Resource private VitalSignTimerWS vitalSignTimerWS; + +// @Autowired +// private AIMedicineTimer aiMedicineTimer; + private Map timerTaskMap = new ConcurrentHashMap(); + @Override public void afterConnectionEstablished(WebSocketSession session) { vitalSignTimerWS.setMachineSessionMap(session); @@ -33,6 +41,7 @@ public class MachineFeedbackHandler implements WebSocketHandler { @Override public void handleMessage(WebSocketSession session, WebSocketMessage message) throws Exception { + JSONObject jsonObject = JSONObject.parseObject((String) message.getPayload()); if (!"heartbeat".equals(jsonObject.getString("msgType"))) { @@ -44,8 +53,16 @@ public class MachineFeedbackHandler implements WebSocketHandler { String date = jsonObject.getString("date"); String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date; String code = jsonObject.getString("code"); - +// aiMedicineTimer.addU3DSession(databaseName,session); +// aiMedicineTimer.addU3DStatusMap(databaseName, false); // 初始状态为false vitalSignTimerWS.sendMachineFlag(databaseName, code, session); + + String connection = jsonObject.getString("connection"); + if ("true".equals(connection)) { + // 设备端口请求连接 + // 广播到网站段端 + } + } } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/handler/MedicineHandler.java b/upms/upms-biz/src/main/java/com/rax/vital/handler/MedicineHandler.java index 1ce80cb..c765bd5 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/handler/MedicineHandler.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/handler/MedicineHandler.java @@ -10,7 +10,7 @@ import org.springframework.security.oauth2.server.authorization.OAuth2Authorizat import org.springframework.security.oauth2.server.authorization.OAuth2TokenType; import org.springframework.web.socket.*; -import java.io.IOException; + import java.net.URLDecoder; import java.util.Map; import java.util.concurrent.*; @@ -48,7 +48,10 @@ public class MedicineHandler implements WebSocketHandler { String patientName = jsonObject.getString("patientName"); String idNum = jsonObject.getString("idNum"); String date = jsonObject.getString("date"); - String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date; + System.out.println("medicineHandler-jsonObject = " + jsonObject.toJSONString()); + String databaseName = null; + databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date; + System.out.println("medicineHandler-databaseName = " + databaseName); vitalSignTimerWS.createAndSendWSMessageMongo(databaseName, username, session); } } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/handler/MedicineHandlerV2.java b/upms/upms-biz/src/main/java/com/rax/vital/handler/MedicineHandlerV2.java new file mode 100644 index 0000000..7cc63c9 --- /dev/null +++ b/upms/upms-biz/src/main/java/com/rax/vital/handler/MedicineHandlerV2.java @@ -0,0 +1,29 @@ +package com.rax.vital.handler; + +import org.springframework.web.socket.CloseStatus; +import org.springframework.web.socket.WebSocketMessage; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.handler.AbstractWebSocketHandler; + +public class MedicineHandlerV2 extends AbstractWebSocketHandler { + + @Override + public void afterConnectionEstablished(WebSocketSession session) throws Exception { + super.afterConnectionEstablished(session); + } + + @Override + public void handleMessage(WebSocketSession session, WebSocketMessage message) throws Exception { + super.handleMessage(session, message); + } + + @Override + public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { + super.handleTransportError(session, exception); + } + + @Override + public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { + super.afterConnectionClosed(session, status); + } +} diff --git a/upms/upms-biz/src/main/java/com/rax/vital/handler/mysql/AddMedicineHandler.java b/upms/upms-biz/src/main/java/com/rax/vital/handler/mysql/AddMedicineHandler.java index c9627d9..7eb93b4 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/handler/mysql/AddMedicineHandler.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/handler/mysql/AddMedicineHandler.java @@ -7,6 +7,7 @@ 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.stereotype.Component; import org.springframework.web.socket.*; import java.io.IOException; diff --git a/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/ChatService.java b/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/ChatService.java index 2c1dc46..9657134 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/ChatService.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/ChatService.java @@ -7,7 +7,7 @@ import java.io.IOException; public interface ChatService { void sendMessage(String username, String patientName, String idNum, String date, String simpSessionId, String msg); - void sendMessage(String username, String patientName, String idNum, String date, WebSocketSession session, String msg) throws IOException; + void sendMessage(String dbName, String username, WebSocketSession session, String msg) throws IOException; void sendMessageMysql(String username, String patientName, String idNum, String date, WebSocketSession session, String msg) throws Exception; diff --git a/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/ChatServiceImpl.java b/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/ChatServiceImpl.java index 7a7f207..ed36175 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/ChatServiceImpl.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/ChatServiceImpl.java @@ -71,6 +71,7 @@ public class ChatServiceImpl implements ChatService { @Override public void sendMessage(String username, String patientName, String idNum, String date, String simpSessionId, String msg) { CustomDataSource mongoDBSource = datasourceMap.get(simpSessionId); + if (mongoDBSource == null) { String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date; mongoDBSource = new MongoDBSource(mongoDBHost, mongoPassword, mongoUsername, databaseName); @@ -78,7 +79,6 @@ public class ChatServiceImpl implements ChatService { mongoDBSource.open(); } - SysUser sysUser = SysUserService.getOne(Wrappers.lambdaQuery().eq(SysUser::getUsername, username)); Map param = new HashMap(); @@ -102,31 +102,31 @@ public class ChatServiceImpl implements ChatService { } @Override - public void sendMessage(String username, String patientName, String idNum, String date, WebSocketSession session, String msg) throws IOException { + public void sendMessage(String databaseName,String username, WebSocketSession session, String msg) throws IOException { CustomDataSource mongoDBSource = datasourceMap.get(session.getId()); - String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date; - synchronized (username) { - if (mongoDBSource == null) { - mongoDBSource = new MongoDBSource(mongoDBHost, mongoPassword, mongoUsername, databaseName); - mongoDBSource.open(); - datasourceMap.put(session.getId(), mongoDBSource); - sessionDatabaseMap.put(session.getId(), databaseName); - Map sessionMap = databaseSessionMap.get(databaseName); - if (sessionMap == null) { - sessionMap = new HashMap(); +// synchronized (username) { + if (mongoDBSource == null) { + mongoDBSource = new MongoDBSource(mongoDBHost, mongoPassword, mongoUsername, databaseName); + mongoDBSource.open(); + datasourceMap.put(session.getId(), mongoDBSource); + sessionDatabaseMap.put(session.getId(), databaseName); + Map sessionMap = databaseSessionMap.get(databaseName); + if (sessionMap == null) { + sessionMap = new HashMap(); + sessionMap.put(session.getId(), session); + databaseSessionMap.put(databaseName, sessionMap); + } else { + if (!sessionMap.containsKey(session.getId())) { sessionMap.put(session.getId(), session); - databaseSessionMap.put(databaseName, sessionMap); - } else { - if (!sessionMap.containsKey(session.getId())) { - sessionMap.put(session.getId(), session); - } } - } } +// } SysUser sysUser = SysUserService.getOne(Wrappers.lambdaQuery().eq(SysUser::getUsername, username)); + + // 将聊天消息保存在mongo中 if (StringUtils.hasText(msg)) { JSONObject param = new JSONObject(); MongoTemplate template = mongoDBSource.getConnection(); diff --git a/upms/upms-biz/src/main/java/com/rax/vital/timer/AIMedicineTimer.java b/upms/upms-biz/src/main/java/com/rax/vital/timer/AIMedicineTimer.java new file mode 100644 index 0000000..0a78752 --- /dev/null +++ b/upms/upms-biz/src/main/java/com/rax/vital/timer/AIMedicineTimer.java @@ -0,0 +1,71 @@ +package com.rax.vital.timer; + + +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.WebSocketSession; + +import java.util.Map; +import java.util.TimerTask; +import java.util.concurrent.ConcurrentHashMap; + +@RefreshScope +@Component +@RequiredArgsConstructor +public class AIMedicineTimer { + // MongoDB的地址 + @Value("${vital-sign.mongodb.host}") + private String mongoDBHost; + + // MongoDB的用户名 + @Value("${vital-sign.mongodb.username}") + private String mongoUsername; + + // MongoDB的用户的密码 + @Value("${vital-sign.mongodb.password}") + private String mongoPassword; + + // mysql地址 + @Value("${vital-sign.mysql.host}") + private String mysqlHost; + + // mysql用户名 + @Value("${vital-sign.mysql.username}") + private String mysqlUsername; + + // mysql用户密码 + @Value("${vital-sign.mysql.password}") + private String mysqlPassword; + + // 定时任务容器 + private static final Map timerTaskMap = new ConcurrentHashMap<>(); + + // web端状态容器 key:sessionId value:boolean + private static final Map webStatusMap = new ConcurrentHashMap<>(); + + // u3D端状态容器 key:sessionId value:boolean + private static final Map u3DStatusMap = new ConcurrentHashMap<>(); + + // key: dbName value: sessionId + private static final Map webSession = new ConcurrentHashMap<>(); + // key: dbName value: sessionId + private static final Map u3DSession = new ConcurrentHashMap<>(); + + + public void addWebSession(String dbName, WebSocketSession session) { + webSession.put(dbName, session.getId()); + } + public void addU3DSession(String dbName, WebSocketSession session) { + u3DSession.put(dbName, session.getId()); + } + + public void addWebStatus(String sessionId, boolean status) { + webStatusMap.put(sessionId, status); + } + + public void addU3DStatusMap(String sessionId, boolean status) { + webStatusMap.put(sessionId, status); + } +} diff --git a/upms/upms-biz/src/main/java/com/rax/vital/timer/VitalSignTimerWS.java b/upms/upms-biz/src/main/java/com/rax/vital/timer/VitalSignTimerWS.java index 5d14391..bc7c5be 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/timer/VitalSignTimerWS.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/timer/VitalSignTimerWS.java @@ -54,22 +54,22 @@ public class VitalSignTimerWS { // 定时任务容器 private static final Map timerTaskMap = new ConcurrentHashMap<>(); - // 链接工具类容器 + // 链接工具类容器 ket private static final Map dataSourceMap = new ConcurrentHashMap<>(); - // 主控人员容器 + // 主控人员容器, 建立连接放入存值,生命体征信息 key:数据库名 value:网页解析的token用户名 private static final Map masterControlMap = new ConcurrentHashMap<>(); - // session容器 + // session容器,网站端操作员 private static final Map userSessionMap = new ConcurrentHashMap<>(); // sessionId容器,(数据库名, sessionId) private static final Map userDatabaseSessionMap = new ConcurrentHashMap<>(); - // 设备端session容器 + // 设备端session容器,U3D private static final Map machineSessionMap = new ConcurrentHashMap<>(); - // sessionId容器,(数据库名, sessionId) + // sessionId容器,(数据库名, sessionId) 数据库名称, u3d获取药物的sessionId private static final Map machineDatabaseSessionMap = new ConcurrentHashMap<>(); private final VitalSignsService vitalSignsService; @@ -84,11 +84,14 @@ public class VitalSignTimerWS { public void createAndSendWSMessageMongo(String database, String username, WebSocketSession session) { - synchronized (this) { - if (!masterControlMap.containsKey(database)) { - masterControlMap.put(database, username); - } + for (String s : masterControlMap.keySet()) { + System.out.println("s = " + s + " masterControlMap.get(s) = " + masterControlMap.get(s)); } +// synchronized (this) { + if (!masterControlMap.containsKey(database)) { + masterControlMap.put(database, username); + } +// } String sessionId = session.getId(); @@ -301,7 +304,7 @@ public class VitalSignTimerWS { String userSessionId = userDatabaseSessionMap.get(database); WebSocketSession webSocketSession = userSessionMap.get(userSessionId); result.put("status", code); - result.put("msg", ""); + result.put("msg", "网站已进行远程连接"); result.put("msgType", "msg"); webSocketSession.sendMessage(new TextMessage(result.toJSONString().getBytes())); } else { diff --git a/upms/upms-biz/src/main/java/com/rax/vital/util/DatabaseNameUtil.java b/upms/upms-biz/src/main/java/com/rax/vital/util/DatabaseNameUtil.java index ad72ce9..c4c9b0a 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/util/DatabaseNameUtil.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/util/DatabaseNameUtil.java @@ -2,6 +2,9 @@ package com.rax.vital.util; import org.springframework.util.StringUtils; +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; import java.util.Base64; public class DatabaseNameUtil { @@ -31,4 +34,5 @@ public class DatabaseNameUtil { return result; } + } diff --git a/upms/upms-biz/src/main/resources/application.yml b/upms/upms-biz/src/main/resources/application.yml index 830bcc5..af5a41e 100644 --- a/upms/upms-biz/src/main/resources/application.yml +++ b/upms/upms-biz/src/main/resources/application.yml @@ -93,8 +93,11 @@ spring: type: redis data: redis: - host: localhost - port: 6378 + host: 110.41.142.124 + port: 16373 + password: rax137839 + connect-timeout: 5000 + # 数据库相关配置 datasource: driver-class-name: com.mysql.cj.jdbc.Driver @@ -111,7 +114,7 @@ vital-sign: except-database: admin,config,local information-database: information mongodb: - host: localhost:27017 + host: 110.41.142.124:27017 password: Xg137839mg username: useradmin diff --git a/upms/upms-biz/src/main/resources/logback-spring.xml b/upms/upms-biz/src/main/resources/logback-spring.xml index c0ce9c5..8eea045 100644 --- a/upms/upms-biz/src/main/resources/logback-spring.xml +++ b/upms/upms-biz/src/main/resources/logback-spring.xml @@ -60,7 +60,7 @@ - +