| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package com.ruoyi.web.service;
- import com.ruoyi.common.constant.UserConstants;
- import com.ruoyi.common.core.domain.model.LoginCard;
- import com.ruoyi.common.enums.ErrorCodes;
- import com.ruoyi.common.enums.UserRegStatus;
- import com.ruoyi.common.exception.CustomException;
- import com.ruoyi.common.exception.ErrorException;
- import com.ruoyi.common.utils.PhoneUtils;
- import com.ruoyi.common.utils.SecurityUtils;
- import com.ruoyi.dz.domain.DzCards;
- import com.ruoyi.dz.domain.DzSubject;
- import com.ruoyi.dz.mapper.DzClassesMapper;
- import com.ruoyi.dz.mapper.DzSchoolMapper;
- import com.ruoyi.dz.mapper.DzSubjectMapper;
- import com.ruoyi.dz.service.IDzCardsService;
- import com.ruoyi.enums.CardDistributeStatus;
- import com.ruoyi.enums.CardTimeStatus;
- import com.ruoyi.framework.web.service.SysPasswordService;
- import com.ruoyi.framework.web.service.SysPermissionService;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.security.core.userdetails.UserDetails;
- import org.springframework.security.core.userdetails.UserDetailsService;
- import org.springframework.security.core.userdetails.UsernameNotFoundException;
- import org.springframework.stereotype.Service;
- import com.ruoyi.common.core.domain.entity.SysUser;
- import com.ruoyi.common.core.domain.model.LoginUser;
- import com.ruoyi.common.enums.UserStatus;
- import com.ruoyi.common.exception.ServiceException;
- import com.ruoyi.common.utils.MessageUtils;
- import com.ruoyi.common.utils.StringUtils;
- import com.ruoyi.system.service.ISysUserService;
- import java.time.LocalDate;
- import java.time.ZoneId;
- import java.util.Date;
- /**
- * 用户验证处理
- *
- * @author ruoyi
- */
- @Service
- public class UserDetailsServiceImpl implements UserDetailsService
- {
- private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class);
- @Autowired
- private ISysUserService userService;
- @Autowired
- private SysPasswordService passwordService;
- @Autowired
- private SysPermissionService permissionService;
- @Autowired
- private IDzCardsService dzCardsService;
- @Autowired
- private DzSchoolMapper dzSchoolMapper;
- @Autowired
- private DzClassesMapper dzClassesMapper;
- @Autowired
- private DzSubjectMapper dzSubjectMapper;
- @Override
- public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
- {
- boolean isPhoneLogin = PhoneUtils.isPhoneNumber(username);
- SysUser user = isPhoneLogin ? userService.selectUserByMobile(username) : userService.selectUserByUserName(username);
- if (StringUtils.isNull(user))
- {
- log.info("登录用户:{} 不存在.", username);
- throw new ErrorException("账号不存在", ErrorCodes.UnRegister);
- }
- else if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
- {
- log.info("登录用户:{} 已被删除.", username);
- throw new ServiceException(MessageUtils.message("user.password.delete"));
- }
- else if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
- {
- log.info("登录用户:{} 已被关闭.", username);
- throw new ServiceException(MessageUtils.message("user.blocked"));
- }
- if(!isPhoneLogin) {
- passwordService.validate(user);
- }
- LoginCard card = new LoginCard();
- if(null != user.getCardId()) {
- DzCards dzCards = dzCardsService.selectDzCardsByCardId(user.getCardId());
- BeanUtils.copyProperties(dzCards, card, "password");
- if(null != dzCards.getSchoolId()) {
- card.setSchoolName(dzSchoolMapper.selectDzSchoolById(dzCards.getSchoolId()).getName());
- }
- if(null != dzCards.getClassId()) {
- card.setClassName(dzClassesMapper.selectDzClassesByClassId(dzCards.getClassId()).getName());
- }
- Date nowDate = Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());
- if (UserRegStatus.Student.equals(user.getRegStatus()) && (CardDistributeStatus.Close.getVal().equals(dzCards.getDistributeStatus())
- || !CardTimeStatus.Valid.getVal().equals(dzCards.getTimeStatus())
- || (null != dzCards.getOutDate() && dzCards.getOutDate().getTime() < nowDate.getTime()))) {
- // 过期后处理降级
- SysUser upUser = new SysUser();
- upUser.setUserId(user.getUserId());
- upUser.setRegStatus(UserRegStatus.User);
- user.setRegStatus(UserRegStatus.User);
- userService.updateUserProfile(upUser);
- }
- }
- if(null != user.getExamMajor()) {
- DzSubject dzSubject = dzSubjectMapper.selectDzSubjectBySubjectId(user.getExamMajor().longValue());
- user.setExamMajorName(null != dzSubject ? dzSubject.getSubjectName() : "");
- }
- LoginUser loginUser = createLoginUser(user, card);
- if(isPhoneLogin) {
- user.setPassword(UserConstants.LOGIN_SMS_PASS);
- loginUser.setLoginUserName(user.getPhonenumber());
- }
- return loginUser;
- }
- public LoginUser createLoginUser(SysUser user, LoginCard card)
- {
- return new LoginUser(user.getUserId(), user.getDeptId(), user, card, permissionService.getMenuPermission(user));
- }
- }
|