diff --git a/docker/生产环境服务部署文档.md b/docker/生产环境服务部署文档.md index d54fe3c4..c08f689a 100644 --- a/docker/生产环境服务部署文档.md +++ b/docker/生产环境服务部署文档.md @@ -89,8 +89,8 @@ docker run -it --name minio -p 9002:9000 -p 9001:9001 -d \ virtual-patient-minio:1.0.0 server /data --console-address ":9001" # **启用网络环境服务,生产环境请使用** -docker run -it --name minio -p 9002:9000 -p 9001:9001 -d \ - -v /data/minio/data:/data \ +docker run -it --name virtual-patient-minio -p 9002:9000 -p 9001:9001 -d \ + -v /data/minio:/data \ -e 'MINIO_ROOT_USER=admin' \ -e 'MINIO_ROOT_PASSWORD=12345678' \ --network virtual-patient-network \ @@ -135,7 +135,7 @@ mv virtual-patient-bucket-prod /data/vp/minio/data # 运行容器 docker run --name virtual-patient-rasa-manager -p 8990:8890 -d virtual-patient-rasa-manager:1.0.0 # **启用网络环境服务,生产环境请使用** - docker run --name virtual-patient-rasa-manager -p 8990:8890 -v /data/vp:/data/vp --network virtual-patient-network -d virtual-patient-rasa-manager:1.0.0 --spring.profile.active=prod + docker run --name virtual-patient-rasa-manager -p 8990:8890 -v /data/vp:/data/vp --network virtual-patient-network -d virtual-patient-rasa-manager:1.0.0 --spring.profiles.active=prod # 验证容器运行 docker ps | grep virtual-patient-rasa-manager # 查看日志是否正常 @@ -168,7 +168,7 @@ mv virtual-patient-bucket-prod /data/vp/minio/data # 运行容器 docker run --name virtual-patient-web -p 8899:8899 -d virtual-patient-web # **启用网络环境服务,生产环境请使用** - docker run --name virtual-patient-web -p 8899:8899 -v /data/vp:/data/vp --network virtual-patient-network -d virtual-patient-web --spring.profile.active=prod + docker run --name virtual-patient-web -p 8899:8899 -v /data/vp:/data/vp --network virtual-patient-network -d virtual-patient-web:1.0.0 --spring.profiles.active=prod # 验证容器运行 docker ps | grep virtual-patient-web # 查看日志是否正常 @@ -201,7 +201,7 @@ mv virtual-patient-bucket-prod /data/vp/minio/data # 运行容器 docker run --name virtual-patient-manage -p 8891:8891 -d virtual-patient-manage # **启用网络环境服务,生产环境请使用** - docker run --name virtual-patient-manage -p 8891:8891 -v /data/vp:/data/vp --network virtual-patient-network -d virtual-patient-manage --spring.profile.active=prod + docker run --name virtual-patient-manage -p 8891:8891 -v /data/vp:/data/vp --network virtual-patient-network -d virtual-patient-manage --spring.profiles.active=prod # 验证容器运行 docker ps | grep virtual-patient-manage # 查看日志是否正常 diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/PhysicalToolVO.java b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/PhysicalToolVO.java index 962ce5a8..3ca18bcb 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/PhysicalToolVO.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/PhysicalToolVO.java @@ -15,8 +15,11 @@ import java.util.List; @ApiModel(parent = ConfigPhysicalTool.class) public class PhysicalToolVO extends ConfigPhysicalTool { - @ApiModelProperty("正常值列表") - private List defaultPhysicalIndicatorList; + @ApiModelProperty("需要部位正常值列表") + private List defaultPhysicalIndicatorList; + + @ApiModelProperty("无需部位的正常值") + private DefaultPhysicalIndicator noLocationDefaultPhysicalIndicator; } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/PhysicalToolManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/PhysicalToolManageServiceImpl.java index d3c942a4..77826006 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/PhysicalToolManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/PhysicalToolManageServiceImpl.java @@ -57,10 +57,16 @@ public class PhysicalToolManageServiceImpl implements PhysicalToolManageService ConfigPhysicalTool configPhysicalTool = configPhysicalToolService.getById(id); PhysicalToolVO bean = BeanUtil.toBean(configPhysicalTool, PhysicalToolVO.class); List list = defaultPhysicalIndicatorService.lambdaQuery().eq(DefaultPhysicalIndicator::getItemId, id).list(); - if (CollUtil.isNotEmpty(list)) { - bean.setDefaultPhysicalIndicatorList(list); - }else { - bean.setDefaultPhysicalIndicatorList(new ArrayList<>()); + // 如果需要检查位 + if (configPhysicalTool.getRequireLocation() == 1) { + if (CollUtil.isNotEmpty(list)) { + bean.setDefaultPhysicalIndicatorList(list); + } else { + bean.setDefaultPhysicalIndicatorList(new ArrayList<>()); + } + } else { + // 如果不需要检查位 + list.stream().findFirst().ifPresent(bean::setNoLocationDefaultPhysicalIndicator); } return bean; } @@ -89,6 +95,14 @@ public class PhysicalToolManageServiceImpl implements PhysicalToolManageService defaultPhysicalIndicatorService.save(defaultPhysicalIndicator); } } + // 保存无需部位的正常值(前端要求分开) + if (ObjectUtil.isNotEmpty(physicalToolVO.getNoLocationDefaultPhysicalIndicator())) { + if (physicalToolVO.getRequireLocation() == 0 && StrUtil.isNotBlank(physicalToolVO.getNoLocationDefaultPhysicalIndicator().getLocationId())) { + throw new BusinessException("无需检查位的体格检查项,检查位置必须为空"); + } + physicalToolVO.getNoLocationDefaultPhysicalIndicator().setItemId(physicalToolVO.getId()); + defaultPhysicalIndicatorService.save(physicalToolVO.getNoLocationDefaultPhysicalIndicator()); + } } @Override @@ -115,6 +129,14 @@ public class PhysicalToolManageServiceImpl implements PhysicalToolManageService defaultPhysicalIndicatorService.saveOrUpdate(defaultPhysicalIndicator); } } + // 保存无需部位的正常值(前端要求分开) + if (ObjectUtil.isNotEmpty(physicalToolVO.getNoLocationDefaultPhysicalIndicator())) { + if (physicalToolVO.getRequireLocation() == 0 && StrUtil.isNotBlank(physicalToolVO.getNoLocationDefaultPhysicalIndicator().getLocationId())) { + throw new BusinessException("无需检查位的体格检查项,检查位置必须为空"); + } + physicalToolVO.getNoLocationDefaultPhysicalIndicator().setItemId(physicalToolVO.getId()); + defaultPhysicalIndicatorService.saveOrUpdate(physicalToolVO.getNoLocationDefaultPhysicalIndicator()); + } configPhysicalToolService.updateById(physicalToolVO); diff --git a/virtual-patient-web/src/main/java/com/supervision/controller/DiagnoseHallController.java b/virtual-patient-web/src/main/java/com/supervision/controller/DiagnoseHallController.java index 7badd484..a9f068d6 100644 --- a/virtual-patient-web/src/main/java/com/supervision/controller/DiagnoseHallController.java +++ b/virtual-patient-web/src/main/java/com/supervision/controller/DiagnoseHallController.java @@ -25,12 +25,6 @@ public class DiagnoseHallController { private final DiagnoseHallService diagnoseHallService; - @ApiOperation("获取问诊资源") - @GetMapping("achieveDiagnoseResource") - public boolean achieveDiagnoseResource(){ - return diagnoseHallService.achieveDiagnoseResource(); - } - @ApiOperation("分页查询问诊流程列表") @GetMapping("queryDiagnoseProcessPageList") public IPage queryDiagnoseProcessPageList(@ApiParam("起始页") @RequestParam(defaultValue = "1") Integer pageNum, diff --git a/virtual-patient-web/src/main/java/com/supervision/controller/UserController.java b/virtual-patient-web/src/main/java/com/supervision/controller/UserController.java index 6daa0d99..e04402d3 100644 --- a/virtual-patient-web/src/main/java/com/supervision/controller/UserController.java +++ b/virtual-patient-web/src/main/java/com/supervision/controller/UserController.java @@ -1,12 +1,9 @@ package com.supervision.controller; import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.net.NetUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONObjectIter; import cn.hutool.json.JSONUtil; -import com.supervision.constant.UserTokenConstant; import com.supervision.exception.BusinessException; import com.supervision.model.User; import com.supervision.pojo.vo.LoginReqVO; @@ -15,24 +12,15 @@ import com.supervision.pojo.vo.UserInfoReqVo; import com.supervision.pojo.vo.UserInfoResVo; import com.supervision.service.UserManageService; import com.supervision.service.UserService; -import com.supervision.websocket.dto.UserWebSocketDTO; -import com.supervision.websocket.UserResourceCheck; import com.supervision.util.TokenUtil; import com.supervision.util.UserUtil; -import com.supervision.websocket.dto.WebSocketLoginDTO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; -import org.apache.xmlbeans.impl.common.IOUtil; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.data.redis.core.Cursor; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.ScanOptions; import org.springframework.web.bind.annotation.*; -import java.io.IOException; import java.time.LocalDateTime; -import java.util.Map; import java.util.Optional; @Api(tags = "用户管理") @@ -47,18 +35,6 @@ public class UserController { private final UserManageService userManageService; - private final UserResourceCheck userResourceCheck; - - - @Value("${ws.nginx-ip:}") - private String wsIp; - @Value("${ws.nginx-port:}") - private String wsPort; - - @Value("${spring.profiles.active}") - private String active; - @Value("${server.port}") - private String port; @ApiOperation("登录") @PostMapping("login") @@ -82,41 +58,7 @@ public class UserController { return loginResVO; } - @ApiOperation("踢用户下线") - @GetMapping("kickUser") - public void kickUser(String uuid, String userId) throws IOException { - if (StrUtil.isNotBlank(uuid)) { - redisTemplate.convertAndSend(UserTokenConstant.KICK_CHANNEL, JSONUtil.toJsonStr(new UserWebSocketDTO(uuid))); - } else { - ScanOptions options = ScanOptions.scanOptions() - .match("*" + userId + "*") // 可选:使用模式匹配指定要匹配的键 - .count(10) // 可选:指定每次迭代返回的元素数量 - .build(); - - Cursor> cursor = null; - try { - cursor = redisTemplate.opsForHash().scan(UserTokenConstant.USER_WEBSOCKET_CACHE, options); - while (cursor.hasNext()) { - Map.Entry entry = cursor.next(); - Object value = entry.getValue(); - WebSocketLoginDTO bean = JSONUtil.toBean(String.valueOf(value), WebSocketLoginDTO.class); - if (userId.equals(bean.getUserId())) { - redisTemplate.convertAndSend(UserTokenConstant.KICK_CHANNEL, JSONUtil.toJsonStr(new UserWebSocketDTO(bean.getUserId()))); - } - } - } catch (Exception e) { - if (ObjectUtil.isNotNull(cursor)) { - cursor.close(); - } - } - } - } - @ApiOperation("查看资源是否有剩余") - @GetMapping("resourceIsFree") - public boolean resourceIsFree() { - return userResourceCheck.achieveDiagnoseResource(); - } @ApiOperation("修改用户信息") @PutMapping("updateUserInfo") @@ -132,21 +74,9 @@ public class UserController { return userManageService.getUserAccountInfo(user.getId()); } - @ApiOperation("获取本机IP地址,用来给websocket使用") - @GetMapping("queryWebSocketUrl") - public String queryWebSocketUrl() { - String template = "wss://{}:{}/virtual-patient-websocket/"; - if (StrUtil.isNotBlank(wsIp) && StrUtil.isNotBlank(wsPort)) { - return StrUtil.format(template, wsIp, wsPort); - } - throw new BusinessException("未获取到ws的nginx地址,请确认配置文件是否配置"); - } - @ApiOperation("获取当前在线的用户") - @GetMapping("queryCurrentOnlineUser") - public Map queryCurrentOnlineUser() { - return redisTemplate.opsForHash().entries(UserTokenConstant.USER_WEBSOCKET_CACHE); - } + + } diff --git a/virtual-patient-web/src/main/java/com/supervision/controller/WebSocketServer.java b/virtual-patient-web/src/main/java/com/supervision/controller/WebSocketServer.java deleted file mode 100644 index 37d274d0..00000000 --- a/virtual-patient-web/src/main/java/com/supervision/controller/WebSocketServer.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.supervision.controller; - -import com.supervision.constant.UserTokenConstant; -import com.supervision.websocket.UserResourceCheck; -import com.supervision.websocket.WebSocketSessionPool; -import com.supervision.websocket.dto.WebSocketLoginDTO; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Component; - -import javax.websocket.*; -import javax.websocket.server.PathParam; -import javax.websocket.server.ServerEndpoint; - -@Component -@Slf4j -@ServerEndpoint("/webSocket/{uuid}/{userId}") -public class WebSocketServer { - - private static RedisTemplate redisTemplate; - - private static UserResourceCheck userResourceCheck; - - // 因为是ServerEndpoint是多例,所以需要这样注入 - @Autowired - public void setUserResourceCheck(UserResourceCheck userResourceCheck) { - WebSocketServer.userResourceCheck = userResourceCheck; - } - - // 因为是ServerEndpoint是多例,所以需要这样注入 - @Autowired - public void setRedisTemplate(RedisTemplate redisTemplate) { - WebSocketServer.redisTemplate = redisTemplate; - } - - /** - * 有客户端连接成功 - */ - @OnOpen - public void onOpen(Session session, @PathParam(value = "uuid") String uuid, @PathParam(value = "userId") String userId) { - // 校验资源数量,并保存 - userResourceCheck.achieveDiagnoseResourceAndOpenConnection(uuid, userId, session); - WebSocketSessionPool.SESSION_POOL.put(uuid, session); - log.info("用户:{},UUID:{}登录成功", userId, uuid); - } - - /** - * 连接关闭调用的方法 - */ - @OnClose - public void onClose(Session session, @PathParam(value = "uuid") String uuid, @PathParam(value = "userId") String userId) { - redisTemplate.opsForHash().delete(UserTokenConstant.USER_WEBSOCKET_CACHE, uuid); - WebSocketSessionPool.SESSION_POOL.remove(uuid); - log.info("用户:{},uuid:{}关闭,从Redis中移除,当前连接数为:{}", userId, uuid, redisTemplate.opsForHash().size(UserTokenConstant.USER_WEBSOCKET_CACHE)); - } - - /** - * 发生错误 - */ - @OnError - public void onError(Session session, @PathParam(value = "uuid") String uuid, @PathParam(value = "userId") String userId, Throwable throwable) { - redisTemplate.opsForHash().delete(UserTokenConstant.USER_WEBSOCKET_CACHE, uuid); - WebSocketSessionPool.SESSION_POOL.remove(uuid); - log.error("用户:{},uuid:{}发生错误,从Redis中移除,当前连接数为:{}", userId, uuid, redisTemplate.opsForHash().size(UserTokenConstant.USER_WEBSOCKET_CACHE), throwable); - } - - -} diff --git a/virtual-patient-web/src/main/java/com/supervision/service/DiagnoseHallService.java b/virtual-patient-web/src/main/java/com/supervision/service/DiagnoseHallService.java index ca556a69..f33bd1a4 100644 --- a/virtual-patient-web/src/main/java/com/supervision/service/DiagnoseHallService.java +++ b/virtual-patient-web/src/main/java/com/supervision/service/DiagnoseHallService.java @@ -9,8 +9,6 @@ import com.supervision.vo.result.DiagnoseProcessResVo; public interface DiagnoseHallService { - boolean achieveDiagnoseResource(); - IPage queryDiagnoseProcessPageList(Integer pageNum, Integer pageSize, DiagnoseProcessReqVo diagnoseProcessReqVo); diff --git a/virtual-patient-web/src/main/java/com/supervision/service/impl/DiagnoseHallServiceImpl.java b/virtual-patient-web/src/main/java/com/supervision/service/impl/DiagnoseHallServiceImpl.java index 1899b1d7..c286d618 100644 --- a/virtual-patient-web/src/main/java/com/supervision/service/impl/DiagnoseHallServiceImpl.java +++ b/virtual-patient-web/src/main/java/com/supervision/service/impl/DiagnoseHallServiceImpl.java @@ -3,7 +3,6 @@ package com.supervision.service.impl; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.lock.annotation.Lock4j; import com.supervision.model.DiagnosisPrimary; import com.supervision.service.DiagnoseHallService; import com.supervision.service.DiagnosisPrimaryService; @@ -13,7 +12,6 @@ import com.supervision.vo.ask.DiagnosisPrimaryVO; import com.supervision.vo.manage.MedicalRecPageResVO; import com.supervision.vo.result.DiagnoseProcessReqVo; import com.supervision.vo.result.DiagnoseProcessResVo; -import com.supervision.websocket.UserResourceCheck; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -29,7 +27,6 @@ import java.util.stream.Collectors; @Slf4j public class DiagnoseHallServiceImpl implements DiagnoseHallService { - private final UserResourceCheck userResourceCheck; private final ProcessService processService; @@ -37,12 +34,6 @@ public class DiagnoseHallServiceImpl implements DiagnoseHallService { private final DiagnosisPrimaryService diagnosisPrimaryService; - @Lock4j(name = "achieveDiagnoseResource") - @Override - public boolean achieveDiagnoseResource() { - // 如果小于数字人最大连接数,则可以连接 - return userResourceCheck.achieveDiagnoseResource(); - } @Override public IPage queryDiagnoseProcessPageList(Integer pageNum, Integer pageSize, diff --git a/virtual-patient-web/src/main/java/com/supervision/websocket/KickUserListener.java b/virtual-patient-web/src/main/java/com/supervision/websocket/KickUserListener.java deleted file mode 100644 index b24841d1..00000000 --- a/virtual-patient-web/src/main/java/com/supervision/websocket/KickUserListener.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.supervision.websocket; - -import cn.hutool.json.JSONUtil; -import com.supervision.constant.UserTokenConstant; -import com.supervision.websocket.dto.UserWebSocketDTO; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.connection.Message; -import org.springframework.data.redis.connection.MessageListener; -import org.springframework.stereotype.Component; - - -@Slf4j -@Component -public class KickUserListener implements MessageListener { - - @Autowired - private UserResourceCheck userResourceCheck; - - @Override - public void onMessage(Message message, byte[] pattern) { - String messageString = message.toString(); - UserWebSocketDTO user = JSONUtil.toBean(messageString, UserWebSocketDTO.class); - log.info("Redis的Channel:{}收到踢用户{}下线消息", UserTokenConstant.KICK_CHANNEL, user.getUuid()); - userResourceCheck.kickUser(user.getUuid()); - } -} diff --git a/virtual-patient-web/src/main/java/com/supervision/websocket/RedisListener.java b/virtual-patient-web/src/main/java/com/supervision/websocket/RedisListener.java deleted file mode 100644 index 2cae1e58..00000000 --- a/virtual-patient-web/src/main/java/com/supervision/websocket/RedisListener.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.supervision.websocket; - -import com.supervision.constant.UserTokenConstant; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.listener.ChannelTopic; -import org.springframework.data.redis.listener.RedisMessageListenerContainer; - -@Configuration -public class RedisListener { - - @Autowired - private KickUserListener kickUserListener; - - @Bean - public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory redisConnectionFactory) { - RedisMessageListenerContainer container = new RedisMessageListenerContainer(); - container.setConnectionFactory(redisConnectionFactory); - container.addMessageListener(kickUserListener, new ChannelTopic(UserTokenConstant.KICK_CHANNEL)); - return container; - } -} diff --git a/virtual-patient-web/src/main/java/com/supervision/websocket/UserResourceCheck.java b/virtual-patient-web/src/main/java/com/supervision/websocket/UserResourceCheck.java deleted file mode 100644 index b1056faa..00000000 --- a/virtual-patient-web/src/main/java/com/supervision/websocket/UserResourceCheck.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.supervision.websocket; - -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONUtil; -import com.baomidou.lock.annotation.Lock4j; -import com.supervision.constant.UserTokenConstant; -import com.supervision.exception.BusinessException; -import com.supervision.websocket.dto.KickDTO; -import com.supervision.websocket.dto.NoResourceDTO; -import com.supervision.websocket.dto.WebSocketLoginDTO; -import lombok.Data; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; - -import javax.websocket.*; - -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Component; - -import java.io.IOException; - -@Slf4j -@Component -@RequiredArgsConstructor -public class UserResourceCheck { - - @Value("${human.resourceMaxNumber}") - private String resourceNumber; - - private final RedisTemplate redisTemplate; - - @Lock4j(name = "achieveDiagnoseResource") - public boolean achieveDiagnoseResource() { - long humanMaxNumber = Long.parseLong(resourceNumber); - long currentSize = redisTemplate.opsForHash().size(UserTokenConstant.USER_WEBSOCKET_CACHE); - // 如果小于数字人最大连接数,则可以连接 - return currentSize < humanMaxNumber; - } - - @Lock4j(name = "achieveDiagnoseResourceAndOpenConnection") - public void achieveDiagnoseResourceAndOpenConnection(String uuid, String userId, Session session) { - // 如果小于数字人最大连接数,则可以连接 - if (!achieveDiagnoseResource()) { - try { - session.getBasicRemote().sendText(JSONUtil.toJsonStr(new NoResourceDTO())); - } catch (Exception e) { - log.error("发送消息失败", e); - } - throw new BusinessException("暂时没有资源,建立连接失败"); - } - redisTemplate.opsForHash().put(UserTokenConstant.USER_WEBSOCKET_CACHE, uuid, JSONUtil.toJsonStr(new WebSocketLoginDTO(uuid, userId, session.getId()))); - } - - /** - * websocket保活接口,每5秒钟发送一次消息 - */ - - // 实现一个方法用于踢下线用户,走的是Redis的消息队列 - public void kickUser(String uuid) { - log.info("尝试踢uuid:{}下线", uuid); - Session session = WebSocketSessionPool.SESSION_POOL.get(uuid); - // 只有不是忽略剔除的sessionId才可以踢下线 - if (ObjectUtil.isNotEmpty(session)) { - try { - session.getBasicRemote().sendText(JSONUtil.toJsonStr(new KickDTO())); - session.close(new CloseReason(CloseReason.CloseCodes.NORMAL_CLOSURE, "用户被踢下线")); - WebSocketSessionPool.SESSION_POOL.remove(uuid); - // 然后从redis中移除掉 - redisTemplate.opsForHash().delete(UserTokenConstant.USER_WEBSOCKET_CACHE, uuid); - log.info("踢UUID:{},sessionId:{} 下线成功", uuid, session.getId()); - return; - } catch (IOException e) { - log.error("用户:{}的websocket连接异常", e.getMessage()); - // TODO 如果用户连接异常,怎么办 - - } - } - log.info("踢UUID:{}下线,未找到用户,踢下线失败", uuid); - } - - -} diff --git a/virtual-patient-web/src/main/java/com/supervision/websocket/WebSocketSessionPool.java b/virtual-patient-web/src/main/java/com/supervision/websocket/WebSocketSessionPool.java deleted file mode 100644 index e6d7070c..00000000 --- a/virtual-patient-web/src/main/java/com/supervision/websocket/WebSocketSessionPool.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.supervision.websocket; - -import com.supervision.websocket.dto.WebSocketLoginDTO; - -import javax.websocket.Session; -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; - -public class WebSocketSessionPool { - - //concurrent包的线程安全Set,用来存放每个客户端对应的WebSocketServer对象。 - public static final ConcurrentHashMap SESSION_POOL = new ConcurrentHashMap<>(); -} diff --git a/virtual-patient-web/src/main/java/com/supervision/websocket/WebsocketKeepaliveTask.java b/virtual-patient-web/src/main/java/com/supervision/websocket/WebsocketKeepaliveTask.java deleted file mode 100644 index 91f6a948..00000000 --- a/virtual-patient-web/src/main/java/com/supervision/websocket/WebsocketKeepaliveTask.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.supervision.websocket; - -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.json.JSONUtil; -import com.supervision.websocket.UserResourceCheck; -import com.supervision.websocket.WebSocketSessionPool; -import com.supervision.websocket.dto.KeepaliveDTO; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import javax.websocket.Session; -import java.io.IOException; -import java.util.Map; - -@Component -@Slf4j -@RequiredArgsConstructor -public class WebsocketKeepaliveTask { - @Scheduled(fixedDelay = 5 * 1000L) - public void keepalive() { - for (Map.Entry entries : WebSocketSessionPool.SESSION_POOL.entrySet()) { - String userId = entries.getKey(); - Session session = entries.getValue(); - if (ObjectUtil.isNotEmpty(session)) { - try { - session.getBasicRemote().sendText(JSONUtil.toJsonStr(new KeepaliveDTO())); - log.info("用户:{}的websocket保活成功", userId); - } catch (IOException e) { - log.error("用户:{}的websocket连接异常", userId, e); - } - } - } - } - -} diff --git a/virtual-patient-web/src/main/java/com/supervision/websocket/dto/KeepaliveDTO.java b/virtual-patient-web/src/main/java/com/supervision/websocket/dto/KeepaliveDTO.java deleted file mode 100644 index 2865c27f..00000000 --- a/virtual-patient-web/src/main/java/com/supervision/websocket/dto/KeepaliveDTO.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.supervision.websocket.dto; - -import com.supervision.constant.UserTokenConstant; -import lombok.Data; - -@Data -public class KeepaliveDTO { - - private final Integer code = UserTokenConstant.KEEPALIVE_CODE; - - private final String message = "keepalive"; -} diff --git a/virtual-patient-web/src/main/java/com/supervision/websocket/dto/KickDTO.java b/virtual-patient-web/src/main/java/com/supervision/websocket/dto/KickDTO.java deleted file mode 100644 index 6987fdcc..00000000 --- a/virtual-patient-web/src/main/java/com/supervision/websocket/dto/KickDTO.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.supervision.websocket.dto; - -import com.supervision.constant.UserTokenConstant; -import lombok.Data; - -@Data -public class KickDTO { - - private final Integer code = UserTokenConstant.KICK_CODE; - - private final String message = "用户被踢下线"; -} diff --git a/virtual-patient-web/src/main/java/com/supervision/websocket/dto/NoResourceDTO.java b/virtual-patient-web/src/main/java/com/supervision/websocket/dto/NoResourceDTO.java deleted file mode 100644 index cbb32746..00000000 --- a/virtual-patient-web/src/main/java/com/supervision/websocket/dto/NoResourceDTO.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.supervision.websocket.dto; - -import com.supervision.constant.UserTokenConstant; - -public class NoResourceDTO { - - private final Integer code = UserTokenConstant.NO_RESOURCE_CODE; - - private final String message = "用户被踢下线"; -} diff --git a/virtual-patient-web/src/main/java/com/supervision/websocket/dto/UserWebSocketDTO.java b/virtual-patient-web/src/main/java/com/supervision/websocket/dto/UserWebSocketDTO.java deleted file mode 100644 index f57d46f6..00000000 --- a/virtual-patient-web/src/main/java/com/supervision/websocket/dto/UserWebSocketDTO.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.supervision.websocket.dto; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class UserWebSocketDTO { - - private String uuid; - -} diff --git a/virtual-patient-web/src/main/java/com/supervision/websocket/dto/WebSocketLoginDTO.java b/virtual-patient-web/src/main/java/com/supervision/websocket/dto/WebSocketLoginDTO.java deleted file mode 100644 index f4d4e60c..00000000 --- a/virtual-patient-web/src/main/java/com/supervision/websocket/dto/WebSocketLoginDTO.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.supervision.websocket.dto; - -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class WebSocketLoginDTO { - - private String userId; - - private String uuid; - - private String sessionId; - - private String loginTime; - - public WebSocketLoginDTO(String uuid, String userId, String sessionId) { - this.userId = userId; - this.uuid = uuid; - this.sessionId = sessionId; - this.loginTime = LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME); - } - - public WebSocketLoginDTO() { - } -}