zoujiajian 3 yıl önce
ebeveyn
işleme
2ee52a917f

+ 28 - 0
netflix-dao/src/main/java/com/cyksj/model/request/UserBindInfoReq.java

@@ -0,0 +1,28 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+/*
+ *项目名: netflix
+ *文件名: UserBindInfoReq
+ *创建者: JavaZou
+ *创建时间:2023/7/31 17:33
+ */
+@Getter
+@Setter
+public class UserBindInfoReq {
+	@NotNull
+	private Integer type;
+
+	@NotEmpty(message = "请输入账号信息")
+	private String account;
+
+	private Long userId;
+
+	@NotEmpty(message = "请输入验证码")
+	private String code;
+}

+ 6 - 0
netflix-service/src/main/java/com/cyksj/service/market/task/BindTaskService.java

@@ -1,5 +1,7 @@
 package com.cyksj.service.market.task;
 
+import com.cyksj.model.request.UserBindInfoReq;
+
 /*
  *项目名: netflix
  *文件名: BindTaskService
@@ -18,4 +20,8 @@ public interface BindTaskService {
 	void bindPhone(Long userId, String phone, String code, Boolean isCode);
 
 	void updateBindPhone(Long userId, String phone, String code);
+
+	void bindEmail(Long userId, String email, String code);
+
+	void updateBindAccount(UserBindInfoReq request);
 }

+ 113 - 4
netflix-service/src/main/java/com/cyksj/service/market/task/impl/BindTaskServiceImpl.java

@@ -1,20 +1,27 @@
 package com.cyksj.service.market.task.impl;
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.TaskTypeEnum;
 import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.mapper.PhoneCodeMapper;
 import com.cyksj.mapper.market.task.TaskTypeMapper;
 import com.cyksj.mapper.market.task.UserBindDetailMapper;
+import com.cyksj.model.entity.PhoneCode;
 import com.cyksj.model.entity.TaskType;
 import com.cyksj.model.entity.UserBindDetail;
+import com.cyksj.model.request.UserBindInfoReq;
+import com.cyksj.redis.RedisService;
 import com.cyksj.service.market.task.BindTaskService;
 import com.cyksj.service.market.task.TaskService;
-import com.cyksj.service.phone.PhoneCodeService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.Optional;
 
 /*
@@ -30,10 +37,12 @@ public class BindTaskServiceImpl implements BindTaskService {
 
 	private final TaskTypeMapper taskTypeMapper;
 
-	private final PhoneCodeService phoneCodeService;
-
 	private final UserBindDetailMapper UserBindDetailMapper;
 
+	private final RedisService redisService;
+
+	private final PhoneCodeMapper phoneCodeMapper;
+
 
 	@Override
 	public void bindPhone(Long userId, String phone, String code, Boolean isCode) {
@@ -80,8 +89,108 @@ public class BindTaskServiceImpl implements BindTaskService {
 		if (other != null) {
 			throw BusinessRuntimeException.getInstance("该手机号已被绑定");
 		}
-		phoneCodeService.checkPhone(phone, code);
+		checkPhoneCode(phone, code);
 		bindPhone.setPhone(phone);
 		UserBindDetailMapper.updateById(bindPhone);
 	}
+
+	@Override
+	public void updateBindEmail(Long userId, String email, String inputCode) {
+		UserBindDetail bindPhone = UserBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
+				.eq(UserBindDetail::getUserId, userId).last("limit 1"));
+		if (bindPhone == null || StrUtil.isEmpty(bindPhone.getEmail())) {
+			throw BusinessRuntimeException.getInstance("您未绑定邮箱");
+		}
+		UserBindDetail other = UserBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
+				.eq(UserBindDetail::getEmail, email).ne(UserBindDetail::getUserId, userId).select(UserBindDetail::getId).last("limit 1"));
+		if (other != null) {
+			throw BusinessRuntimeException.getInstance("该邮箱已被绑定");
+		}
+		String code = redisService.getStr(RedisService.key.EMAIL_CODE_KEY.getNameFormat(email));
+		if (StrUtil.isEmpty(code)) {
+			throw BusinessRuntimeException.getInstance("邮箱验证码已失效,请重新获取");
+		}
+		if (!StrUtil.equals(inputCode, code)) {
+			throw BusinessRuntimeException.getInstance("邮箱验证码错误,请重新输入");
+		}
+		bindPhone.setEmail(email);
+		UserBindDetailMapper.updateById(bindPhone);
+	}
+
+	@Override
+	public void bindEmail(Long userId, String account, String inputCode) {
+		if (!Validator.isEmail(account)) {
+			throw BusinessRuntimeException.getInstance("请输入正确的邮箱");
+		}
+		UserBindDetail other = UserBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
+				.eq(UserBindDetail::getEmail, account).ne(UserBindDetail::getUserId, userId).select(UserBindDetail::getId).last("limit 1"));
+		if (other != null) {
+			throw BusinessRuntimeException.getInstance("该邮箱已被绑定");
+		}
+		UserBindDetail bindPhone = Optional.ofNullable(UserBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
+				.eq(UserBindDetail::getUserId, userId).last("limit 1"))).orElse(new UserBindDetail());
+		if (StrUtil.isNotBlank(bindPhone.getEmail())) {
+			throw BusinessRuntimeException.getInstance("您已绑定邮箱");
+		}
+		String code = redisService.getStr(RedisService.key.EMAIL_CODE_KEY.getNameFormat(account));
+		if (StrUtil.isEmpty(code)) {
+			throw BusinessRuntimeException.getInstance("邮箱验证码已失效,请重新获取");
+		}
+		if (!StrUtil.equals(inputCode, code)) {
+			throw BusinessRuntimeException.getInstance("邮箱验证码错误,请重新输入");
+		}
+		bindPhone.setEmail(account);
+		bindPhone.setUserId(userId);
+		try {
+			if (bindPhone.getId() == null) {
+				UserBindDetailMapper.insert(bindPhone);
+			} else {
+				UserBindDetailMapper.updateById(bindPhone);
+			}
+		} catch (DuplicateKeyException e) {
+
+		}
+		redisService.del(RedisService.key.EMAIL_CODE_KEY.getNameFormat(account));
+	}
+
+	@Override
+	public void updateBindAccount(UserBindInfoReq request) {
+		Long userId = request.getUserId();
+		String account = request.getAccount();
+		String code = request.getCode();
+		if (Validator.isMobile(account)) {
+			updateBindPhone(userId, account, code);
+			return;
+		}
+
+	}
+
+	@Override
+	public void checkPhoneCode(String phone, String inputCode) {
+		DateTime now = DateTime.now();
+		PhoneCode phoneCode = phoneCodeMapper.selectOne(Wrappers.lambdaQuery(PhoneCode.class).eq(PhoneCode::getPhone, phone).last("limit 1"));
+		if (phoneCode == null || StrUtil.isEmpty(phoneCode.getCode())) {
+			throw BusinessRuntimeException.getInstance("请重新获取手机验证码");
+		}
+		//3分钟失效
+		Date updateTime = phoneCode.getUpdateTime();
+		DateTime afterFiveMinutes = DateUtil.offsetMinute(updateTime, 3);
+		if (now.isAfter(afterFiveMinutes)) {
+			throw BusinessRuntimeException.getInstance("手机验证码已失效,请重新获取");
+		}
+		if (!StrUtil.equals(inputCode, phoneCode.getCode())) {
+			throw BusinessRuntimeException.getInstance("手机验证码错误,请重新输入");
+		}
+	}
+
+	@Override
+	public void checkEmailCode(String email, String inputCode) {
+		String code = redisService.getStr(RedisService.key.EMAIL_CODE_KEY.getNameFormat(email));
+		if (StrUtil.isEmpty(code)) {
+			throw BusinessRuntimeException.getInstance("邮箱验证码已失效,请重新获取");
+		}
+		if (!StrUtil.equals(inputCode, code)) {
+			throw BusinessRuntimeException.getInstance("邮箱验证码错误,请重新输入");
+		}
+	}
 }

+ 1 - 2
netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java

@@ -19,8 +19,8 @@ import com.cyksj.mapper.channel.ChannelPopularizeMapper;
 import com.cyksj.mapper.manage.cps.UserDistributePopularizeMapper;
 import com.cyksj.mapper.market.task.UserBindDetailMapper;
 import com.cyksj.model.dto.GzhOAuth2UserInfo;
-import com.cyksj.model.dto.OrderDonPostDataDto;
 import com.cyksj.model.dto.NewUserWelfareDto;
+import com.cyksj.model.dto.OrderDonPostDataDto;
 import com.cyksj.model.dto.UserWhoami;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.request.LoginReq;
@@ -423,7 +423,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 		return user;
 	}
 
-
 	/**
 	 * 发放新用户福利
 	 */

+ 13 - 40
netflix-web/src/main/java/com/cyksj/web/controller/market/TaskFrontController.java

@@ -1,17 +1,13 @@
 package com.cyksj.web.controller.market;
 
-import cn.hutool.core.lang.Validator;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.annotation.NoSubmit;
-import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.market.task.UserBindDetailMapper;
 import com.cyksj.model.entity.TaskFollowPlatVerify;
-import com.cyksj.model.entity.UserBindDetail;
 import com.cyksj.model.request.LoginReq;
 import com.cyksj.model.request.TaskFollowReq;
+import com.cyksj.model.request.UserBindInfoReq;
 import com.cyksj.model.views.TaskFrontView;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.market.MarketFrontService;
@@ -21,12 +17,10 @@ import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
-import org.springframework.dao.DuplicateKeyException;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.Optional;
 
 /*
  *项目名: netflix
@@ -92,42 +86,10 @@ public class TaskFrontController {
 	@PostMapping("/bind/email")
 	public Result<String> bindEmail(@RequestBody LoginReq phoneReq) {
 		Long userId = StpUserUtil.getLoginIdAsLong();
-		if (!Validator.isEmail(phoneReq.getEmail())) {
-			throw BusinessRuntimeException.getInstance("请输入正确的邮箱");
-		}
-		UserBindDetail other = UserBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
-				.eq(UserBindDetail::getEmail, phoneReq.getEmail()).ne(UserBindDetail::getUserId, userId).select(UserBindDetail::getId).last("limit 1"));
-		if (other != null) {
-			throw BusinessRuntimeException.getInstance("该邮箱已被绑定");
-		}
-		UserBindDetail bindPhone = Optional.ofNullable(UserBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
-				.eq(UserBindDetail::getUserId, userId).last("limit 1"))).orElse(new UserBindDetail());
-		if (StrUtil.isNotBlank(bindPhone.getEmail())) {
-			throw BusinessRuntimeException.getInstance("您已绑定邮箱");
-		}
-		String code = redisService.getStr(RedisService.key.EMAIL_CODE_KEY.getNameFormat(phoneReq.getEmail()));
-		if (StrUtil.isEmpty(code)) {
-			throw BusinessRuntimeException.getInstance("邮箱验证码已失效,请重新获取");
-		}
-		if (!StrUtil.equals(phoneReq.getCode(), code)) {
-			throw BusinessRuntimeException.getInstance("邮箱验证码错误,请重新输入");
-		}
-		bindPhone.setEmail(phoneReq.getEmail());
-		bindPhone.setUserId(userId);
-		try {
-			if (bindPhone.getId() == null) {
-				UserBindDetailMapper.insert(bindPhone);
-			}else {
-				UserBindDetailMapper.updateById(bindPhone);
-			}
-		} catch (DuplicateKeyException e) {
-
-		}
-		redisService.del(RedisService.key.EMAIL_CODE_KEY.getNameFormat(phoneReq.getEmail()));
+		bindTaskService.bindEmail(userId, phoneReq.getEmail(), phoneReq.getCode());
 		return GatewayResponse.SUCCESS.newBuilder().toResult("绑定邮箱成功");
 	}
 
-
 	/**
 	 * 修改手机号
 	 */
@@ -138,6 +100,17 @@ public class TaskFrontController {
 		return GatewayResponse.SUCCESS.newBuilder().toResult("更换手机号成功");
 	}
 
+	/**
+	 * 修改绑定信息
+	 */
+	@PutMapping("/put/bind/account")
+	public Result<String> updateBindAccount(@RequestBody @Validated UserBindInfoReq request) {
+		Long userId = StpUserUtil.getLoginIdAsLong();
+		request.setUserId(userId);
+		bindTaskService.updateBindAccount(request);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
 	/**
 	 * 去完成关注任务
 	 */

+ 4 - 4
netflix-web/src/main/java/com/cyksj/web/controller/user/UserController.java

@@ -14,13 +14,11 @@ import com.cyksj.mapper.manage.coupon.CouponUserMapper;
 import com.cyksj.model.dto.UserWhoami;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.GroupsRelationView;
-import com.cyksj.model.request.ExchangeCodeTicket;
-import com.cyksj.model.request.ReceiveBenefitsReq;
-import com.cyksj.model.request.UserReq;
-import com.cyksj.model.request.WorkOrderReq;
+import com.cyksj.model.request.*;
 import com.cyksj.model.views.*;
 import com.cyksj.service.corp.CropChatService;
 import com.cyksj.service.exchange.ExchangeCodeService;
+import com.cyksj.service.market.task.BindTaskService;
 import com.cyksj.service.order.UserRealOrderBenefitsService;
 import com.cyksj.service.relation.GroupRelationFrontService;
 import com.cyksj.service.user.UserService;
@@ -70,6 +68,8 @@ public class UserController {
 
     private final CropChatService cropChatService;
 
+    private final BindTaskService bindTaskService;
+
     @GetMapping(value = "/wx/whoami")
     public Result<UserWhoami> whoami() {
         long userId = StpUserUtil.getLoginIdAsLong();