修正BUG -- 添加"init".equals(msgType)

This commit is contained in:
republicline 2024-07-25 13:30:53 +08:00
parent 7a1e31517b
commit 48a763cf10
6 changed files with 53 additions and 40 deletions

View File

@ -56,9 +56,12 @@ public class MySQLSource extends CustomDataSource {
} }
public Connection getConnection() { public Connection getConnection() {
if (druidPooledConnection != null) {
connection = druidPooledConnection.getConnection(); connection = druidPooledConnection.getConnection();
return connection; return connection;
} }
return null;
}
public void close() { public void close() {
try { try {

View File

@ -47,7 +47,6 @@ public class AddMedicineHandler implements WebSocketHandler {
// String username = authorization.getPrincipalName(); // String username = authorization.getPrincipalName();
JSONObject jsonObject = JSONObject.parseObject((String) message.getPayload()); JSONObject jsonObject = JSONObject.parseObject((String) message.getPayload());
String msgType = jsonObject.getString("msgType"); String msgType = jsonObject.getString("msgType");
if (!"heartbeat".equals(msgType)) { if (!"heartbeat".equals(msgType)) {
// 病人名 // 病人名
@ -56,13 +55,12 @@ public class AddMedicineHandler implements WebSocketHandler {
String idNum = jsonObject.getString("idNum"); String idNum = jsonObject.getString("idNum");
// yyyyMMdd // yyyyMMdd
String date = jsonObject.getString("date"); String date = jsonObject.getString("date");
System.out.println("addMedicineHandler-json = " + jsonObject.toJSONString());
String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date; String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date;
System.out.println("addMedicineHandler-databaseName = " + databaseName);
// 将网站端的dbName作为key session作为Value存入Map 以便后续判断状态 // 将网站端的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) { if (aiMedicineTimer.getUnitySession(databaseName) != null) {
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
result.put("msg", "unity端已登录"); result.put("msg", "unity端已登录");
@ -95,14 +93,15 @@ public class AddMedicineHandler implements WebSocketHandler {
// 处理web端请求或断开连接 // 处理web端请求或断开连接
if ("webRequestConnection".equals(msgType)) { if ("webRequestConnection".equals(msgType)) {
String webRequestFlag = jsonObject.getString("webRequestFlag"); String webRequestFlag = jsonObject.getString("webConnectionFlag");
aiMedicineTimer.sendWebRequestConnectionMsg(databaseName, webRequestFlag); 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)) { && aiMedicineTimer.isReady(databaseName)) {
// todo 注意修改 // todo 注意修改
// flag 1 代表人工给药, 0代表AI给药
vitalSignTimerWS.changeWSAIFlag(databaseName, "admin", session, jsonObject.getString("flag"), vitalSignTimerWS.changeWSAIFlag(databaseName, "admin", session, jsonObject.getString("flag"),
jsonObject.getString("medicine"), jsonObject.getString("value")); jsonObject.getString("medicine"), jsonObject.getString("value"));

View File

@ -50,8 +50,21 @@ public class MachineFeedbackHandler implements WebSocketHandler {
String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date; String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date;
String code = jsonObject.getString("code"); 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发送表示请求与网页端的连接 // u3d发送表示请求与网页端的连接

View File

@ -21,7 +21,7 @@ public class AIMedicineTimer {
private static final Map<String, WebSocketSession> webDbSessionMap = new ConcurrentHashMap(); private static final Map<String, WebSocketSession> webDbSessionMap = new ConcurrentHashMap();
// 存放sessionId的状态 // 存放sessionId的状态
private static final Map<WebSocketSession, Boolean> webSessionStatusMap = new ConcurrentHashMap(); private static final Map<WebSocketSession, Boolean> webStatusMap = new ConcurrentHashMap();
// unity 端的dbname sessionId 映射 // unity 端的dbname sessionId 映射
private static final Map<String, WebSocketSession> u3DDbSessionMap = new ConcurrentHashMap<>(); private static final Map<String, WebSocketSession> u3DDbSessionMap = new ConcurrentHashMap<>();
@ -42,14 +42,13 @@ public class AIMedicineTimer {
webSession.sendMessage(new TextMessage(unityMsg.toJSONString().getBytes())); webSession.sendMessage(new TextMessage(unityMsg.toJSONString().getBytes()));
} }
if ("0".equals(flag)) { if ("0".equals(flag)) {
// 网页端拒绝连接 // unity拒绝连接
setU3DStatus(databaseName, false); setU3DStatus(databaseName, false);
setWebStatus(databaseName, false);
unityMsg = new JSONObject(); unityMsg = new JSONObject();
unityMsg.put("msgType", "unityResponseConnection"); unityMsg.put("msgType", "unityResponseConnection");
unityMsg.put("unityConnectionFlag", "0"); unityMsg.put("unityConnectionFlag", "0");
webSession.sendMessage(new TextMessage(unityMsg.toJSONString().getBytes())); webSession.sendMessage(new TextMessage(unityMsg.toJSONString().getBytes()));
// 把网页端的sessionStatus置为false
setWebStatus(databaseName, false);
} }
} else { } else {
// 告知u3d网页端 // 告知u3d网页端
@ -62,6 +61,7 @@ public class AIMedicineTimer {
// unity端请求网页端连接或断开连接 // unity端请求网页端连接或断开连接
public void sendUnityRequestConnectionMsg(String databaseName, String flag) throws IOException { public void sendUnityRequestConnectionMsg(String databaseName, String flag) throws IOException {
WebSocketSession webSession = getWebSession(databaseName); WebSocketSession webSession = getWebSession(databaseName);
System.out.println("webSession = " + webSession);
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
if ("1".equals(flag)) { if ("1".equals(flag)) {
jsonObject.put("msgType", "unityRequestConnection"); jsonObject.put("msgType", "unityRequestConnection");
@ -94,18 +94,20 @@ public class AIMedicineTimer {
// web端请求unity端连接或断开连接 // web端请求unity端连接或断开连接
public void sendWebRequestConnectionMsg(String databaseName, String flag) throws IOException { 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(); JSONObject jsonObject = new JSONObject();
if ("1".equals(flag)) { if ("1".equals(flag)) {
System.out.println("网站端请求连接");
jsonObject.put("msgType", "webRequestConnection"); jsonObject.put("msgType", "webRequestConnection");
jsonObject.put("webConnectionFlag", "1"); jsonObject.put("webConnectionFlag", "1");
webSession.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes())); unitySession.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes()));
setWebStatus(databaseName,true); setWebStatus(databaseName,true);
} }
if ("0".equals(flag)) { if ("0".equals(flag)) {
jsonObject.put("msgType", "webRequestConnection"); jsonObject.put("msgType", "webRequestConnection");
jsonObject.put("webConnectionFlag", "0"); jsonObject.put("webConnectionFlag", "0");
webSession.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes())); unitySession.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes()));
setU3DStatus(databaseName, false); setU3DStatus(databaseName, false);
// 把网页端的sessionStatus置为false // 把网页端的sessionStatus置为false
setWebStatus(databaseName, false); setWebStatus(databaseName, false);
@ -135,7 +137,6 @@ public class AIMedicineTimer {
} }
} else { } else {
// 告知网页端U3d尚未初始化 // 告知网页端U3d尚未初始化
System.out.println("U3d尚未初始化无法发送连接响应消息");
WebSocketSession webSocketSession = webDbSessionMap.get(databaseName); WebSocketSession webSocketSession = webDbSessionMap.get(databaseName);
webSocketSession.sendMessage(new TextMessage("U3d尚未初始化无法发送连接响应消息".getBytes())); webSocketSession.sendMessage(new TextMessage("U3d尚未初始化无法发送连接响应消息".getBytes()));
} }
@ -143,26 +144,23 @@ public class AIMedicineTimer {
public void setWebStatus(String dbName, Boolean status) { public void setWebStatus(String dbName, Boolean status) {
WebSocketSession webSocketSession = webDbSessionMap.get(dbName); WebSocketSession webSocketSession = webDbSessionMap.get(dbName);
webSessionStatusMap.put(webSocketSession, status); webStatusMap.put(webSocketSession, status);
} }
public boolean getWebConnectionStatus(String dbName) { public boolean getWebConnectionStatus(String dbName) {
return webSessionStatusMap.getOrDefault(webDbSessionMap.get(dbName),false); return webStatusMap.getOrDefault(webDbSessionMap.get(dbName),false);
} }
public WebSocketSession getWebSession(String databaseName) { public WebSocketSession getWebSession(String databaseName) {
webDbSessionMap.forEach((key, value) -> {
System.out.println("key = " + key + ", value = " + value);
});
return webDbSessionMap.getOrDefault(databaseName, null); 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); 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); u3DDbSessionMap.put(databaseName, session);
u3DStatusMap.put(session, false); u3DStatusMap.put(session, false);
} }
@ -173,7 +171,7 @@ public class AIMedicineTimer {
public void closeConnection(WebSocketSession session) { public void closeConnection(WebSocketSession session) {
webDbSessionMap.values().remove(session); webDbSessionMap.values().remove(session);
webSessionStatusMap.remove(session); webStatusMap.remove(session);
u3DDbSessionMap.values().remove(session); u3DDbSessionMap.values().remove(session);
u3DStatusMap.remove(session); u3DStatusMap.remove(session);
} }

View File

@ -83,16 +83,9 @@ public class VitalSignTimerWS {
private final RevulsionService revulsionService; private final RevulsionService revulsionService;
public void createAndSendWSMessageMongo(String database, String username, WebSocketSession session) { 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)) { if (!masterControlMap.containsKey(database)) {
masterControlMap.put(database, username); masterControlMap.put(database, username);
} }
// }
String sessionId = session.getId(); String sessionId = session.getId();
TimerTask task = timerTaskMap.get(sessionId); TimerTask task = timerTaskMap.get(sessionId);
@ -232,13 +225,14 @@ public class VitalSignTimerWS {
if (!userDatabaseSessionMap.containsKey(database)) { if (!userDatabaseSessionMap.containsKey(database)) {
userDatabaseSessionMap.put(database, session.getId()); userDatabaseSessionMap.put(database, session.getId());
} }
// machineDatabaseSessionMap.containsKey(database)
if (machineDatabaseSessionMap.containsKey(database)) { if (machineDatabaseSessionMap.containsKey(database)) {
String sessionId = machineDatabaseSessionMap.get(database); String sessionId = machineDatabaseSessionMap.get(database);
WebSocketSession machineSession = machineSessionMap.get(sessionId); WebSocketSession machineSession = machineSessionMap.get(sessionId);
if (machineSession != null) { if (machineSession != null) {
result.put(medicine, value); result.put(medicine, value);
result.put("flag", flag); result.put("flag", flag);
result.put("msgType", "msg"); result.put("msgType", "addMedicine");
machineSession.sendMessage(new TextMessage(result.toJSONString().getBytes())); machineSession.sendMessage(new TextMessage(result.toJSONString().getBytes()));
} else { } else {
result.put("flag", flag); result.put("flag", flag);
@ -267,7 +261,7 @@ public class VitalSignTimerWS {
} }
public synchronized void setMachineSessionMap(WebSocketSession session) { public synchronized void setMachineSessionMap(WebSocketSession session) {
machineSessionMap.put(session.getId(), session); // machineSessionMap.put(session.getId(), session);
} }
public void removeMachineSessionMap(WebSocketSession 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);
}
} }

View File

@ -2,9 +2,6 @@ package com.rax.vital.util;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64; import java.util.Base64;
public class DatabaseNameUtil { public class DatabaseNameUtil {