|
|
@@ -1,6 +1,7 @@
|
|
|
package com.qnfhq.modules.user.service.impl;
|
|
|
|
|
|
import cn.dev33.satoken.stp.StpUtil;
|
|
|
+import cn.hutool.core.lang.Validator;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
import cn.hutool.json.JSONObject;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
@@ -12,6 +13,7 @@ import com.qnfhq.common.utils.DateUtils;
|
|
|
import com.qnfhq.common.utils.IpUtils;
|
|
|
import com.qnfhq.common.utils.MessageUtils;
|
|
|
import com.qnfhq.common.utils.Result;
|
|
|
+import com.qnfhq.common.validator.ValidatorUtils;
|
|
|
import com.qnfhq.constant.ApiConstant;
|
|
|
import com.qnfhq.modules.user.dao.AppUserDao;
|
|
|
import com.qnfhq.modules.user.dto.*;
|
|
|
@@ -25,6 +27,7 @@ import com.qnfhq.modules.user.service.*;
|
|
|
import com.qnfhq.utils.EmailUtils;
|
|
|
import com.qnfhq.utils.EmailValidUtils;
|
|
|
import com.qnfhq.utils.OrderUtils;
|
|
|
+import com.qnfhq.utils.password.PasswordStrengthValidator;
|
|
|
import com.qnfhq.utils.password.PasswordUtils;
|
|
|
import com.qnfhq.utils.sms.SmsSenderUtil;
|
|
|
import jakarta.annotation.Resource;
|
|
|
@@ -75,14 +78,17 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
public AppUserEntity getUserByEmail(String email) {
|
|
|
return baseDao.selectOne(new LambdaQueryWrapper<AppUserEntity>()
|
|
|
.eq(AppUserEntity::getEmail, email)
|
|
|
+ .eq(AppUserEntity::getStatus, UserStatus.OK.getCode())
|
|
|
.last(" limit 1")
|
|
|
);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public AppUserEntity getUserByMobile(String mobile) {
|
|
|
+ public AppUserEntity getUserByMobile(String mobile,String zone) {
|
|
|
return baseDao.selectOne(new LambdaQueryWrapper<AppUserEntity>()
|
|
|
.eq(AppUserEntity::getPhone, mobile)
|
|
|
+ .eq(AppUserEntity::getZone, zone)
|
|
|
+ .eq(AppUserEntity::getStatus, UserStatus.OK.getCode())
|
|
|
.last(" limit 1")
|
|
|
);
|
|
|
}
|
|
|
@@ -91,6 +97,7 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
public AppUserEntity getUserByUserId(Long userId) {
|
|
|
return baseDao.selectOne(new LambdaQueryWrapper<AppUserEntity>()
|
|
|
.eq(AppUserEntity::getId, userId)
|
|
|
+ .eq(AppUserEntity::getStatus, UserStatus.OK.getCode())
|
|
|
.last(" limit 1")
|
|
|
);
|
|
|
}
|
|
|
@@ -99,15 +106,17 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
public AppUserEntity getUserByActiveCode(String activeCode) {
|
|
|
return baseDao.selectOne(new LambdaQueryWrapper<AppUserEntity>()
|
|
|
.eq(AppUserEntity::getActiveCode, activeCode)
|
|
|
+ .eq(AppUserEntity::getStatus, UserStatus.OK.getCode())
|
|
|
.last(" limit 1")
|
|
|
);
|
|
|
}
|
|
|
|
|
|
- public AppUserEntity getUserByLoginName(String loginName) {
|
|
|
- return baseDao.selectOne(new LambdaQueryWrapper<AppUserEntity>()
|
|
|
- .eq(AppUserEntity::getLoginName, loginName)
|
|
|
- .last(" limit 1")
|
|
|
- );
|
|
|
+ public AppUserEntity getUserByLoginName(String loginName,String zone) {
|
|
|
+ if(Validator.isEmail(loginName)) {
|
|
|
+ return getUserByEmail(loginName);
|
|
|
+ } else {
|
|
|
+ return getUserByMobile(loginName,zone);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -129,6 +138,9 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
AppUserEntity appUserEntity = new AppUserEntity();
|
|
|
//临时邮箱检测
|
|
|
EmailValidUtils.validateEmail(registerDto.getEmail());
|
|
|
+ //密码强度检测
|
|
|
+ PasswordStrengthValidator.validatePasswordStrength(registerDto.getLoginPassword());
|
|
|
+ log.info("password valid end");
|
|
|
|
|
|
//验证码校验
|
|
|
String codeType = registerDto.getCodeType();
|
|
|
@@ -141,11 +153,13 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
if(Objects.nonNull(appUser)){
|
|
|
throw new RenException(MessageUtils.message("user.register.email.exisit"));//邮箱已存在
|
|
|
}
|
|
|
- appUser = getUserByMobile(registerDto.getPhone());
|
|
|
+ appUser = getUserByMobile(registerDto.getPhone(),registerDto.getZone());
|
|
|
if(Objects.nonNull(appUser)){
|
|
|
throw new RenException(MessageUtils.message("user.register.phone.exisit"));//手机号已存在
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ appUserEntity.setCountry(registerDto.getCountry());
|
|
|
appUserEntity.setLoginName(registerDto.getEmail().toLowerCase().trim());
|
|
|
String host = request.getServerName();
|
|
|
appUserEntity.setHost(host);
|
|
|
@@ -153,7 +167,7 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
appUserEntity.setEmail(registerDto.getEmail().toLowerCase().trim());
|
|
|
appUserEntity.setZone(registerDto.getZone());
|
|
|
appUserEntity.setPhone(registerDto.getPhone());
|
|
|
- appUserEntity.setStatus(0);
|
|
|
+ appUserEntity.setStatus(UserStatus.OK.getCode());
|
|
|
appUserEntity.setIsTest(0);
|
|
|
appUserEntity.setIsBlack(UserBlackEnum.NORMAL.getCode());
|
|
|
appUserEntity.setLoginPassword(PasswordUtils.encode(registerDto.getLoginPassword().trim()));
|
|
|
@@ -220,6 +234,7 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
@Override
|
|
|
public Result login(AppLoginDTO dto, HttpServletRequest request)
|
|
|
{
|
|
|
+ //图形验证码
|
|
|
if(!captchaService.validate(dto.getUuid(), dto.getCode())) {
|
|
|
throw new RenException(MessageUtils.message("appUser.login.code.err"));//验证码错误
|
|
|
}
|
|
|
@@ -227,10 +242,7 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
//账号密码失败重试次数
|
|
|
checkPwdErrTryTimes(dto.getLoginName());
|
|
|
|
|
|
-
|
|
|
-// passwordTryTimes(pwdFailHourKey);
|
|
|
-
|
|
|
- AppUserEntity appUser = getUserByLoginName(dto.getLoginName());
|
|
|
+ AppUserEntity appUser = getUserByLoginName(dto.getLoginName(),dto.getZone());
|
|
|
if(appUser==null) {
|
|
|
throw new RenException(MessageUtils.message("appUser.loginName.or.password.err"));//账号或密码错误
|
|
|
}
|
|
|
@@ -239,6 +251,11 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
checkPwdErrTryTimes(dto.getLoginName());
|
|
|
throw new RenException(MessageUtils.message("appUser.loginName.or.password.err.limit.chance",ApiConstant.PASSWORD_FAIL_HOUR_TIMES-pwdFailTimes));//账号或密码错误,您还有4次机会
|
|
|
}
|
|
|
+ //手机验证校验
|
|
|
+ String codeType = UserCodeTypeEnum.LOGIN.name();
|
|
|
+ final String phoneCodeResultKey = String.format("%s%s%s%s%s",CachePrefix.SMS_CODE.getPrefix(),UserCodeTypeEnum.valueOf(codeType).name(),appUser.getZone(),appUser.getPhone(),":result");
|
|
|
+ verifyResult(phoneCodeResultKey);
|
|
|
+
|
|
|
//是否黑名单
|
|
|
if(Objects.nonNull(appUser.getIsBlack()) && appUser.getIsBlack() == UserBlackEnum.BLOCK.getCode()){
|
|
|
throw new RenException(MessageUtils.message("user_is_black"));//您的账号已被列入黑名单,无法登录。
|
|
|
@@ -365,7 +382,7 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
}
|
|
|
|
|
|
if(codeType.toLowerCase().equals("register")) {
|
|
|
- AppUserEntity appUser = getUserByMobile(phone);
|
|
|
+ AppUserEntity appUser = getUserByMobile(phone,zone);
|
|
|
if(Objects.nonNull(appUser)){
|
|
|
throw new RenException(MessageUtils.message("user.register.phone.exist"));//手机号已经存在
|
|
|
}
|
|
|
@@ -462,7 +479,7 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
|
|
|
|
|
|
//更新密码
|
|
|
- AppUserEntity appUser = getUserByMobile(phone);
|
|
|
+ AppUserEntity appUser = getUserByMobile(phone,zone);
|
|
|
if(Objects.isNull(appUser)){
|
|
|
throw new RenException(MessageUtils.message("user.not.exist"));//用户不存在
|
|
|
}
|
|
|
@@ -498,7 +515,7 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
checkPhoneCode("FIND_PASSWORD",codeDTO.getZone(),codeDTO.getPhone(),codeDTO.getCode());
|
|
|
|
|
|
//更新密码
|
|
|
- AppUserEntity appUser = getUserByMobile(codeDTO.getPhone());
|
|
|
+ AppUserEntity appUser = getUserByMobile(codeDTO.getPhone(),codeDTO.getZone());
|
|
|
if(Objects.isNull(appUser)){
|
|
|
throw new RenException(MessageUtils.message("user.not.exist"));//用户不存在
|
|
|
}
|