2024-11-05 17:10:26 +08:00
|
|
|
package com.yunan.service.impl;
|
|
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
import com.yunan.dto.RegisterDTO;
|
2024-11-09 16:49:13 +08:00
|
|
|
import com.yunan.dto.Users;
|
2024-11-05 17:10:26 +08:00
|
|
|
import com.yunan.mapper.AuthMapper;
|
2024-11-06 18:47:00 +08:00
|
|
|
import com.yunan.response.ErrorResponse;
|
2024-11-05 17:10:26 +08:00
|
|
|
import com.yunan.service.AuthService;
|
2024-11-09 16:49:13 +08:00
|
|
|
import com.yunan.util.RedisUtils;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
2024-11-06 18:47:00 +08:00
|
|
|
import org.springframework.http.HttpStatus;
|
|
|
|
import org.springframework.http.ResponseEntity;
|
2024-11-05 17:10:26 +08:00
|
|
|
import org.springframework.stereotype.Service;
|
2024-11-06 18:47:00 +08:00
|
|
|
|
2024-11-05 17:10:26 +08:00
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
2024-11-10 21:09:44 +08:00
|
|
|
import java.util.Date;
|
|
|
|
import java.util.Random;
|
2024-11-05 17:10:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
public class AuthServiceImpl implements AuthService {
|
|
|
|
@Resource
|
|
|
|
private AuthMapper authMapper;
|
2024-11-09 16:49:13 +08:00
|
|
|
@Autowired
|
|
|
|
RedisUtils redisUtils;
|
2024-11-05 17:10:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
@Override
|
2024-11-09 16:49:13 +08:00
|
|
|
public ResponseEntity<Object> register(RegisterDTO registerDTO) {
|
|
|
|
//获取正确的验证码
|
|
|
|
Object rightCode = redisUtils.hGet("rightCode", registerDTO.getEmail());
|
2024-11-06 18:47:00 +08:00
|
|
|
//处理registerDTO对数据为空的逻辑
|
|
|
|
// 验证验证码的正确性
|
2024-11-09 16:49:13 +08:00
|
|
|
if(registerDTO.getCode().equals(rightCode)){
|
|
|
|
LambdaQueryWrapper<Users> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
queryWrapper.eq(Users::getEmail, registerDTO.getEmail());
|
2024-11-06 18:47:00 +08:00
|
|
|
if(authMapper.selectOne(queryWrapper) != null) {
|
|
|
|
return ResponseEntity
|
|
|
|
.status(HttpStatus.CONFLICT)
|
2024-11-10 21:09:44 +08:00
|
|
|
.body(new ErrorResponse("用户已存在!!!"));
|
2024-11-05 17:10:26 +08:00
|
|
|
}
|
2024-11-10 21:09:44 +08:00
|
|
|
//为用户创建默认用户名
|
|
|
|
String userName = createUserName();
|
2024-11-09 16:49:13 +08:00
|
|
|
Users user = new Users();
|
2024-11-10 21:09:44 +08:00
|
|
|
//设置账号创建时间
|
|
|
|
Date currentDate = new Date();
|
|
|
|
user.setCreatedTime(currentDate);
|
|
|
|
user.setUsername(userName);
|
2024-11-06 18:47:00 +08:00
|
|
|
user.setPassword(registerDTO.getPassword());
|
2024-11-09 16:49:13 +08:00
|
|
|
user.setEmail(registerDTO.getEmail());
|
2024-11-10 21:09:44 +08:00
|
|
|
//状态设置 " 1 " 正常账号
|
|
|
|
user.setState(1);
|
|
|
|
boolean isSaved = authMapper.insert(user) > 0;
|
2024-11-06 18:47:00 +08:00
|
|
|
if (isSaved) {
|
|
|
|
return ResponseEntity
|
|
|
|
.status(HttpStatus.OK)
|
|
|
|
.body("注册成功!");
|
|
|
|
} else {
|
|
|
|
return ResponseEntity
|
|
|
|
.status(HttpStatus.INTERNAL_SERVER_ERROR)
|
|
|
|
.body("数据库存储失败,请稍后重试");
|
|
|
|
}
|
|
|
|
} else{
|
|
|
|
// 如果验证码为空或者与正确的验证码不匹配,返回错误信息
|
|
|
|
return ResponseEntity
|
|
|
|
.status(HttpStatus.BAD_REQUEST) // 设置 HTTP 状态码为 400
|
|
|
|
.body(new ErrorResponse("验证码不正确或已过期")); // 返回自定义的错误消息
|
2024-11-05 17:10:26 +08:00
|
|
|
}
|
2024-11-06 18:47:00 +08:00
|
|
|
|
2024-11-05 17:10:26 +08:00
|
|
|
}
|
2024-11-10 21:09:44 +08:00
|
|
|
//随机生成用户名算法
|
|
|
|
public String createUserName() {
|
|
|
|
// 字符集,包括小写字母和数字
|
|
|
|
String chars = "abcdefghijklmnopqrstuvwxyz0123456789";
|
|
|
|
StringBuilder randomPart = new StringBuilder();
|
|
|
|
|
|
|
|
// 随机生成6位字符
|
|
|
|
Random random = new Random();
|
|
|
|
for (int i = 0; i < 6; i++) {
|
|
|
|
randomPart.append(chars.charAt(random.nextInt(chars.length())));
|
|
|
|
}
|
|
|
|
|
|
|
|
// 获取当前时间戳(秒级)
|
|
|
|
long timestamp = System.currentTimeMillis() / 1000;
|
|
|
|
|
|
|
|
// 拼接生成用户名,例如 "user_xxx123_1638326400"
|
|
|
|
return "user_" + randomPart.toString() + "_" + timestamp;
|
|
|
|
}
|
2024-11-05 17:10:26 +08:00
|
|
|
|
|
|
|
}
|