mongo根据一期问题修改

This commit is contained in:
yy 2024-06-05 09:06:08 +08:00
parent 1ff0e2a92a
commit 3dfc4c2331
10 changed files with 245 additions and 104 deletions

View File

@ -28,10 +28,7 @@ import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@ -80,6 +77,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
/**
* 构建树查询 1. 不是懒加载情况查询全部 2. 是懒加载根据parentId 查询 2.1 父节点为空则查询ID -1
*
* @param parentId 父节点ID
* @param menuName 菜单名称
* @return
@ -112,6 +110,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
/**
* 查询菜单
*
* @param all 全部菜单
* @param type 类型
* @param parentId 父节点ID
@ -122,6 +121,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
List<TreeNode<Long>> collect = all.stream()
.filter(menuTypePredicate(type))
.map(getNodeFunction())
.sorted((p1, p2) -> {
int ageCompare = Integer.compare((Integer) p1.getExtra().get("sortOrder"), (Integer) p2.getExtra().get("sortOrder"));
return ageCompare;
})
.collect(Collectors.toList());
Long parent = parentId == null ? CommonConstants.MENU_TREE_ROOT_ID : parentId;
@ -165,6 +168,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
/**
* menu 类型断言
*
* @param type 类型
* @return Predicate
*/

View File

@ -1,9 +1,9 @@
package com.rax.vital.config;
import com.rax.vital.handler.mysql.AddMedicineHandler;
import com.rax.vital.handler.mysql.ChatHandler;
import com.rax.vital.handler.mysql.MachineFeedbackHandler;
import com.rax.vital.handler.mysql.MedicineHandler;
import com.rax.vital.handler.AddMedicineHandler;
import com.rax.vital.handler.ChatHandler;
import com.rax.vital.handler.MachineFeedbackHandler;
import com.rax.vital.handler.MedicineHandler;
import com.rax.vital.interceptor.WebSocketInterceptors;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -31,25 +31,21 @@ public class WebSocketConfig implements WebSocketConfigurer {
@Bean
public WebSocketHandler medicineHandler() {
return new MedicineHandler();
// return new MedicineHandler();
}
@Bean
public WebSocketHandler chatHandler() {
return new ChatHandler();
// return new ChatHandler();
}
@Bean
public WebSocketHandler addMedicineHandler() {
return new AddMedicineHandler();
// return new AddMedicineHandler();
}
@Bean
public WebSocketHandler machineHandler() {
return new MachineFeedbackHandler();
// return new MachineFeedbackHandler();
}
@Bean

View File

@ -8,13 +8,14 @@ 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.web.socket.CloseStatus;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.*;
import java.net.URLDecoder;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* 网站发送给仪器给药信息
@ -26,9 +27,12 @@ public class AddMedicineHandler implements WebSocketHandler {
@Resource
private OAuth2AuthorizationService authorizationService;
private Map<String, ScheduledExecutorService> timerTaskMap = new ConcurrentHashMap();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
public void afterConnectionEstablished(WebSocketSession session) {
vitalSignTimerWS.setWSAIFlagSession(session);
startHeartbeat(session);
}
@Override
@ -40,6 +44,8 @@ public class AddMedicineHandler implements WebSocketHandler {
String username = authorization.getPrincipalName();
JSONObject jsonObject = JSONObject.parseObject((String) message.getPayload());
if (!"heartbeat".equals(jsonObject.getString("msgType"))) {
// 病人名
String patientName = jsonObject.getString("patientName");
// 病人身份证
@ -50,14 +56,15 @@ public class AddMedicineHandler implements WebSocketHandler {
vitalSignTimerWS.changeWSAIFlag(databaseName, username, session, jsonObject.getString("flag"),
jsonObject.getString("medicine"), jsonObject.getString("value"));
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
public void handleTransportError(WebSocketSession session, Throwable exception) {
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) {
stopHeartbeat(session);
vitalSignTimerWS.removeWSAIFlagSession(session);
System.out.println(this.getClass().getName() + " Connection closed:" + closeStatus.getReason());
}
@ -66,4 +73,32 @@ public class AddMedicineHandler implements WebSocketHandler {
public boolean supportsPartialMessages() {
return false;
}
private void startHeartbeat(WebSocketSession session) {
if (!timerTaskMap.containsKey(session.getId())) {
ScheduledExecutorService heartbeatExecutor = Executors.newScheduledThreadPool(1);
heartbeatExecutor.scheduleAtFixedRate(() -> {
try {
if (session.isOpen()) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("msgType", "heartbeat");
session.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes()));
} else {
stopHeartbeat(session);
vitalSignTimerWS.removeWSAIFlagSession(session);
session.close();
}
} catch (Exception e) {
e.printStackTrace();
stopHeartbeat(session);
}
}, 0, 10, TimeUnit.SECONDS);
timerTaskMap.put(session.getId(), heartbeatExecutor);
}
}
private void stopHeartbeat(WebSocketSession session) {
ScheduledExecutorService heartbeatExecutor = timerTaskMap.get(session.getId());
heartbeatExecutor.shutdownNow();
}
}

View File

@ -7,13 +7,14 @@ 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.web.socket.CloseStatus;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.*;
import java.net.URLDecoder;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ChatHandler implements WebSocketHandler {
@Resource
@ -22,8 +23,11 @@ public class ChatHandler implements WebSocketHandler {
@Resource
private ChatService chatService;
private Map<String, ScheduledExecutorService> timerTaskMap = new ConcurrentHashMap();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
public void afterConnectionEstablished(WebSocketSession session) {
startHeartbeat(session);
}
@Override
@ -37,6 +41,7 @@ public class ChatHandler implements WebSocketHandler {
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");
@ -45,13 +50,16 @@ public class ChatHandler implements WebSocketHandler {
chatService.sendMessage(username, patientName, idNum, date, session, msg);
}
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
public void handleTransportError(WebSocketSession session, Throwable exception) {
System.out.println("Error: " + exception.getMessage());
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) {
stopHeartbeat(session);
chatService.stopTask(session.getId());
}
@ -59,4 +67,32 @@ public class ChatHandler implements WebSocketHandler {
public boolean supportsPartialMessages() {
return false;
}
private void startHeartbeat(WebSocketSession session) {
if (!timerTaskMap.containsKey(session.getId())) {
ScheduledExecutorService heartbeatExecutor = Executors.newScheduledThreadPool(1);
heartbeatExecutor.scheduleAtFixedRate(() -> {
try {
if (session.isOpen()) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("msgType", "heartbeat");
session.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes()));
} else {
stopHeartbeat(session);
chatService.stopTask(session.getId());
session.close();
}
} catch (Exception e) {
e.printStackTrace();
stopHeartbeat(session);
}
}, 0, 10, TimeUnit.SECONDS);
timerTaskMap.put(session.getId(), heartbeatExecutor);
}
}
private void stopHeartbeat(WebSocketSession session) {
ScheduledExecutorService heartbeatExecutor = timerTaskMap.get(session.getId());
heartbeatExecutor.shutdownNow();
}
}

View File

@ -5,10 +5,13 @@ import com.rax.vital.timer.VitalSignTimerWS;
import com.rax.vital.util.DatabaseNameUtil;
import jakarta.annotation.Resource;
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.*;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* 仪器获取网站给药信息
@ -20,14 +23,19 @@ public class MachineFeedbackHandler implements WebSocketHandler {
@Resource
private VitalSignTimerWS vitalSignTimerWS;
private Map<String, ScheduledExecutorService> timerTaskMap = new ConcurrentHashMap();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
public void afterConnectionEstablished(WebSocketSession session) {
vitalSignTimerWS.setMachineSessionMap(session);
startHeartbeat(session);
}
@Override
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
JSONObject jsonObject = JSONObject.parseObject((String) message.getPayload());
if (!"heartbeat".equals(jsonObject.getString("msgType"))) {
// 病人名
String patientName = jsonObject.getString("patientName");
// 病人身份证住院号
@ -39,13 +47,15 @@ public class MachineFeedbackHandler implements WebSocketHandler {
vitalSignTimerWS.sendMachineFlag(databaseName, code, session);
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
public void handleTransportError(WebSocketSession session, Throwable exception) {
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) {
stopHeartbeat(session);
vitalSignTimerWS.removeMachineSessionMap(session);
System.out.println(this.getClass().getName() + " Connection closed:" + closeStatus.getReason());
}
@ -54,4 +64,32 @@ public class MachineFeedbackHandler implements WebSocketHandler {
public boolean supportsPartialMessages() {
return false;
}
private void startHeartbeat(WebSocketSession session) {
if (!timerTaskMap.containsKey(session.getId())) {
ScheduledExecutorService heartbeatExecutor = Executors.newScheduledThreadPool(1);
heartbeatExecutor.scheduleAtFixedRate(() -> {
try {
if (session.isOpen()) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("msgType", "heartbeat");
session.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes()));
} else {
stopHeartbeat(session);
vitalSignTimerWS.removeMachineSessionMap(session);
session.close();
}
} catch (Exception e) {
e.printStackTrace();
stopHeartbeat(session);
}
}, 0, 10, TimeUnit.SECONDS);
timerTaskMap.put(session.getId(), heartbeatExecutor);
}
}
private void stopHeartbeat(WebSocketSession session) {
ScheduledExecutorService heartbeatExecutor = timerTaskMap.get(session.getId());
heartbeatExecutor.shutdownNow();
}
}

View File

@ -13,10 +13,7 @@ import org.springframework.web.socket.*;
import java.io.IOException;
import java.net.URLDecoder;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.*;
/**
* 生命体征和标志位信息
@ -29,18 +26,15 @@ public class MedicineHandler implements WebSocketHandler {
@Resource
private OAuth2AuthorizationService authorizationService;
private static final long HEARTBEAT_INTERVAL = 30; // 心跳间隔秒数
private ScheduledExecutorService scheduler;
private ScheduledFuture<?> heartbeatTask;
private Map<String, ScheduledExecutorService> timerTaskMap = new ConcurrentHashMap();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
scheduler = Executors.newScheduledThreadPool(1);
heartbeatTask = scheduler.scheduleAtFixedRate(() -> sendPing(session), 0, HEARTBEAT_INTERVAL, TimeUnit.SECONDS);
public void afterConnectionEstablished(WebSocketSession session) {
startHeartbeat(session);
}
@Override
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
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");
@ -49,12 +43,15 @@ public class MedicineHandler implements WebSocketHandler {
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 databaseName = DatabaseNameUtil.encrypt(patientName) + "_" + DatabaseNameUtil.encrypt(idNum) + "_" + date;
vitalSignTimerWS.createAndSendWSMessageMongo(databaseName, username, session);
}
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
@ -64,12 +61,7 @@ public class MedicineHandler implements WebSocketHandler {
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
System.out.println("MedicineHandler Connection closed:" + closeStatus.getReason());
if (heartbeatTask != null) {
heartbeatTask.cancel(true);
}
if (scheduler != null) {
scheduler.shutdown();
}
stopHeartbeat(session);
vitalSignTimerWS.stopTimerTask(session.getId());
}
@ -78,11 +70,31 @@ public class MedicineHandler implements WebSocketHandler {
return false;
}
private void sendPing(WebSocketSession session) {
private void startHeartbeat(WebSocketSession session) {
if (!timerTaskMap.containsKey(session.getId())) {
ScheduledExecutorService heartbeatExecutor = Executors.newScheduledThreadPool(1);
heartbeatExecutor.scheduleAtFixedRate(() -> {
try {
session.sendMessage(new PingMessage());
} catch (IOException e) {
if (session.isOpen()) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("msgType", "heartbeat");
session.sendMessage(new TextMessage(jsonObject.toJSONString().getBytes()));
} else {
session.close();
stopHeartbeat(session);
vitalSignTimerWS.stopTimerTask(session.getId());
}
} catch (Exception e) {
e.printStackTrace();
stopHeartbeat(session);
}
}, 0, 10, TimeUnit.SECONDS);
timerTaskMap.put(session.getId(), heartbeatExecutor);
}
}
private void stopHeartbeat(WebSocketSession session) {
ScheduledExecutorService heartbeatExecutor = timerTaskMap.get(session.getId());
heartbeatExecutor.shutdownNow();
}
}

View File

@ -24,8 +24,6 @@ public class MedicineHandler implements WebSocketHandler {
@Resource
private OAuth2AuthorizationService authorizationService;
// private Map<String, TimerTask> timerTaskMap = new ConcurrentHashMap();
private Map<String, ScheduledExecutorService> timerTaskMap = new ConcurrentHashMap();
@Override

View File

@ -46,7 +46,29 @@ public class AIMedicineServiceImpl implements AIMedicineService {
Query query = new Query();
query.limit(1);
query.with(Sort.by(Sort.Order.desc("Time")));
List<Map> aiMedicines = template.find(query, Map.class, "aimedicinetable");
List<Map> aiMedicines = template.find(query, Map.class, "fktable");
Map medicine = new HashMap();
for (Map map : aiMedicines) {
medicine.put("丙泊酚", map.get("rate_1"));
medicine.put("丙泊酚sum", map.get("cumu_1"));
medicine.put("舒芬太尼", map.get("rate_2"));
medicine.put("舒芬太尼sum", map.get("cumu_2"));
medicine.put("瑞芬太尼", map.get("rate_3"));
medicine.put("瑞芬太尼sum", map.get("cumu_3"));
medicine.put("顺阿曲库胺", map.get("rate_4"));
medicine.put("顺阿曲库胺sum", map.get("cumu_4"));
medicine.put("尼卡地平", map.get("rate_5"));
medicine.put("尼卡地平sum", map.get("cumu_5"));
medicine.put("艾司洛尔", map.get("rate_6"));
medicine.put("艾司洛尔sum", map.get("cumu_6"));
medicine.put("麻黄素", map.get("rate_7"));
medicine.put("麻黄素sum", map.get("cumu_7"));
medicine.put("阿托品", map.get("rate_8"));
medicine.put("阿托品sum", map.get("cumu_8"));
medicine.put("Time", map.get("Time"));
}
aiMedicines.remove(0);
aiMedicines.add(medicine);
return aiMedicines;
}

View File

@ -115,8 +115,8 @@ public class VitalSignTimerWS {
jsonObject.put("vitalSignsList", vitalSignsList);
List aiMedicineList = aiMedicineService.getAIMedicine(template);
jsonObject.put("aiMedicineList", aiMedicineList);
List docMedicineList = doctorMedicineService.getDocMedicine(template);
jsonObject.put("docMedicineList", docMedicineList);
// List docMedicineList = doctorMedicineService.getDocMedicine(template);
// jsonObject.put("docMedicineList", docMedicineList);
List revulsionList = revulsionService.getRevulsionServiceList(template);
jsonObject.put("revulsionList", revulsionList);
Map flags = flagService.getFlags(template);

View File

@ -1,6 +1,6 @@
spring:
profiles:
active: prod
active: dev
application:
name: @project.artifactId@
# 定时任务属性配置
@ -137,7 +137,7 @@ spring:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
url: jdbc:mysql://192.168.65.130:3306/rax_backend?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&nullCatalogMeansCurrent=true
url: jdbc:mysql://192.168.65.130:3306/rax_backend2?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&nullCatalogMeansCurrent=true
server:
port: 9999