From 48a763cf10a560d2f52e87a70e19ba5c71a2cf85 Mon Sep 17 00:00:00 2001 From: republicline <1464474399@qq.com> Date: Thu, 25 Jul 2024 13:30:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3BUG=20--=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?"init".equals(msgType)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/rax/vital/datasource/MySQLSource.java | 7 ++-- .../rax/vital/handler/AddMedicineHandler.java | 15 ++++----- .../vital/handler/MachineFeedbackHandler.java | 15 ++++++++- .../com/rax/vital/timer/AIMedicineTimer.java | 32 +++++++++---------- .../com/rax/vital/timer/VitalSignTimerWS.java | 21 ++++++------ .../com/rax/vital/util/DatabaseNameUtil.java | 3 -- 6 files changed, 53 insertions(+), 40 deletions(-) diff --git a/upms/upms-biz/src/main/java/com/rax/vital/datasource/MySQLSource.java b/upms/upms-biz/src/main/java/com/rax/vital/datasource/MySQLSource.java index 8b99f62..a27bc6c 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/datasource/MySQLSource.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/datasource/MySQLSource.java @@ -56,8 +56,11 @@ public class MySQLSource extends CustomDataSource { } public Connection getConnection() { - connection = druidPooledConnection.getConnection(); - return connection; + if (druidPooledConnection != null) { + connection = druidPooledConnection.getConnection(); + return connection; + } + return null; } public void close() { 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 458e5ab..d4f2b1a 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 @@ -47,7 +47,6 @@ public class AddMedicineHandler implements WebSocketHandler { // String username = authorization.getPrincipalName(); JSONObject jsonObject = JSONObject.parseObject((String) message.getPayload()); - String msgType = jsonObject.getString("msgType"); if (!"heartbeat".equals(msgType)) { // 病人名 @@ -56,13 +55,12 @@ public class AddMedicineHandler implements WebSocketHandler { String idNum = jsonObject.getString("idNum"); // yyyyMMdd String date = jsonObject.getString("date"); - System.out.println("addMedicineHandler-json = " + jsonObject.toJSONString()); String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date; - System.out.println("addMedicineHandler-databaseName = " + databaseName); // 将网站端的dbName作为key session作为Value存入Map 以便后续判断状态 - aiMedicineTimer.initWeb(databaseName, session, false); - - + if ("init".equals(msgType)) { + aiMedicineTimer.initWeb(databaseName, session); + vitalSignTimerWS.initWeb(databaseName, session); + } if (aiMedicineTimer.getUnitySession(databaseName) != null) { JSONObject result = new JSONObject(); result.put("msg", "unity端已登录"); @@ -95,14 +93,15 @@ public class AddMedicineHandler implements WebSocketHandler { // 处理web端请求或断开连接 if ("webRequestConnection".equals(msgType)) { - String webRequestFlag = jsonObject.getString("webRequestFlag"); + String webRequestFlag = jsonObject.getString("webConnectionFlag"); aiMedicineTimer.sendWebRequestConnectionMsg(databaseName, webRequestFlag); } // 处理发送给药相关 - if (aiMedicineTimer.getWebSession(databaseName) != null && aiMedicineTimer.getUnitySession(databaseName) != null + if ("addMedicine".equals(msgType) && aiMedicineTimer.getWebSession(databaseName) != null && aiMedicineTimer.getUnitySession(databaseName) != null && aiMedicineTimer.isReady(databaseName)) { // todo 注意修改 + // flag 1 代表人工给药, 0代表AI给药 vitalSignTimerWS.changeWSAIFlag(databaseName, "admin", session, jsonObject.getString("flag"), jsonObject.getString("medicine"), jsonObject.getString("value")); 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 acc1c1c..31218b4 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 @@ -50,8 +50,21 @@ public class MachineFeedbackHandler implements WebSocketHandler { String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date; String code = jsonObject.getString("code"); + if ("init".equals(msgType)) { + aiMedicineTimer.initUnity(databaseName, session); + vitalSignTimerWS.initUnity(databaseName, session); + } - aiMedicineTimer.initUnity(databaseName, session, session); + // Unity获取到给药信息后回复 + if ("getMedicine".equals(msgType)) { + JSONObject msg = new JSONObject(); + msg.put("msgType", msgType); + msg.put("patientName", patientName); + msg.put("idNum", idNum); + msg.put("date", date); + WebSocketSession webSession = aiMedicineTimer.getWebSession(databaseName); + webSession.sendMessage(new TextMessage(msg.toJSONString().getBytes())); + } // u3d发送表示请求与网页端的连接 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 index dd57ea4..ef0eeff 100644 --- 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 @@ -21,7 +21,7 @@ public class AIMedicineTimer { private static final Map webDbSessionMap = new ConcurrentHashMap(); // 存放sessionId的状态 - private static final Map webSessionStatusMap = new ConcurrentHashMap(); + private static final Map webStatusMap = new ConcurrentHashMap(); // unity 端的dbname 和 sessionId 映射 private static final Map u3DDbSessionMap = new ConcurrentHashMap<>(); @@ -42,14 +42,13 @@ public class AIMedicineTimer { webSession.sendMessage(new TextMessage(unityMsg.toJSONString().getBytes())); } if ("0".equals(flag)) { - // 网页端拒绝连接 + // unity拒绝连接 setU3DStatus(databaseName, false); + setWebStatus(databaseName, false); unityMsg = new JSONObject(); unityMsg.put("msgType", "unityResponseConnection"); unityMsg.put("unityConnectionFlag", "0"); webSession.sendMessage(new TextMessage(unityMsg.toJSONString().getBytes())); - // 把网页端的sessionStatus置为false - setWebStatus(databaseName, false); } } else { // 告知u3d网页端 @@ -62,6 +61,7 @@ public class AIMedicineTimer { // unity端请求网页端连接或断开连接 public void sendUnityRequestConnectionMsg(String databaseName, String flag) throws IOException { WebSocketSession webSession = getWebSession(databaseName); + System.out.println("webSession = " + webSession); JSONObject jsonObject = new JSONObject(); if ("1".equals(flag)) { jsonObject.put("msgType", "unityRequestConnection"); @@ -94,18 +94,20 @@ public class AIMedicineTimer { // web端请求unity端连接或断开连接 public void sendWebRequestConnectionMsg(String databaseName, String flag) throws IOException { - WebSocketSession webSession = getWebSession(databaseName); + WebSocketSession unitySession = getUnitySession(databaseName); + System.out.println("unitySession = " + unitySession); JSONObject jsonObject = new JSONObject(); if ("1".equals(flag)) { + System.out.println("网站端请求连接"); jsonObject.put("msgType", "webRequestConnection"); jsonObject.put("webConnectionFlag", "1"); - webSession.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes())); + unitySession.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes())); setWebStatus(databaseName,true); } if ("0".equals(flag)) { jsonObject.put("msgType", "webRequestConnection"); jsonObject.put("webConnectionFlag", "0"); - webSession.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes())); + unitySession.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes())); setU3DStatus(databaseName, false); // 把网页端的sessionStatus置为false setWebStatus(databaseName, false); @@ -135,7 +137,6 @@ public class AIMedicineTimer { } } else { // 告知网页端U3d尚未初始化 - System.out.println("U3d尚未初始化,无法发送连接响应消息"); WebSocketSession webSocketSession = webDbSessionMap.get(databaseName); webSocketSession.sendMessage(new TextMessage("U3d尚未初始化,无法发送连接响应消息".getBytes())); } @@ -143,26 +144,23 @@ public class AIMedicineTimer { public void setWebStatus(String dbName, Boolean status) { WebSocketSession webSocketSession = webDbSessionMap.get(dbName); - webSessionStatusMap.put(webSocketSession, status); + webStatusMap.put(webSocketSession, status); } public boolean getWebConnectionStatus(String dbName) { - return webSessionStatusMap.getOrDefault(webDbSessionMap.get(dbName),false); + return webStatusMap.getOrDefault(webDbSessionMap.get(dbName),false); } public WebSocketSession getWebSession(String databaseName) { - webDbSessionMap.forEach((key, value) -> { - System.out.println("key = " + key + ", value = " + value); - }); return webDbSessionMap.getOrDefault(databaseName, null); } - public void initWeb(String databaseName, WebSocketSession session, boolean b) { + public void initWeb(String databaseName, WebSocketSession session) { webDbSessionMap.put(databaseName, session); - webSessionStatusMap.put(session, false); + webStatusMap.put(session, false); } - public void initUnity(String databaseName, WebSocketSession session, WebSocketSession session1) { + public void initUnity(String databaseName, WebSocketSession session) { u3DDbSessionMap.put(databaseName, session); u3DStatusMap.put(session, false); } @@ -173,7 +171,7 @@ public class AIMedicineTimer { public void closeConnection(WebSocketSession session) { webDbSessionMap.values().remove(session); - webSessionStatusMap.remove(session); + webStatusMap.remove(session); u3DDbSessionMap.values().remove(session); u3DStatusMap.remove(session); } 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 bc7c5be..3abeb63 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 @@ -83,16 +83,9 @@ public class VitalSignTimerWS { private final RevulsionService revulsionService; public void createAndSendWSMessageMongo(String database, String username, WebSocketSession session) { - - 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(); TimerTask task = timerTaskMap.get(sessionId); @@ -232,13 +225,14 @@ public class VitalSignTimerWS { if (!userDatabaseSessionMap.containsKey(database)) { userDatabaseSessionMap.put(database, session.getId()); } + // machineDatabaseSessionMap.containsKey(database) if (machineDatabaseSessionMap.containsKey(database)) { String sessionId = machineDatabaseSessionMap.get(database); WebSocketSession machineSession = machineSessionMap.get(sessionId); if (machineSession != null) { result.put(medicine, value); result.put("flag", flag); - result.put("msgType", "msg"); + result.put("msgType", "addMedicine"); machineSession.sendMessage(new TextMessage(result.toJSONString().getBytes())); } else { result.put("flag", flag); @@ -267,7 +261,7 @@ public class VitalSignTimerWS { } public synchronized void setMachineSessionMap(WebSocketSession session) { - machineSessionMap.put(session.getId(), session); +// machineSessionMap.put(session.getId(), session); } public void removeMachineSessionMap(WebSocketSession session) { @@ -331,4 +325,13 @@ public class VitalSignTimerWS { } } + public void initUnity(String databaseName, WebSocketSession session) { + machineDatabaseSessionMap.put(databaseName, session.getId()); + machineSessionMap.put(session.getId(), session); + } + + public void initWeb(String databaseName, WebSocketSession session) { + userDatabaseSessionMap.put(databaseName, session.getId()); + userSessionMap.put(session.getId(), session); + } } 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 c4c9b0a..93ac14f 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,9 +2,6 @@ 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 {