From 868011b38eb71ab23d421265e23c9b1df3d6b903 Mon Sep 17 00:00:00 2001 From: republicline <1464474399@qq.com> Date: Wed, 12 Feb 2025 14:17:16 +0800 Subject: [PATCH] =?UTF-8?q?commit:=20=E6=B7=BB=E5=8A=A0=E7=BD=97=E5=BA=93?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/rax/admin/api/vo/UserExcelVO.java | 18 +++---- .../service/impl/SysUserServiceImpl.java | 33 ++++++------ .../com/rax/vital/v1/handler/ChatHandler.java | 11 ++-- .../rax/vital/v1/timer/VitalSignTimerWS.java | 38 +++++++++----- .../vital/v2/config/WebSocketStompConfig.java | 47 ------------------ .../src/main/resources/file/user.xlsx | Bin 11826 -> 9069 bytes 6 files changed, 56 insertions(+), 91 deletions(-) delete mode 100644 upms/upms-biz/src/main/java/com/rax/vital/v2/config/WebSocketStompConfig.java diff --git a/upms/upms-api/src/main/java/com/rax/admin/api/vo/UserExcelVO.java b/upms/upms-api/src/main/java/com/rax/admin/api/vo/UserExcelVO.java index 54e1076..17f3997 100644 --- a/upms/upms-api/src/main/java/com/rax/admin/api/vo/UserExcelVO.java +++ b/upms/upms-api/src/main/java/com/rax/admin/api/vo/UserExcelVO.java @@ -73,9 +73,9 @@ public class UserExcelVO implements Serializable { /** * 部门名称 */ - @NotBlank(message = "部门名称不能为空") - @ExcelProperty("部门名称") - private String deptName; + //@NotBlank(message = "部门名称不能为空") + //@ExcelProperty("部门名称") + //private String deptName; /** * 角色列表 @@ -84,12 +84,12 @@ public class UserExcelVO implements Serializable { @ExcelProperty("角色") private String roleNameList; - /** - * 角色列表 - */ - @NotBlank(message = "岗位不能为空") - @ExcelProperty("岗位名称") - private String postNameList; + ///** + // * 角色列表 + // */ + //@NotBlank(message = "岗位不能为空") + //@ExcelProperty("岗位名称") + //private String postNameList; /** * 锁定标记 diff --git a/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysUserServiceImpl.java b/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysUserServiceImpl.java index 6f73c78..5b5c81c 100644 --- a/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysUserServiceImpl.java +++ b/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysUserServiceImpl.java @@ -357,11 +357,11 @@ public class SysUserServiceImpl extends ServiceImpl impl .map(SysRole::getRoleName) .collect(Collectors.joining(StrUtil.COMMA)); excelVO.setRoleNameList(roleNameList); - String postNameList = userVO.getPostList() - .stream() - .map(SysPost::getPostName) - .collect(Collectors.joining(StrUtil.COMMA)); - excelVO.setPostNameList(postNameList); + //String postNameList = userVO.getPostList() + // .stream() + // .map(SysPost::getPostName) + // .collect(Collectors.joining(StrUtil.COMMA)); + //excelVO.setPostNameList(postNameList); return excelVO; }).collect(Collectors.toList()); return userExcelVOList; @@ -378,9 +378,9 @@ public class SysUserServiceImpl extends ServiceImpl impl public R importUser(List excelVOList, BindingResult bindingResult) { // 通用校验获取失败的数据 List errorMessageList = (List) bindingResult.getTarget(); - List deptList = sysDeptService.list(); + //List deptList = sysDeptService.list(); List roleList = sysRoleService.list(); - List postList = sysPostService.list(); + //List postList = sysPostService.list(); // 执行数据插入操作 组装 UserDto for (UserExcelVO excel : excelVOList) { @@ -397,12 +397,12 @@ public class SysUserServiceImpl extends ServiceImpl impl } // 判断输入的部门名称列表是否合法 - Optional deptOptional = deptList.stream() - .filter(dept -> excel.getDeptName().equals(dept.getName())) - .findFirst(); - if (!deptOptional.isPresent()) { - errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_DEPT_DEPTNAME_INEXISTENCE, excel.getDeptName())); - } + //Optional deptOptional = deptList.stream() + // .filter(dept -> excel.getDeptName().equals(dept.getName())) + // .findFirst(); + //if (!deptOptional.isPresent()) { + // errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_DEPT_DEPTNAME_INEXISTENCE, excel.getDeptName())); + //} // 判断输入的角色名称列表是否合法 List roleNameList = StrUtil.split(excel.getRoleNameList(), StrUtil.COMMA); @@ -426,7 +426,7 @@ public class SysUserServiceImpl extends ServiceImpl impl // 数据合法情况 if (CollUtil.isEmpty(errorMsg)) { - insertExcelUser(excel, deptOptional, roleCollList, null); + insertExcelUser(excel, roleCollList); } else { // 数据不合法情况 errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg)); @@ -443,8 +443,7 @@ public class SysUserServiceImpl extends ServiceImpl impl /** * 插入excel User */ - private void insertExcelUser(UserExcelVO excel, Optional deptOptional, List roleCollList, - List postCollList) { + private void insertExcelUser(UserExcelVO excel, List roleCollList) { UserDTO userDTO = new UserDTO(); userDTO.setUsername(excel.getUsername()); userDTO.setPhone(excel.getPhone()); @@ -454,7 +453,7 @@ public class SysUserServiceImpl extends ServiceImpl impl // 批量导入初始密码为手机号 userDTO.setPassword(userDTO.getPhone()); // 根据部门名称查询部门ID - userDTO.setDeptId(deptOptional.get().getDeptId()); + //userDTO.setDeptId(deptOptional.get().getDeptId()); // 插入岗位名称 // List postIdList = postCollList.stream().map(SysPost::getPostId).collect(Collectors.toList()); // userDTO.setPost(postIdList); diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v1/handler/ChatHandler.java b/upms/upms-biz/src/main/java/com/rax/vital/v1/handler/ChatHandler.java index 6827b56..2a81d87 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v1/handler/ChatHandler.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v1/handler/ChatHandler.java @@ -29,11 +29,11 @@ public class ChatHandler implements WebSocketHandler { @Resource private OAuth2AuthorizationService authorizationService; - @Resource - private ChatService chatService; - - @Autowired - private RedisTemplate redisTemplate; + //@Resource + //private ChatService chatService; + // + //@Autowired + //private RedisTemplate redisTemplate; // mysql地址 @Value("${vital-sign.mysql.host}") @@ -200,7 +200,6 @@ public class ChatHandler implements WebSocketHandler { sessionDbMap.remove(session.getId()); } - // 初始化聊天表格 private void initTChatTable(String dbName, WebSocketSession session) { try { diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v1/timer/VitalSignTimerWS.java b/upms/upms-biz/src/main/java/com/rax/vital/v1/timer/VitalSignTimerWS.java index 2b49fb9..c2a13f2 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v1/timer/VitalSignTimerWS.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v1/timer/VitalSignTimerWS.java @@ -175,6 +175,8 @@ public class VitalSignTimerWS { CustomDataSource finalDataSource = dataSource; + + /** * 判断罗库溴铵还是顺阿曲库胺 * 0默认值无意义、1有创、2无创 @@ -182,19 +184,31 @@ public class VitalSignTimerWS { */ // 这里只判断罗库还是顺阿 Connection connection = finalDataSource.getConnection(); - String selectSql = "SELECT sum(罗库) from selecttable;"; - Statement statement = connection.createStatement(); - statement.execute(selectSql); - ResultSet resultSet = statement.getResultSet(); - double selectValue = 0; - while (resultSet.next()) { - System.out.println("selectValue = " + selectValue); - selectValue = resultSet.getDouble("sum(罗库)"); - System.out.println("change:selectValue = " + selectValue); + // 先判断selecttable是否存在, 不存在则跳过 + // mysql判断表是否存在 + String selectTableSql = "SELECT * FROM information_schema.tables WHERE table_schema = '" + database + "' AND table_name = 'selecttable'"; + Statement selectTableStatement = connection.createStatement(); + ResultSet selectTableResultSet = selectTableStatement.executeQuery(selectTableSql); + boolean selectTableExists = false; + while (selectTableResultSet.next()) { + selectTableExists = true; } - double finalSelectValue = selectValue; - System.out.println("finalSelectValue = " + finalSelectValue); + // 如果存在, 根据逻辑判断 + double finalSelectValue = 2; // 默认顺阿曲库胺 + + if (selectTableExists) { + String selectSql = "SELECT sum(罗库) from selecttable;"; + Statement statement = connection.createStatement(); + statement.execute(selectSql); + ResultSet resultSet = statement.getResultSet(); + while (resultSet.next()) { + finalSelectValue = resultSet.getDouble("sum(罗库)"); + } + } + + + double finalSelectValue1 = finalSelectValue; TimerTask timerTask = new TimerTask() { @Override public void run() { @@ -203,7 +217,7 @@ public class VitalSignTimerWS { // List vitalSignsList = vitalSignsService.getVitalSignsList(connection); Map vitalSignsList = vitalSignsService.getVitalSignsList(connection, username, database); jsonObject.put("vitalSignsList", vitalSignsList); - List aiMedicineList = aiMedicineService.getAIMedicine(connection,finalSelectValue); + List aiMedicineList = aiMedicineService.getAIMedicine(connection, finalSelectValue1); jsonObject.put("aiMedicineList", aiMedicineList); // List docMedicineList = doctorMedicineService.getDocMedicine(connection); // jsonObject.put("docMedicineList", docMedicineList); diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v2/config/WebSocketStompConfig.java b/upms/upms-biz/src/main/java/com/rax/vital/v2/config/WebSocketStompConfig.java deleted file mode 100644 index 604889c..0000000 --- a/upms/upms-biz/src/main/java/com/rax/vital/v2/config/WebSocketStompConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -//package com.rax.vital.v2.config; -// -//import com.rax.vital.v2.interceptor.WSChannelInterceptor; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.messaging.simp.config.ChannelRegistration; -//import org.springframework.messaging.simp.config.MessageBrokerRegistry; -//import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; -//import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; -//import org.springframework.web.socket.config.annotation.StompEndpointRegistry; -//import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; -// -//@Configuration -//@EnableWebSocketMessageBroker -//public class WebSocketStompConfig implements WebSocketMessageBrokerConfigurer { -// -// @Autowired -// private WSChannelInterceptor wsChannelInterceptor; -// -// @Override -// public void registerStompEndpoints(StompEndpointRegistry registry) { -// registry.addEndpoint("/rax/chat", "/rax/SurgeryData") -// .setAllowedOrigins("*"); -// } -// -// @Override -// public void configureMessageBroker(MessageBrokerRegistry registry) { -// // 第一个值表示客户端发送心跳消息的间隔时间,第二个值表示服务端发送心跳消息的间隔时间 -// long [] heartbeat = {60000, 60000}; -// ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); -// threadPoolTaskScheduler.initialize(); -// registry.enableSimpleBroker("/topic").setTaskScheduler(threadPoolTaskScheduler).setHeartbeatValue(heartbeat); -// registry.setApplicationDestinationPrefixes("/front"); -// registry.setUserDestinationPrefix("/topic/user"); -// } -// -// /** -// * stomp未登录验证 -// * -// * @param registration -// */ -// @Override -// public void configureClientInboundChannel(ChannelRegistration registration) { -// registration.interceptors(wsChannelInterceptor); -// } -// -//} diff --git a/upms/upms-biz/src/main/resources/file/user.xlsx b/upms/upms-biz/src/main/resources/file/user.xlsx index 4ac69c03f494a8a6c015ae03b8deb84a40c784e3..575d55c76d8f4be9cfcc019b017d12b7ebe1958d 100644 GIT binary patch literal 9069 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 ZFX~wi2>0V*MZf=o1L0myj^sh_{{XR3kLCaX literal 11826 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 s{>A*y0^ygn{_Cb_XWF62^lX#^3h-A0_%b0RR91