liujie
2026-06-09 c96fbe6b0aeb413a17c429133ee6d81d138144b9
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysLoginService.java
@@ -114,7 +114,57 @@
      // recordLogService.recordLogininfor(request, user.getId().intValue(), username, Constants.LOGIN_SUCCESS_STATUS, "登录成功");
      return userInfo;
   }
    /**
     * 登录
     */
    public LoginUser login(String username, HttpServletRequest request) {
        username = username.trim();
        // 查询用户信息
        SysUser user = userService.selectUserByPhone(username);
        if (StringUtils.isNull(user)) {
            throw new ServiceException("帐号不存在或已被删除", I18nKeyConstant.ACCOUNT_NOT_EXISTS);
        }
        // 角色集合
        Set<String> roles = permissionService.getRolePermission(user);
        // 权限集合
        Set<String> menuPermission = permissionService.getMenuPermission(user);
        LoginUser userInfo = new LoginUser();
        userInfo.setSysUser(user);
        userInfo.setRoles(roles);
        userInfo.setPermissions(menuPermission);
        if (StringUtils.isNull(user)) {
            recordLogService.recordLogininfor(request, null, username, Constants.LOGIN_FAIL_STATUS, "登录用户不存在");
            throw new ServiceException("用户名/密码错误", I18nKeyConstant.LOGIN_USERNAME_PASSWORD);
        }
        // 用户名不在指定范围内 错误
        if (username.length() < UserConstants.USERNAME_MIN_LENGTH
                || username.length() > UserConstants.USERNAME_MAX_LENGTH) {
            recordLogService.recordLogininfor(request, user.getId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户名不在指定范围");
            throw new ServiceException("用户名不在指定范围",I18nKeyConstant.LOGIN_USERNAME_NOT_VALID);
        }
        // IP黑名单校验
        String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST));
        if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) {
            recordLogService.recordLogininfor(request, user.getId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "很遗憾,访问IP已被列入系统黑名单");
            throw new ServiceException("很遗憾,访问IP已被列入系统黑名单", I18nKeyConstant.LOGIN_BLACK_LIST);
        }
        if (user.getDeleted()) {
            recordLogService.recordLogininfor(request, user.getId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "对不起,您的账号已被删除");
            throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
        }
        if (Integer.valueOf("1").equals(user.getStatus())) {
            recordLogService.recordLogininfor(request, user.getId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户已停用,请联系管理员");
            throw new ServiceException("您的账号:" + username + " 已禁用", I18nKeyConstant.LOGIN_ACCOUNT_DISABLED, new Object[]{username});
        }
        return userInfo;
    }
   public void logout(String loginName, HttpServletRequest request) {
      recordLogService.recordLogininfor(request, null, loginName, Constants.LOGIN_SUCCESS_STATUS, "退出成功");
   }
@@ -179,7 +229,10 @@
      operationsUserService.updateById(operationsUser);
      return loginOperationUser;
   }
   public LoginOperationUser verificationCodeLogin(String phoneNumber, String code, Integer deviceType, HttpServletRequest request) {
    public LoginOperationUser verificationCodeLogin(String phoneNumber, String code, Integer deviceType, HttpServletRequest request) {
      LoginOperationUser loginOperationUser = new LoginOperationUser();
      phoneNumber = phoneNumber.trim();
      if (StringUtils.isAnyBlank(phoneNumber, code)) {
@@ -197,14 +250,11 @@
      }
      operationsUser.setPhoneNumber(SensitiveDataCryptoUtil.decryptIfPossible(operationsUser.getPhoneNumber()));
      String verificationCode = redisService.getCacheObject(VerificationCodeConstants.LOGIN_CODE + phoneNumber);
      if(!code.equals("070456")){
         //临时验证码
         if (StringUtils.isBlank(verificationCode)){
            throw new ServiceException("验证码已过期!");
         }
         if (!verificationCode.equals(code)){
            throw new ServiceException("验证码错误!");
         }
      if (StringUtils.isBlank(verificationCode)){
         throw new ServiceException("验证码已过期!");
      }
      if (!verificationCode.equals(code)){
         throw new ServiceException("验证码错误!");
      }
      loginOperationUser.setXpOperationsUser(operationsUser);
@@ -213,23 +263,47 @@
      operationsUserService.updateById(operationsUser);
      return loginOperationUser;
   }
    public LoginOperationUser verificationCodeLogin(String phoneNumber, Integer deviceType, HttpServletRequest request) {
        LoginOperationUser loginOperationUser = new LoginOperationUser();
        phoneNumber = phoneNumber.trim();
        // 查询运维用户信息
        XpOperationsUser operationsUser = operationsUserService.lambdaQuery().eq(
                XpOperationsUser::getPhoneNumber, SensitiveDataCryptoUtil.encrypt(phoneNumber)
        ).last("limit 1").one();
        if (StringUtils.isNull(operationsUser)) {
            throw new ServiceException("查询用户失败!");
        }
        if (!operationsUser.getStatus()){
            throw new ServiceException("账号已禁用!");
        }
        //更新用户登录设备类型
        operationsUser.setDeviceType(deviceType);
        operationsUserService.updateById(operationsUser);
        loginOperationUser.setXpOperationsUser(operationsUser);
        operationsUser.setPhoneNumber(SensitiveDataCryptoUtil.decryptIfPossible(operationsUser.getPhoneNumber()));
        return loginOperationUser;
    }
   public Boolean verificationCodeUpdate(UpdatePasswordDTO updatePasswordDTO, HttpServletRequest request) {
      String phoneNumber = updatePasswordDTO.getPhoneNumber();
      String code = updatePasswordDTO.getVerificationCode();
      phoneNumber = phoneNumber.trim();
      if (StringUtils.isAnyBlank(phoneNumber, code)) {
         throw new ServiceException("用户/验证码必须填写");
      }
      // 查询运维用户信息
      XpOperationsUser operationsUser = operationsUserService.lambdaQuery()
            .in(XpOperationsUser::getPhoneNumber, SensitiveDataCryptoUtil.queryValues(phoneNumber))
            .last("limit 1").one();
      XpOperationsUser operationsUser = operationsUserService.lambdaQuery().in(
            XpOperationsUser::getPhoneNumber, SensitiveDataCryptoUtil.queryValues(phoneNumber)
      ).last("limit 1").one();
      if (StringUtils.isNull(operationsUser)) {
         throw new ServiceException("验证码错误!");
      }
      if (!operationsUser.getStatus()){
         throw new ServiceException("账号已禁用!");
      }
      if (StringUtils.isAnyBlank(phoneNumber, code)) {
         throw new ServiceException("用户/验证码必须填写");
      }
      operationsUser.setPhoneNumber(SensitiveDataCryptoUtil.decryptIfPossible(operationsUser.getPhoneNumber()));
      String verificationCode = redisService.getCacheObject(VerificationCodeConstants.UPDATE_PASSWORD_CODE + phoneNumber);
      if (StringUtils.isBlank(verificationCode)){