package com.bycrm.service.impl; import com.bycrm.common.Constants; import com.bycrm.dto.ChangePasswordDTO; import com.bycrm.dto.ResetPasswordDTO; import com.bycrm.entity.User; import com.bycrm.exception.BusinessException; import com.bycrm.mapper.UserMapper; import com.bycrm.service.UserService; import com.bycrm.util.JwtUtil; import com.bycrm.vo.UserInfoVO; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; /** * 用户服务实现 */ @Service public class UserServiceImpl implements UserService { private final UserMapper userMapper; private final JwtUtil jwtUtil; private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); public UserServiceImpl(UserMapper userMapper, JwtUtil jwtUtil) { this.userMapper = userMapper; this.jwtUtil = jwtUtil; } @Override public String login(com.bycrm.dto.LoginDTO loginDTO) { User user = userMapper.selectByUsername(loginDTO.getUsername()); if (user == null) { throw new BusinessException("用户名或密码错误"); } if (user.getStatus() == Constants.USER_STATUS_DISABLED) { throw new BusinessException("用户已被禁用"); } if (!passwordEncoder.matches(loginDTO.getPassword(), user.getPassword())) { throw new BusinessException("用户名或密码错误"); } return jwtUtil.generateToken(user.getId(), user.getUsername(), user.getRole(), user.getDealerId()); } @Override public User getUserById(Long id) { return userMapper.selectById(id); } @Override public User getUserByUsername(String username) { return userMapper.selectByUsername(username); } @Override public UserInfoVO getCurrentUser(String token) { Long userId = jwtUtil.getUserIdFromToken(token); User user = userMapper.selectById(userId); if (user == null) { throw new BusinessException("用户不存在"); } UserInfoVO vo = new UserInfoVO(); vo.setUserId(user.getId()); vo.setUsername(user.getUsername()); vo.setRealName(user.getRealName()); vo.setDealerId(user.getDealerId()); vo.setDealerName(user.getDealerName()); vo.setRole(user.getRole()); vo.setRoleDesc(user.getRole() == Constants.USER_ROLE_ADMIN ? "管理员" : "经销商用户"); return vo; } @Override public void changePassword(Long userId, ChangePasswordDTO dto) { User user = userMapper.selectById(userId); if (user == null) { throw new BusinessException("用户不存在"); } // 验证原密码 if (!passwordEncoder.matches(dto.getOldPassword(), user.getPassword())) { throw new BusinessException("原密码错误"); } // 新密码不能与原密码相同 if (dto.getOldPassword().equals(dto.getNewPassword())) { throw new BusinessException("新密码不能与原密码相同"); } // 加密新密码并更新 String encodedPassword = passwordEncoder.encode(dto.getNewPassword()); user.setPassword(encodedPassword); userMapper.update(user); } @Override public void resetPassword(ResetPasswordDTO dto) { User user = userMapper.selectById(dto.getUserId()); if (user == null) { throw new BusinessException("用户不存在"); } // 管理员不能重置自己的密码(应使用修改密码功能) if (user.getRole() == Constants.USER_ROLE_ADMIN) { throw new BusinessException("不能重置管理员密码"); } // 加密新密码并更新 String encodedPassword = passwordEncoder.encode(dto.getNewPassword()); user.setPassword(encodedPassword); userMapper.update(user); } public static void main(String[] args) { BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); String rawPassword = "59cce3254e6d76ec6bad2d84ae56b5da3e118b2f22d0d2b2d780356cbe3c0881"; String encodedPassword = passwordEncoder.encode(rawPassword); System.out.println("Encoded Password: " + encodedPassword); } }