AdminServiceImpl.java 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package nju.seec.helper.service.impl;
  2. import nju.seec.helper.aspect.auth.LoginUser;
  3. import nju.seec.helper.dao.AdminDAO;
  4. import nju.seec.helper.dao.UserDAO;
  5. import nju.seec.helper.entity.User;
  6. import nju.seec.helper.enums.ExceptionType;
  7. import nju.seec.helper.enums.UserState;
  8. import nju.seec.helper.enums.UserType;
  9. import nju.seec.helper.exception.HelperException;
  10. import nju.seec.helper.service.AdminService;
  11. import nju.seec.helper.util.EncryptUtils;
  12. import nju.seec.helper.util.StringUtils;
  13. import nju.seec.helper.vo.AdminVO;
  14. import nju.seec.helper.vo.UserVO;
  15. import org.springframework.data.domain.Page;
  16. import org.springframework.data.domain.Pageable;
  17. import org.springframework.data.jpa.domain.Specification;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.transaction.annotation.Transactional;
  20. /**
  21. * @author cst
  22. */
  23. @Service
  24. public class AdminServiceImpl implements AdminService {
  25. private final AdminDAO adminDAO;
  26. private final UserDAO userDAO;
  27. public AdminServiceImpl(AdminDAO adminDAO, UserDAO userDAO) {
  28. this.adminDAO = adminDAO;
  29. this.userDAO = userDAO;
  30. }
  31. @Transactional(readOnly = true)
  32. @Override
  33. public AdminVO getAdminByUsernameAndPassword(String username, String password) {
  34. return adminDAO.findByUsernameAndPassword(username, EncryptUtils.encode(password))
  35. .map(AdminVO::new)
  36. .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "用户名密码错误"));
  37. }
  38. @Transactional(readOnly = true)
  39. @Override
  40. public Page<UserVO> getUsers(UserType type, UserState state, String key, Pageable pageable) {
  41. return findUsersByTypeAndStateAndKey(type, state, key, pageable).map(UserVO::new);
  42. }
  43. @Transactional(rollbackFor = Exception.class)
  44. @Override
  45. public void passUser(LoginUser admin, Long userId) {
  46. User user = userDAO.findUserById(userId);
  47. if (user.getState() != UserState.CHECKING) {
  48. throw HelperException.of(ExceptionType.FORBIDDEN, "该帐号暂时无法审核通过");
  49. }
  50. userDAO.save(user.setState(UserState.NORMAL));
  51. }
  52. @Transactional(rollbackFor = Exception.class)
  53. @Override
  54. public void lockUser(LoginUser admin, Long userId) {
  55. userDAO.save(userDAO.findUserById(userId).setState(UserState.LOCKED));
  56. }
  57. @Transactional(rollbackFor = Exception.class)
  58. @Override
  59. public void unlockUser(LoginUser admin, Long userId) {
  60. User user = userDAO.findUserById(userId);
  61. if (user.getState() != UserState.LOCKED) {
  62. throw HelperException.of(ExceptionType.FORBIDDEN, "该帐号暂时无法解封");
  63. }
  64. userDAO.save(user.setState(UserState.NORMAL));
  65. }
  66. private Page<User> findUsersByTypeAndStateAndKey(UserType userType, UserState userState, String key, Pageable pageable) {
  67. final String keyPattern = StringUtils.keyPattern(key);
  68. return userDAO.findAll(
  69. (Specification<User>) (root, query, cb) -> cb.and(
  70. cb.equal(root.get("type").as(UserType.class), userType)
  71. , cb.equal(root.get("state").as(UserState.class), userState)
  72. , cb.or(cb.like(root.get("email"), keyPattern), cb.like(root.get("phone"), keyPattern), cb.like(root.get("name"), keyPattern))
  73. )
  74. , pageable);
  75. }
  76. }