package com.atguigu.service.impl;
import com.alibaba.druid.util.StringUtils;
import com.atguigu.utlis.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.atguigu.pojo.User;
import com.atguigu.service.UserService;
import com.atguigu.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
* @author 35251
* @description 针对表【news_user】的数据库操作Service实现
* @createDate 2024-02-21 16:05:50
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>
implements UserService{
@Autowired
private UserMapper userMapper;
@Autowired
private JwtHelper jwtHelper;
/**
* 登录业务
* 1.根据账号,查询用户对象 - LoginUser
* 2.如果账号为空 , 查询为失败,账号错误!!!501
* 3.对比,密码,失败返回503的错误
* 4.根据用户id生成一个token,token->result 返回
*/
@Override
public Result login(User user) {
//根据账号查询数据
LambdaQueryWrapper<User> lambdaQueryWrapper=new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getUsername,user.getUsername());
User loginUser = userMapper.selectOne(lambdaQueryWrapper);
if (loginUser == null) {
return Result.build(null,ResultCodeEnum.USERNAME_ERROR);
}
//对比密码
if (!StringUtils.isEmpty(user.getUserPwd())
&& MD5Util.encrypt(user.getUserPwd()).equals(loginUser.getUserPwd())){
//登录成功
//根据用户 id生成 token
String token = jwtHelper.createToken(Long.valueOf((loginUser.getUid())));
//将token封装到result返回
Map data=new HashMap();
data.put("token",token);
return Result.ok(data);
}
//密码错误
return Result.build(null,ResultCodeEnum.PASSWORD_ERROR);
}
/**
* 根据token获取用户数据
* 1. token是否在有有效性
* 2.根据token解析userid
* 3.根据用户id查询数据
* 4.去掉密码,封装result结果返回即可
*
* */
@Override
public Result getUserInfo(String token) {
//是否过期
boolean expiration = jwtHelper.isExpiration(token);
if (expiration) {
//失效密码,未登录看待
return Result.build(null,ResultCodeEnum.NOTLOGIN);
}
int userId = jwtHelper.getUserId(token).intValue();
User user = userMapper.selectById(userId);
user.setUserPwd("");
Map map=new HashMap();
map.put("loginUser",user);
return Result.ok(map);
}
/**
* 检查账号是否可用
* 1.检查账号进行 count查询
* 2.count == 0 可用
* 3.count >0 不可用
* */
@Override
public Result checkUserName(String username) {
LambdaQueryWrapper<User> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(User::getUsername,username);
Long count = userMapper.selectCount(queryWrapper);
//如果没有直接添加
if (count==0) {
return Result.ok(null);
}
//有账号报错505
return Result.build(null,ResultCodeEnum.USERNAME_USED);
}
/**
* 注册业务
* 1.依然检查账号是否已经被注册
* 2.密码加密处理
* 3.账号数据保存
* 4.返回结果
* */
@Override
public Result regist(User user) {
LambdaQueryWrapper<User> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(User::getUsername,user.getUsername());
Long count = userMapper.selectCount(queryWrapper);
//如果有就报错,防止同时注册的情况
if (count > 0) {
return Result.build(null,ResultCodeEnum.USERNAME_USED);
}
//如果没有注册就直接注册
user.setUserPwd(MD5Util.encrypt(user.getUserPwd()));
userMapper.insert(user);
return Result.ok(null);
}
}