| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- package com.campus.trade.service;
- import com.campus.trade.common.BusinessException;
- import com.campus.trade.common.FileUploadUtil;
- import com.campus.trade.common.StatusCode;
- import com.campus.trade.dto.ChangePasswordRequest;
- import com.campus.trade.dto.LoginRequest;
- import com.campus.trade.dto.RegisterRequest;
- import com.campus.trade.entity.User;
- import com.campus.trade.mapper.UserMapper;
- import com.campus.trade.vo.UserProfileVO;
- import jakarta.servlet.http.HttpSession;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.util.DigestUtils;
- import java.nio.charset.StandardCharsets;
- @Service
- public class AuthService {
- @Autowired
- private UserMapper userMapper;
- @Autowired
- private FileUploadUtil fileUploadUtil;
- // 用户注册
- public Long register(RegisterRequest req) {
- // 检查学号是否已注册
- User existing = userMapper.selectByStudentId(req.getStudentId());
- if (existing != null) {
- throw new BusinessException(StatusCode.CONFLICT, "学号已注册");
- }
- // 上传校园卡照片
- String campusCardUrl = null;
- if (req.getCampusCardImage() != null && !req.getCampusCardImage().isEmpty()) {
- campusCardUrl = fileUploadUtil.upload(req.getCampusCardImage());
- }
- // MD5 加密密码
- String passwordHash = DigestUtils.md5DigestAsHex(
- req.getPassword().getBytes(StandardCharsets.UTF_8)
- );
- // 构建用户实体
- User user = new User();
- user.setStudentId(req.getStudentId());
- user.setName(req.getName());
- user.setPasswordHash(passwordHash);
- user.setCampusCardUrl(campusCardUrl);
- user.setAuthStatus("PENDING"); // 待审核
- user.setStatus("NORMAL");
- user.setRole("USER");
- // 默认昵称为姓名
- user.setNickname(req.getName());
- userMapper.insert(user);
- return user.getId();
- }
- // 用户登录
- public UserProfileVO login(LoginRequest req, HttpSession session) {
- User user = userMapper.selectByStudentId(req.getStudentId());
- if (user == null) {
- throw new BusinessException(StatusCode.BAD_REQUEST, "学号或密码错误");
- }
- // 检查是否被封禁
- if ("BANNED".equals(user.getStatus())) {
- throw new BusinessException(StatusCode.FORBIDDEN, "账号已被封禁");
- }
- // MD5 密码比对
- String inputHash = DigestUtils.md5DigestAsHex(
- req.getPassword().getBytes(StandardCharsets.UTF_8)
- );
- if (!inputHash.equals(user.getPasswordHash())) {
- throw new BusinessException(StatusCode.BAD_REQUEST, "学号或密码错误");
- }
- // 创建 Session
- session.setAttribute("userId", user.getId());
- session.setAttribute("role", user.getRole());
- UserProfileVO vo = new UserProfileVO();
- BeanUtils.copyProperties(user, vo);
- return vo;
- }
- // 修改密码
- public void changePassword(ChangePasswordRequest req, HttpSession session) {
- Long userId = (Long) session.getAttribute("userId");
- User user = userMapper.selectById(userId);
- // 验证旧密码
- String oldHash = DigestUtils.md5DigestAsHex(
- req.getOldPassword().getBytes(StandardCharsets.UTF_8)
- );
- if (!oldHash.equals(user.getPasswordHash())) {
- throw new BusinessException(StatusCode.BAD_REQUEST, "旧密码错误");
- }
- // 更新为新密码
- String newHash = DigestUtils.md5DigestAsHex(
- req.getNewPassword().getBytes(StandardCharsets.UTF_8)
- );
- user.setPasswordHash(newHash);
- userMapper.updatePassword(user);
- }
- }
|