|
@@ -9,6 +9,7 @@ import com.slodon.b2b2c.core.response.SldResponse;
|
|
import com.slodon.b2b2c.core.util.AssertUtil;
|
|
import com.slodon.b2b2c.core.util.AssertUtil;
|
|
import com.slodon.b2b2c.core.util.Md5;
|
|
import com.slodon.b2b2c.core.util.Md5;
|
|
import com.slodon.b2b2c.core.util.StringUtil;
|
|
import com.slodon.b2b2c.core.util.StringUtil;
|
|
|
|
+import com.slodon.b2b2c.core.util.WebUtil;
|
|
import com.slodon.b2b2c.dao.read.member.MemberReadMapper;
|
|
import com.slodon.b2b2c.dao.read.member.MemberReadMapper;
|
|
import com.slodon.b2b2c.dao.write.member.MemberWriteMapper;
|
|
import com.slodon.b2b2c.dao.write.member.MemberWriteMapper;
|
|
import com.slodon.b2b2c.member.example.MemberExample;
|
|
import com.slodon.b2b2c.member.example.MemberExample;
|
|
@@ -18,19 +19,23 @@ import com.slodon.b2b2c.model.member.advich.MemberEnquiryModel;
|
|
import com.slodon.b2b2c.model.member.advich.MemberRegisterActiveModel;
|
|
import com.slodon.b2b2c.model.member.advich.MemberRegisterActiveModel;
|
|
import com.slodon.b2b2c.model.seller.VendorModel;
|
|
import com.slodon.b2b2c.model.seller.VendorModel;
|
|
import com.slodon.b2b2c.seller.dto.VendorRegisterDTO;
|
|
import com.slodon.b2b2c.seller.dto.VendorRegisterDTO;
|
|
|
|
+import com.slodon.b2b2c.system.dto.CountryAreaApiDto;
|
|
import io.swagger.annotations.Api;
|
|
import io.swagger.annotations.Api;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
import org.springframework.util.CollectionUtils;
|
|
import org.springframework.util.CollectionUtils;
|
|
-import org.springframework.web.bind.annotation.GetMapping;
|
|
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
|
+import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @author cyan
|
|
* @author cyan
|
|
@@ -62,6 +67,13 @@ public class MemberEmailActiveController extends BaseController {
|
|
@Resource
|
|
@Resource
|
|
private VendorModel vendorModel;
|
|
private VendorModel vendorModel;
|
|
|
|
|
|
|
|
+ private static final Map<Integer, String> EMAIL_KEY_MAP = new HashMap<>();
|
|
|
|
+
|
|
|
|
+ static {
|
|
|
|
+ EMAIL_KEY_MAP.put(1, RedisConst.SLD_PC_NEW_REGISTER_USER_EMAIL);
|
|
|
|
+ EMAIL_KEY_MAP.put(2, RedisConst.SLD_PC_FORGET_PWD_USER_EMAIL);
|
|
|
|
+ }
|
|
|
|
+
|
|
// /**
|
|
// /**
|
|
// * @param request
|
|
// * @param request
|
|
// * @param email
|
|
// * @param email
|
|
@@ -140,6 +152,204 @@ public class MemberEmailActiveController extends BaseController {
|
|
return SldResponse.success(Language.translate("发送验证邮件成功", Language.EN_LANGUAGE_TYPE));
|
|
return SldResponse.success(Language.translate("发送验证邮件成功", Language.EN_LANGUAGE_TYPE));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 发送注册或忘记密码验证码
|
|
|
|
+ *
|
|
|
|
+ * @param request
|
|
|
|
+ * @param email
|
|
|
|
+ * @param source
|
|
|
|
+ * @param type
|
|
|
|
+ * @param memberType
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @PostMapping("/verification/code")
|
|
|
|
+ public JsonResult<Object> getMemberEmailVerificationCode(HttpServletRequest request, String email, Integer source, Integer type, @RequestParam(value = "memberType", required = false, defaultValue = "1") String memberType) {
|
|
|
|
+ log.info("getMemberEmailVerificationCode - email:{},source:{},type:{},memberType:{}", email, source, type, memberType);
|
|
|
|
+ if (StringUtil.isEmpty(email)) {
|
|
|
|
+ return SldResponse.fail(Language.translate("邮件不能为空", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+ AssertUtil.emailCheck(email);
|
|
|
|
+
|
|
|
|
+ // 1. 判断是否在1分钟内已发送过验证码
|
|
|
|
+ String redisKey = RedisConst.SLD_PC_EMAIL_VERIFY_CODE_LIMIT + email + ":type::" + type + ":memberType::" + memberType;
|
|
|
|
+ if (Boolean.TRUE.equals(stringRedisTemplate.hasKey(redisKey))) {
|
|
|
|
+ return SldResponse.fail(Language.translate("请勿频繁操作,请1分钟后重试", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ int count;
|
|
|
|
+ if (type == 1) {
|
|
|
|
+ count = memberRegisterActiveModel.sendRegisterUserEmailVerificationCode(email, source, memberType);
|
|
|
|
+ AssertUtil.isTrue((count == 0), Language.translate("验证码发送失败,请重试", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ AssertUtil.isTrue((count == 2), Language.translate("该邮箱已注册,请登录", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ } else {
|
|
|
|
+ count = memberRegisterActiveModel.checkMemberUserInfo(email, memberType);
|
|
|
|
+ AssertUtil.isTrue((count == 0), Language.translate("验证码发送失败,请重试", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ AssertUtil.isTrue((count == 2), Language.translate("该邮箱未激活,请先激活", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ AssertUtil.isTrue((count == 3), Language.translate("该邮箱未注册,请先注册", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+ // 2. 设置 Redis 标记,1分钟内不可重复发送
|
|
|
|
+ stringRedisTemplate.opsForValue().set(redisKey, "1", 60, TimeUnit.SECONDS);
|
|
|
|
+ return SldResponse.success(Language.translate("验证码发送成功", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 校验注册或忘记密码验证码
|
|
|
|
+ *
|
|
|
|
+ * @param request
|
|
|
|
+ * @param email
|
|
|
|
+ * @param type
|
|
|
|
+ * @param verificationCode
|
|
|
|
+ * @param memberType
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @PostMapping("/check/verification/code")
|
|
|
|
+ public JsonResult<Object> checkMemberEmailVerificationCode(HttpServletRequest request, String email, Integer type, String verificationCode, @RequestParam(value = "memberType", required = false, defaultValue = "1") String memberType) {
|
|
|
|
+ log.info("checkMemberEmailVerificationCode - email:{},type:{},verificationCode:{},memberType:{}", email, type, verificationCode, memberType);
|
|
|
|
+ if (StringUtil.isEmpty(email)) {
|
|
|
|
+ return SldResponse.fail(Language.translate("邮件不能为空", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+ if (StringUtil.isEmpty(verificationCode)) {
|
|
|
|
+ return SldResponse.fail(Language.translate("验证码不能为空", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+ AssertUtil.emailCheck(email);
|
|
|
|
+
|
|
|
|
+ String baseKey = EMAIL_KEY_MAP.get(type);
|
|
|
|
+ if (baseKey == null) {
|
|
|
|
+ return SldResponse.fail(Language.translate("验证码不能为空", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ String redisKey = baseKey + email + ":memberType::" + memberType;
|
|
|
|
+ if (!stringRedisTemplate.hasKey(redisKey)) {
|
|
|
|
+ return SldResponse.fail(Language.translate("验证码已过期,请重新获取", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ String storedCode = stringRedisTemplate.opsForValue().get(redisKey);
|
|
|
|
+ if (!verificationCode.equals(storedCode)) {
|
|
|
|
+ return SldResponse.fail(ResponseConst.STATE_FAIL, Language.translate("验证码校验失败", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+ stringRedisTemplate.delete(redisKey);
|
|
|
|
+ return SldResponse.success(Language.translate("验证码校验成功", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 注册
|
|
|
|
+ *
|
|
|
|
+ * @param request
|
|
|
|
+ * @param email
|
|
|
|
+ * @param nickName
|
|
|
|
+ * @param password
|
|
|
|
+ * @param confirmPassword
|
|
|
|
+ * @param memberType
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @PostMapping("/register")
|
|
|
|
+ public JsonResult<Object> activeMemberEmailInfo(HttpServletRequest request, String email, String nickName, String password, String confirmPassword, @RequestParam(value = "memberType", required = false, defaultValue = "1") String memberType) {
|
|
|
|
+ log.info("activeMemberEmailInfo - email:{},nickName:{},password:{},confirmPassword:{},memberType:{}", email, nickName, password, confirmPassword, memberType);
|
|
|
|
+ if (StringUtil.isEmpty(email)) {
|
|
|
|
+ return SldResponse.fail(ResponseConst.STATE_FAIL, Language.translate("邮件不能为空", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+ if (!password.equals(confirmPassword)) {
|
|
|
|
+ return SldResponse.fail(ResponseConst.STATE_FAIL, Language.translate("密码不一致,请重新输入", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+ AssertUtil.passwordCheck(password);
|
|
|
|
+ MemberExample memberExample = new MemberExample();
|
|
|
|
+ memberExample.setMemberEmail(email.toLowerCase());
|
|
|
|
+ memberExample.setMemberType(memberType);
|
|
|
|
+ List<Member> memberList = memberReadMapper.listByExample(memberExample);
|
|
|
|
+ if (CollectionUtils.isEmpty(memberList)) {
|
|
|
|
+ return SldResponse.fail(ResponseConst.STATE_FAIL, Language.translate("会员邮箱不存在,请重新注册", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Member memberInfo = memberList.get(0);
|
|
|
|
+ if (memberInfo.getIsEmailActive() != null && memberInfo.getIsEmailActive() == 1) {
|
|
|
|
+ return SldResponse.fail(ResponseConst.STATE_FAIL, Language.translate("会员邮箱已激活,无需重复注册,请登录", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 更新用户邮箱激活状态
|
|
|
|
+ Member memberNew = new Member();
|
|
|
|
+ memberNew.setMemberId(memberInfo.getMemberId());
|
|
|
|
+ memberNew.setIsEmailActive(1);
|
|
|
|
+ memberNew.setUpdateTime(new Date());
|
|
|
|
+ memberNew.setMemberNickName(nickName);
|
|
|
|
+ memberNew.setLoginPwd(Md5.getMd5String(password));
|
|
|
|
+ String ip = WebUtil.getRealIp(request);
|
|
|
|
+ CountryAreaApiDto countryAreaApiDto = memberEnquiryModel.getCountryAndAreaByIp(ip);
|
|
|
|
+ memberNew.setCountry(countryAreaApiDto.getCountryIsoCode());
|
|
|
|
+ memberNew.setCity(countryAreaApiDto.getCityIsoCode());
|
|
|
|
+ memberModel.updateMember(memberNew);
|
|
|
|
+
|
|
|
|
+ // 发送账户注册成功邮件
|
|
|
|
+ memberRegisterActiveModel.sendRegisterSuccessEmail(email, nickName);
|
|
|
|
+ return SldResponse.success(Language.translate("会员邮箱账户激活成功", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 用户邮箱重置忘记密码
|
|
|
|
+ *
|
|
|
|
+ * @param request
|
|
|
|
+ * @param email
|
|
|
|
+ * @param verificationCode
|
|
|
|
+ * @param loginPwd
|
|
|
|
+ * @param confirmPassWord
|
|
|
|
+ * @param memberType
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @PostMapping("/email/reset/pwdNew")
|
|
|
|
+ public JsonResult<Object> emailResetPwdNew(HttpServletRequest request, String email, String verificationCode, String loginPwd, String confirmPassWord, @RequestParam(value = "memberType", required = false, defaultValue = "1") String memberType) {
|
|
|
|
+ log.info("emailResetPwd - email:{},verificationCode:{},loginPwd:{},confirmPassWord:{},memberType:{}", email, verificationCode, loginPwd, confirmPassWord, memberType);
|
|
|
|
+ if (StringUtil.isEmpty(email)) {
|
|
|
|
+ return SldResponse.fail(ResponseConst.STATE_FAIL, Language.translate("邮件不能为空", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+ MemberExample memberExample = new MemberExample();
|
|
|
|
+ memberExample.setMemberEmail(email.toLowerCase());
|
|
|
|
+ memberExample.setMemberType(memberType);
|
|
|
|
+ List<Member> memberList = memberReadMapper.listByExample(memberExample);
|
|
|
|
+
|
|
|
|
+ if (CollectionUtils.isEmpty(memberList)) {
|
|
|
|
+ return SldResponse.fail(ResponseConst.STATE_FAIL, Language.translate("该邮箱不存在,请先注册", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Member memberInfo = memberList.get(0);
|
|
|
|
+ if (memberInfo.getIsEmailActive() != null && memberInfo.getIsEmailActive() == 0) {
|
|
|
|
+ return SldResponse.fail(ResponseConst.STATE_FAIL, Language.translate("该邮箱未激活,请先激活", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!loginPwd.equals(confirmPassWord)) {
|
|
|
|
+ return SldResponse.fail(ResponseConst.STATE_FAIL, Language.translate("密码不一致,请重新输入", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ AssertUtil.passwordCheck(loginPwd);
|
|
|
|
+
|
|
|
|
+ String forgetPwdEmailKey = RedisConst.SLD_PC_FORGET_PWD_USER_EMAIL + email;
|
|
|
|
+ log.info("forgetPwdEmailKey:{}", forgetPwdEmailKey);
|
|
|
|
+ if (stringRedisTemplate.hasKey(forgetPwdEmailKey)) {
|
|
|
|
+ String verifyNumber = stringRedisTemplate.opsForValue().get(forgetPwdEmailKey);
|
|
|
|
+ log.info("verifyNumber:{}", verifyNumber);
|
|
|
|
+ if (!verificationCode.equals(verifyNumber)) {
|
|
|
|
+ return SldResponse.fail(ResponseConst.STATE_FAIL, Language.translate("验证码校验失败", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 更新用户密码
|
|
|
|
+ Member memberNew = new Member();
|
|
|
|
+ memberNew.setMemberId(memberInfo.getMemberId());
|
|
|
|
+ memberNew.setLoginPwd(Md5.getMd5String(loginPwd));
|
|
|
|
+ memberNew.setUpdateTime(new Date());
|
|
|
|
+ memberModel.updateMember(memberNew);
|
|
|
|
+
|
|
|
|
+ stringRedisTemplate.delete(forgetPwdEmailKey);
|
|
|
|
+
|
|
|
|
+ return SldResponse.success(Language.translate("重置登录密码成功", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+ return SldResponse.fail(ResponseConst.STATE_FAIL, Language.translate("验证码已过期,请重新获取", Language.EN_LANGUAGE_TYPE));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 用户邮箱链接激活
|
|
* 用户邮箱链接激活
|
|
*
|
|
*
|