package edu.whut.smilepicturebackend.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import edu.whut.smilepicturebackend.exception.BusinessException; import edu.whut.smilepicturebackend.exception.ErrorCode; import edu.whut.smilepicturebackend.model.entity.User; import edu.whut.smilepicturebackend.model.enums.UserRoleEnum; import edu.whut.smilepicturebackend.service.UserService; import edu.whut.smilepicturebackend.mapper.UserMapper; import lombok.RequiredArgsConstructor; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; /** * @author 张三 * @description 针对表【user(用户)】的数据库操作Service实现 * @createDate 2025-06-05 17:43:52 */ @Service @RequiredArgsConstructor public class UserServiceImpl extends ServiceImpl implements UserService{ private final BCryptPasswordEncoder passwordEncoder; /** * 用户注册 * * @param userAccount 用户账户 * @param userPassword 用户密码 * @param checkPassword 校验密码 * @return */ @Override public long userRegister(String userAccount, String userPassword, String checkPassword) { // 1. 校验参数 if (StrUtil.hasBlank(userAccount, userPassword, checkPassword)) { throw new BusinessException(ErrorCode.PARAMS_ERROR, "参数为空"); } if (userAccount.length() < 4) { throw new BusinessException(ErrorCode.PARAMS_ERROR, "用户账号过短"); } if (userPassword.length() < 8 || checkPassword.length() < 8) { throw new BusinessException(ErrorCode.PARAMS_ERROR, "用户密码过短"); } if (!userPassword.equals(checkPassword)) { throw new BusinessException(ErrorCode.PARAMS_ERROR, "两次输入的密码不一致"); } // 2. 检查用户账号是否和数据库中已有的重复 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("userAccount", userAccount); long count = this.baseMapper.selectCount(queryWrapper); if (count > 0) { throw new BusinessException(ErrorCode.PARAMS_ERROR, "账号重复"); } // 3. 密码一定要加密 String encryptPassword = getEncryptPassword(userPassword); // 4. 插入数据到数据库中 User user = new User(); user.setUserAccount(userAccount); user.setUserPassword(encryptPassword); user.setUserName("无名"); user.setUserRole(UserRoleEnum.USER.getValue()); boolean saveResult = this.save(user); if (!saveResult) { throw new BusinessException(ErrorCode.SYSTEM_ERROR, "注册失败,数据库错误"); } return user.getId(); } /** * 获取加密后的密码 * * @param userPassword 用户密码 * @return 加密后的密码 */ @Override public String getEncryptPassword(String userPassword) { return passwordEncoder.encode(userPassword); // // 加盐,混淆密码 // final String SALT = "smile12306"; // return DigestUtils.md5DigestAsHex((SALT + userPassword).getBytes()); } }