Browse Source

商户账号修改密码 忘记密码 更换绑定手机号

qxy 2 weeks ago
parent
commit
3a95575c00

+ 4 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreUser.java

@@ -110,4 +110,8 @@ public class StoreUser extends Model<StoreUser> {
     @ApiModelProperty(value = "昵称")
     @TableField("nick_name")
     private String nickName;
+
+    @ApiModelProperty(value = "账号简介")
+    @TableField("account_blurb")
+    private String accountBlurb;
 }

+ 20 - 21
alien-store/src/main/java/shop/alien/store/controller/StoreUserController.java

@@ -90,40 +90,39 @@ public class StoreUserController {
                 : R.fail("密码错误");
     }
 
-    @ApiOperation("修改密码")
+    @ApiOperation("修改密码/忘记密码/更换绑定手机号")
     @ApiOperationSupport(order = 2)
     @ApiImplicitParams({@ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "newPhone", value = "新手机号", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "oldPassword", value = "旧密码", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "newPassword", value = "新密码", dataType = "String", paramType = "query", required = true),
-            @ApiImplicitParam(name = "type", value = "类型:0:忘记密码,其他:修改密码", dataType = "Integer", paramType = "query", required = true)})
+            @ApiImplicitParam(name = "confirmNewPassword", value = "新密码确认", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "verificationCode", value = "验证码", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "type", value = "类型:0:忘记密码,1:修改密码,2:更换绑定手机号", dataType = "Integer", paramType = "query", required = true)})
     @GetMapping("/updatePassword")
-    public R<Boolean> updatePassword(String phone, String oldPassword, String newPassword, Integer type) {
-        log.info("StoreUserController.updatePassword?phone={}&oldPassword={}&newPassword={}&type={}", phone, oldPassword, newPassword, type);
-        StoreUser storeUser = storeUserService.getUserByPhone(phone);
-        if (null != storeUser) {
-            if (0 == type || oldPassword.equals(storeUser.getPassword())) {
-                if (newPassword.equals(storeUser.getPassword())) {
-                    return R.fail("新密码与原密码相同");
-                }
-                if (storeUserService.updatePassword(storeUser.getId(), newPassword)) {
-                    return R.success("修改成功");
-                }
-                return R.fail("修改失败");
-            }
-            return R.fail("旧密码错误");
+    public R<Boolean> updatePassword(String phone,String newPhone, String oldPassword, String newPassword,String confirmNewPassword,String verificationCode,Integer type) {
+        log.info("StoreUserController.updatePassword?phone={}&newPhone&oldPassword={}&newPassword={}&confirmNewPassword={}&verificationCode={}&type={}", phone, newPhone, oldPassword, newPassword, confirmNewPassword, verificationCode, type);
+        boolean flag = false;
+        flag = storeUserService.forgetOrModifyPassword(phone, newPhone, oldPassword, newPassword, confirmNewPassword, verificationCode, type);
+        if(flag){
+            return R.success("密码修改成功");
+        }else {
+            return R.success("密码修改失败");
         }
-        return R.fail("手机号不存在");
     }
 
     @ApiOperation("修改用户信息")
     @ApiOperationSupport(order = 3)
     @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "主键", dataType = "String", paramType = "query", required = true),
             @ApiImplicitParam(name = "name", value = "姓名", dataType = "String", paramType = "query", required = true),
-            @ApiImplicitParam(name = "idCard", value = "身份证", dataType = "String", paramType = "query", required = true)})
+            @ApiImplicitParam(name = "idCard", value = "身份证", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "nickName", value = "昵称", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "accountBlurb", value = "账号简介", dataType = "String", paramType = "query", required = true)})
+
     @GetMapping("/setUserInfo")
-    public R<Boolean> setUserInfo(Integer id, String name, String idCard) {
-        log.info("StoreUserController.setUserInfo?id={}&name={}&idCard={}", id, name, idCard);
-        if (storeUserService.setUserInfo(id, name, idCard)) {
+    public R<Boolean> setUserInfo(Integer id, String name, String idCard, String nickName, String accountBlurb) {
+        log.info("StoreUserController.setUserInfo?id={}&name={}&idCard={}&nickName={}}&accountBlurb={}", id, name, idCard, nickName, accountBlurb);
+        if (storeUserService.setUserInfo(id, name, idCard, nickName, accountBlurb)) {
             return R.success("修改成功");
         }
         return R.fail("修改失败");

+ 6 - 0
alien-store/src/main/java/shop/alien/store/service/LifeStoreService.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -16,6 +17,7 @@ import shop.alien.entity.store.vo.LifeStoreVo;
 import shop.alien.entity.store.vo.LifeUserVo;
 import shop.alien.entity.store.vo.StoreInfoVo;
 import shop.alien.mapper.*;
+import shop.alien.store.config.BaseRedisService;
 import shop.alien.util.common.ListToPage;
 
 import java.time.LocalDateTime;
@@ -25,9 +27,11 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
+
 /**
  * 门店
  */
+@Slf4j
 @Service
 @RequiredArgsConstructor
 public class LifeStoreService {
@@ -52,6 +56,8 @@ public class LifeStoreService {
 
     private final LifeBlacklistMapper lifeBlacklistMapper;
 
+    private final BaseRedisService baseRedisService;
+
     public LifeUser loginByPhone(String phone) {
         LambdaUpdateWrapper<LifeUser> wrapperFans = new LambdaUpdateWrapper<>();
         wrapperFans.eq(LifeUser::getUserPhone, phone);

+ 13 - 1
alien-store/src/main/java/shop/alien/store/service/StoreUserService.java

@@ -52,6 +52,18 @@ public interface StoreUserService extends IService<StoreUser> {
     boolean updatePassword(Integer id, String password);
 
     /**
+     * 修改密码或忘记密码
+     *
+     * @param phone   手机号
+     * @param oldPassword 原密码
+     * @param newPassword       新密码
+     * @param confirmNewPassword 确认密码
+     * @param type 类型
+     * @return boolean
+     */
+    boolean forgetOrModifyPassword(String phone, String newPhone, String oldPassword, String newPassword,String confirmNewPassword,String verificationCode, Integer type);
+
+    /**
      * 设置用户信息
      *
      * @param id     主键
@@ -59,7 +71,7 @@ public interface StoreUserService extends IService<StoreUser> {
      * @param idCard 身份证号
      * @return boolean
      */
-    boolean setUserInfo(Integer id, String name, String idCard);
+    boolean setUserInfo(Integer id, String name, String idCard, String nickName, String accountBlurb);
 
     /**
      * 修改支付密码

+ 112 - 1
alien-store/src/main/java/shop/alien/store/service/impl/StoreUserServiceImpl.java

@@ -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);
     }
 

+ 4 - 0
alien-store/src/main/java/shop/alien/store/util/ali/AliSms.java

@@ -9,6 +9,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
+import shop.alien.store.config.BaseRedisService;
 import shop.alien.util.common.RandomCreateUtil;
 
 import java.util.Arrays;
@@ -25,6 +26,7 @@ import java.util.List;
 @Component
 @RequiredArgsConstructor
 public class AliSms {
+    private final BaseRedisService baseRedisService;
 
     @Value("${ali.sms.accessKeyId}")
     private String accessKeyId;
@@ -82,6 +84,8 @@ public class AliSms {
             if (!"OK".equals(sendSmsResponse.getBody().getCode())) {
                 return null;
             }
+            // 验证码发送成功,将验证码保存到redis中 设置60秒过期
+            baseRedisService.setString("verification_"+phone,code.toString(),Long.valueOf(60));
             return code;
         } catch (Exception e) {
             log.error("AliSmsConfig.sendSms ERROR Msg={}", e.getMessage());