AdminUsersServiceImpl.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package com.smcic.api.admin.service.impl;
  2. import cn.hutool.crypto.SecureUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.smcic.api.admin.dto.LoginDto;
  7. import com.smcic.api.admin.dto.NamePageDTO;
  8. import com.smcic.api.admin.dto.TokenDto;
  9. import com.smcic.api.admin.entity.AdminUserRole;
  10. import com.smcic.api.admin.entity.AdminUsers;
  11. import com.smcic.api.admin.mapper.AdminUsersMapper;
  12. import com.smcic.api.admin.service.IAdminUsersService;
  13. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  14. import com.smcic.core.advice.APIException;
  15. import com.smcic.core.auth.AESUtil;
  16. import com.smcic.core.auth.HttpContextUtil;
  17. import org.apache.http.util.TextUtils;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.transaction.annotation.Transactional;
  20. import javax.annotation.Resource;
  21. import java.time.LocalDateTime;
  22. import java.util.Optional;
  23. import java.util.stream.Collectors;
  24. /**
  25. * <p>
  26. * 系统管理员用户 服务实现类
  27. * </p>
  28. *
  29. * @author syj
  30. * @since 2023-11-16
  31. */
  32. @Service
  33. public class AdminUsersServiceImpl extends ServiceImpl<AdminUsersMapper, AdminUsers> implements IAdminUsersService {
  34. @Resource
  35. private AdminUserRoleServiceImpl adminUserRoleService;
  36. public Page<AdminUsers> usersPage(NamePageDTO namePageDTO) {
  37. LambdaQueryWrapper<AdminUsers> lambdaQueryWrapper = Wrappers.lambdaQuery();
  38. Page<AdminUsers> adminUsers = baseMapper.selectPage(new Page<>(namePageDTO.getPage(), namePageDTO.getPageSize()),
  39. lambdaQueryWrapper.like(!TextUtils.isEmpty(namePageDTO.getName()), AdminUsers::getName, namePageDTO.getName())
  40. .eq(!TextUtils.isEmpty(namePageDTO.getPhone()), AdminUsers::getPhone, namePageDTO.getPhone())
  41. );
  42. if (adminUsers.getTotal() > 0){
  43. adminUsers.setRecords(adminUsers.getRecords().stream().peek(user -> {
  44. user.setAdminRoles(adminUserRoleService.getRoles(user.getUserId()));
  45. }).collect(Collectors.toList()));
  46. }
  47. return adminUsers;
  48. }
  49. @Transactional
  50. public void create(AdminUsers adminUsers) {
  51. if(lambdaQuery().eq(AdminUsers::getPhone, adminUsers.getPhone()).count() > 0){
  52. throw new APIException("手机号已存在");
  53. }
  54. if(lambdaQuery().eq(AdminUsers::getName, adminUsers.getName()).count() > 0){
  55. throw new APIException("用户名已存在");
  56. }
  57. adminUsers.setPassword(SecureUtil.sha256(adminUsers.getPassword()));
  58. adminUsers.setRegisterTime(LocalDateTime.now());
  59. save(adminUsers);
  60. adminUserRoleService.saveBatch(adminUsers.getAdminRoles().stream().map(adminRole -> {
  61. AdminUserRole adminUserRole = new AdminUserRole();
  62. adminUserRole.setRoleId(adminRole.getRoleId());
  63. adminUserRole.setUserId(adminUsers.getUserId());
  64. return adminUserRole;
  65. }).collect(Collectors.toList()));
  66. }
  67. @Transactional
  68. public void modify(AdminUsers adminUsers) {
  69. AdminUsers user = getById(adminUsers.getUserId());
  70. if (null == user){
  71. throw new APIException("用户不存在");
  72. }
  73. if (!adminUsers.getAdminRoles().isEmpty()){
  74. LambdaQueryWrapper<AdminUserRole> lambdaQueryWrapper = Wrappers.lambdaQuery();
  75. adminUserRoleService.remove(lambdaQueryWrapper.eq(AdminUserRole::getUserId, adminUsers.getUserId()));
  76. adminUserRoleService.saveBatch(adminUsers.getAdminRoles().stream().map(adminRole -> {
  77. AdminUserRole adminUserRole = new AdminUserRole();
  78. adminUserRole.setRoleId(adminRole.getRoleId());
  79. adminUserRole.setUserId(adminUsers.getUserId());
  80. return adminUserRole;
  81. }).collect(Collectors.toList()));
  82. }
  83. if(!TextUtils.isEmpty(adminUsers.getPassword())){
  84. adminUsers.setPassword(user.getPassword());
  85. }
  86. updateById(adminUsers);
  87. }
  88. @Transactional
  89. public void delete(Long userId) {
  90. adminUserRoleService.remove(adminUserRoleService.lambdaQuery().eq(AdminUserRole::getUserId, userId));
  91. removeById(userId);
  92. }
  93. public TokenDto login(LoginDto dto) {
  94. Optional<AdminUsers> adminUsers = lambdaQuery().and(wq -> wq.eq(AdminUsers::getName, dto.getLoginName()).or().eq(AdminUsers::getPhone, dto.getLoginName()))
  95. .eq(AdminUsers::getPassword, dto.getLoginPassword())
  96. .oneOpt();
  97. if (!adminUsers.isPresent()) {
  98. throw new APIException("用户不存在");
  99. }
  100. Long userId = adminUsers.get().getUserId();
  101. String token = AESUtil.encryptHex(userId.toString());
  102. TokenDto tokenDto = new TokenDto();
  103. tokenDto.setToken(token);
  104. return tokenDto;
  105. }
  106. public void logout(){
  107. Optional<String> token = HttpContextUtil.getToken();
  108. if (!token.isPresent()) {
  109. throw new APIException("获取token异常");
  110. }
  111. String userId = AESUtil.decryptStr(token.get());
  112. AdminUsers user = this.lambdaQuery().eq(AdminUsers::getUserId, Long.parseLong(userId)).one();
  113. if (user == null) {
  114. throw new RuntimeException("用户不存在");
  115. }
  116. user.setLogoutTime(LocalDateTime.now());
  117. updateById(user);
  118. }
  119. }