Selaa lähdekoodia

修改用户注册时会发生异常的情况

Yangzw 9 kuukautta sitten
vanhempi
commit
49734341ae

+ 1 - 2
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/mq/consumer/shareLinkRegister/AddShareLinkRegisterConsumer.java

@@ -5,7 +5,6 @@ import cn.newfeifan.mall.module.distri.service.sharelinkregister.ShareLinkRegist
 import cn.newfeifan.mall.module.member.message.share.ShareLinkRegisterCreateMessage;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.event.EventListener;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
@@ -21,7 +20,7 @@ public class AddShareLinkRegisterConsumer {
     private ShareLinkRegisterService shareLinkRegisterService;
 
     @EventListener
-    @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步
+//    @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步
     public void onMessage(ShareLinkRegisterCreateMessage message) {
         log.info("[onMessage][消息内容({})]", message);
         AppShareLinkRegisterSaveReqVO reqVO = AppShareLinkRegisterSaveReqVO

+ 5 - 3
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/mq/consumer/sharePath/AddSharePathConsumer.java

@@ -7,11 +7,13 @@ import cn.newfeifan.mall.module.member.message.share.SharePathCreateMessage;
 import cn.newfeifan.mall.module.member.message.user.MemberUserCreateMessage;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.event.EventListener;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.member.enums.ErrorCodeConstants.RELOAD_REGISTER;
+
 /**
  * 用户注册时,发送优惠劵的消费者,基 {@link MemberUserCreateMessage} 消息
  *
@@ -27,7 +29,7 @@ public class AddSharePathConsumer {
     private ShareLinkService shareLinkService;
 
     @EventListener
-    @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步
+//    @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步
     public void onMessage(SharePathCreateMessage message) {
         log.info("[onMessage][消息内容({})]", message);
 
@@ -35,7 +37,7 @@ public class AddSharePathConsumer {
         if (message.getLinkId() != null) {
             ancestor = shareLinkService.getCreateUserIdById(message.getLinkId());
         } else {
-            ancestor = 1L;
+            throw exception(RELOAD_REGISTER);
         }
 
         SharePathSaveReqVO saveReqVO = SharePathSaveReqVO.builder()

+ 3 - 1
feifan-module-member/feifan-module-member-api/src/main/java/cn/newfeifan/mall/module/member/enums/ErrorCodeConstants.java

@@ -56,9 +56,11 @@ public interface ErrorCodeConstants {
     ErrorCode GROUP_NOT_EXISTS = new ErrorCode(1_004_012_000, "用户分组不存在");
     ErrorCode GROUP_HAS_USER = new ErrorCode(1_004_012_001, "用户分组下存在用户,无法删除");
 
-    ErrorCode REDIS_ORDER_PERCENTAGE_NOT_EXISTS = new ErrorCode(1_004_012_002, "缓存中没有找到存储的签到获取的身价值");
     ErrorCode AUTH_USERNAME_EXISTS = new ErrorCode(1_004_012_003, "此用户名已经存在,请换一个!");
     ErrorCode MOBILE_IS_MAXIMIZE = new ErrorCode(1_004_012_004, "此手机号已经达到注册的上限了");
     ErrorCode AUTH_SOCIAL_USER_BIND_MAX = new ErrorCode(1_004_012_004, "此微信号已经到达绑定的上限了");
 
+    ErrorCode LINK_ID_IS_NOT_EXISTS = new ErrorCode(1_004_012_005, "只能通过分享注册");
+    ErrorCode RELOAD_REGISTER = new ErrorCode(1_004_012_006, "本次注册账号失败,请退出当前页面重新扫描分享二维码注册");
+
 }

+ 4 - 1
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/vo/AppAuthSmsRegisterReqVO.java

@@ -6,6 +6,9 @@ import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotNull;
 
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.member.enums.ErrorCodeConstants.LINK_ID_IS_NOT_EXISTS;
+
 @Schema(description = "用户 APP - 手机 + 验证码登录 Request VO,如果登录并绑定社交用户,需要传递 social 开头的参数")
 @Data
 public class AppAuthSmsRegisterReqVO extends AppAuthSmsLoginReqVO {
@@ -21,7 +24,7 @@ public class AppAuthSmsRegisterReqVO extends AppAuthSmsLoginReqVO {
 
     public Long getLinkId() {
         if (linkId == null) {
-            return null;
+            throw exception(LINK_ID_IS_NOT_EXISTS);
         }
         return Long.parseLong(linkId,16);
     }

+ 25 - 18
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/user/MemberUserServiceImpl.java

@@ -29,8 +29,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.support.TransactionSynchronization;
-import org.springframework.transaction.support.TransactionSynchronizationManager;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
@@ -125,26 +123,35 @@ public class MemberUserServiceImpl implements MemberUserService {
         }
         memberUserMapper.insert(user);
 
-        // 注册事务同步适配器
-        registerTransactionSynchronization(user.getId(), linkId);
+        // 如果注册的时候关系链创建失败则需要返回让用户重新注册
+        try {
+            sharePathProducer.sendSharePathCreatMessage(linkId, user.getId());
+            if (linkId != null) {
+                shareLinkRegisterProducer.sendShareLinkRegisterMessage(linkId, user.getId());
+            }
+            memberUserProducer.sendUserCreateMessage(user.getId());
+        } catch (Exception e) {
+            throw exception(RELOAD_REGISTER);
+        }
 
         return user;
     }
 
-    @Transactional(rollbackFor = Exception.class)
-    public void registerTransactionSynchronization(Long userId, Long linkId) {
-        // 发送 消息:用户创建
-        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
-            @Override
-            public void afterCommit() {
-                sharePathProducer.sendSharePathCreatMessage(linkId, userId);
-                if (linkId != null) {
-                    shareLinkRegisterProducer.sendShareLinkRegisterMessage(linkId, userId);
-                }
-                memberUserProducer.sendUserCreateMessage(userId);
-            }
-        });
-    }
+    //现在这个不用了
+//    @Transactional(rollbackFor = Exception.class)
+//    public void registerTransactionSynchronization(Long userId, Long linkId) {
+//        // 发送 消息:用户创建
+//        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+//            @Override
+//            public void afterCommit() {
+//                sharePathProducer.sendSharePathCreatMessage(linkId, userId);
+//                if (linkId != null) {
+//                    shareLinkRegisterProducer.sendShareLinkRegisterMessage(linkId, userId);
+//                }
+//                memberUserProducer.sendUserCreateMessage(userId);
+//            }
+//        });
+//    }
 
     @Override
     public void updateUserLogin(Long id, String loginIp) {