浏览代码

拓展商品二维码分享功能

Yangzw 1 年之前
父节点
当前提交
a2f095d44c
共有 16 个文件被更改,包括 180 次插入33 次删除
  1. 6 0
      feifan-module-distri/feifan-module-distri-biz/pom.xml
  2. 6 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelink/AppShareLinkController.java
  3. 4 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelinkregister/vo/AppShareLinkRegisterSaveReqVO.java
  4. 12 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/mq/consumer/sharePath/AddSharePathConsumer.java
  5. 21 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharelink/ShareLinkService.java
  6. 49 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharelink/ShareLinkServiceImpl.java
  7. 21 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharelinkregister/ShareLinkRegisterServiceImpl.java
  8. 2 3
      feifan-module-member/feifan-module-member-api/src/main/java/cn/newfeifan/mall/module/member/message/share/SharePathCreateMessage.java
  9. 1 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/AppAuthController.java
  10. 10 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java
  11. 9 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java
  12. 0 1
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/vo/SocialLoginValidateSmsCodeReqVO.java
  13. 3 3
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/mq/producer/sharePath/SharePathProducer.java
  14. 4 4
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/auth/MemberAuthServiceImpl.java
  15. 6 4
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/user/MemberUserService.java
  16. 26 13
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/user/MemberUserServiceImpl.java

+ 6 - 0
feifan-module-distri/feifan-module-distri-biz/pom.xml

@@ -113,5 +113,11 @@
             <groupId>cn.newfeifan.zx</groupId>
             <artifactId>feifan-spring-boot-starter-biz-ip</artifactId>
         </dependency>
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-sale-biz</artifactId>
+            <version>2.0.0-jdk8-snapshot</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 </project>

+ 6 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelink/AppShareLinkController.java

@@ -89,4 +89,10 @@ public class AppShareLinkController {
                 BeanUtils.toBean(list, AppShareLinkRespVO.class));
     }
 
+    @GetMapping("/getObjectIdByLinkId")
+    @Operation(summary = "通过链接编号获取对应的类型编号")
+    public CommonResult<Long> getObjectIdByLinkId(String linkId) {
+        return success(shareLinkService.getObjectIdByLinkId(Long.parseLong(linkId)));
+    }
+
 }

+ 4 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelinkregister/vo/AppShareLinkRegisterSaveReqVO.java

@@ -6,6 +6,9 @@ import javax.validation.constraints.*;
 
 @Schema(description = "管理后台 - 通过分享链接,新注册用户新增/修改 Request VO")
 @Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
 public class AppShareLinkRegisterSaveReqVO {
 
     @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19900")
@@ -13,7 +16,7 @@ public class AppShareLinkRegisterSaveReqVO {
 
     @Schema(description = "分享链接表id:关联分享链接表,本记录对应的分享链接表记录", requiredMode = Schema.RequiredMode.REQUIRED, example = "12173")
     @NotNull(message = "分享链接表id:关联分享链接表,本记录对应的分享链接表记录不能为空")
-    private Long distriShareLinkId;
+    private Long ShareLinkId;
 
     @Schema(description = "注册用户id:通过distri_share_link_id分享链接,新注册的用户id,对应member_user表的id", requiredMode = Schema.RequiredMode.REQUIRED, example = "21753")
     @NotNull(message = "注册用户id:通过distri_share_link_id分享链接,新注册的用户id,对应member_user表的id不能为空")

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

@@ -1,6 +1,7 @@
 package cn.newfeifan.mall.module.distri.mq.consumer.sharePath;
 
 import cn.newfeifan.mall.module.distri.controller.admin.sharepath.vo.SharePathSaveReqVO;
+import cn.newfeifan.mall.module.distri.service.sharelink.ShareLinkService;
 import cn.newfeifan.mall.module.distri.service.sharepath.SharePathService;
 import cn.newfeifan.mall.module.member.message.share.SharePathCreateMessage;
 import cn.newfeifan.mall.module.member.message.user.MemberUserCreateMessage;
@@ -22,13 +23,23 @@ public class AddSharePathConsumer {
 
     @Resource
     private SharePathService sharePathService;
+    @Resource
+    private ShareLinkService shareLinkService;
 
     @EventListener
     @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步
     public void onMessage(SharePathCreateMessage message) {
         log.info("[onMessage][消息内容({})]", message);
+
+        Long ancestor;
+        if (message.getLinkId() != null) {
+            ancestor = shareLinkService.getCreateUserIdById(message.getLinkId());
+        } else {
+            ancestor = 1L;
+        }
+
         SharePathSaveReqVO saveReqVO = SharePathSaveReqVO.builder()
-                .ancestor(message.getAncestor())
+                .ancestor(ancestor)
                 .descendant(message.getDescendant()).build();
         sharePathService.createSharePathByUserId(saveReqVO);
     }

+ 21 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharelink/ShareLinkService.java

@@ -53,4 +53,25 @@ public interface ShareLinkService {
      */
     PageResult<ShareLinkDO> getShareLinkPage(AppShareLinkPageReqVO pageReqVO);
 
+    /**
+     * 获得分享链接创建人
+     *
+     * @param id 分享链接编号
+     * @return 分享链接创建人
+     */
+    Long getCreateUserIdById(Long id);
+
+    /**
+     * 增加分享链接注册人数
+     *
+     * @param id 分享链接编号
+     */
+    void addRegisterUserCountById(Long id);
+
+    /**
+     * 获得分享链接对应的商品编号
+     * @param linkId 链接编号
+     * @return 商品编号
+     */
+    Long getObjectIdByLinkId(Long linkId);
 }

+ 49 - 2
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharelink/ShareLinkServiceImpl.java

@@ -91,7 +91,6 @@ public class ShareLinkServiceImpl implements ShareLinkService {
 
         //获取对象名
         String name = getObjectName(shareLink.getCategory(), shareLink.getObjectId());
-
         shareLink.setName(name);
 
         shareLinkMapper.insert(shareLink);
@@ -111,8 +110,56 @@ public class ShareLinkServiceImpl implements ShareLinkService {
         return null;
     }
 
+    private Long getObjectId(Integer category, Long objectId) {
+        if (isMall(category)) {
+            return 0L;
+        } else if (isShop(category)) {
+            ShopDO shopDO = shopMapper.selectById(objectId);
+            return shopDO.getId();
+        } else if (isProduct(category)) {
+            ProductSpuDO productSpuDO = productSpuMapper.selectById(objectId);
+            return productSpuDO.getId();
+        }
+        return null;
+    }
+
     @Override
     public PageResult<ShareLinkDO> getShareLinkPage(AppShareLinkPageReqVO pageReqVO) {
         return shareLinkMapper.selectPage(pageReqVO);
     }
-}
+
+    @Override
+    public Long getCreateUserIdById(Long id) {
+        return shareLinkMapper.selectById(id).getCreateUserId();
+    }
+
+    @Override
+    public void addRegisterUserCountById(Long id) {
+        ShareLinkDO shareLinkDO = shareLinkMapper.selectById(id);
+
+        // 使用帮助方法来增加注册用户计数,并确保操作的直观性
+        incrementRegisterUserCount(shareLinkDO);
+
+        shareLinkMapper.updateById(shareLinkDO);
+    }
+
+
+    /**
+     * 帮助方法用于增加注册用户计数
+     *
+     * @param shareLinkDO 要更新的ShareLinkDO实例
+     */
+    private void incrementRegisterUserCount(ShareLinkDO shareLinkDO) {
+        shareLinkDO.setRegisterUserCount(shareLinkDO.getRegisterUserCount() + 1);
+    }
+
+    @Override
+    public Long getObjectIdByLinkId(Long linkId) {
+        ShareLinkDO shareLinkDO = shareLinkMapper.selectById(linkId);
+        if (shareLinkDO == null) {
+            throw exception(SHARE_LINK_NOT_EXISTS);
+        }
+
+        return getObjectId(shareLinkDO.getCategory(), shareLinkDO.getObjectId());
+    }
+}

+ 21 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharelinkregister/ShareLinkRegisterServiceImpl.java

@@ -2,8 +2,13 @@ package cn.newfeifan.mall.module.distri.service.sharelinkregister;
 
 import cn.newfeifan.mall.module.distri.controller.app.sharelinkregister.vo.AppShareLinkRegisterPageReqVO;
 import cn.newfeifan.mall.module.distri.controller.app.sharelinkregister.vo.AppShareLinkRegisterSaveReqVO;
+import cn.newfeifan.mall.module.distri.service.sharelink.ShareLinkService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.stereotype.Service;
+
 import javax.annotation.Resource;
+
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import cn.newfeifan.mall.module.distri.dal.dataobject.sharelinkregister.ShareLinkRegisterDO;
@@ -26,14 +31,29 @@ public class ShareLinkRegisterServiceImpl implements ShareLinkRegisterService {
 
     @Resource
     private ShareLinkRegisterMapper shareLinkRegisterMapper;
-
+    @Resource
+    private ShareLinkService shareLinkService;
 
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Long createShareLinkRegister(AppShareLinkRegisterSaveReqVO createReqVO) {
+        //插入之前先判断有没有再插入
+        ShareLinkRegisterDO shareLinkRegisterDO = shareLinkRegisterMapper.selectOne(new LambdaQueryWrapper<ShareLinkRegisterDO>()
+                .eq(ShareLinkRegisterDO::getDistriShareLinkId, createReqVO.getShareLinkId())
+                .eq(ShareLinkRegisterDO::getRegisterUserId, createReqVO.getRegisterUserId()));
+        if (shareLinkRegisterDO != null) {
+            return shareLinkRegisterDO.getId();
+        }
+
         // 插入
         ShareLinkRegisterDO shareLinkRegister = BeanUtils.toBean(createReqVO, ShareLinkRegisterDO.class);
         shareLinkRegisterMapper.insert(shareLinkRegister);
+
+        //增加当前链接的累计
+        if (createReqVO.getShareLinkId() != null) {
+            shareLinkService.addRegisterUserCountById(createReqVO.getShareLinkId());
+        }
         // 返回
         return shareLinkRegister.getId();
     }

+ 2 - 3
feifan-module-member/feifan-module-member-api/src/main/java/cn/newfeifan/mall/module/member/message/share/SharePathCreateMessage.java

@@ -19,9 +19,8 @@ public class SharePathCreateMessage {
     private Long descendant;
 
     /**
-     * 推荐编号
+     * 推荐链接编号
      */
-    @NotNull(message = "推荐人不能为空")
-    private Long ancestor;
+    private Long linkId;
 
 }

+ 1 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/AppAuthController.java

@@ -43,6 +43,7 @@ public class AppAuthController {
     @Resource
     private SecurityProperties securityProperties;
 
+
     @PostMapping("/login")
     @Operation(summary = "使用手机 + 密码登录")
     public CommonResult<AppAuthLoginRespVO> login(@RequestBody @Valid AppAuthLoginReqVO reqVO) {

+ 10 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/vo/AppAuthSmsLoginReqVO.java

@@ -45,6 +45,16 @@ public class AppAuthSmsLoginReqVO {
     @Schema(description = "state", requiredMode = Schema.RequiredMode.REQUIRED, example = "9b2ffbc1-7425-4155-9894-9d5c08541d62")
     private String socialState;
 
+    @Schema(description = "分享链接ID 没有可以不传")
+    private String linkId;
+
+    public Long getLinkId() {
+        if (linkId == null) {
+            return null;
+        }
+        return Long.parseLong(linkId,16);
+    }
+
     @AssertTrue(message = "授权码不能为空")
     public boolean isSocialCodeValid() {
         return socialType == null || StrUtil.isNotEmpty(socialCode);

+ 9 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/vo/AppAuthSocialLoginReqVO.java

@@ -31,4 +31,13 @@ public class AppAuthSocialLoginReqVO {
     @NotEmpty(message = "state 不能为空")
     private String state;
 
+    @Schema(description = "分享链接ID 没有可以不传")
+    private String linkId;
+
+    public Long getLinkId() {
+        if (linkId == null) {
+            return null;
+        }
+        return Long.parseLong(linkId,16);
+    }
 }

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

@@ -22,5 +22,4 @@ public class SocialLoginValidateSmsCodeReqVO {
     @Valid
     private AppAuthSocialLoginReqVO loginReqVO;
 
-    private String linkId;
 }

+ 3 - 3
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/mq/producer/sharePath/SharePathProducer.java

@@ -22,11 +22,11 @@ public class SharePathProducer {
     /**
      * 发送 {@link SharePathCreateMessage} 消息
      *
-     * @param ancestor 推荐人
+     * @param linkId 推荐链接编号
      * @param descendant 直推人
      */
-    public void sendSharePathCreatMessage(Long ancestor,Long descendant) {
-        applicationContext.publishEvent(new SharePathCreateMessage().setAncestor(ancestor).setDescendant(descendant));
+    public void sendSharePathCreatMessage(Long linkId,Long descendant) {
+        applicationContext.publishEvent(new SharePathCreateMessage().setLinkId(linkId).setDescendant(descendant));
     }
 
 }

+ 4 - 4
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/auth/MemberAuthServiceImpl.java

@@ -86,7 +86,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
         smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MEMBER_LOGIN.getScene(), userIp));
 
         // 获得获得注册用户
-        MemberUserDO user = userService.createUserIfAbsent(reqVO.getMobile(), userIp, getTerminal());
+        MemberUserDO user = userService.createUserIfAbsent(reqVO.getMobile(), userIp, getTerminal(), reqVO.getLinkId());
         Assert.notNull(user, "获取用户失败,结果为空");
 
         // 如果 socialType 非空,说明需要绑定社交用户
@@ -125,10 +125,10 @@ public class MemberAuthServiceImpl implements MemberAuthService {
                 user = userService.getUserByMobile(phone);
                 if (user == null) {
                     //加入手机号
-                    user = userService.createUser(phone, socialUser.getNickname(), socialUser.getAvatar(), getClientIP(), getTerminal());
+                    user = userService.createUser(phone, socialUser.getNickname(), socialUser.getAvatar(), getClientIP(), getTerminal(), reqVO.getLinkId());
                 }
             } else {
-                user = userService.createUser(null, socialUser.getNickname(), socialUser.getAvatar(), getClientIP(), getTerminal());
+                user = userService.createUser(null, socialUser.getNickname(), socialUser.getAvatar(), getClientIP(), getTerminal(), reqVO.getLinkId());
             }
 
             socialUserApi.bindSocialUser(new SocialUserBindReqDTO(user.getId(), getUserType().getValue(),
@@ -151,7 +151,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
 
         // 获得获得注册用户
         MemberUserDO user = userService.createUserIfAbsent(phoneNumberInfo.getPurePhoneNumber(),
-                getClientIP(), TerminalEnum.WECHAT_MINI_PROGRAM.getTerminal());
+                getClientIP(), TerminalEnum.WECHAT_MINI_PROGRAM.getTerminal(), null);
         Assert.notNull(user, "获取用户失败,结果为空");
 
         // 绑定社交用户

+ 6 - 4
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/user/MemberUserService.java

@@ -42,22 +42,24 @@ public interface MemberUserService {
      * @param mobile     手机号
      * @param registerIp 注册 IP
      * @param terminal   终端 {@link TerminalEnum}
+     * @param linkId     链接编号
      * @return 用户对象
      */
-    MemberUserDO createUserIfAbsent(@Mobile String mobile, String registerIp, Integer terminal);
+    MemberUserDO createUserIfAbsent(@Mobile String mobile, String registerIp, Integer terminal, Long linkId);
 
     /**
      * 创建用户
      * 目的:三方登录时,如果未绑定用户时,自动创建对应用户
      *
-     * @param mobile   手机号
+     * @param mobile     手机号
      * @param nickname   昵称
      * @param avtar      头像
      * @param registerIp 注册 IP
      * @param terminal   终端 {@link TerminalEnum}
+     * @param linkId     链接编号
      * @return 用户对象
      */
-    MemberUserDO createUser(String mobile, String nickname, String avtar, String registerIp, Integer terminal);
+    MemberUserDO createUser(String mobile, String nickname, String avtar, String registerIp, Integer terminal, Long linkId);
 
     /**
      * 更新用户的最后登陆信息
@@ -103,7 +105,7 @@ public interface MemberUserService {
      * 【会员】修改手机,基于微信小程序的授权码
      *
      * @param userId 用户编号
-     * @param reqVO 请求信息
+     * @param reqVO  请求信息
      */
     void updateUserMobileByWeixin(Long userId, AppMemberUserUpdateMobileByWeixinReqVO reqVO);
 

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

@@ -15,6 +15,7 @@ import cn.newfeifan.mall.module.member.convert.auth.AuthConvert;
 import cn.newfeifan.mall.module.member.convert.user.MemberUserConvert;
 import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
 import cn.newfeifan.mall.module.member.dal.mysql.user.MemberUserMapper;
+import cn.newfeifan.mall.module.member.mq.producer.shareLinkRegister.ShareLinkRegisterProducer;
 import cn.newfeifan.mall.module.member.mq.producer.sharePath.SharePathProducer;
 import cn.newfeifan.mall.module.member.mq.producer.user.MemberUserProducer;
 import cn.newfeifan.mall.module.system.api.sms.SmsCodeApi;
@@ -28,6 +29,7 @@ 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.TransactionSynchronizationAdapter;
 import org.springframework.transaction.support.TransactionSynchronizationManager;
 
 import javax.annotation.Resource;
@@ -67,6 +69,8 @@ public class MemberUserServiceImpl implements MemberUserService {
 
     @Resource
     private SharePathProducer sharePathProducer;
+    @Resource
+    private ShareLinkRegisterProducer shareLinkRegisterProducer;
 
     @Override
     public MemberUserDO getUserByMobile(String mobile) {
@@ -80,24 +84,24 @@ public class MemberUserServiceImpl implements MemberUserService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public MemberUserDO createUserIfAbsent(String mobile, String registerIp, Integer terminal) {
+    public MemberUserDO createUserIfAbsent(String mobile, String registerIp, Integer terminal, Long linkId) {
         // 用户已经存在
         MemberUserDO user = memberUserMapper.selectByMobile(mobile);
         if (user != null) {
             return user;
         }
         // 用户不存在,则进行创建
-        return privateCreateUser(mobile, null, null, registerIp, terminal);
+        return privateCreateUser(mobile, null, null, registerIp, terminal, linkId);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public MemberUserDO createUser(String mobile,String nickname, String avtar, String registerIp, Integer terminal) {
-        return privateCreateUser(mobile, nickname, avtar, registerIp, terminal);
+    public MemberUserDO createUser(String mobile, String nickname, String avtar, String registerIp, Integer terminal, Long linkId) {
+        return privateCreateUser(mobile, nickname, avtar, registerIp, terminal, linkId);
     }
 
     private MemberUserDO privateCreateUser(String mobile, String nickname, String avtar,
-                                    String registerIp, Integer terminal) {
+                                           String registerIp, Integer terminal, Long linkId) {
         // 生成密码
         String password = IdUtil.fastSimpleUUID();
         // 插入用户
@@ -113,19 +117,30 @@ public class MemberUserServiceImpl implements MemberUserService {
         }
         memberUserMapper.insert(user);
 
-        // 发送 MQ 消息:创建了会员
-        sharePathProducer.sendSharePathCreatMessage(1L,user.getId());
+        // 注册事务同步适配器
+        registerTransactionSynchronization(user.getId(), linkId);
 
-        // 发送 MQ 消息:用户创建
-        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+        return user;
+    }
 
+    private void registerTransactionSynchronization(Long userId, Long linkId) {
+        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
             @Override
             public void afterCommit() {
-                memberUserProducer.sendUserCreateMessage(user.getId());
+                sharePathProducer.sendSharePathCreatMessage(linkId == null ? 1L : linkId, userId);
+                if (linkId != null) {
+                    shareLinkRegisterProducer.sendShareLinkRegisterMessage(linkId, userId);
+                }
             }
+        });
 
+        // 发送 MQ 消息:用户创建
+        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+            @Override
+            public void afterCommit() {
+                memberUserProducer.sendUserCreateMessage(userId);
+            }
         });
-        return user;
     }
 
     @Override
@@ -232,8 +247,6 @@ public class MemberUserServiceImpl implements MemberUserService {
     }
 
 
-
-
     /**
      * 对密码进行加密
      *