|
@@ -2,12 +2,14 @@ package shop.alien.store.service.impl;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
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.core.toolkit.StringUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.tuple.Triple;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
@@ -38,6 +40,7 @@ import java.util.*;
|
|
|
* @author ssk
|
|
|
* @since 2024-12-11
|
|
|
*/
|
|
|
+@Slf4j
|
|
|
@Transactional
|
|
|
@Service
|
|
|
@RequiredArgsConstructor
|
|
@@ -176,6 +179,112 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
|
|
|
return this.updateById(storeUser);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public boolean forgetOrModifyPassword(String phone, String newPhone, String oldPassword, String newPassword, String confirmNewPassword, String verificationCode, Integer type) {
|
|
|
+ boolean flag = false;
|
|
|
+ //类型为0 忘记密码
|
|
|
+ if (type == 0) {
|
|
|
+ forgetPassword(phone, newPassword, verificationCode);
|
|
|
+ }
|
|
|
+ //修改密码
|
|
|
+ else if(type == 1){
|
|
|
+ //效验新密码规则
|
|
|
+ passwordVerification(phone, oldPassword, newPassword, confirmNewPassword);
|
|
|
+ LambdaUpdateWrapper<StoreUser> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateWrapper.eq(StoreUser::getPhone, phone);
|
|
|
+ updateWrapper.set(StoreUser::getPassword, newPassword);
|
|
|
+ flag = this.update(updateWrapper);
|
|
|
+
|
|
|
+ //修改成功后同步删除redis缓存token
|
|
|
+ if (flag) {
|
|
|
+ String token = "store_" + phone;
|
|
|
+ baseRedisService.delete(token);
|
|
|
+ } else {
|
|
|
+ log.error("密码修改失败");
|
|
|
+ throw new RuntimeException("密码修改失败");
|
|
|
+ }
|
|
|
+ return flag;
|
|
|
+ }
|
|
|
+ //更换绑定手机号
|
|
|
+ else if(type == 2){
|
|
|
+ ChangeBoundPhone(phone,newPhone,verificationCode);
|
|
|
+ }
|
|
|
+ return flag;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void passwordVerification(String phone, String password, String newPassword, String confirmNewPassword) {
|
|
|
+ LambdaUpdateWrapper<StoreUser> wrapperFans = new LambdaUpdateWrapper<>();
|
|
|
+ wrapperFans.eq(StoreUser::getPhone, phone);
|
|
|
+ StoreUser storeUser = this.getOne(wrapperFans);
|
|
|
+ if (storeUser == null || storeUser.equals("")) {
|
|
|
+ log.info("该手机号没有注册过账户");
|
|
|
+ throw new RuntimeException("该手机号没有注册过账户");
|
|
|
+ } else {
|
|
|
+ wrapperFans.eq(StoreUser::getPassword, password);
|
|
|
+ StoreUser storeUserPw = this.getOne(wrapperFans);
|
|
|
+ if (storeUserPw == null || storeUserPw.getPassword().equals("")) {
|
|
|
+ log.info("密码输入错误 请重新输入");
|
|
|
+ throw new RuntimeException("密码输入错误 请重新输入");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!newPassword.equals(confirmNewPassword)) {
|
|
|
+ log.info("两次新密码输入不一致 请重新输入");
|
|
|
+ throw new RuntimeException("两次新密码输入不一致 请重新输入");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean forgetPassword(String phone, String newPassword, String verificationCode) {
|
|
|
+ boolean flag = false;
|
|
|
+ String key = "verification_" + phone;
|
|
|
+ String redisVerificationCode = baseRedisService.getString(key);
|
|
|
+ if (!StringUtils.isEmpty(redisVerificationCode) && redisVerificationCode.equals(verificationCode)) {
|
|
|
+ LambdaUpdateWrapper<StoreUser> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateWrapper.eq(StoreUser::getPhone, phone);
|
|
|
+ updateWrapper.set(StoreUser::getPassword, newPassword);
|
|
|
+ flag = this.update(updateWrapper);
|
|
|
+ if (flag) {
|
|
|
+ log.info("密码修改成功");
|
|
|
+ String token = "store_" + phone;
|
|
|
+ baseRedisService.delete(token);
|
|
|
+ }
|
|
|
+ if (!flag) {
|
|
|
+ log.error("密码修改失败");
|
|
|
+ throw new RuntimeException("密码修改失败");
|
|
|
+ }
|
|
|
+ return flag;
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("验证码错误");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean ChangeBoundPhone(String phone, String newPhone, String verificationCode){
|
|
|
+ boolean flag = false;
|
|
|
+ String key = "verification_" + phone;
|
|
|
+ String redisVerificationCode = baseRedisService.getString(key);
|
|
|
+ if(!StringUtils.isEmpty(redisVerificationCode) && redisVerificationCode.equals(verificationCode)){
|
|
|
+ LambdaUpdateWrapper<StoreUser> storeUserWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ storeUserWrapper.eq(StoreUser::getPhone, phone);
|
|
|
+ StoreUser storeUser = this.getOne(storeUserWrapper);
|
|
|
+ if(storeUser!=null ){
|
|
|
+ storeUser.setPhone(newPhone);
|
|
|
+ flag = this.updateById(storeUser);
|
|
|
+ }
|
|
|
+ if (flag) {
|
|
|
+ log.info("新手机号绑定成功");
|
|
|
+ String token = "store_" + phone;
|
|
|
+ baseRedisService.delete(token);
|
|
|
+ }
|
|
|
+ if (!flag) {
|
|
|
+ log.error("手机号更换绑定失败");
|
|
|
+ throw new RuntimeException("手机号更换绑定失败");
|
|
|
+ }
|
|
|
+ return flag;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ throw new RuntimeException("验证码错误");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 设置用户信息
|
|
|
*
|
|
@@ -185,11 +294,13 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
|
|
|
* @return boolean
|
|
|
*/
|
|
|
@Override
|
|
|
- public boolean setUserInfo(Integer id, String name, String idCard) {
|
|
|
+ public boolean setUserInfo(Integer id, String name, String idCard, String nickName, String accountBlurb) {
|
|
|
StoreUser storeUser = new StoreUser();
|
|
|
storeUser.setId(id);
|
|
|
storeUser.setName(name);
|
|
|
storeUser.setIdCard(idCard);
|
|
|
+ storeUser.setNickName(nickName);
|
|
|
+ storeUser.setAccountBlurb(accountBlurb);
|
|
|
return this.updateById(storeUser);
|
|
|
}
|
|
|
|