zoujiajian 3 سال پیش
والد
کامیت
b845dfe24e

+ 42 - 6
netflix-service/src/main/java/com/cyksj/service/market/task/impl/BindTaskServiceImpl.java

@@ -83,6 +83,13 @@ public class BindTaskServiceImpl implements BindTaskService {
 		if (StrUtil.isNotBlank(user.getOpenId())) {
 			bindPhone.setUserId(userId);
 		}
+		if (bindPhone.getPhoneUserId() == null) {
+			User phoneUser = userMapper.selectOne(Wrappers.lambdaQuery(User.class)
+					.eq(User::getLoginPhone, phone).last("limit 1"));
+			if (phoneUser != null) {
+				bindPhone.setPhoneUserId(phoneUser.getId());
+			}
+		}
 		bindPhone.setPhone(phone);
 		if (bindPhone.getId() == null) {
 			if (redisService.setNx(RedisService.key.USER_BIND_ACCOUNT_INFO_KEY.getName() + phone, phone, RedisService.key.USER_BIND_ACCOUNT_INFO_KEY.getTimeout())) {
@@ -114,19 +121,30 @@ public class BindTaskServiceImpl implements BindTaskService {
 			throw BusinessRuntimeException.getInstance("该手机号已被绑定");
 		}
 		checkPhoneCode(phone, code);
+		User phoneUser = userMapper.selectOne(Wrappers.lambdaQuery(User.class)
+				.eq(User::getPhone, phone).last("limit 1"));
+		if (phoneUser == null) {
+			bindPhone.setPhoneUserId(null);
+		} else {
+			bindPhone.setPhoneUserId(phoneUser.getId());
+		}
 		bindPhone.setPhone(phone);
-		userBindDetailMapper.updateById(bindPhone);
+
+		userBindDetailMapper.update(null, Wrappers.lambdaUpdate(UserBindDetail.class)
+				.set(UserBindDetail::getPhone, phone)
+				.set(UserBindDetail::getPhoneUserId, bindPhone.getPhoneUserId())
+				.eq(UserBindDetail::getId, bindPhone.getId()));
 	}
 
 	@Override
 	public void updateBindEmail(User user, String email, String inputCode) {
 		Long userId = user.getId();
-		UserBindDetail bindPhone = userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
+		UserBindDetail bindDetail = userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
 				.eq(UserBindDetail::getUserId, userId).last("limit 1"));
-		if (bindPhone == null || StrUtil.isEmpty(bindPhone.getEmail())) {
+		if (bindDetail == null || StrUtil.isEmpty(bindDetail.getEmail())) {
 			throw BusinessRuntimeException.getInstance("您未绑定邮箱");
 		}
-		if (bindPhone.getEmail().equals(email)) {
+		if (bindDetail.getEmail().equals(email)) {
 			throw BusinessRuntimeException.getInstance("换绑邮箱重复");
 		}
 		UserBindDetail other = userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
@@ -135,8 +153,19 @@ public class BindTaskServiceImpl implements BindTaskService {
 			throw BusinessRuntimeException.getInstance("该邮箱已被绑定");
 		}
 		checkEmailCode(email, inputCode);
-		bindPhone.setEmail(email);
-		userBindDetailMapper.updateById(bindPhone);
+		User emailUser = userMapper.selectOne(Wrappers.lambdaQuery(User.class)
+				.eq(User::getEmail, email).last("limit 1"));
+		if (emailUser == null) {
+			bindDetail.setEmailUserId(null);
+		} else {
+			bindDetail.setEmailUserId(emailUser.getId());
+		}
+		bindDetail.setEmail(email);
+
+		userBindDetailMapper.update(null, Wrappers.lambdaUpdate(UserBindDetail.class)
+				.set(UserBindDetail::getEmail, email)
+				.set(UserBindDetail::getEmailUserId, bindDetail.getEmailUserId())
+				.eq(UserBindDetail::getId, bindDetail.getId()));
 	}
 
 	@Override
@@ -170,6 +199,13 @@ public class BindTaskServiceImpl implements BindTaskService {
 		if (StrUtil.isNotBlank(user.getOpenId())) {
 			bindPhone.setUserId(userId);
 		}
+		if (bindPhone.getEmailUserId() == null) {
+			User emailUser = userMapper.selectOne(Wrappers.lambdaQuery(User.class)
+					.eq(User::getEmail, account).last("limit 1"));
+			if (emailUser != null) {
+				bindPhone.setEmailUserId(emailUser.getId());
+			}
+		}
 		if (bindPhone.getId() == null) {
 			if (redisService.setNx(RedisService.key.USER_BIND_ACCOUNT_INFO_KEY.getName() + account, account, RedisService.key.USER_BIND_ACCOUNT_INFO_KEY.getTimeout())) {
 				userBindDetailMapper.insert(bindPhone);

+ 4 - 0
netflix-service/src/main/java/com/cyksj/service/user/impl/UserBindRelationServiceImpl.java

@@ -62,6 +62,10 @@ public class UserBindRelationServiceImpl implements UserBindRelationService {
 				.eq(phoneUserId != null, UserBindDetail::getPhoneUserId, phoneUserId)
 				.eq(emailUserId != null, UserBindDetail::getEmailUserId, emailUserId)
 				.last("limit 1"));
+		if (userBindDetail == null) {
+			userIds.add(userId);
+			return userIds;
+		}
 		phoneUserId = userBindDetail.getPhoneUserId();
 		emailUserId = userBindDetail.getEmailUserId();
 		Long wxUserId = userBindDetail.getUserId();

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

@@ -36,7 +36,6 @@ import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Optional;
@@ -388,6 +387,23 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 				} catch (Exception e) {
 				}
 			});
+			if (StrUtil.isNotBlank(user.getLoginPhone())) {
+				UserBindDetail bindDetail = userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
+						.eq(UserBindDetail::getPhone, user.getLoginPhone())
+						.last("limit 1"));
+				if (bindDetail != null) {
+					bindDetail.setPhoneUserId(user.getId());
+				}
+			}
+
+			if (StrUtil.isNotBlank(user.getEmail())) {
+				UserBindDetail bindDetail = userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
+						.eq(UserBindDetail::getEmail, user.getEmail())
+						.last("limit 1"));
+				if (bindDetail != null) {
+					bindDetail.setEmailUserId(user.getId());
+				}
+			}
 		}
 		if (StrUtil.isEmpty(user.getShowId())) {
 			user.setShowId(getUserShowId(user.getId()));

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

@@ -306,6 +306,9 @@ public class UserController {
     public Result<List<UserBindAccountView>> getUserBindAccountViews() {
         long userId = StpUserUtil.getLoginIdAsLong();
         List<Long> relationUserIdList = userBindRelationService.getRelationUserIdList(userId, null);
+        if (relationUserIdList.size() == 1) {
+            return GatewayResponse.SUCCESS.newBuilder().toResult();
+        }
         List<UserBindAccountView> accountViews = beanSearcher.searchAll(UserBindAccountView.class, MapUtils.builder().field(UserBindAccountView::getUserId, relationUserIdList)
                 .op(Operator.InList).build());
         return GatewayResponse.SUCCESS.newBuilder().toResult(accountViews);