UserDetailsServiceImpl.java 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package com.ruoyi.web.service;
  2. import com.ruoyi.common.constant.UserConstants;
  3. import com.ruoyi.common.core.domain.model.LoginCard;
  4. import com.ruoyi.common.enums.ErrorCodes;
  5. import com.ruoyi.common.enums.UserRegStatus;
  6. import com.ruoyi.common.exception.CustomException;
  7. import com.ruoyi.common.exception.ErrorException;
  8. import com.ruoyi.common.utils.PhoneUtils;
  9. import com.ruoyi.common.utils.SecurityUtils;
  10. import com.ruoyi.dz.domain.DzCards;
  11. import com.ruoyi.dz.domain.DzSubject;
  12. import com.ruoyi.dz.mapper.DzClassesMapper;
  13. import com.ruoyi.dz.mapper.DzSchoolMapper;
  14. import com.ruoyi.dz.mapper.DzSubjectMapper;
  15. import com.ruoyi.dz.service.IDzCardsService;
  16. import com.ruoyi.enums.CardDistributeStatus;
  17. import com.ruoyi.enums.CardTimeStatus;
  18. import com.ruoyi.framework.web.service.SysPasswordService;
  19. import com.ruoyi.framework.web.service.SysPermissionService;
  20. import org.slf4j.Logger;
  21. import org.slf4j.LoggerFactory;
  22. import org.springframework.beans.BeanUtils;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.security.core.userdetails.UserDetails;
  25. import org.springframework.security.core.userdetails.UserDetailsService;
  26. import org.springframework.security.core.userdetails.UsernameNotFoundException;
  27. import org.springframework.stereotype.Service;
  28. import com.ruoyi.common.core.domain.entity.SysUser;
  29. import com.ruoyi.common.core.domain.model.LoginUser;
  30. import com.ruoyi.common.enums.UserStatus;
  31. import com.ruoyi.common.exception.ServiceException;
  32. import com.ruoyi.common.utils.MessageUtils;
  33. import com.ruoyi.common.utils.StringUtils;
  34. import com.ruoyi.system.service.ISysUserService;
  35. import java.time.LocalDate;
  36. import java.time.ZoneId;
  37. import java.util.Date;
  38. /**
  39. * 用户验证处理
  40. *
  41. * @author ruoyi
  42. */
  43. @Service
  44. public class UserDetailsServiceImpl implements UserDetailsService
  45. {
  46. private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class);
  47. @Autowired
  48. private ISysUserService userService;
  49. @Autowired
  50. private SysPasswordService passwordService;
  51. @Autowired
  52. private SysPermissionService permissionService;
  53. @Autowired
  54. private IDzCardsService dzCardsService;
  55. @Autowired
  56. private DzSchoolMapper dzSchoolMapper;
  57. @Autowired
  58. private DzClassesMapper dzClassesMapper;
  59. @Autowired
  60. private DzSubjectMapper dzSubjectMapper;
  61. @Override
  62. public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
  63. {
  64. boolean isPhoneLogin = PhoneUtils.isPhoneNumber(username);
  65. SysUser user = isPhoneLogin ? userService.selectUserByMobile(username) : userService.selectUserByUserName(username);
  66. if (StringUtils.isNull(user))
  67. {
  68. log.info("登录用户:{} 不存在.", username);
  69. throw new ErrorException("账号不存在", ErrorCodes.UnRegister);
  70. }
  71. else if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
  72. {
  73. log.info("登录用户:{} 已被删除.", username);
  74. throw new ServiceException(MessageUtils.message("user.password.delete"));
  75. }
  76. else if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
  77. {
  78. log.info("登录用户:{} 已被关闭.", username);
  79. throw new ServiceException(MessageUtils.message("user.blocked"));
  80. }
  81. if(!isPhoneLogin) {
  82. passwordService.validate(user);
  83. }
  84. LoginCard card = new LoginCard();
  85. if(null != user.getCardId()) {
  86. DzCards dzCards = dzCardsService.selectDzCardsByCardId(user.getCardId());
  87. BeanUtils.copyProperties(dzCards, card, "password");
  88. if(null != dzCards.getSchoolId()) {
  89. card.setSchoolName(dzSchoolMapper.selectDzSchoolById(dzCards.getSchoolId()).getName());
  90. }
  91. if(null != dzCards.getClassId()) {
  92. card.setClassName(dzClassesMapper.selectDzClassesByClassId(dzCards.getClassId()).getName());
  93. }
  94. Date nowDate = Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());
  95. if (UserRegStatus.Student.equals(user.getRegStatus()) && (CardDistributeStatus.Close.getVal().equals(dzCards.getDistributeStatus())
  96. || !CardTimeStatus.Valid.getVal().equals(dzCards.getTimeStatus())
  97. || (null != dzCards.getOutDate() && dzCards.getOutDate().getTime() < nowDate.getTime()))) {
  98. // 过期后处理降级
  99. SysUser upUser = new SysUser();
  100. upUser.setUserId(user.getUserId());
  101. upUser.setRegStatus(UserRegStatus.User);
  102. user.setRegStatus(UserRegStatus.User);
  103. userService.updateUserProfile(upUser);
  104. }
  105. }
  106. if(null != user.getExamMajor()) {
  107. DzSubject dzSubject = dzSubjectMapper.selectDzSubjectBySubjectId(user.getExamMajor().longValue());
  108. user.setExamMajorName(null != dzSubject ? dzSubject.getSubjectName() : "");
  109. }
  110. LoginUser loginUser = createLoginUser(user, card);
  111. if(isPhoneLogin) {
  112. user.setPassword(UserConstants.LOGIN_SMS_PASS);
  113. loginUser.setLoginUserName(user.getPhonenumber());
  114. }
  115. return loginUser;
  116. }
  117. public LoginUser createLoginUser(SysUser user, LoginCard card)
  118. {
  119. return new LoginUser(user.getUserId(), user.getDeptId(), user, card, permissionService.getMenuPermission(user));
  120. }
  121. }