Browse Source

Merge branch 'dev/2024/0529/update-app-Y' of feifan/mall-backend-app into master

修改登录系统
Yangzw 10 months ago
parent
commit
828b332028
13 changed files with 164 additions and 55 deletions
  1. 2 0
      feifan-module-member/feifan-module-member-api/src/main/java/cn/newfeifan/mall/module/member/enums/DictTypeConstants.java
  2. 3 1
      feifan-module-member/feifan-module-member-api/src/main/java/cn/newfeifan/mall/module/member/enums/ErrorCodeConstants.java
  3. 8 2
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/AppAuthController.java
  4. 4 6
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/vo/AppAuthLoginReqVO.java
  5. 4 9
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java
  6. 21 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/vo/AppAuthSmsRegisterReqVO.java
  7. 3 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java
  8. 5 7
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/dal/dataobject/user/MemberUserDO.java
  9. 3 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/dal/mysql/user/MemberUserMapper.java
  10. 7 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/auth/MemberAuthService.java
  11. 58 18
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/auth/MemberAuthServiceImpl.java
  12. 24 3
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/user/MemberUserService.java
  13. 22 9
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/user/MemberUserServiceImpl.java

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

@@ -15,4 +15,6 @@ public interface DictTypeConstants {
     //将身价参数存在redis中的前缀
     String DISTRI_ORDER_PERCENTAGE  = "distri:orderPercentage";
 
+    Long MOBILE_REGISTER_MAX = 10L;
+
 }

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

@@ -16,7 +16,7 @@ public interface ErrorCodeConstants {
     ErrorCode USER_POINT_NOT_ENOUGH = new ErrorCode(1_004_001_003, "用户积分余额不足");
 
     // ========== AUTH 模块 1-004-003-000 ==========
-    ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1_004_003_000, "登录失败,账号密码不正确");
+    ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1_004_003_000, "登录失败,用户名或密码不正确");
     ErrorCode AUTH_LOGIN_USER_DISABLED = new ErrorCode(1_004_003_001, "登录失败,账号被禁用");
     ErrorCode AUTH_SOCIAL_USER_NOT_FOUND = new ErrorCode(1_004_003_005, "登录失败,解析不到三方登录信息");
     ErrorCode AUTH_MOBILE_USED = new ErrorCode(1_004_003_007, "手机号已经被使用");
@@ -56,5 +56,7 @@ public interface ErrorCodeConstants {
     ErrorCode GROUP_HAS_USER = new ErrorCode(1_004_012_001, "用户分组下存在用户,无法删除");
 
     ErrorCode REDIS_ORDER_PERCENTAGE_NOT_EXISTS = new ErrorCode(1_004_012_002, "缓存中没有找到存储的签到获取的身价值");
+    ErrorCode AUTH_USERNAME_EXISTS = new ErrorCode(1_004_012_003, "此用户名已经存在,请换一个!");
+    ErrorCode MOBILE_IS_MAXIMIZE = new ErrorCode(1_004_012_004, "此手机号已经达到注册的上限了");
 
 }

+ 8 - 2
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/AppAuthController.java

@@ -45,7 +45,7 @@ public class AppAuthController {
 
 
     @PostMapping("/login")
-    @Operation(summary = "使用手机 + 密码登录")
+    @Operation(summary = "使用用户名 + 密码登录")
     public CommonResult<AppAuthLoginRespVO> login(@RequestBody @Valid AppAuthLoginReqVO reqVO) {
         return success(authService.login(reqVO));
     }
@@ -73,11 +73,17 @@ public class AppAuthController {
     // ========== 短信登录相关 ==========
 
     @PostMapping("/sms-login")
-    @Operation(summary = "使用手机 + 验证码登录")
+    @Operation(summary = "使用用户名 + 手机 + 验证码登录")
     public CommonResult<AppAuthLoginRespVO> smsLogin(@RequestBody @Valid AppAuthSmsLoginReqVO reqVO) {
         return success(authService.smsLogin(reqVO));
     }
 
+    @PostMapping("/sms-register")
+    @Operation(summary = "使用用户名 + 手机 + 验证码注册")
+    public CommonResult<AppAuthLoginRespVO> smsRegister(@RequestBody @Valid AppAuthSmsRegisterReqVO reqVO) {
+        return success(authService.smsRegister(reqVO));
+    }
+
     @PostMapping("/send-sms-code")
     @Operation(summary = "发送手机验证码")
     public CommonResult<Boolean> sendSmsCode(@RequestBody @Valid AppAuthSmsSendReqVO reqVO) {

+ 4 - 6
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/vo/AppAuthLoginReqVO.java

@@ -2,7 +2,6 @@ package cn.newfeifan.mall.module.member.controller.app.auth.vo;
 
 import cn.hutool.core.util.StrUtil;
 import cn.newfeifan.mall.framework.common.validation.InEnum;
-import cn.newfeifan.mall.framework.common.validation.Mobile;
 import cn.newfeifan.mall.module.system.enums.social.SocialTypeEnum;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
@@ -13,6 +12,7 @@ import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.AssertTrue;
 import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
 
 @Schema(description = "用户 APP - 手机 + 密码登录 Request VO,如果登录并绑定社交用户,需要传递 social 开头的参数")
 @Data
@@ -20,11 +20,9 @@ import javax.validation.constraints.NotEmpty;
 @AllArgsConstructor
 @Builder
 public class AppAuthLoginReqVO {
-
-    @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300")
-    @NotEmpty(message = "手机号不能为空")
-    @Mobile
-    private String mobile;
+    @Schema(description = "登录用的用户名", example = "张三")
+    @NotNull(message = "用户名不能为空")
+    private String username;
 
     @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "buzhidao")
     @NotEmpty(message = "密码不能为空")

+ 4 - 9
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java

@@ -13,6 +13,7 @@ import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.AssertTrue;
 import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Pattern;
 
 @Schema(description = "用户 APP - 手机 + 验证码登录 Request VO,如果登录并绑定社交用户,需要传递 social 开头的参数")
@@ -45,15 +46,9 @@ public class AppAuthSmsLoginReqVO {
     @Schema(description = "state", requiredMode = Schema.RequiredMode.REQUIRED, example = "9b2ffbc1-7425-4155-9894-9d5c08541d62")
     private String socialState;
 
-    @Schema(description = "分享链接ID 没有可以不传")
-    private String linkId;
-
-    public Long getLinkId() {
-        if (linkId == null) {
-            return null;
-        }
-        return Long.parseLong(linkId,16);
-    }
+    @Schema(description = "用户名")
+    @NotNull(message = "用户名不能为空")
+    private String username;
 
     @AssertTrue(message = "授权码不能为空")
     public boolean isSocialCodeValid() {

+ 21 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/vo/AppAuthSmsRegisterReqVO.java

@@ -0,0 +1,21 @@
+package cn.newfeifan.mall.module.member.controller.app.auth.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "用户 APP - 手机 + 验证码登录 Request VO,如果登录并绑定社交用户,需要传递 social 开头的参数")
+@Data
+public class AppAuthSmsRegisterReqVO extends AppAuthSmsLoginReqVO {
+
+    @Schema(description = "分享链接ID")
+    @NotNull(message = "只能通过分享注册")
+    private String linkId;
+
+    public Long getLinkId() {
+        if (linkId == null) {
+            return null;
+        }
+        return Long.parseLong(linkId,16);
+    }
+}

+ 3 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java

@@ -53,4 +53,7 @@ public class AppMemberUserInfoRespVO {
 
     }
 
+    @Schema(description = "登录用的用户名", example = "张三")
+    private String username;
+
 }

+ 5 - 7
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/dal/dataobject/user/MemberUserDO.java

@@ -20,7 +20,6 @@ import java.util.List;
 
 /**
  * 会员用户 DO
- *
  * uk_mobile 索引:基于 {@link #mobile} 字段
  *
  * @author 非繁源码
@@ -52,13 +51,11 @@ public class MemberUserDO extends TenantBaseDO {
     private String mobile;
     /**
      * 加密后的密码
-     *
      * 因为目前使用 {@link BCryptPasswordEncoder} 加密器,所以无需自己处理 salt 盐
      */
     private String password;
     /**
      * 帐号状态
-     *
      * 枚举 {@link CommonStatusEnum}
      */
     private Integer status;
@@ -97,7 +94,6 @@ public class MemberUserDO extends TenantBaseDO {
     private String name;
     /**
      * 性别
-     *
      * 枚举 {@link SexEnum}
      */
     private Integer sex;
@@ -107,7 +103,6 @@ public class MemberUserDO extends TenantBaseDO {
     private LocalDateTime birthday;
     /**
      * 所在地
-     *
      * 关联 {@link Area#getId()} 字段
      */
     private Integer areaId;
@@ -132,7 +127,6 @@ public class MemberUserDO extends TenantBaseDO {
 
     /**
      * 会员级别编号
-     *
      * 关联 {@link MemberLevelDO#getId()} 字段
      */
     private Long levelId;
@@ -142,7 +136,6 @@ public class MemberUserDO extends TenantBaseDO {
     private Integer experience;
     /**
      * 用户分组编号
-     *
      * 关联 {@link MemberGroupDO#getId()} 字段
      */
     private Long groupId;
@@ -152,4 +145,9 @@ public class MemberUserDO extends TenantBaseDO {
      */
     private Long systemUsersId;
 
+    /**
+     * 登录用的用户名
+     */
+    private String username;
+
 }

+ 3 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/dal/mysql/user/MemberUserMapper.java

@@ -25,6 +25,9 @@ public interface MemberUserMapper extends BaseMapperX<MemberUserDO> {
     default MemberUserDO selectByMobile(String mobile) {
         return selectOne(MemberUserDO::getMobile, mobile);
     }
+    default MemberUserDO selectByMobileAndUsername(String mobile,String username) {
+        return selectOne(MemberUserDO::getMobile, mobile,MemberUserDO::getUsername, username);
+    }
 
     default List<MemberUserDO> selectListByNicknameLike(String nickname) {
         return selectList(new LambdaQueryWrapperX<MemberUserDO>()

+ 7 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/auth/MemberAuthService.java

@@ -86,4 +86,11 @@ public interface MemberAuthService {
      */
     AppAuthLoginRespVO refreshToken(String refreshToken);
 
+    /**
+     * 使用手机号 + 验证码注册
+     *
+     * @param reqVO 注册信息
+     * @return 登录结果
+     */
+    AppAuthLoginRespVO smsRegister(AppAuthSmsRegisterReqVO reqVO);
 }

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

@@ -38,6 +38,7 @@ import java.util.Objects;
 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.framework.web.core.util.WebFrameworkUtils.getTerminal;
+import static cn.newfeifan.mall.module.member.enums.DictTypeConstants.*;
 import static cn.newfeifan.mall.module.member.enums.ErrorCodeConstants.*;
 
 /**
@@ -64,8 +65,8 @@ public class MemberAuthServiceImpl implements MemberAuthService {
 
     @Override
     public AppAuthLoginRespVO login(AppAuthLoginReqVO reqVO) {
-        // 使用手机 + 密码,进行登录。
-        MemberUserDO user = login0(reqVO.getMobile(), reqVO.getPassword());
+        // 使用用户名 + 密码,进行登录。
+        MemberUserDO user = login0(reqVO.getUsername(), reqVO.getPassword());
 
         // 如果 socialType 非空,说明需要绑定社交用户
         String openid = null;
@@ -75,7 +76,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
         }
 
         // 创建 Token 令牌,记录登录日志
-        return createTokenAfterLoginSuccess(user, reqVO.getMobile(), LoginLogTypeEnum.LOGIN_MOBILE, openid);
+        return createTokenAfterLoginSuccess(user, reqVO.getUsername(), LoginLogTypeEnum.LOGIN_MOBILE, openid);
     }
 
     @Override
@@ -86,8 +87,8 @@ public class MemberAuthServiceImpl implements MemberAuthService {
         smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MEMBER_LOGIN.getScene(), userIp));
 
         // 获得获得注册用户
-        MemberUserDO user = userService.createUserIfAbsent(reqVO.getMobile(), userIp, getTerminal(), reqVO.getLinkId());
-        Assert.notNull(user, "获取用户失败,结果为空");
+        MemberUserDO user = userService.createUserIfAbsent(reqVO.getMobile(), reqVO.getUsername(), userIp, getTerminal());
+        Assert.notNull(user, "获取用户失败,查询不到此用户");
 
         // 如果 socialType 非空,说明需要绑定社交用户
         String openid = null;
@@ -125,10 +126,10 @@ public class MemberAuthServiceImpl implements MemberAuthService {
                 user = userService.getUserByMobile(phone);
                 if (user == null) {
                     //加入手机号
-                    user = userService.createUser(phone, socialUser.getNickname(), socialUser.getAvatar(), getClientIP(), getTerminal(), reqVO.getLinkId());
+                    user = userService.createUser(phone, socialUser.getNickname(), socialUser.getAvatar(), getClientIP(), getTerminal(), reqVO.getLinkId(),null);
                 }
             } else {
-                user = userService.createUser(null, socialUser.getNickname(), socialUser.getAvatar(), getClientIP(), getTerminal(), reqVO.getLinkId());
+                user = userService.createUser(null, socialUser.getNickname(), socialUser.getAvatar(), getClientIP(), getTerminal(), reqVO.getLinkId(),null);
             }
 
             socialUserApi.bindSocialUser(new SocialUserBindReqDTO(user.getId(), getUserType().getValue(),
@@ -150,8 +151,8 @@ public class MemberAuthServiceImpl implements MemberAuthService {
         Assert.notNull(phoneNumberInfo, "获得手机信息失败,结果为空");
 
         // 获得获得注册用户
-        MemberUserDO user = userService.createUserIfAbsent(phoneNumberInfo.getPurePhoneNumber(),
-                getClientIP(), TerminalEnum.WECHAT_MINI_PROGRAM.getTerminal(), null);
+        MemberUserDO user = userService.createUserIfAbsent(phoneNumberInfo.getPurePhoneNumber(),null,
+                getClientIP(), TerminalEnum.WECHAT_MINI_PROGRAM.getTerminal());
         Assert.notNull(user, "获取用户失败,结果为空");
 
         // 绑定社交用户
@@ -162,10 +163,10 @@ public class MemberAuthServiceImpl implements MemberAuthService {
         return createTokenAfterLoginSuccess(user, user.getMobile(), LoginLogTypeEnum.LOGIN_SOCIAL, openid);
     }
 
-    private AppAuthLoginRespVO createTokenAfterLoginSuccess(MemberUserDO user, String mobile,
+    private AppAuthLoginRespVO createTokenAfterLoginSuccess(MemberUserDO user, String username,
                                                             LoginLogTypeEnum logType, String openid) {
         // 插入登陆日志
-        createLoginLog(user.getId(), mobile, logType, LoginResultEnum.SUCCESS);
+        createLoginLog(user.getId(), username, logType, LoginResultEnum.SUCCESS);
         // 创建 Token 令牌
         OAuth2AccessTokenRespDTO accessTokenRespDTO = oauth2TokenApi.createAccessToken(new OAuth2AccessTokenCreateReqDTO()
                 .setUserId(user.getId()).setUserType(getUserType().getValue())
@@ -179,34 +180,34 @@ public class MemberAuthServiceImpl implements MemberAuthService {
         return socialClientApi.getAuthorizeUrl(type, UserTypeEnum.MEMBER.getValue(), redirectUri);
     }
 
-    private MemberUserDO login0(String mobile, String password) {
+    private MemberUserDO login0(String username, String password) {
         final LoginLogTypeEnum logTypeEnum = LoginLogTypeEnum.LOGIN_MOBILE;
         // 校验账号是否存在
-        MemberUserDO user = userService.getUserByMobile(mobile);
+        MemberUserDO user = userService.getUserByUsername(username);
         if (user == null) {
-            createLoginLog(null, mobile, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS);
+            createLoginLog(null, username, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS);
             throw exception(AUTH_LOGIN_BAD_CREDENTIALS);
         }
         if (!userService.isPasswordMatch(password, user.getPassword())) {
-            createLoginLog(user.getId(), mobile, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS);
+            createLoginLog(user.getId(), username, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS);
             throw exception(AUTH_LOGIN_BAD_CREDENTIALS);
         }
         // 校验是否禁用
         if (ObjectUtil.notEqual(user.getStatus(), CommonStatusEnum.ENABLE.getStatus())) {
-            createLoginLog(user.getId(), mobile, logTypeEnum, LoginResultEnum.USER_DISABLED);
+            createLoginLog(user.getId(), username, logTypeEnum, LoginResultEnum.USER_DISABLED);
             throw exception(AUTH_LOGIN_USER_DISABLED);
         }
         return user;
     }
 
-    private void createLoginLog(Long userId, String mobile, LoginLogTypeEnum logType, LoginResultEnum loginResult) {
+    private void createLoginLog(Long userId, String username, LoginLogTypeEnum logType, LoginResultEnum loginResult) {
         // 插入登录日志
         LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO();
         reqDTO.setLogType(logType.getType());
         reqDTO.setTraceId(TracerUtils.getTraceId());
         reqDTO.setUserId(userId);
         reqDTO.setUserType(getUserType().getValue());
-        reqDTO.setUsername(mobile);
+        reqDTO.setUsername(username);
         reqDTO.setUserAgent(ServletUtils.getUserAgent());
         reqDTO.setUserIp(getClientIP());
         reqDTO.setResult(loginResult.getResult());
@@ -267,6 +268,45 @@ public class MemberAuthServiceImpl implements MemberAuthService {
         return AuthConvert.INSTANCE.convert(accessTokenDO, null);
     }
 
+    @Override
+    public AppAuthLoginRespVO smsRegister(AppAuthSmsRegisterReqVO reqVO) {
+        // 校验验证码
+        String userIp = getClientIP();
+        smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MEMBER_LOGIN.getScene(), userIp));
+
+        //校验手机号注册是否达到上限
+        verifyMobileIsMaximize(reqVO.getMobile());
+
+        //校验用户名
+        verifyUsername(reqVO.getUsername());
+
+        //创建用户
+        MemberUserDO user = userService.createUser(reqVO.getMobile(), reqVO.getUsername(), null, getClientIP(), getTerminal(), reqVO.getLinkId(), reqVO.getUsername());
+        // 创建 Token 令牌,记录登录日志
+        return createTokenAfterLoginSuccess(user, reqVO.getMobile(), LoginLogTypeEnum.LOGIN_SMS, null);
+    }
+
+    /**
+     * 校验手机号是否达到上限
+     * @param mobile 手机号
+     */
+    private void verifyMobileIsMaximize(String mobile) {
+        //如果手机号已经到达注册的上限了那就返回报错
+        if (userService.getUserCountByMobile(mobile) >= MOBILE_REGISTER_MAX) {
+            throw exception(MOBILE_IS_MAXIMIZE);
+        }
+    }
+
+    /**
+     * 校验用户名
+     * @param username 用户名
+     */
+    private void verifyUsername(String username){
+        if (userService.selectCountByUsername(username) > 0) {
+            throw exception(AUTH_USERNAME_EXISTS);
+        }
+    }
+
     private void createLogoutLog(Long userId) {
         LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO();
         reqDTO.setLogType(LoginLogTypeEnum.LOGOUT_SELF.getType());

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

@@ -40,12 +40,12 @@ public interface MemberUserService {
      * 如果用户已经存在,则直接进行返回
      *
      * @param mobile     手机号
+     * @param username   用户名
      * @param registerIp 注册 IP
      * @param terminal   终端 {@link TerminalEnum}
-     * @param linkId     链接编号
      * @return 用户对象
      */
-    MemberUserDO createUserIfAbsent(@Mobile String mobile, String registerIp, Integer terminal, Long linkId);
+    MemberUserDO createUserIfAbsent(@Mobile String mobile, String username, String registerIp, Integer terminal);
 
     /**
      * 创建用户
@@ -59,7 +59,7 @@ public interface MemberUserService {
      * @param linkId     链接编号
      * @return 用户对象
      */
-    MemberUserDO createUser(String mobile, String nickname, String avtar, String registerIp, Integer terminal, Long linkId);
+    MemberUserDO createUser(String mobile, String nickname, String avtar, String registerIp, Integer terminal, Long linkId, String username);
 
     /**
      * 更新用户的最后登陆信息
@@ -191,4 +191,25 @@ public interface MemberUserService {
     boolean updateUserPoint(Long userId, Integer point);
 
     Long getUserIdBySystemUserId(Long systemUserId);
+
+    /**
+     * 根据用户名查询用户
+     * @param username 用户名
+     * @return 用户数量
+     */
+    Long selectCountByUsername(String username);
+
+    /**
+     * 根据用户名查询用户
+     * @param username 用户名
+     * @return 用户
+     */
+    MemberUserDO getUserByUsername(String username);
+
+    /**
+     * 根据手机号查询用户的数量
+     * @param mobile 手机号
+     * @return 数量
+     */
+    Long getUserCountByMobile(String mobile);
 }

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

@@ -86,25 +86,22 @@ public class MemberUserServiceImpl implements MemberUserService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public MemberUserDO createUserIfAbsent(String mobile, String registerIp, Integer terminal, Long linkId) {
+    public MemberUserDO createUserIfAbsent(String mobile, String username, String registerIp, Integer terminal) {
         // 用户已经存在
-        MemberUserDO user = memberUserMapper.selectByMobile(mobile);
-        if (user != null) {
-            return user;
-        }
+        return memberUserMapper.selectByMobileAndUsername(mobile, username);
         // 用户不存在,则进行创建
-        return privateCreateUser(mobile, null, null, registerIp, terminal, linkId);
+//        return privateCreateUser(mobile, null, null, registerIp, terminal);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public MemberUserDO createUser(String mobile, String nickname, String avtar, String registerIp, Integer terminal, Long linkId) {
-        return privateCreateUser(mobile, nickname, avtar, registerIp, terminal, linkId);
+    public MemberUserDO createUser(String mobile, String nickname, String avtar, String registerIp, Integer terminal, Long linkId,String username) {
+        return privateCreateUser(mobile, nickname, avtar, registerIp, terminal, linkId,username);
     }
 
     @Transactional(rollbackFor = Exception.class)
     public MemberUserDO privateCreateUser(String mobile, String nickname, String avtar,
-                                          String registerIp, Integer terminal, Long linkId) {
+                                          String registerIp, Integer terminal, Long linkId,String username) {
         // 通过手机号查询系统用户编号
         Long systemUserId = adminUserService.getUserIdByMobile(mobile);
         log.info("注册的手机号:{},系统用户编号:{}", mobile, systemUserId);
@@ -113,6 +110,7 @@ public class MemberUserServiceImpl implements MemberUserService {
         String password = IdUtil.fastSimpleUUID();
         // 插入用户
         MemberUserDO user = new MemberUserDO();
+        user.setUsername(username);
         user.setMobile(mobile);
         user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
         user.setPassword(encodePassword(password)); // 加密密码
@@ -349,4 +347,19 @@ public class MemberUserServiceImpl implements MemberUserService {
         return memberUserDO == null ? null : memberUserDO.getId();
     }
 
+    @Override
+    public Long selectCountByUsername(String username) {
+        return memberUserMapper.selectCount(MemberUserDO::getUsername, username);
+    }
+
+    @Override
+    public MemberUserDO getUserByUsername(String username) {
+        return memberUserMapper.selectOne(MemberUserDO::getUsername,username);
+    }
+
+    @Override
+    public Long getUserCountByMobile(String mobile) {
+        return memberUserMapper.selectCount(MemberUserDO::getMobile,mobile);
+    }
+
 }