|
@@ -22,7 +22,6 @@ import io.swagger.annotations.Api;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
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.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
@@ -30,7 +29,10 @@ import org.springframework.web.bind.annotation.RestController;
|
|
|
import javax.annotation.Resource;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
/**
|
|
|
* @author cyan
|
|
@@ -62,6 +64,13 @@ public class MemberEmailActiveController extends BaseController {
|
|
|
@Resource
|
|
|
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 email
|
|
@@ -140,6 +149,194 @@ public class MemberEmailActiveController extends BaseController {
|
|
|
return SldResponse.success(Language.translate("发送验证邮件成功", Language.EN_LANGUAGE_TYPE));
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送注册或忘记密码验证码
|
|
|
+ *
|
|
|
+ * @param request
|
|
|
+ * @param email
|
|
|
+ * @param source
|
|
|
+ * @param type
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @PostMapping("/verification/code")
|
|
|
+ public JsonResult<Object> getMemberEmailVerificationCode(HttpServletRequest request, String email, Integer source, Integer type) {
|
|
|
+ log.info("getMemberEmailVerificationCode - email:{},source:{},type:{}", email, source, type);
|
|
|
+ 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;
|
|
|
+ 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);
|
|
|
+ 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, type);
|
|
|
+ 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
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @PostMapping("/check/verification/code")
|
|
|
+ public JsonResult<Object> checkMemberEmailVerificationCode(HttpServletRequest request, String email, Integer type, String verificationCode) {
|
|
|
+ log.info("checkMemberEmailVerificationCode - email:{},type:{},verificationCode:{}", email, type, verificationCode);
|
|
|
+ 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;
|
|
|
+ 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
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @PostMapping("/register")
|
|
|
+ public JsonResult<Object> activeMemberEmailInfo(HttpServletRequest request, String email, String nickName, String password,String confirmPassword) {
|
|
|
+ log.info("activeMemberEmailInfo - email:{},nickName:{},password:{},confirmPassword:{}", email, nickName, password,confirmPassword);
|
|
|
+ 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());
|
|
|
+ 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));
|
|
|
+ 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
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @PostMapping("/email/reset/pwdNew")
|
|
|
+ public JsonResult<Object> emailResetPwdNew(HttpServletRequest request, String email, String verificationCode, String loginPwd, String confirmPassWord) {
|
|
|
+ log.info("emailResetPwd - email:{},verificationCode:{},loginPwd:{},confirmPassWord:{}", email, verificationCode, loginPwd, confirmPassWord);
|
|
|
+ if (StringUtil.isEmpty(email) ) {
|
|
|
+ return SldResponse.fail(ResponseConst.STATE_FAIL, Language.translate("邮件不能为空", Language.EN_LANGUAGE_TYPE));
|
|
|
+ }
|
|
|
+ MemberExample memberExample = new MemberExample();
|
|
|
+ memberExample.setMemberEmail(email.toLowerCase());
|
|
|
+ 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));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 用户邮箱链接激活
|
|
|
*
|