✨ RemoteUserService 增加注册端点调用

(cherry picked from commit 8709f40273e3be646009119b9deb619c2a38c311)
This commit is contained in:
冷冷 committed 2024-04-25 14:34:59 +08:00
1 parent 97e3ffc6ac
commit 6fcfb260b4
2 files changed
+506 -475

No files matched your search

@@ -19,6 +19,7 @@
package com.pig4cloud.pigx.admin.api.feign; package com.pig4cloud.pigx.admin.api.feign;
import com.pig4cloud.pigx.admin.api.dto.UserDTO;
import com.pig4cloud.pigx.admin.api.dto.UserInfo; import com.pig4cloud.pigx.admin.api.dto.UserInfo;
import com.pig4cloud.pigx.admin.api.entity.SysUser; import com.pig4cloud.pigx.admin.api.entity.SysUser;
import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
@@ -36,71 +37,88 @@ import java.util.List;
@FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.UPMS_SERVICE) @FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.UPMS_SERVICE)
public interface RemoteUserService { public interface RemoteUserService {
/** /**
* 通过用户名查询用户、角色信息 * 通过用户名查询用户、角色信息
* @param username 用户名 *
* @param from 调用标志 * @param username 用户名
* @return R * @param from 调用标志
*/ * @return R
@GetMapping("/user/info/{username}") */
R<UserInfo> info(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM) String from); @GetMapping("/user/info/{username}")
R<UserInfo> info(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM) String from);
/** /**
* 根据用户ID获取用户 * 根据用户ID获取用户
* @param userId ID *
* @return SysUser * @param userId ID
*/ * @return SysUser
@GetMapping("/user/details/{userId}") */
R<SysUser> getUserById(@PathVariable("userId") Long userId); @GetMapping("/user/details/{userId}")
R<SysUser> getUserById(@PathVariable("userId") Long userId);
/** /**
* 通过社交账号或手机号查询用户、角色信息 * 通过社交账号或手机号查询用户、角色信息
* @param inStr appid@code *
* @param from 调用标志 * @param inStr appid@code
* @return * @param from 调用标志
*/ * @return
@GetMapping("/social/info/{inStr}") */
R<UserInfo> social(@PathVariable("inStr") String inStr, @RequestHeader(SecurityConstants.FROM) String from); @GetMapping("/social/info/{inStr}")
R<UserInfo> social(@PathVariable("inStr") String inStr, @RequestHeader(SecurityConstants.FROM) String from);
/** /**
* 查询上级部门的用户信息 * 查询上级部门的用户信息
* @param username 用户名 *
* @return R * @param username 用户名
*/ * @return R
@GetMapping("/user/ancestor/{username}") */
R<List<SysUser>> ancestorUsers(@PathVariable("username") String username); @GetMapping("/user/ancestor/{username}")
R<List<SysUser>> ancestorUsers(@PathVariable("username") String username);
/** /**
* 锁定用户 * 锁定用户
* @param username 用户名 *
* @param from 调用标识 * @param username 用户名
* @return * @param from 调用标识
*/ * @return
@PutMapping("/user/lock/{username}") */
R<Boolean> lockUser(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM) String from); @PutMapping("/user/lock/{username}")
R<Boolean> lockUser(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM) String from);
/** /**
* 根据角色ID查询用户列表 * 根据角色ID查询用户列表
* @param roleIdList 角色ID列表 *
* @return 用户ID列表 * @param roleIdList 角色ID列表
*/ * @return 用户ID列表
@GetMapping("/user/getUserIdListByRoleIdList") */
R<List<Long>> getUserIdListByRoleIdList(@RequestParam("roleIdList") List<Long> roleIdList); @GetMapping("/user/getUserIdListByRoleIdList")
R<List<Long>> getUserIdListByRoleIdList(@RequestParam("roleIdList") List<Long> roleIdList);
/** /**
* 根据部门ID列表获取用户ID列表接口 * 根据部门ID列表获取用户ID列表接口
* @param deptIdList 部门ID列表 *
* @return 用户ID列表 * @param deptIdList 部门ID列表
*/ * @return 用户ID列表
@GetMapping("/user/getUserIdListByDeptIdList") */
R<List<SysUser>> getUserIdListByDeptIdList(@RequestParam("deptIdList") List<Long> deptIdList); @GetMapping("/user/getUserIdListByDeptIdList")
R<List<SysUser>> getUserIdListByDeptIdList(@RequestParam("deptIdList") List<Long> deptIdList);
/** /**
* 通过用户名查询用户列表 * 通过用户名查询用户列表
* @param userName 用户名 *
* @return 用户列表 * @param userName 用户名
*/ * @return 用户列表
@GetMapping("/user/getUserListByUserName") */
R<List<SysUser>> getUserListByUserName(@RequestParam("username") String userName); @GetMapping("/user/getUserListByUserName")
R<List<SysUser>> getUserListByUserName(@RequestParam("username") String userName);
/**
* 注册用户
*
* @param userDTO 用户信息
* @return success/false
*/
@PostMapping("/register/user")
R<Boolean> registerUser(@RequestBody UserDTO userDTO, @RequestHeader(SecurityConstants.FROM) String from);
} }
@@ -73,473 +73,486 @@ import java.util.stream.Collectors;
@AllArgsConstructor @AllArgsConstructor
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService { public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {
private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder(); private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder();
private final SysMenuService sysMenuService; private final SysMenuService sysMenuService;
private final SysRoleService sysRoleService; private final SysRoleService sysRoleService;
private final SysPostService sysPostService; private final SysPostService sysPostService;
private final SysDeptService sysDeptService; private final SysDeptService sysDeptService;
private final SysUserRoleMapper sysUserRoleMapper; private final SysUserRoleMapper sysUserRoleMapper;
private final SysUserPostMapper sysUserPostMapper; private final SysUserPostMapper sysUserPostMapper;
private final CacheManager cacheManager; private final CacheManager cacheManager;
/** /**
* 保存用户信息 * 保存用户信息
* @param userDto DTO 对象 *
* @return success/fail * @param userDto DTO 对象
*/ * @return success/fail
@Override */
@Transactional(rollbackFor = Exception.class) @Override
public Boolean saveUser(UserDTO userDto) { @Transactional(rollbackFor = Exception.class)
SysUser sysUser = new SysUser(); public Boolean saveUser(UserDTO userDto) {
BeanUtils.copyProperties(userDto, sysUser); SysUser sysUser = new SysUser();
sysUser.setLockFlag( BeanUtils.copyProperties(userDto, sysUser);
StrUtil.isBlank(userDto.getLockFlag()) ? UserStateEnum.NORMAL.getCode() :userDto.getLockFlag()); sysUser.setLockFlag(
sysUser.setCreateBy(userDto.getUsername()); StrUtil.isBlank(userDto.getLockFlag()) ? UserStateEnum.NORMAL.getCode() : userDto.getLockFlag());
sysUser.setUpdateBy(userDto.getUsername()); sysUser.setCreateBy(userDto.getUsername());
sysUser.setPassword(ENCODER.encode(userDto.getPassword())); sysUser.setUpdateBy(userDto.getUsername());
baseMapper.insert(sysUser); sysUser.setPassword(ENCODER.encode(userDto.getPassword()));
// 保存用户岗位信息 baseMapper.insert(sysUser);
Optional.ofNullable(userDto.getPost()).ifPresent(posts -> { // 保存用户岗位信息
posts.stream().map(postId -> { Optional.ofNullable(userDto.getPost()).ifPresent(posts -> {
SysUserPost userPost = new SysUserPost(); posts.stream().map(postId -> {
userPost.setUserId(sysUser.getUserId()); SysUserPost userPost = new SysUserPost();
userPost.setPostId(postId); userPost.setUserId(sysUser.getUserId());
return userPost; userPost.setPostId(postId);
}).forEach(sysUserPostMapper::insert); return userPost;
}); }).forEach(sysUserPostMapper::insert);
});
// 如果角色为空,赋默认角色 // 如果角色为空,赋默认角色
if (CollUtil.isEmpty(userDto.getRole())) { if (CollUtil.isEmpty(userDto.getRole())) {
// 获取默认角色编码 // 获取默认角色编码
String defaultRole = ParamResolver.getStr("USER_DEFAULT_ROLE"); String defaultRole = ParamResolver.getStr("USER_DEFAULT_ROLE");
// 默认角色 // 默认角色
SysRole sysRole = sysRoleService SysRole sysRole = sysRoleService
.getOne(Wrappers.<SysRole>lambdaQuery().eq(SysRole::getRoleCode, defaultRole)); .getOne(Wrappers.<SysRole>lambdaQuery().eq(SysRole::getRoleCode, defaultRole));
userDto.setRole(Collections.singletonList(sysRole.getRoleId())); userDto.setRole(Collections.singletonList(sysRole.getRoleId()));
} }
// 插入用户角色关系表 // 插入用户角色关系表
userDto.getRole().stream().map(roleId -> { userDto.getRole().stream().map(roleId -> {
SysUserRole userRole = new SysUserRole(); SysUserRole userRole = new SysUserRole();
userRole.setUserId(sysUser.getUserId()); userRole.setUserId(sysUser.getUserId());
userRole.setRoleId(roleId); userRole.setRoleId(roleId);
return userRole; return userRole;
}).forEach(sysUserRoleMapper::insert); }).forEach(sysUserRoleMapper::insert);
return Boolean.TRUE; return Boolean.TRUE;
} }
/** /**
* 通过查用户的全部信息 * 通过查用户的全部信息
* @param sysUser 用户 *
* @return * @param sysUser 用户
*/ * @return
@Override */
public UserInfo findUserInfo(SysUser sysUser) { @Override
UserInfo userInfo = new UserInfo(); public UserInfo findUserInfo(SysUser sysUser) {
userInfo.setSysUser(sysUser); UserInfo userInfo = new UserInfo();
// 设置角色列表 (ID) userInfo.setSysUser(sysUser);
List<Long> roleIds = sysRoleService.findRolesByUserId(sysUser.getUserId()) // 设置角色列表 (ID)
.stream() List<Long> roleIds = sysRoleService.findRolesByUserId(sysUser.getUserId())
.map(SysRole::getRoleId) .stream()
.collect(Collectors.toList()); .map(SysRole::getRoleId)
userInfo.setRoles(ArrayUtil.toArray(roleIds, Long.class)); .collect(Collectors.toList());
userInfo.setRoles(ArrayUtil.toArray(roleIds, Long.class));
// 设置权限列表(menu.permission) // 设置权限列表(menu.permission)
Set<String> permissions = new HashSet<>(); Set<String> permissions = new HashSet<>();
roleIds.forEach(roleId -> { roleIds.forEach(roleId -> {
List<String> permissionList = sysMenuService.findMenuByRoleId(roleId) List<String> permissionList = sysMenuService.findMenuByRoleId(roleId)
.stream() .stream()
.filter(menu -> StrUtil.isNotEmpty(menu.getPermission())) .filter(menu -> StrUtil.isNotEmpty(menu.getPermission()))
.map(SysMenu::getPermission) .map(SysMenu::getPermission)
.collect(Collectors.toList()); .collect(Collectors.toList());
permissions.addAll(permissionList); permissions.addAll(permissionList);
}); });
userInfo.setPermissions(ArrayUtil.toArray(permissions, String.class)); userInfo.setPermissions(ArrayUtil.toArray(permissions, String.class));
return userInfo; return userInfo;
} }
/** /**
* 分页查询用户信息(含有角色信息) * 分页查询用户信息(含有角色信息)
* @param page 分页对象 *
* @param userDTO 参数列表 * @param page 分页对象
* @return * @param userDTO 参数列表
*/ * @return
@Override */
public IPage getUsersWithRolePage(Page page, UserDTO userDTO) { @Override
return baseMapper.getUserVosPage(page, userDTO, DataScope.of()); public IPage getUsersWithRolePage(Page page, UserDTO userDTO) {
} return baseMapper.getUserVosPage(page, userDTO, DataScope.of());
}
/** /**
* 通过ID查询用户信息 * 通过ID查询用户信息
* @param id 用户ID *
* @return 用户信息 * @param id 用户ID
*/ * @return 用户信息
@Override */
public UserVO selectUserVoById(Long id) { @Override
return baseMapper.getUserVoById(id); public UserVO selectUserVoById(Long id) {
} return baseMapper.getUserVoById(id);
}
/** /**
* 删除用户 * 删除用户
* @param ids 用户ID 列表 *
* @return Boolean * @param ids 用户ID 列表
*/ * @return Boolean
@Override */
@Transactional(rollbackFor = Exception.class) @Override
public Boolean deleteUserByIds(Long[] ids) { @Transactional(rollbackFor = Exception.class)
// 删除 spring cache public Boolean deleteUserByIds(Long[] ids) {
List<SysUser> userList = baseMapper.selectBatchIds(CollUtil.toList(ids)); // 删除 spring cache
Cache cache = cacheManager.getCache(CacheConstants.USER_DETAILS); List<SysUser> userList = baseMapper.selectBatchIds(CollUtil.toList(ids));
for (SysUser sysUser : userList) { Cache cache = cacheManager.getCache(CacheConstants.USER_DETAILS);
cache.evict(sysUser.getUsername()); for (SysUser sysUser : userList) {
} cache.evict(sysUser.getUsername());
}
sysUserRoleMapper.delete(Wrappers.<SysUserRole>lambdaQuery().in(SysUserRole::getUserId, CollUtil.toList(ids))); sysUserRoleMapper.delete(Wrappers.<SysUserRole>lambdaQuery().in(SysUserRole::getUserId, CollUtil.toList(ids)));
this.removeBatchByIds(CollUtil.toList(ids)); this.removeBatchByIds(CollUtil.toList(ids));
return Boolean.TRUE; return Boolean.TRUE;
} }
@Override @Override
@CacheEvict(value = CacheConstants.USER_DETAILS, key = "#userDto.username") @CacheEvict(value = CacheConstants.USER_DETAILS, key = "#userDto.username")
public R<Boolean> updateUserInfo(UserDTO userDto) { public R<Boolean> updateUserInfo(UserDTO userDto) {
Long userId = SecurityUtils.getUser().getId(); Long userId = SecurityUtils.getUser().getId();
SysUser sysUser = new SysUser(); SysUser sysUser = new SysUser();
sysUser.setPhone(userDto.getPhone()); sysUser.setPhone(userDto.getPhone());
sysUser.setUserId(userId); sysUser.setUserId(userId);
sysUser.setAvatar(userDto.getAvatar()); sysUser.setAvatar(userDto.getAvatar());
sysUser.setNickname(userDto.getNickname()); sysUser.setNickname(userDto.getNickname());
sysUser.setName(userDto.getName()); sysUser.setName(userDto.getName());
sysUser.setEmail(userDto.getEmail()); sysUser.setEmail(userDto.getEmail());
return R.ok(this.updateById(sysUser)); return R.ok(this.updateById(sysUser));
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Audit(name = "用户更新", spel = "@sysUserMapper.selectById(#userDto.userId)") @Audit(name = "用户更新", spel = "@sysUserMapper.selectById(#userDto.userId)")
@CacheEvict(value = CacheConstants.USER_DETAILS, key = "#userDto.username") @CacheEvict(value = CacheConstants.USER_DETAILS, key = "#userDto.username")
public Boolean updateUser(UserDTO userDto) { public Boolean updateUser(UserDTO userDto) {
// 更新用户表信息 // 更新用户表信息
SysUser sysUser = new SysUser(); SysUser sysUser = new SysUser();
BeanUtils.copyProperties(userDto, sysUser); BeanUtils.copyProperties(userDto, sysUser);
sysUser.setUpdateTime(LocalDateTime.now()); sysUser.setUpdateTime(LocalDateTime.now());
if (StrUtil.isNotBlank(userDto.getPassword())) { if (StrUtil.isNotBlank(userDto.getPassword())) {
sysUser.setPassword(ENCODER.encode(userDto.getPassword())); sysUser.setPassword(ENCODER.encode(userDto.getPassword()));
} }
this.updateById(sysUser); this.updateById(sysUser);
// 更新用户角色表 // 更新用户角色表
if (userDto.getRole() != null) { if (userDto.getRole() != null) {
sysUserRoleMapper sysUserRoleMapper
.delete(Wrappers.<SysUserRole>lambdaQuery().eq(SysUserRole::getUserId, userDto.getUserId())); .delete(Wrappers.<SysUserRole>lambdaQuery().eq(SysUserRole::getUserId, userDto.getUserId()));
userDto.getRole().stream().map(roleId -> { userDto.getRole().stream().map(roleId -> {
SysUserRole userRole = new SysUserRole(); SysUserRole userRole = new SysUserRole();
userRole.setUserId(sysUser.getUserId()); userRole.setUserId(sysUser.getUserId());
userRole.setRoleId(roleId); userRole.setRoleId(roleId);
return userRole; return userRole;
}).forEach(SysUserRole::insert); }).forEach(SysUserRole::insert);
} }
// 更新用户岗位表 // 更新用户岗位表
if (userDto.getPost() != null) { if (userDto.getPost() != null) {
sysUserPostMapper sysUserPostMapper
.delete(Wrappers.<SysUserPost>lambdaQuery().eq(SysUserPost::getUserId, userDto.getUserId())); .delete(Wrappers.<SysUserPost>lambdaQuery().eq(SysUserPost::getUserId, userDto.getUserId()));
userDto.getPost().stream().map(postId -> { userDto.getPost().stream().map(postId -> {
SysUserPost userPost = new SysUserPost(); SysUserPost userPost = new SysUserPost();
userPost.setUserId(sysUser.getUserId()); userPost.setUserId(sysUser.getUserId());
userPost.setPostId(postId); userPost.setPostId(postId);
return userPost; return userPost;
}).forEach(SysUserPost::insert); }).forEach(SysUserPost::insert);
} }
return Boolean.TRUE; return Boolean.TRUE;
} }
/** /**
* 查询上级部门的用户信息 * 查询上级部门的用户信息
* @param username 用户名 *
* @return R * @param username 用户名
*/ * @return R
@Override */
public List<SysUser> listAncestorUsers(String username) { @Override
SysUser sysUser = this.getOne(Wrappers.<SysUser>query().lambda().eq(SysUser::getUsername, username)); public List<SysUser> listAncestorUsers(String username) {
SysUser sysUser = this.getOne(Wrappers.<SysUser>query().lambda().eq(SysUser::getUsername, username));
SysDept sysDept = sysDeptService.getById(sysUser.getDeptId()); SysDept sysDept = sysDeptService.getById(sysUser.getDeptId());
if (sysDept == null) { if (sysDept == null) {
return null; return null;
} }
Long parentId = sysDept.getParentId(); Long parentId = sysDept.getParentId();
return this.list(Wrappers.<SysUser>query().lambda().eq(SysUser::getDeptId, parentId)); return this.list(Wrappers.<SysUser>query().lambda().eq(SysUser::getDeptId, parentId));
} }
/** /**
* 查询全部的用户 * 查询全部的用户
* @param userDTO 查询条件 *
* @param ids ids 用户列表 * @param userDTO 查询条件
* @return list * @param ids ids 用户列表
*/ * @return list
@Override */
public List<UserExcelVO> listUser(UserDTO userDTO, Long[] ids) { @Override
// 根据数据权限查询全部的用户信息 public List<UserExcelVO> listUser(UserDTO userDTO, Long[] ids) {
List<UserVO> voList = baseMapper.selectVoListByScope(userDTO, ids, DataScope.of()); // 根据数据权限查询全部的用户信息
// 转换成execl 对象输出 List<UserVO> voList = baseMapper.selectVoListByScope(userDTO, ids, DataScope.of());
List<UserExcelVO> userExcelVOList = voList.stream().map(userVO -> { // 转换成execl 对象输出
UserExcelVO excelVO = new UserExcelVO(); List<UserExcelVO> userExcelVOList = voList.stream().map(userVO -> {
BeanUtils.copyProperties(userVO, excelVO); UserExcelVO excelVO = new UserExcelVO();
String roleNameList = userVO.getRoleList() BeanUtils.copyProperties(userVO, excelVO);
.stream() String roleNameList = userVO.getRoleList()
.map(SysRole::getRoleName) .stream()
.collect(Collectors.joining(StrUtil.COMMA)); .map(SysRole::getRoleName)
excelVO.setRoleNameList(roleNameList); .collect(Collectors.joining(StrUtil.COMMA));
String postNameList = userVO.getPostList() excelVO.setRoleNameList(roleNameList);
.stream() String postNameList = userVO.getPostList()
.map(SysPost::getPostName) .stream()
.collect(Collectors.joining(StrUtil.COMMA)); .map(SysPost::getPostName)
excelVO.setPostNameList(postNameList); .collect(Collectors.joining(StrUtil.COMMA));
return excelVO; excelVO.setPostNameList(postNameList);
}).collect(Collectors.toList()); return excelVO;
return userExcelVOList; }).collect(Collectors.toList());
} return userExcelVOList;
}
/** /**
* excel 导入用户, 插入正确的 错误的提示行号 * excel 导入用户, 插入正确的 错误的提示行号
* @param excelVOList excel 列表数据 *
* @param bindingResult 错误数据 * @param excelVOList excel 列表数据
* @return ok fail * @param bindingResult 错误数据
*/ * @return ok fail
@Override */
public R importUser(List<UserExcelVO> excelVOList, BindingResult bindingResult) { @Override
// 通用校验获取失败的数据 public R importUser(List<UserExcelVO> excelVOList, BindingResult bindingResult) {
List<ErrorMessage> errorMessageList = (List<ErrorMessage>) bindingResult.getTarget(); // 通用校验获取失败的数据
List<SysDept> deptList = sysDeptService.list(); List<ErrorMessage> errorMessageList = (List<ErrorMessage>) bindingResult.getTarget();
List<SysRole> roleList = sysRoleService.list(); List<SysDept> deptList = sysDeptService.list();
List<SysPost> postList = sysPostService.list(); List<SysRole> roleList = sysRoleService.list();
List<SysPost> postList = sysPostService.list();
// 执行数据插入操作 组装 UserDto // 执行数据插入操作 组装 UserDto
for (UserExcelVO excel : excelVOList) { for (UserExcelVO excel : excelVOList) {
// 个性化校验逻辑 // 个性化校验逻辑
List<SysUser> userList = this.list(); List<SysUser> userList = this.list();
Set<String> errorMsg = new HashSet<>(); Set<String> errorMsg = new HashSet<>();
// 校验用户名是否存在 // 校验用户名是否存在
boolean exsitUserName = userList.stream() boolean exsitUserName = userList.stream()
.anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername())); .anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername()));
if (exsitUserName) { if (exsitUserName) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, excel.getUsername())); errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, excel.getUsername()));
} }
// 判断输入的部门名称列表是否合法 // 判断输入的部门名称列表是否合法
Optional<SysDept> deptOptional = deptList.stream() Optional<SysDept> deptOptional = deptList.stream()
.filter(dept -> excel.getDeptName().equals(dept.getName())) .filter(dept -> excel.getDeptName().equals(dept.getName()))
.findFirst(); .findFirst();
if (!deptOptional.isPresent()) { if (!deptOptional.isPresent()) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_DEPT_DEPTNAME_INEXISTENCE, excel.getDeptName())); errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_DEPT_DEPTNAME_INEXISTENCE, excel.getDeptName()));
} }
// 判断输入的角色名称列表是否合法 // 判断输入的角色名称列表是否合法
List<String> roleNameList = StrUtil.split(excel.getRoleNameList(), StrUtil.COMMA); List<String> roleNameList = StrUtil.split(excel.getRoleNameList(), StrUtil.COMMA);
List<SysRole> roleCollList = roleList.stream() List<SysRole> roleCollList = roleList.stream()
.filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name))) .filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name)))
.collect(Collectors.toList()); .collect(Collectors.toList());
if (roleCollList.size() != roleNameList.size()) { if (roleCollList.size() != roleNameList.size()) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_ROLENAME_INEXISTENCE, excel.getRoleNameList())); errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_ROLENAME_INEXISTENCE, excel.getRoleNameList()));
} }
// 判断输入的部门名称列表是否合法 // 判断输入的部门名称列表是否合法
List<String> postNameList = StrUtil.split(excel.getPostNameList(), StrUtil.COMMA); List<String> postNameList = StrUtil.split(excel.getPostNameList(), StrUtil.COMMA);
List<SysPost> postCollList = postList.stream() List<SysPost> postCollList = postList.stream()
.filter(post -> postNameList.stream().anyMatch(name -> post.getPostName().equals(name))) .filter(post -> postNameList.stream().anyMatch(name -> post.getPostName().equals(name)))
.collect(Collectors.toList()); .collect(Collectors.toList());
if (postCollList.size() != postNameList.size()) { if (postCollList.size() != postNameList.size()) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_POST_POSTNAME_INEXISTENCE, excel.getPostNameList())); errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_POST_POSTNAME_INEXISTENCE, excel.getPostNameList()));
} }
// 数据合法情况 // 数据合法情况
if (CollUtil.isEmpty(errorMsg)) { if (CollUtil.isEmpty(errorMsg)) {
insertExcelUser(excel, deptOptional, roleCollList, postCollList); insertExcelUser(excel, deptOptional, roleCollList, postCollList);
} } else {
else { // 数据不合法情况
// 数据不合法情况 errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg));
errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg)); }
}
} }
if (CollUtil.isNotEmpty(errorMessageList)) { if (CollUtil.isNotEmpty(errorMessageList)) {
return R.failed(errorMessageList); return R.failed(errorMessageList);
} }
return R.ok(null, MsgUtils.getMessage(ErrorCodes.SYS_USER_IMPORT_SUCCEED)); return R.ok(null, MsgUtils.getMessage(ErrorCodes.SYS_USER_IMPORT_SUCCEED));
} }
/** /**
* 插入excel User * 插入excel User
*/ */
private void insertExcelUser(UserExcelVO excel, Optional<SysDept> deptOptional, List<SysRole> roleCollList, private void insertExcelUser(UserExcelVO excel, Optional<SysDept> deptOptional, List<SysRole> roleCollList,
List<SysPost> postCollList) { List<SysPost> postCollList) {
UserDTO userDTO = new UserDTO(); UserDTO userDTO = new UserDTO();
userDTO.setUsername(excel.getUsername()); userDTO.setUsername(excel.getUsername());
userDTO.setPhone(excel.getPhone()); userDTO.setPhone(excel.getPhone());
userDTO.setNickname(excel.getNickname()); userDTO.setNickname(excel.getNickname());
userDTO.setName(excel.getName()); userDTO.setName(excel.getName());
userDTO.setEmail(excel.getEmail()); userDTO.setEmail(excel.getEmail());
userDTO.setLockFlag(excel.getLockFlag()); userDTO.setLockFlag(excel.getLockFlag());
// 批量导入初始密码为手机号 // 批量导入初始密码为手机号
userDTO.setPassword(userDTO.getPhone()); userDTO.setPassword(userDTO.getPhone());
// 根据部门名称查询部门ID // 根据部门名称查询部门ID
userDTO.setDeptId(deptOptional.get().getDeptId()); userDTO.setDeptId(deptOptional.get().getDeptId());
// 插入岗位名称 // 插入岗位名称
List<Long> postIdList = postCollList.stream().map(SysPost::getPostId).collect(Collectors.toList()); List<Long> postIdList = postCollList.stream().map(SysPost::getPostId).collect(Collectors.toList());
userDTO.setPost(postIdList); userDTO.setPost(postIdList);
// 根据角色名称查询角色ID // 根据角色名称查询角色ID
List<Long> roleIdList = roleCollList.stream().map(SysRole::getRoleId).collect(Collectors.toList()); List<Long> roleIdList = roleCollList.stream().map(SysRole::getRoleId).collect(Collectors.toList());
userDTO.setRole(roleIdList); userDTO.setRole(roleIdList);
// 插入用户 // 插入用户
this.saveUser(userDTO); this.saveUser(userDTO);
} }
/** /**
* 注册用户 赋予用户默认角色 * 注册用户 赋予用户默认角色
* @param userDto 用户信息 *
* @return success/false * @param userDto 用户信息
*/ * @return success/false
@Override */
@Transactional(rollbackFor = Exception.class) @Override
public R<Boolean> registerUser(UserDTO userDto) { @Transactional(rollbackFor = Exception.class)
// 判断用户名是否存在 public R<Boolean> registerUser(UserDTO userDto) {
SysUser sysUser = this.getOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, userDto.getUsername())); // 判断用户名是否存在
if (sysUser != null) { boolean usernameExists = this.exists(Wrappers.<SysUser>lambdaQuery()
String message = MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, userDto.getUsername()); .eq(SysUser::getUsername, userDto.getUsername()));
return R.failed(message); if (usernameExists) {
} String message = MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, userDto.getUsername());
return R.ok(saveUser(userDto)); return R.failed(message);
} }
/** // 判断手机号是否存在
* 锁定用户 boolean phoneExists = this.exists(Wrappers.<SysUser>lambdaQuery()
* @param username 用户名 .eq(SysUser::getPhone, userDto.getPhone()));
* @return if (phoneExists) {
*/ String message = MsgUtils.getMessage(ErrorCodes.SYS_USER_PHONE_EXISTING, userDto.getPhone());
@Override return R.failed(message);
@CacheEvict(value = CacheConstants.USER_DETAILS, key = "#username") }
public R<Boolean> lockUser(String username) { return R.ok(saveUser(userDto));
SysUser sysUser = baseMapper.selectOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, username)); }
if (Objects.nonNull(sysUser)) { /**
sysUser.setLockFlag(UserStateEnum.LOCK.getCode()); * 锁定用户
baseMapper.updateById(sysUser); *
} * @param username 用户名
return R.ok(); * @return
} */
@Override
@CacheEvict(value = CacheConstants.USER_DETAILS, key = "#username")
public R<Boolean> lockUser(String username) {
SysUser sysUser = baseMapper.selectOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, username));
@Override if (Objects.nonNull(sysUser)) {
@CacheEvict(value = CacheConstants.USER_DETAILS, key = "#userDto.username") sysUser.setLockFlag(UserStateEnum.LOCK.getCode());
public R changePassword(UserDTO userDto) { baseMapper.updateById(sysUser);
SysUser user = baseMapper.selectById(SecurityUtils.getUser().getId()); }
if (StrUtil.isEmpty(userDto.getPassword())) { return R.ok();
return R.failed("原密码不能为空"); }
}
if (!ENCODER.matches(userDto.getPassword(), user.getPassword())) { @Override
log.info("原密码错误,修改个人信息失败:{}", userDto.getUsername()); @CacheEvict(value = CacheConstants.USER_DETAILS, key = "#userDto.username")
return R.failed(MsgUtils.getMessage(ErrorCodes.SYS_USER_UPDATE_PASSWORDERROR)); public R changePassword(UserDTO userDto) {
} SysUser user = baseMapper.selectById(SecurityUtils.getUser().getId());
if (StrUtil.isEmpty(userDto.getPassword())) {
return R.failed("原密码不能为空");
}
if (StrUtil.isEmpty(userDto.getNewpassword1())) { if (!ENCODER.matches(userDto.getPassword(), user.getPassword())) {
return R.failed("新密码不能为空"); log.info("原密码错误,修改个人信息失败:{}", userDto.getUsername());
} return R.failed(MsgUtils.getMessage(ErrorCodes.SYS_USER_UPDATE_PASSWORDERROR));
String password = ENCODER.encode(userDto.getNewpassword1()); }
this.update(Wrappers.<SysUser>lambdaUpdate() if (StrUtil.isEmpty(userDto.getNewpassword1())) {
.set(SysUser::getPassword, password) return R.failed("新密码不能为空");
.eq(SysUser::getUserId, user.getUserId())); }
return R.ok(); String password = ENCODER.encode(userDto.getNewpassword1());
}
@Override this.update(Wrappers.<SysUser>lambdaUpdate()
public R unbinding(String type) { .set(SysUser::getPassword, password)
PigxUser user = SecurityUtils.getUser(); .eq(SysUser::getUserId, user.getUserId()));
LambdaUpdateWrapper<SysUser> wrapper = null; return R.ok();
if (type.equals("wechat")) { }
wrapper = Wrappers.<SysUser>lambdaUpdate()
.set(SysUser::getWxOpenid, null)
.eq(SysUser::getUserId, user.getId());
}
else if (type.equals("gitee")) {
wrapper = Wrappers.<SysUser>lambdaUpdate()
.set(SysUser::getGiteeLogin, null)
.eq(SysUser::getUserId, user.getId());
}
else if (type.equals("osc")) {
wrapper = Wrappers.<SysUser>lambdaUpdate()
.set(SysUser::getOscId, null)
.eq(SysUser::getUserId, user.getId());
}
else if (type.equals("tencent")) {
wrapper = Wrappers.<SysUser>lambdaUpdate()
.set(SysUser::getQqOpenid, null)
.eq(SysUser::getUserId, user.getId());
}
else if (type.equals("cp")) {
wrapper = Wrappers.<SysUser>lambdaUpdate()
.set(SysUser::getWxCpUserid, null)
.eq(SysUser::getUserId, user.getId());
}
else if (type.equals("dingding")) {
wrapper = Wrappers.<SysUser>lambdaUpdate()
.set(SysUser::getWxDingUserid, null)
.eq(SysUser::getUserId, user.getId());
}
if (wrapper == null) {
return R.failed("解绑账号类型不存在");
}
this.update(wrapper);
return R.ok();
}
@Override @Override
public R checkPassword(String password) { public R unbinding(String type) {
String username = SecurityUtils.getUser().getUsername(); PigxUser user = SecurityUtils.getUser();
SysUser condition = new SysUser(); LambdaUpdateWrapper<SysUser> wrapper = null;
condition.setUsername(username); if (type.equals("wechat")) {
SysUser sysUser = this.getOne(new QueryWrapper<>(condition)); wrapper = Wrappers.<SysUser>lambdaUpdate()
.set(SysUser::getWxOpenid, null)
.eq(SysUser::getUserId, user.getId());
} else if (type.equals("gitee")) {
wrapper = Wrappers.<SysUser>lambdaUpdate()
.set(SysUser::getGiteeLogin, null)
.eq(SysUser::getUserId, user.getId());
} else if (type.equals("osc")) {
wrapper = Wrappers.<SysUser>lambdaUpdate()
.set(SysUser::getOscId, null)
.eq(SysUser::getUserId, user.getId());
} else if (type.equals("tencent")) {
wrapper = Wrappers.<SysUser>lambdaUpdate()
.set(SysUser::getQqOpenid, null)
.eq(SysUser::getUserId, user.getId());
} else if (type.equals("cp")) {
wrapper = Wrappers.<SysUser>lambdaUpdate()
.set(SysUser::getWxCpUserid, null)
.eq(SysUser::getUserId, user.getId());
} else if (type.equals("dingding")) {
wrapper = Wrappers.<SysUser>lambdaUpdate()
.set(SysUser::getWxDingUserid, null)
.eq(SysUser::getUserId, user.getId());
}
if (wrapper == null) {
return R.failed("解绑账号类型不存在");
}
this.update(wrapper);
return R.ok();
}
if (!ENCODER.matches(password, sysUser.getPassword())) { @Override
log.info("原密码错误"); public R checkPassword(String password) {
return R.failed("密码输入错误"); String username = SecurityUtils.getUser().getUsername();
} SysUser condition = new SysUser();
else { condition.setUsername(username);
return R.ok(); SysUser sysUser = this.getOne(new QueryWrapper<>(condition));
}
}
@Override if (!ENCODER.matches(password, sysUser.getPassword())) {
public List<Long> listUserIdByRoleIds(List<Long> roleIdList) { log.info("原密码错误");
return sysUserRoleMapper.selectList(Wrappers.<SysUserRole>lambdaQuery().in(SysUserRole::getRoleId, roleIdList)) return R.failed("密码输入错误");
.stream() } else {
.map(SysUserRole::getUserId) return R.ok();
.collect(Collectors.toList()); }
} }
/** @Override
* 根据部门ID列表获取用户ID列表接口 public List<Long> listUserIdByRoleIds(List<Long> roleIdList) {
* @param deptIdList 部门ID列表 return sysUserRoleMapper.selectList(Wrappers.<SysUserRole>lambdaQuery().in(SysUserRole::getRoleId, roleIdList))
* @return List<Long> 返回结果对象,包含根据部门ID列表获取到的用户ID列表信息 .stream()
*/ .map(SysUserRole::getUserId)
@Override .collect(Collectors.toList());
public List<SysUser> listUserIdByDeptIds(List<Long> deptIdList) { }
return baseMapper.selectList(Wrappers.<SysUser>lambdaQuery().in(SysUser::getDeptId, deptIdList));
} /**
* 根据部门ID列表获取用户ID列表接口
*
* @param deptIdList 部门ID列表
* @return List<Long> 返回结果对象,包含根据部门ID列表获取到的用户ID列表信息
*/
@Override
public List<SysUser> listUserIdByDeptIds(List<Long> deptIdList) {
return baseMapper.selectList(Wrappers.<SysUser>lambdaQuery().in(SysUser::getDeptId, deptIdList));
}
} }