Browse Source

修改用户修改手机号

Yangzw 8 months ago
parent
commit
7a1fbbf440

+ 2 - 1
feifan-module-member/feifan-module-member-api/src/main/java/cn/newfeifan/mall/module/member/enums/ErrorCodeConstants.java

@@ -14,6 +14,7 @@ public interface ErrorCodeConstants {
     ErrorCode USER_MOBILE_NOT_EXISTS = new ErrorCode(1_004_001_001, "手机号未注册用户");
     ErrorCode USER_MOBILE_USED = new ErrorCode(1_004_001_002, "修改手机失败,该手机号({})已经被使用");
     ErrorCode USER_POINT_NOT_ENOUGH = new ErrorCode(1_004_001_003, "用户积分余额不足");
+    ErrorCode USER_MOBILE_IS_ERROR = new ErrorCode(1_004_001_004, "输入的手机号不正常");
 
     // ========== AUTH 模块 1-004-003-000 ==========
     ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1_004_003_000, "登录失败,用户名或密码不正确");
@@ -57,7 +58,7 @@ public interface ErrorCodeConstants {
     ErrorCode GROUP_HAS_USER = new ErrorCode(1_004_012_001, "用户分组下存在用户,无法删除");
 
     ErrorCode AUTH_USERNAME_EXISTS = new ErrorCode(1_004_012_003, "此用户名已经存在,请换一个!");
-    ErrorCode MOBILE_IS_MAXIMIZE = new ErrorCode(1_004_012_004, "此手机号已经达到注册的上限了");
+    ErrorCode MOBILE_IS_MAXIMIZE = new ErrorCode(1_004_012_004, "此手机号已经达到绑定的上限了");
     ErrorCode AUTH_SOCIAL_USER_BIND_MAX = new ErrorCode(1_004_012_004, "此微信号已经到达绑定的上限了");
     ErrorCode LINK_ID_IS_NOT_EXISTS = new ErrorCode(1_004_012_005, "只能通过分享注册");
     ErrorCode RELOAD_REGISTER = new ErrorCode(1_004_012_006, "本次注册账号失败,请退出当前页面重新扫描分享二维码注册");

+ 8 - 4
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/auth/MemberAuthServiceImpl.java

@@ -274,14 +274,14 @@ public class MemberAuthServiceImpl implements MemberAuthService {
     public void sendSmsCode(Long userId, AppAuthSmsSendReqVO reqVO) {
         // 情况 1:如果是修改手机场景,需要校验新手机号是否已经注册,说明不能使用该手机了
         if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene())) {
-            MemberUserDO user = userService.getUserByMobile(reqVO.getMobile());
-            if (user != null && !Objects.equals(user.getId(), userId)) {
-                throw exception(AUTH_MOBILE_USED);
+            MemberUserDO user = userService.getUserByMobile(reqVO.getMobile(),userId);
+            if (user == null) {
+                throw exception(USER_MOBILE_IS_ERROR);
             }
         }
         // 情况 2:如果是重置密码场景,需要校验手机号是存在的
         if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_RESET_PASSWORD.getScene())) {
-            MemberUserDO user = userService.getUserByMobile(reqVO.getMobile());
+            MemberUserDO user = userService.getUserByMobile(reqVO.getMobile(),userId);
             if (user == null) {
                 throw exception(USER_MOBILE_NOT_EXISTS);
             }
@@ -292,6 +292,10 @@ public class MemberAuthServiceImpl implements MemberAuthService {
             // TODO 非繁人:后续 member user 手机非强绑定,这块需要做下调整;
             reqVO.setMobile(user.getMobile());
         }
+        //情况 4:如果是修改手机号时,输入新的手机号,需要校验手机号是否绑定上限
+        if(Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_UPDATE_NEW_MOBILE.getScene())){
+            verifyMobileIsMaximize(reqVO.getMobile());
+        }
 
         // 执行发送
         smsCodeApi.sendSmsCode(AuthConvert.INSTANCE.convert(reqVO).setCreateIp(getClientIP()));

+ 8 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/user/MemberUserService.java

@@ -220,4 +220,12 @@ public interface MemberUserService {
      * @return 用户
      */
     List<MemberUserDO> getUserListBySystemUserId(Long systemUserId);
+
+    /**
+     * 根据手机号查询用户
+     * @param mobile 手机号
+     * @param userId 用户编号
+     * @return 用户
+     */
+    MemberUserDO getUserByMobile(String mobile, Long userId);
 }

+ 11 - 2
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/user/MemberUserServiceImpl.java

@@ -38,6 +38,7 @@ import java.util.List;
 
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.newfeifan.mall.framework.common.util.servlet.ServletUtils.getClientIP;
+import static cn.newfeifan.mall.module.member.enums.DictTypeConstants.MOBILE_REGISTER_MAX;
 import static cn.newfeifan.mall.module.member.enums.ErrorCodeConstants.*;
 
 /**
@@ -189,8 +190,11 @@ public class MemberUserServiceImpl implements MemberUserService {
     public void updateUserMobile(Long userId, AppMemberUserUpdateMobileReqVO reqVO) {
         // 1.1 检测用户是否存在
         MemberUserDO user = validateUserExists(userId);
-        // 1.2 校验新手机是否已经被绑定
-        validateMobileUnique(null, reqVO.getMobile());
+        // 1.2 校验新手机是否已经达到绑定上限
+        if (getUserCountByMobile(reqVO.getMobile()) >= MOBILE_REGISTER_MAX) {
+            throw exception(MOBILE_IS_MAXIMIZE);
+        }
+//        validateMobileUnique(null, reqVO.getMobile());
 
         // 2.1 校验旧手机和旧验证码
         // 补充说明:从安全性来说,老手机也校验 oldCode 验证码会更安全。但是由于 uni-app 商城界面暂时没做,所以这里不强制校验
@@ -381,4 +385,9 @@ public class MemberUserServiceImpl implements MemberUserService {
         return memberUserMapper.selectList(MemberUserDO::getSystemUsersId, systemUserId);
     }
 
+    @Override
+    public MemberUserDO getUserByMobile(String mobile, Long userId) {
+        return memberUserMapper.selectOne(MemberUserDO::getMobile, mobile, MemberUserDO::getId,userId);
+    }
+
 }

+ 1 - 0
feifan-module-system/feifan-module-system-api/src/main/java/cn/newfeifan/mall/module/system/enums/sms/SmsSceneEnum.java

@@ -20,6 +20,7 @@ public enum SmsSceneEnum implements IntArrayValuable {
     MEMBER_UPDATE_MOBILE(2, "user-update-mobile", "会员用户 - 修改手机"),
     MEMBER_UPDATE_PASSWORD(3, "user-update-password", "会员用户 - 修改密码"),
     MEMBER_RESET_PASSWORD(4, "user-reset-password", "会员用户 - 忘记密码"),
+    MEMBER_UPDATE_NEW_MOBILE(5, "user-update-mobile", "会员用户 - 修改手机号时新输入的手机号"),
 
     ADMIN_MEMBER_LOGIN(21, "admin-sms-login", "后台用户 - 手机号登录");