package com.yunan.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.yunan.dto.RegisterDTO; import com.yunan.dto.Users; import com.yunan.mapper.AuthMapper; import com.yunan.response.ErrorResponse; import com.yunan.service.AuthService; import com.yunan.util.RedisUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; import java.util.Random; @Service public class AuthServiceImpl implements AuthService { @Resource private AuthMapper authMapper; @Autowired RedisUtils redisUtils; @Override public ResponseEntity register(RegisterDTO registerDTO) { //获取正确的验证码 Object rightCode = redisUtils.hGet("rightCode", registerDTO.getEmail()); //处理registerDTO对数据为空的逻辑 // 验证验证码的正确性 if(registerDTO.getCode().equals(rightCode)){ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Users::getEmail, registerDTO.getEmail()); if(authMapper.selectOne(queryWrapper) != null) { return ResponseEntity .status(HttpStatus.CONFLICT) .body(new ErrorResponse("用户已存在!!!")); } //为用户创建默认用户名 String userName = createUserName(); Users user = new Users(); //设置账号创建时间 Date currentDate = new Date(); user.setCreatedTime(currentDate); user.setUsername(userName); user.setPassword(registerDTO.getPassword()); user.setEmail(registerDTO.getEmail()); //状态设置 " 1 " 正常账号 user.setState(1); boolean isSaved = authMapper.insert(user) > 0; 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("验证码不正确或已过期")); // 返回自定义的错误消息 } } //随机生成用户名算法 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; } }