From 51c7e784058e5d9546390eea90325f9da73a38f8 Mon Sep 17 00:00:00 2001 From: yy <2@2.com> Date: Wed, 29 May 2024 10:46:19 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=E7=A7=BB=E9=99=A4=E5=8C=BB?= =?UTF-8?q?=E9=99=A2id=20=E8=AE=BE=E7=BD=AE=E5=BD=93=E5=89=8D=E5=8C=BB?= =?UTF-8?q?=E9=99=A2id=E5=8F=AF=E4=BB=A5=E4=B8=BA=E7=A9=BA=20=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=AF=BC=E5=85=A5=E7=A7=BB=E9=99=A4=E5=B2=97=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/RaxDaoAuthenticationProvider.java | 7 +----- .../service/RaxAppUserDetailsServiceImpl.java | 5 ---- .../service/RaxUserDetailsService.java | 4 ++-- .../service/RaxUserDetailsServiceImpl.java | 7 +----- .../admin/controller/SysUserController.java | 9 ++++--- .../service/impl/SysHospitalServiceImpl.java | 11 +++++---- .../service/impl/SysUserServiceImpl.java | 22 +++++++++--------- .../src/main/resources/file/user.xlsx | Bin 11850 -> 11826 bytes .../src/main/resources/file/user_bak.xlsx | Bin 0 -> 11850 bytes 9 files changed, 25 insertions(+), 40 deletions(-) create mode 100644 upms/upms-biz/src/main/resources/file/user_bak.xlsx diff --git a/auth/src/main/java/com/rax/auth/support/core/RaxDaoAuthenticationProvider.java b/auth/src/main/java/com/rax/auth/support/core/RaxDaoAuthenticationProvider.java index 6363d8a..1e3146a 100644 --- a/auth/src/main/java/com/rax/auth/support/core/RaxDaoAuthenticationProvider.java +++ b/auth/src/main/java/com/rax/auth/support/core/RaxDaoAuthenticationProvider.java @@ -106,11 +106,6 @@ public class RaxDaoAuthenticationProvider extends AbstractUserDetailsAuthenticat String grantType = WebUtils.getRequest().get().getParameter(OAuth2ParameterNames.GRANT_TYPE); String clientId = WebUtils.getRequest().get().getParameter(OAuth2ParameterNames.CLIENT_ID); - Long hospitalId = Long.valueOf(WebUtils.getRequest().get().getParameter("hospitalId")); - - if (hospitalId == null) { - throw new InternalAuthenticationServiceException("hospitalId is empty"); - } if (StrUtil.isBlank(clientId)) { clientId = basicConvert.convert(request).getName(); @@ -130,7 +125,7 @@ public class RaxDaoAuthenticationProvider extends AbstractUserDetailsAuthenticat } try { - UserDetails loadedUser = optional.get().loadUserByUsername(username, hospitalId); + UserDetails loadedUser = optional.get().loadUserByUsername(username); if (loadedUser == null) { throw new InternalAuthenticationServiceException( "UserDetailsService returned null, which is an interface contract violation"); diff --git a/common/common-security/src/main/java/com/rax/common/security/service/RaxAppUserDetailsServiceImpl.java b/common/common-security/src/main/java/com/rax/common/security/service/RaxAppUserDetailsServiceImpl.java index c840144..c4e7f09 100644 --- a/common/common-security/src/main/java/com/rax/common/security/service/RaxAppUserDetailsServiceImpl.java +++ b/common/common-security/src/main/java/com/rax/common/security/service/RaxAppUserDetailsServiceImpl.java @@ -86,9 +86,4 @@ public class RaxAppUserDetailsServiceImpl implements RaxUserDetailsService { return SecurityConstants.MOBILE.equals(grantType); } - @Override - public UserDetails loadUserByUsername(String phone, Long hospitalId) { - return null; - } - } diff --git a/common/common-security/src/main/java/com/rax/common/security/service/RaxUserDetailsService.java b/common/common-security/src/main/java/com/rax/common/security/service/RaxUserDetailsService.java index 25fde87..4d15e89 100644 --- a/common/common-security/src/main/java/com/rax/common/security/service/RaxUserDetailsService.java +++ b/common/common-security/src/main/java/com/rax/common/security/service/RaxUserDetailsService.java @@ -71,7 +71,7 @@ public interface RaxUserDetailsService extends UserDetailsService, Ordered { StrUtil.equals(user.getLockFlag(), CommonConstants.STATUS_NORMAL), user.getName(), authorities); } - UserDetails loadUserByUsername(String username, Long hospitalId); + UserDetails loadUserByUsername(String username); /** * 通过用户实体查询 @@ -79,7 +79,7 @@ public interface RaxUserDetailsService extends UserDetailsService, Ordered { * @return */ default UserDetails loadUserByUser(RaxUser raxUser) { - return this.loadUserByUsername(raxUser.getUsername(), raxUser.getHospitalId()); + return this.loadUserByUsername(raxUser.getUsername()); } } diff --git a/common/common-security/src/main/java/com/rax/common/security/service/RaxUserDetailsServiceImpl.java b/common/common-security/src/main/java/com/rax/common/security/service/RaxUserDetailsServiceImpl.java index cf5eab8..54ab525 100644 --- a/common/common-security/src/main/java/com/rax/common/security/service/RaxUserDetailsServiceImpl.java +++ b/common/common-security/src/main/java/com/rax/common/security/service/RaxUserDetailsServiceImpl.java @@ -52,7 +52,7 @@ public class RaxUserDetailsServiceImpl implements RaxUserDetailsService { */ @Override @SneakyThrows - public UserDetails loadUserByUsername(String username, Long hospitalId) { + public UserDetails loadUserByUsername(String username) { Cache cache = cacheManager.getCache(CacheConstants.USER_DETAILS); if (cache != null && cache.get(username) != null) { return (RaxUser) cache.get(username).get(); @@ -60,7 +60,6 @@ public class RaxUserDetailsServiceImpl implements RaxUserDetailsService { UserDTO userDTO = new UserDTO(); userDTO.setUsername(username); - userDTO.setHospitalId(hospitalId); R result = remoteUserService.info(userDTO, SecurityConstants.FROM_IN); UserDetails userDetails = getUserDetails(result); if (cache != null) { @@ -74,8 +73,4 @@ public class RaxUserDetailsServiceImpl implements RaxUserDetailsService { return Integer.MIN_VALUE; } - @Override - public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { - return null; - } } diff --git a/upms/upms-biz/src/main/java/com/rax/admin/controller/SysUserController.java b/upms/upms-biz/src/main/java/com/rax/admin/controller/SysUserController.java index b475f0c..1f95eac 100644 --- a/upms/upms-biz/src/main/java/com/rax/admin/controller/SysUserController.java +++ b/upms/upms-biz/src/main/java/com/rax/admin/controller/SysUserController.java @@ -61,12 +61,11 @@ public class SysUserController { */ @Inner @GetMapping(value = {"/info/query"}) - public R info(@RequestParam(required = false) String username, @RequestParam(required = false) String phone, @RequestParam(required = false) String hospitalId) { + public R info(@RequestParam(required = false) String username, @RequestParam(required = false) String phone) { SysUser user = userService.getOne(Wrappers.query() .lambda() .eq(StrUtil.isNotBlank(username), SysUser::getUsername, username) - .eq(StrUtil.isNotBlank(phone), SysUser::getPhone, phone) - .eq(StringUtils.hasText(hospitalId), SysUser::getHospitalId, hospitalId)); + .eq(StrUtil.isNotBlank(phone), SysUser::getPhone, phone)); SysUser user1 = userService.getOne(Wrappers.query() .lambda() .eq(StrUtil.isNotBlank(username), SysUser::getUsername, username) @@ -84,14 +83,14 @@ public class SysUserController { } } if (isAdmin) { - sysHospitalService.changeHospital(hospitalId, String.valueOf(user1.getUserId())); + sysHospitalService.changeHospital("", String.valueOf(user1.getUserId())); return R.ok(userService.findUserInfo(user1)); } else { return R.failed(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERINFO_EMPTY, username)); } } } - sysHospitalService.changeHospital(hospitalId, String.valueOf(user.getUserId())); + sysHospitalService.changeHospital(String.valueOf(user.getHospitalId()), String.valueOf(user.getUserId())); return R.ok(userService.findUserInfo(user)); } diff --git a/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysHospitalServiceImpl.java b/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysHospitalServiceImpl.java index 910204a..2c69026 100644 --- a/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysHospitalServiceImpl.java +++ b/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysHospitalServiceImpl.java @@ -106,6 +106,9 @@ public class SysHospitalServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); queryWrapper.eq("id", raxUser.getHospitalId()); @@ -133,11 +136,9 @@ public class SysHospitalServiceImpl extends ServiceImpl impl } // 判断输入的部门名称列表是否合法 - List postNameList = StrUtil.split(excel.getPostNameList(), StrUtil.COMMA); - List postCollList = postList.stream() - .filter(post -> postNameList.stream().anyMatch(name -> post.getPostName().equals(name))) - .collect(Collectors.toList()); - - if (postCollList.size() != postNameList.size()) { - errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_POST_POSTNAME_INEXISTENCE, excel.getPostNameList())); - } +// List postNameList = StrUtil.split(excel.getPostNameList(), StrUtil.COMMA); +// List postCollList = postList.stream() +// .filter(post -> postNameList.stream().anyMatch(name -> post.getPostName().equals(name))) +// .collect(Collectors.toList()); +// +// if (postCollList.size() != postNameList.size()) { +// errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_POST_POSTNAME_INEXISTENCE, excel.getPostNameList())); +// } // 数据合法情况 if (CollUtil.isEmpty(errorMsg)) { - insertExcelUser(excel, deptOptional, roleCollList, postCollList); + insertExcelUser(excel, deptOptional, roleCollList, null); } else { // 数据不合法情况 errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg)); @@ -381,8 +381,8 @@ public class SysUserServiceImpl extends ServiceImpl impl // 根据部门名称查询部门ID userDTO.setDeptId(deptOptional.get().getDeptId()); // 插入岗位名称 - List postIdList = postCollList.stream().map(SysPost::getPostId).collect(Collectors.toList()); - userDTO.setPost(postIdList); +// List postIdList = postCollList.stream().map(SysPost::getPostId).collect(Collectors.toList()); +// userDTO.setPost(postIdList); // 根据角色名称查询角色ID List roleIdList = roleCollList.stream().map(SysRole::getRoleId).collect(Collectors.toList()); userDTO.setRole(roleIdList); diff --git a/upms/upms-biz/src/main/resources/file/user.xlsx b/upms/upms-biz/src/main/resources/file/user.xlsx index ed5a6066f4fb7c0c6abb8626217758fb4da2ba12..4ac69c03f494a8a6c015ae03b8deb84a40c784e3 100644 GIT binary patch delta 3120 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 bBA`b>hxv;1ak^Kf1ppBYFY5={|Kk1wlCH#A diff --git a/upms/upms-biz/src/main/resources/file/user_bak.xlsx b/upms/upms-biz/src/main/resources/file/user_bak.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ed5a6066f4fb7c0c6abb8626217758fb4da2ba12 GIT binary patch literal 11850 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 K9t<)4`t(1bwm266 literal 0 HcmV?d00001