From 9b2daf8452d73ba2e8a07157763ed165fd6876b9 Mon Sep 17 00:00:00 2001 From: republicline <1464474399@qq.com> Date: Tue, 6 Aug 2024 17:30:33 +0800 Subject: [PATCH] =?UTF-8?q?fixed:=20=E4=BF=AE=E6=AD=A3=E7=94=9F=E5=91=BD?= =?UTF-8?q?=E4=BD=93=E5=BE=81=E8=BF=99=E9=83=A8=E5=88=86=E7=9A=84=E8=BF=94?= =?UTF-8?q?=E5=9B=9Ejson=E5=86=85=E5=AE=B9=EF=BC=8C=E4=BE=BF=E4=BA=8E?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 1 - .../rax/vital/handler/AddMedicineHandler.java | 46 ++++++++++++------- .../vital/handler/MachineFeedbackHandler.java | 30 ++++++++++-- .../rax/vital/handler/MedicineHandler.java | 2 - .../controller/MedicineController.java | 43 ++++++++--------- .../medicine/service/AIMedicineService.java | 6 +++ .../service/impl/AIMedicineServiceImpl.java | 34 ++++++++++++++ .../service/impl/FlagServiceImpl.java | 12 +++-- .../service/impl/VitalSignServiceImpl.java | 1 + .../com/rax/vital/timer/AIMedicineTimer.java | 2 +- .../com/rax/vital/timer/VitalSignTimerWS.java | 35 ++++++++++---- .../src/main/resources/application.yml | 2 +- 12 files changed, 156 insertions(+), 58 deletions(-) diff --git a/pom.xml b/pom.xml index 055ab34..b447e68 100644 --- a/pom.xml +++ b/pom.xml @@ -98,7 +98,6 @@ upms common - daily-plan 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 59d2b14..a995e9e 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 @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService; import org.springframework.web.socket.*; +import java.util.Date; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; @@ -26,7 +27,7 @@ public class AddMedicineHandler implements WebSocketHandler { private OAuth2AuthorizationService authorizationService; // 发送心跳任务的定时任务容器 - private Map timerTaskMap = new ConcurrentHashMap(); + private Map timerTaskMap = new ConcurrentHashMap<>(); @Autowired private AIMedicineTimer aiMedicineTimer; @@ -38,6 +39,7 @@ public class AddMedicineHandler implements WebSocketHandler { startHeartbeat(session); } + @Override public void handleMessage(WebSocketSession session, WebSocketMessage message) throws Exception { // String decode = URLDecoder.decode(session.getUri().getQuery()); @@ -61,6 +63,20 @@ public class AddMedicineHandler implements WebSocketHandler { aiMedicineTimer.initWeb(databaseName, session); vitalSignTimerWS.initWeb(databaseName, session); } + + // 处理网页端接收到消息后的相应内容 + if ("webResponseConnection".equals(msgType)) { + String webConnectionFlag = jsonObject.getString("webConnectionFlag"); + // 给unity端发送网页端拒绝连接 + aiMedicineTimer.sendConnectionResponseToUnity(patientName,idNum,date,databaseName, webConnectionFlag); + } + + // 处理web端请求或断开连接 + if ("webRequestConnection".equals(msgType)) { + String webRequestFlag = jsonObject.getString("webConnectionFlag"); + aiMedicineTimer.sendWebRequestConnectionMsg(patientName,idNum,date,databaseName, webRequestFlag); + } + if (aiMedicineTimer.getUnitySession(databaseName) != null) { JSONObject result = new JSONObject(); result.put("msg", "unity端已登录"); @@ -84,28 +100,26 @@ public class AddMedicineHandler implements WebSocketHandler { } } - // 处理网页端接收到消息后的相应内容 - if ("webResponseConnection".equals(msgType)) { - String webConnectionFlag = jsonObject.getString("webConnectionFlag"); - // 给unity端发送网页端拒绝连接 - aiMedicineTimer.sendConnectionResponseToUnity(patientName,idNum,date,databaseName, webConnectionFlag); - } - - // 处理web端请求或断开连接 - if ("webRequestConnection".equals(msgType)) { - String webRequestFlag = jsonObject.getString("webConnectionFlag"); - aiMedicineTimer.sendWebRequestConnectionMsg(patientName,idNum,date,databaseName, webRequestFlag); - } - // 处理发送给药相关 if ("addMedicine".equals(msgType) && aiMedicineTimer.getWebSession(databaseName) != null && aiMedicineTimer.getUnitySession(databaseName) != null && aiMedicineTimer.isReady(databaseName)) { // todo 注意修改 - // flag 1 代表人工给药, 0代表AI给药 + // flag 0 代表人工给药, 1代表AI给药 vitalSignTimerWS.changeWSAIFlag(databaseName, "admin", session, jsonObject.getString("flag"), jsonObject.getString("medicine"), jsonObject.getString("value")); } + + // 展示网页端延迟信息 + if ("ping".equals(msgType)) { + Long timeStamp = jsonObject.getLong("msg"); + JSONObject result = new JSONObject(); + result.put("msgType", "pong"); + // 当前时间戳 + result.put("msg", new Date().getTime() - timeStamp); + session.sendMessage(new TextMessage(result.toJSONString().getBytes())); + } + } } @@ -144,7 +158,7 @@ public class AddMedicineHandler implements WebSocketHandler { e.printStackTrace(); stopHeartbeat(session); } - }, 0, 10, TimeUnit.SECONDS); + }, 0, 30, TimeUnit.SECONDS); timerTaskMap.put(session.getId(), heartbeatExecutor); } } 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 0c4697f..4869c56 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 @@ -5,9 +5,11 @@ import com.rax.vital.timer.AIMedicineTimer; import com.rax.vital.timer.VitalSignTimerWS; import com.rax.vital.util.DatabaseNameUtil; import jakarta.annotation.Resource; +import org.joda.time.LocalDateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.socket.*; +import java.util.Date; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; @@ -82,12 +84,12 @@ public class MachineFeedbackHandler implements WebSocketHandler { if (aiMedicineTimer.getWebSession(databaseName) != null) { JSONObject result = new JSONObject(); - result.put("msg", "网站端已登录"); + result.put("msg", "网页端已登录"); result.put("msgType", "msg"); session.sendMessage(new TextMessage(result.toJSONString().getBytes())); } else { JSONObject result = new JSONObject(); - result.put("msg", "网站端未登录"); + result.put("msg", "网页端未登录"); result.put("msgType", "msg"); session.sendMessage(new TextMessage(result.toJSONString().getBytes())); } @@ -108,6 +110,28 @@ public class MachineFeedbackHandler implements WebSocketHandler { && aiMedicineTimer.isReady(databaseName)) { vitalSignTimerWS.sendMachineFlag(databaseName, code, session); } + + // 展示unity端延迟信息 + if ("ping".equals(msgType)) { + Long timeStamp = jsonObject.getLong("msg"); + JSONObject result = new JSONObject(); + result.put("msgType", "pong"); + // 当前时间戳 + result.put("msg", new Date().getTime() - timeStamp); + session.sendMessage(new TextMessage(result.toJSONString().getBytes())); + } + + // unity收到给药信息后回复把此消息推送给web + if ("getMedicine".equals(msgType)) { + JSONObject getMedicineMsg = new JSONObject(); + getMedicineMsg.put("msgType", "getMedicine"); + getMedicineMsg.put("patientName", patientName); + getMedicineMsg.put("idNum", idNum); + getMedicineMsg.put("date", date); + getMedicineMsg.put(jsonObject.getString("medicine"), jsonObject.getString("value")); + WebSocketSession webSession = aiMedicineTimer.getWebSession(databaseName); + webSession.sendMessage(new TextMessage(getMedicineMsg.toJSONString().getBytes())); + } } } @@ -147,7 +171,7 @@ public class MachineFeedbackHandler implements WebSocketHandler { e.printStackTrace(); stopHeartbeat(session); } - }, 0, 10, TimeUnit.SECONDS); + }, 0, 30, TimeUnit.SECONDS); timerTaskMap.put(session.getId(), heartbeatExecutor); } } 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 e877374..14c89f0 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 @@ -46,9 +46,7 @@ public class MedicineHandler implements WebSocketHandler { String patientName = jsonObject.getString("patientName"); String idNum = jsonObject.getString("idNum"); String date = jsonObject.getString("date"); - System.out.println("medicineHandler-jsonObject = " + jsonObject.toJSONString()); String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date; - System.out.println("medicineHandler-databaseName = " + databaseName); vitalSignTimerWS.createAndSendWSMessageMongo(databaseName, "admin", session); } } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/medicine/controller/MedicineController.java b/upms/upms-biz/src/main/java/com/rax/vital/medicine/controller/MedicineController.java index 43c9804..f531463 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/medicine/controller/MedicineController.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/medicine/controller/MedicineController.java @@ -66,30 +66,31 @@ public class MedicineController { vitalSignTimer.createAndSendMessageMongo(databaseName, username, simpSessionId); } - @MessageMapping("/changeAIFlag") - public void changeAIFlag(MessageHeaders messageHeaders, String body) { - LinkedMultiValueMap nativeHeaders = (LinkedMultiValueMap) messageHeaders.get("nativeHeaders"); - ArrayList tokenList = (ArrayList) nativeHeaders.get("token"); - String token = (String) tokenList.get(0); - OAuth2Authorization authorization = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN); - - String username = authorization.getPrincipalName(); - String simpSessionId = messageHeaders.get("simpSessionId", String.class); - - JSONObject params = JSONObject.parseObject(body); - // 病人名 - String patientName = params.getString("patientName"); - // 病人身份证 - String idNum = params.getString("idNum"); - // yyyyMMdd - String date = params.getString("date"); - String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date; - vitalSignTimer.changeAIFlag(databaseName, username, simpSessionId, params.getString("flag"), - params.getString("medicine"), params.getString("value")); - } +// @MessageMapping("/changeAIFlag") +// public void changeAIFlag(MessageHeaders messageHeaders, String body) { +// LinkedMultiValueMap nativeHeaders = (LinkedMultiValueMap) messageHeaders.get("nativeHeaders"); +// ArrayList tokenList = (ArrayList) nativeHeaders.get("token"); +// String token = (String) tokenList.get(0); +// OAuth2Authorization authorization = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN); +// +// String username = authorization.getPrincipalName(); +// String simpSessionId = messageHeaders.get("simpSessionId", String.class); +// +// JSONObject params = JSONObject.parseObject(body); +// // 病人名 +// String patientName = params.getString("patientName"); +// // 病人身份证 +// String idNum = params.getString("idNum"); +// // yyyyMMdd +// String date = params.getString("date"); +// String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date; +// vitalSignTimer.changeAIFlag(databaseName, username, simpSessionId, params.getString("flag"), +// params.getString("medicine"), params.getString("value")); +// } @PostMapping("/getPatientInfo") public R getPatientInfo(String patientName, String idNum, String date) { + // todo : 存疑 String databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date; return vitalSignsService.getPatientInfo(databaseName); } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/AIMedicineService.java b/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/AIMedicineService.java index 8105aa9..7852d8b 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/AIMedicineService.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/AIMedicineService.java @@ -15,4 +15,10 @@ public interface AIMedicineService { List getAIMedicine(Connection connection); void changeAIFlagMedicine(MongoTemplate template, String flag, String medicine, String value); + + // 获取累计用药量 + List getCountMedicine(MongoTemplate template); + + // 获取ai给药信息 + List getAiMedicine(MongoTemplate template); } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/AIMedicineServiceImpl.java b/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/AIMedicineServiceImpl.java index 9b24c1a..0e34802 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/AIMedicineServiceImpl.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/AIMedicineServiceImpl.java @@ -164,4 +164,38 @@ public class AIMedicineServiceImpl implements AIMedicineService { template.insert(medicineObj, "doctormedicinetable"); } } + + @Override + public List getCountMedicine(MongoTemplate template) { + Query query = new Query(); + query.limit(1); + query.with(Sort.by(Sort.Order.desc("Time"))); + List aiMedicines = template.find(query, Map.class, "fktable"); + if (!aiMedicines.isEmpty()) { + Map medicine = new HashMap(); + for (Map map : aiMedicines) { + medicine.put("丙泊酚sum", map.get("cumu_1")); + medicine.put("舒芬太尼sum", map.get("cumu_2")); + medicine.put("瑞芬太尼sum", map.get("cumu_3")); + medicine.put("顺阿曲库胺sum", map.get("cumu_4")); + medicine.put("尼卡地平sum", map.get("cumu_5")); + medicine.put("艾司洛尔sum", map.get("cumu_6")); + medicine.put("麻黄素sum", map.get("cumu_7")); + medicine.put("阿托品sum", map.get("cumu_8")); + medicine.put("Time", map.get("Time")); + } + aiMedicines.remove(0); + aiMedicines.add(medicine); + } + return aiMedicines; + } + + @Override + public List getAiMedicine(MongoTemplate template) { + Query query = new Query(); + query.limit(1); + query.with(Sort.by(Sort.Order.desc("Time"))); + List aimedicinetable = template.find(query, Map.class, "aimedicinetable"); + return aimedicinetable; + } } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/FlagServiceImpl.java b/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/FlagServiceImpl.java index 67e2a1f..694118a 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/FlagServiceImpl.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/FlagServiceImpl.java @@ -37,13 +37,16 @@ public class FlagServiceImpl implements FlagService { Map flagMap = new HashMap(); Query query = new Query(); query.limit(1); - query.with(Sort.by(Sort.Order.desc("_id"))); + query.with(Sort.by(Sort.Order.desc("Time"))); List linkTable = template.find(query, Map.class, "linktable"); - flagMap.put("linktable", linkTable); + System.out.println("linkTable = " + linkTable); + flagMap.put("linkFlag", linkTable.get(0).get("Flag")); List aiFlagTable = template.find(query, Map.class, "aiflagtable"); - flagMap.put("aiflagtable", aiFlagTable); + System.out.println("aiFlagTable = " + aiFlagTable); + flagMap.put("aiFlag", aiFlagTable.get(0).get("Flag")); List endFlagTable = template.find(query, Map.class, "endflagtable"); - flagMap.put("endflagtable", endFlagTable); + System.out.println("endFlagTable = " + endFlagTable); + flagMap.put("endFlag", endFlagTable.get(0).get("Flag")); return flagMap; } @@ -57,7 +60,6 @@ public class FlagServiceImpl implements FlagService { @Override public Map getFlag(MongoTemplate template) { Map allFlag = new HashMap(); - Query query1 = new Query(); query1.limit(1); query1.with(Sort.by(Sort.Order.desc("_id"))); diff --git a/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/VitalSignServiceImpl.java b/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/VitalSignServiceImpl.java index e9239b3..58706c8 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/VitalSignServiceImpl.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/medicine/service/impl/VitalSignServiceImpl.java @@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j; import org.bson.BsonRegularExpression; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.data.domain.ScrollPosition; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.SpringDataMongoDB; import org.springframework.data.mongodb.core.MongoTemplate; 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 3c175cd..0e8879a 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 @@ -147,7 +147,7 @@ public class AIMedicineTimer { // 网页端拒绝连接 setWebStatus(databaseName, false); unityMsg = new JSONObject(); - unityMsg.put("msgType", "connection refused"); + unityMsg.put("msgType", "webResponseConnection"); unityMsg.put("webConnectionFlag", "0"); unityMsg.put("patientName", patientName); unityMsg.put("idNum", idNum); 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 3abeb63..119d3b4 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 @@ -99,7 +99,7 @@ public class VitalSignTimerWS { dataSourceMap.put(sessionId, dataSource); dataSource.open(); } - + System.out.println("mongoDBName = " + database); CustomDataSource finalMongoDBSource = dataSource; TimerTask timerTask = new TimerTask() { @Override @@ -107,19 +107,38 @@ public class VitalSignTimerWS { MongoTemplate template = finalMongoDBSource.getConnection(); JSONObject jsonObject = new JSONObject(); + // 生命体征信息 List vitalSignsList = vitalSignsService.getVitalSignsList(template); jsonObject.put("vitalSignsList", vitalSignsList); - List aiMedicineList = aiMedicineService.getAIMedicine(template); - jsonObject.put("aiMedicineList", aiMedicineList); -// List docMedicineList = doctorMedicineService.getDocMedicine(template); -// jsonObject.put("docMedicineList", docMedicineList); - List revulsionList = revulsionService.getRevulsionServiceList(template); - jsonObject.put("revulsionList", revulsionList); + +// // 诱导期给药信息 +// List revulsionList = revulsionService.getRevulsionServiceList(template); +// jsonObject.put("revulsionList", revulsionList); + // 标记信息 Map flags = flagService.getFlags(template); + // flag +// aiFlag 1代表AI给药 0代表医生给药 +// reFlag 1代表维持期 0代表诱导期 +// endFlag 1代表手术进行 0代表手术结束 +// linkFlag 1泵异常 0正常 jsonObject.put("flags", flags); + if (flags.get("aiFlag")!= null && flags.get("aiFlag").equals("1")){ + // ai给药信息 + List aiMedicineList = aiMedicineService.getAiMedicine(template); + jsonObject.put("medicineRate", aiMedicineList); + }else if (flags.get("aiFlag")!= null && flags.get("aiFlag").equals("0")){ + // 医生给药信息 + List docMedicineList = doctorMedicineService.getDocMedicine(template); + jsonObject.put("medicineRate", docMedicineList); + } + // 总的药量信息 + List countMedicineList = aiMedicineService.getCountMedicine(template); + jsonObject.put("countMedicine", countMedicineList); jsonObject.put("msgType", "msg"); + // 如果是人工给药展示人工给药的内容 WebSocketMessage message = new TextMessage(jsonObject.toJSONString().getBytes()); + try { session.sendMessage(message); } catch (IOException e) { @@ -261,7 +280,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) { diff --git a/upms/upms-biz/src/main/resources/application.yml b/upms/upms-biz/src/main/resources/application.yml index af5a41e..9295fb3 100644 --- a/upms/upms-biz/src/main/resources/application.yml +++ b/upms/upms-biz/src/main/resources/application.yml @@ -1,6 +1,6 @@ spring: profiles: - active: dev + active: prod application: name: ${project.artifactId} # 定时任务属性配置