package com.cl.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.cl.common.constant.DelFlagConstant; import com.cl.common.constant.StatusConstant; import com.cl.common.context.BaseContext; import com.cl.common.exception.user.AddUserException; import com.cl.common.exception.user.UserException; import com.cl.common.result.Result; import com.cl.mapper.UserMapper; import com.cl.pojo.dto.AddUserDTO; import com.cl.pojo.dto.EditUserDTO; import com.cl.pojo.dto.PasswordBeforeLoginDTO; import com.cl.pojo.dto.PasswordDTO; import com.cl.pojo.entity.User; import com.cl.pojo.vo.UserVO; import com.cl.service.UserService; import com.cl.util.BCryptPasswordEncoder; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.Objects; @Service @Slf4j public class UserServiceImpl extends ServiceImpl implements UserService { private final UserMapper userMapper; private final TokenBlacklistService tokenBlacklistService; public UserServiceImpl(UserMapper userMapper, TokenBlacklistService tokenBlacklistService) { this.userMapper = userMapper; this.tokenBlacklistService = tokenBlacklistService; } @Override public void addUser(AddUserDTO addUserDTO) { String phone = addUserDTO.getPhone(); //查询手机号是否存在 User user1 = userMapper.selectOne(new LambdaQueryWrapper().eq(User::getPhone, phone) .eq(User::getDelFlag, DelFlagConstant.UNDELETE)); if (user1 != null) { throw new AddUserException("该用户已存在"); } log.info("开始添加用户:{}",addUserDTO); User user = new User(); user.setPhone(phone); user.setName(addUserDTO.getName()); user.setRemark(addUserDTO.getRemark()); user.setPassword(BCryptPasswordEncoder.encode(DigestUtils.md5Hex(phone.substring(phone.length() - 6)))); user.setCreateBy(BaseContext.getCurrentUser().getId()); user.setCreateTime(LocalDateTime.now()); boolean save = this.save(user); if (!save) { throw new UserException("新增用户失败"); } } @Override public IPage pageList(IPage page, String name, String phone) { return userMapper.pageList(page,name,phone); } @Override public void editUser(EditUserDTO editUserDTO) { User user = userMapper.selectById(editUserDTO.getId()); if (user == null) { throw new UserException("该用户不存在"); } LambdaUpdateWrapper updateWrapper= new LambdaUpdateWrapper<>(); updateWrapper.eq(User::getId, editUserDTO.getId()); updateWrapper.set(User::getName, editUserDTO.getName()); User phoneUser = userMapper.selectOne(new LambdaQueryWrapper().eq(User::getPhone, editUserDTO.getPhone()) .eq(User::getDelFlag, DelFlagConstant.UNDELETE) .ne(User::getId, editUserDTO.getId())); if (phoneUser != null) { throw new UserException("该手机号用户已存在"); } updateWrapper.set(User::getPhone, editUserDTO.getPhone()); updateWrapper.set(User::getRemark, editUserDTO.getRemark()); updateWrapper.set(User::getUpdateBy, BaseContext.getCurrentUser().getId()); updateWrapper.set(User::getUpdateTime, LocalDateTime.now()); int update = userMapper.update(new User(), updateWrapper); if (update != 1) { throw new UserException("修改用户失败"); } } @Override public void password(PasswordDTO passwordDTO,String token) { User user = userMapper.selectById(BaseContext.getCurrentUser().getId()); //校验原密码 if (!BCryptPasswordEncoder.matches(passwordDTO.getPassword(), user.getPassword())) { //不通过 throw new UserException("修改失败,旧密码错误"); } if (passwordDTO.getPassword().equals(passwordDTO.getNewPassword())){ //不通过 throw new UserException("修改失败,旧密码与新密码不能一样"); } //修改密码 user.setPassword(BCryptPasswordEncoder.encode(passwordDTO.getNewPassword())); user.setUpdateBy(user.getId()); user.setUpdateTime(LocalDateTime.now()); boolean save = this.updateById(user); if (!save) { throw new UserException("修改密码失败"); } //将令牌加入黑名单 tokenBlacklistService.addToBlacklist(token); } @Override public Result passwordBeforeLogin(PasswordBeforeLoginDTO passwordDTO) { //检查手机号是否存在 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(User::getPhone, passwordDTO.getPhone()); queryWrapper.eq(User::getDelFlag, DelFlagConstant.UNDELETE); User user = userMapper.selectOne(queryWrapper); if (user == null) { return Result.error("手机号不存在"); } if (user.getStatus().equals(DelFlagConstant.DELETE)) { return Result.error("该用户已被冻结"); } if (!BCryptPasswordEncoder.matches(passwordDTO.getPassword(), user.getPassword())) { return Result.error("原密码错误"); } //修改密码 user.setPassword(BCryptPasswordEncoder.encode(passwordDTO.getNewPassword())); user.setUpdateBy(user.getId()); user.setUpdateTime(LocalDateTime.now()); boolean save = this.updateById(user); if (!save) { throw new UserException("修改密码失败"); } return Result.success("修改成功"); } @Override public void resetPassword(Integer id) { User user = userMapper.selectById(id); if (null==user){ throw new UserException("该用户不存在"); } user.setPassword(BCryptPasswordEncoder.encode(DigestUtils.md5Hex(user.getPhone().substring(user.getPhone().length() - 6)))); user.setIsFirst(1); user.setUpdateBy(BaseContext.getCurrentUser().getId()); user.setUpdateTime(LocalDateTime.now()); boolean save = this.updateById(user); if (!save) { throw new UserException("重置密码失败"); } } @Override public void frozen(Integer id) { User user = userMapper.selectById(id); if (null==user){ throw new UserException("用户不存在"); } user.setStatus(Objects.equals(user.getStatus(), StatusConstant.DISABLE) ? StatusConstant.ENABLE : StatusConstant.DISABLE); user.setUpdateBy(BaseContext.getCurrentUser().getId()); user.setUpdateTime(LocalDateTime.now()); boolean save = this.updateById(user); if (!save) { throw new UserException("冻结/解冻用户失败"); } } }