Files
pkAssistant/src/main/java/vvpkassistant/User/service/UserServiceImpl.java

151 lines
5.9 KiB
Java
Raw Normal View History

2025-08-04 21:58:55 +08:00
package vvpkassistant.User.service;
import cn.dev33.satoken.stp.StpUtil;
2025-08-05 15:16:03 +08:00
import cn.dev33.satoken.temp.SaTempUtil;
2025-08-04 21:58:55 +08:00
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import vvpkassistant.Data.WxChatParam;
import vvpkassistant.Tools.BcryptUtils;
import vvpkassistant.Tools.VVTools;
import vvpkassistant.User.mapper.UserDao;
import vvpkassistant.User.model.DTO.UserModelDTO;
import vvpkassistant.User.model.UserModel;
import vvpkassistant.User.model.UserModelVO;
import vvpkassistant.common.ErrorCode;
import vvpkassistant.exception.BusinessException;
2025-08-05 15:16:03 +08:00
import vvpkassistant.mail.service.MailService;
2025-08-04 21:58:55 +08:00
import javax.annotation.Resource;
/*
* @author: ziin
* @date: 2025/8/4 16:19
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserDao, UserModel> implements UserService {
@Resource
private UserDao userDao;
@Resource
private WxChatParam wxChatParam;
2025-08-05 15:16:03 +08:00
@Autowired
private MailService mailService;
2025-08-04 21:58:55 +08:00
@Override
public UserModelVO loginWithMail(UserModelDTO model) {
LambdaQueryWrapper<UserModel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(UserModel::getEmail,model.getEmail())
.in(UserModel::getStatus, 0,2);
UserModel userModel = userDao.selectOne(lambdaQueryWrapper);
if (userModel == null) {
throw new BusinessException(ErrorCode.USER_DOES_NOT_EXIST);
}
String password = userModel.getPassword();
UserModelVO userModelVO = BeanUtil.copyProperties(userModel, UserModelVO.class);
if (BcryptUtils.matchPassword(password, model.getPassword())) {
StpUtil.login(userModel.getId());
userModelVO.setToken(StpUtil.getTokenValue());
userModelVO.setChatInfo(wxChatParam);
return userModelVO;
}else {
throw new BusinessException(ErrorCode.PASSWORD_ERROR);
}
}
@Override
public UserModelVO updateUserInfo(UserModelDTO userModelDTO) {
UserModel userInfo = userDao.selectById(userModelDTO.getId());
if (userInfo == null) {
throw new BusinessException(ErrorCode.USER_DOES_NOT_EXIST);
}
// 用户没有密码的情况下设置密码
if (userInfo.getPassword() == null) {
if (!userModelDTO.getNewPassword().isEmpty()){
if (userModelDTO.getNewPassword().length()<6){
throw new BusinessException(ErrorCode.PARAMS_ERROR,"密码长度不能小于 6 位");
}
userModelDTO.setPassword(BcryptUtils.encryptPassword(userModelDTO.getNewPassword()));
}
}
// 用户有密码的情况下重新设置密码
if (userInfo.getPassword() != null && userModelDTO.getOldPassword() != null) {
if (BcryptUtils.matchPassword(userModelDTO.getOldPassword(), userInfo.getPassword())) {
userModelDTO.setPassword(BcryptUtils.encryptPassword(userModelDTO.getNewPassword()));
}else {
throw new BusinessException(ErrorCode.PASSWORD_ERROR,"旧密码不正确");
}
}
UserModel userModel = new UserModel();
BeanUtil.copyProperties(userModelDTO, userModel);
int i = userDao.updateById(userModel);
// 返回结果
userDao.selectById(userModel.getId());
UserModelVO userModelVO = BeanUtil.copyProperties(userModel, UserModelVO.class);
userModelVO.setNewAccount(false);
if (i == 1){
return userModelVO;
}else {
throw new BusinessException(ErrorCode.SYSTEM_ERROR);
}
}
@Override
2025-08-05 15:16:03 +08:00
public UserModelVO addUserWithMail(UserModelDTO userModelDTO) {
2025-08-04 21:58:55 +08:00
LambdaQueryWrapper<UserModel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
2025-08-05 15:16:03 +08:00
lambdaQueryWrapper.eq(UserModel::getEmail,userModelDTO.getEmail());
2025-08-04 21:58:55 +08:00
UserModel userModel = userDao.selectOne(lambdaQueryWrapper);
if (userModel != null) {
throw new BusinessException(ErrorCode.MAIL_ALREADY_EXIST);
}
2025-08-05 15:16:03 +08:00
if (userModelDTO.getPassword().length() < 6 ){
2025-08-04 21:58:55 +08:00
throw new BusinessException(ErrorCode.PARAMS_ERROR,"密码长度不能小于 6 位");
}
2025-08-05 15:16:03 +08:00
userModelDTO.setPassword(BcryptUtils.encryptPassword(userModelDTO.getPassword()));
userModelDTO.setCreateTime(VVTools.currentTimeStamp());
//设置状态为待验证
userModelDTO.setStatus(2);
2025-08-04 21:58:55 +08:00
//设置积分为0
2025-08-05 15:16:03 +08:00
userModelDTO.setPoints(0);
UserModel userModelEntity = BeanUtil.copyProperties(userModelDTO, UserModel.class);
if ( userDao.insert(userModelEntity) != 1){
throw new BusinessException(ErrorCode.ADD_FAILED,"用户注册失败");
}
mailService.sendMail(userModelDTO.getEmail(),userModelEntity.getId());
2025-08-04 21:58:55 +08:00
// 判断用户是否为邀请用户
2025-08-05 15:16:03 +08:00
if (userModelDTO.getInviterId() != null) {
UserModel oldUser = userDao.selectById(userModelDTO.getInviterId());
2025-08-04 21:58:55 +08:00
oldUser.setPoints(oldUser.getPoints() + 10);
userDao.updateById(oldUser);
}
2025-08-05 15:16:03 +08:00
UserModelVO userModelVO = BeanUtil.copyProperties(userModelEntity, UserModelVO.class);
2025-08-04 21:58:55 +08:00
userModelVO.setNewAccount(true);
userModelVO.setChatInfo(wxChatParam);
return userModelVO;
}
2025-08-05 15:16:03 +08:00
@Override
public Boolean activateAccount(String token) {
Integer userId = SaTempUtil.parseToken(token, Integer.class);
UserModel userModel = userDao.selectById(userId);
if (userModel == null) {
throw new BusinessException(ErrorCode.USER_DOES_NOT_EXIST);
}
userModel.setStatus(0);
if (userDao.updateById(userModel) == 1){
return true;
}else {
throw new BusinessException(ErrorCode.UPDATE_FAILED,"激活失败");
}
}
2025-08-04 21:58:55 +08:00
}