浏览代码

支持更换邮箱

zoujiajian 2 年之前
父节点
当前提交
40b94e2720

+ 56 - 0
netflix-service/src/main/java/com/cyksj/service/market/task/impl/BindTaskServiceImpl.java

@@ -451,5 +451,61 @@ public class BindTaskServiceImpl implements BindTaskService {
 			userMapper.updateById(phoneUser);
 			return;
 		}
+
+		if (type == 2) {
+			//是否已注册
+			User changeUser = userMapper.selectOne(Wrappers.lambdaQuery(User.class)
+					.eq(User::getEmail, account).last("limit 1"));
+			if (changeUser != null) {
+				throw BusinessRuntimeException.getInstance("您更换的手机号已注册,无法更换");
+			}
+			//是否已绑定
+			UserBindDetail changeUserBindDetail = userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
+					.eq(UserBindDetail::getEmail, account).last("limit 1"));
+			if (changeUserBindDetail != null) {
+				throw BusinessRuntimeException.getInstance("您更换的邮箱已被绑定,无法更换");
+			}
+			//校验邮箱
+			checkEmailCode(account, code);
+			String email = user.getEmail();
+			User emailUser = user;
+			Long emailUserId = emailUser.getId();
+			//邮箱用户
+			if (StrUtil.isNotBlank(email)) {
+				UserBindDetail userBindDetail = userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
+						.eq(UserBindDetail::getEmail, email).last("limit 1"));
+				if (userBindDetail != null) {
+					userBindDetail.setEmail(account);
+					userBindDetail.setEmailUserId(emailUserId);
+					userBindDetailMapper.updateById(userBindDetail);
+				}
+				user.setEmail(account);
+				userMapper.updateById(user);
+				return;
+			}
+			//非邮箱用户
+			UserBindDetail userBindDetail = userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
+					.and(qr -> qr.eq(UserBindDetail::getUserId, userId)
+							.or().eq(UserBindDetail::getPhoneUserId, userId))
+					.last("limit 1"));
+			if (userBindDetail == null) {
+				throw BusinessRuntimeException.getInstance("你未有绑定其他账号");
+			}
+			if (StrUtil.isEmpty(userBindDetail.getEmail())) {
+				throw BusinessRuntimeException.getInstance("您未绑定邮箱,无法更换");
+			}
+			email = userBindDetail.getEmail();
+			emailUser = userMapper.selectOne(Wrappers.lambdaQuery(User.class)
+					.eq(User::getEmail, email).last("limit 1"));
+			if (emailUser == null) throw BusinessRuntimeException.getInstance("你绑定的邮箱未注册");
+			emailUserId = emailUser.getId();
+			userBindDetail.setEmail(account);
+			userBindDetail.setEmailUserId(emailUserId);
+			userBindDetailMapper.updateById(userBindDetail);
+
+			emailUser.setEmail(account);
+			userMapper.updateById(emailUser);
+			return;
+		}
 	}
 }