package com.dsh.upms.service.impl; import cn.mb.cloud.common.core.exception.BusinessException; import cn.mb.cloud.common.data.base.impl.BaseServiceImpl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dsh.upms.entity.SysUser; import com.dsh.upms.mapper.SysRoleMapper; import com.dsh.upms.mapper.SysUserMapper; import com.dsh.upms.model.bo.UserDetailBo; import com.dsh.upms.model.vo.LoginUserVo; import com.dsh.upms.service.SysUserService; import com.dsh.utils.RequestIpUtil; import com.dsh.utils.login.LoginHelper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.util.DigestUtils; import org.springframework.web.bind.annotation.RequestParam; import java.util.Date; /** * 用户表 * * @author xiao * @date 2020-12-24 20:07:54 */ @Slf4j @Service public class SysUserServiceImpl extends BaseServiceImpl implements SysUserService { @Autowired private SysRoleMapper roleMapper; @Override public LoginUserVo login(@RequestParam("username") String username, @RequestParam("password") String password) throws BusinessException { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda() .eq(SysUser::getUsername, username) .eq(SysUser::getDelFlag, 0); final SysUser sysUser = baseMapper.selectOne(queryWrapper); PasswordEncoder encoder = new BCryptPasswordEncoder(); if (sysUser == null) { throw new BusinessException("当前账户不存在,请查证后再次登录!"); } if (sysUser.getLockFlag().equals("9")) { throw new BusinessException("当前账户已被锁定,请联系管理员"); } //更新最后登录时间和最后登录IP sysUser.setLastLoginDate(new Date()); sysUser.setLastLoginIp(RequestIpUtil.getIPAddress()); this.updateById(sysUser); if (!DigestUtils.md5DigestAsHex(password.getBytes()).equals(sysUser.getPassword())) { throw new BusinessException("账户或密码错误,请重新输入"); } UserDetailBo userDetailBo = LoginHelper.convert(userDetailBo1 -> { userDetailBo1 .setUsername(sysUser.getUsername()) .setName(sysUser.getName()) .setLockFlag(sysUser.getLockFlag()) .setId(sysUser.getId()) .setPassword(password); return userDetailBo1; }, UserDetailBo.class); LoginUserVo loginUserVo = LoginHelper.addUser(userDetailBo, LoginHelper.tokenGenerate(), 86400000L); return loginUserVo; } }