Browse Source

拓展商品二维码分享功能

Yangzw 1 year ago
parent
commit
a0f4d7c82a
23 changed files with 236 additions and 100 deletions
  1. 40 0
      feifan-framework/feifan-common/src/main/java/cn/newfeifan/mall/framework/common/enums/CategoryEnum.java
  2. 4 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java
  3. 22 24
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelink/AppShareLinkController.java
  4. 2 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelink/vo/AppShareLinkPageReqVO.java
  5. 19 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelink/vo/AppShareLinkReqVO.java
  6. 3 5
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelink/vo/AppShareLinkRespVO.java
  7. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelink/vo/AppShareLinkResultVO.java
  8. 3 3
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelink/vo/AppShareLinkSaveReqVO.java
  9. 15 13
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelinkregister/AppShareLinkRegisterController.java
  10. 2 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelinkregister/vo/AppShareLinkRegisterPageReqVO.java
  11. 2 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelinkregister/vo/AppShareLinkRegisterRespVO.java
  12. 2 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelinkregister/vo/AppShareLinkRegisterSaveReqVO.java
  13. 9 4
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/sharelink/ShareLinkMapper.java
  14. 2 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/sharelinkregister/ShareLinkRegisterMapper.java
  15. 2 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/mq/consumer/sharePath/AddSharePathConsumer.java
  16. 10 9
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharelink/ShareLinkService.java
  17. 57 8
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharelink/ShareLinkServiceImpl.java
  18. 6 4
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharelinkregister/ShareLinkRegisterService.java
  19. 8 8
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharelinkregister/ShareLinkRegisterServiceImpl.java
  20. 8 4
      feifan-module-member/feifan-module-member-api/src/main/java/cn/newfeifan/mall/module/member/message/share/SharePathCreateMessage.java
  21. 2 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/auth/vo/SocialLoginValidateSmsCodeReqVO.java
  22. 4 4
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/mq/producer/sharePath/SharePathProducer.java
  23. 2 2
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/user/MemberUserServiceImpl.java

+ 40 - 0
feifan-framework/feifan-common/src/main/java/cn/newfeifan/mall/framework/common/enums/CategoryEnum.java

@@ -0,0 +1,40 @@
+package cn.newfeifan.mall.framework.common.enums;
+
+import cn.hutool.core.util.ObjUtil;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum CategoryEnum {
+    /**
+     * 商城
+     */
+    MALL(1, "商城"),
+
+    /**
+     * 店铺
+     */
+    SHOP(2, "店铺"),
+
+    /**
+     * 商品
+     */
+    PRODUCT(3, "商品");
+
+    private final int category;
+    private final String name;
+
+
+    public static boolean isMall(Integer category) {
+        return ObjUtil.equal(MALL.category, category);
+    }
+
+    public static boolean isShop(Integer category) {
+        return ObjUtil.equal(SHOP.category, category);
+    }
+
+    public static boolean isProduct(Integer category) {
+        return ObjUtil.equal(PRODUCT.category, category);
+    }
+}

+ 4 - 0
feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java

@@ -21,4 +21,8 @@ public interface ErrorCodeConstants {
     ErrorCode PERCENT_LARGE_ONE_HUNDRED = new ErrorCode(1_002_030_014, "百分比总和超过100");
     ErrorCode HAS_PARENT = new ErrorCode(1_002_030_015, "该直推人已经有推荐人, 故不能增加");
 
+    // ========== 分享链接信息 1-003-030-000 ==========
+    ErrorCode SHARE_LINK_NOT_EXISTS = new ErrorCode(1_003_031_001, "分享链接不存在");
+    ErrorCode SHARE_LINK_REGISTER_NOT_EXISTS = new ErrorCode(1_003_031_002, "通过分享链接,新注册用户不存在");
+
 }

+ 22 - 24
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharelink/ShareLinkController.java → feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelink/AppShareLinkController.java

@@ -1,9 +1,11 @@
-package cn.newfeifan.mall.module.distri.controller.admin.sharelink;
+package cn.newfeifan.mall.module.distri.controller.app.sharelink;
 
+import cn.newfeifan.mall.module.distri.controller.app.sharelink.vo.*;
 import org.springframework.web.bind.annotation.*;
+
 import javax.annotation.Resource;
+
 import org.springframework.validation.annotation.Validated;
-import org.springframework.security.access.prepost.PreAuthorize;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Operation;
@@ -17,37 +19,36 @@ import cn.newfeifan.mall.framework.common.pojo.PageParam;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.common.pojo.CommonResult;
 import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+
 import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
 
 import cn.newfeifan.mall.framework.excel.core.util.ExcelUtils;
 
 import cn.newfeifan.mall.framework.operatelog.core.annotations.OperateLog;
+
 import static cn.newfeifan.mall.framework.operatelog.core.enums.OperateTypeEnum.*;
 
-import cn.newfeifan.mall.module.distri.controller.admin.sharelink.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.sharelink.ShareLinkDO;
 import cn.newfeifan.mall.module.distri.service.sharelink.ShareLinkService;
 
-@Tag(name = "管理后台 - 分享链接")
+@Tag(name = "用户 APP - 分享链接")
 @RestController
 @RequestMapping("/distri/share-link")
 @Validated
-public class ShareLinkController {
+public class AppShareLinkController {
 
     @Resource
     private ShareLinkService shareLinkService;
 
     @PostMapping("/create")
     @Operation(summary = "创建分享链接")
-    @PreAuthorize("@ss.hasPermission('distri:share-link:create')")
-    public CommonResult<Long> createShareLink(@Valid @RequestBody ShareLinkSaveReqVO createReqVO) {
+    public CommonResult<Long> createShareLink(@Valid @RequestBody AppShareLinkSaveReqVO createReqVO) {
         return success(shareLinkService.createShareLink(createReqVO));
     }
 
     @PutMapping("/update")
     @Operation(summary = "更新分享链接")
-    @PreAuthorize("@ss.hasPermission('distri:share-link:update')")
-    public CommonResult<Boolean> updateShareLink(@Valid @RequestBody ShareLinkSaveReqVO updateReqVO) {
+    public CommonResult<Boolean> updateShareLink(@Valid @RequestBody AppShareLinkSaveReqVO updateReqVO) {
         shareLinkService.updateShareLink(updateReqVO);
         return success(true);
     }
@@ -55,40 +56,37 @@ public class ShareLinkController {
     @DeleteMapping("/delete")
     @Operation(summary = "删除分享链接")
     @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('distri:share-link:delete')")
     public CommonResult<Boolean> deleteShareLink(@RequestParam("id") Long id) {
         shareLinkService.deleteShareLink(id);
         return success(true);
     }
 
-    @GetMapping("/get")
+    @GetMapping("/getShareLink")
     @Operation(summary = "获得分享链接")
-    @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('distri:share-link:query')")
-    public CommonResult<ShareLinkRespVO> getShareLink(@RequestParam("id") Long id) {
-        ShareLinkDO shareLink = shareLinkService.getShareLink(id);
-        return success(BeanUtils.toBean(shareLink, ShareLinkRespVO.class));
+    public CommonResult<AppShareLinkResultVO> getShareLink(AppShareLinkReqVO appShareLinkReqVO) {
+        String id = shareLinkService.getShareLink(appShareLinkReqVO);
+        return success(AppShareLinkResultVO.builder()
+                .linkId(id).build()
+        );
     }
 
     @GetMapping("/page")
     @Operation(summary = "获得分享链接分页")
-    @PreAuthorize("@ss.hasPermission('distri:share-link:query')")
-    public CommonResult<PageResult<ShareLinkRespVO>> getShareLinkPage(@Valid ShareLinkPageReqVO pageReqVO) {
+    public CommonResult<PageResult<AppShareLinkRespVO>> getShareLinkPage(@Valid AppShareLinkPageReqVO pageReqVO) {
         PageResult<ShareLinkDO> pageResult = shareLinkService.getShareLinkPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, ShareLinkRespVO.class));
+        return success(BeanUtils.toBean(pageResult, AppShareLinkRespVO.class));
     }
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出分享链接 Excel")
-    @PreAuthorize("@ss.hasPermission('distri:share-link:export')")
     @OperateLog(type = EXPORT)
-    public void exportShareLinkExcel(@Valid ShareLinkPageReqVO pageReqVO,
-              HttpServletResponse response) throws IOException {
+    public void exportShareLinkExcel(@Valid AppShareLinkPageReqVO pageReqVO,
+                                     HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
         List<ShareLinkDO> list = shareLinkService.getShareLinkPage(pageReqVO).getList();
         // 导出 Excel
-        ExcelUtils.write(response, "分享链接.xls", "数据", ShareLinkRespVO.class,
-                        BeanUtils.toBean(list, ShareLinkRespVO.class));
+        ExcelUtils.write(response, "分享链接.xls", "数据", AppShareLinkRespVO.class,
+                BeanUtils.toBean(list, AppShareLinkRespVO.class));
     }
 
 }

+ 2 - 2
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharelink/vo/ShareLinkPageReqVO.java → feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelink/vo/AppShareLinkPageReqVO.java

@@ -1,4 +1,4 @@
-package cn.newfeifan.mall.module.distri.controller.admin.sharelink.vo;
+package cn.newfeifan.mall.module.distri.controller.app.sharelink.vo;
 
 import lombok.*;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -12,7 +12,7 @@ import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
-public class ShareLinkPageReqVO extends PageParam {
+public class AppShareLinkPageReqVO extends PageParam {
 
     @Schema(description = "链接名称", example = "赵六")
     private String name;

+ 19 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelink/vo/AppShareLinkReqVO.java

@@ -0,0 +1,19 @@
+package cn.newfeifan.mall.module.distri.controller.app.sharelink.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+
+@Schema(description = "管理后台 - 分享链接分页 Request VO")
+@Data
+@ToString(callSuper = true)
+public class AppShareLinkReqVO {
+
+    @Schema(description = "分享链接类型编码:1.商城,2.店铺,3.商品")
+    private Integer category;
+
+    @Schema(description = "链接对应业务对象id:如果“链接类型”是3=商品,这个id就是商品的spu表的id,即product_spu.id值。", example = "22758")
+    private Long objectId;
+
+}

+ 3 - 5
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharelink/vo/ShareLinkRespVO.java → feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelink/vo/AppShareLinkRespVO.java

@@ -1,17 +1,15 @@
-package cn.newfeifan.mall.module.distri.controller.admin.sharelink.vo;
+package cn.newfeifan.mall.module.distri.controller.app.sharelink.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
-import java.util.*;
-import java.util.*;
-import org.springframework.format.annotation.DateTimeFormat;
+
 import java.time.LocalDateTime;
 import com.alibaba.excel.annotation.*;
 
 @Schema(description = "管理后台 - 分享链接 Response VO")
 @Data
 @ExcelIgnoreUnannotated
-public class ShareLinkRespVO {
+public class AppShareLinkRespVO {
 
     @Schema(description = "分享链接id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20538")
     @ExcelProperty("分享链接id")

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelink/vo/AppShareLinkResultVO.java

@@ -0,0 +1,12 @@
+package cn.newfeifan.mall.module.distri.controller.app.sharelink.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 链接结果 result VO")
+@Data
+@Builder
+public class AppShareLinkResultVO {
+    private String linkId;
+}

+ 3 - 3
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharelink/vo/ShareLinkSaveReqVO.java → feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelink/vo/AppShareLinkSaveReqVO.java

@@ -1,13 +1,13 @@
-package cn.newfeifan.mall.module.distri.controller.admin.sharelink.vo;
+package cn.newfeifan.mall.module.distri.controller.app.sharelink.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
-import java.util.*;
+
 import javax.validation.constraints.*;
 
 @Schema(description = "管理后台 - 分享链接新增/修改 Request VO")
 @Data
-public class ShareLinkSaveReqVO {
+public class AppShareLinkSaveReqVO {
 
     @Schema(description = "分享链接id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20538")
     private Long id;

+ 15 - 13
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharelinkregister/ShareLinkRegisterController.java → feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelinkregister/AppShareLinkRegisterController.java

@@ -1,5 +1,8 @@
-package cn.newfeifan.mall.module.distri.controller.admin.sharelinkregister;
+package cn.newfeifan.mall.module.distri.controller.app.sharelinkregister;
 
+import cn.newfeifan.mall.module.distri.controller.app.sharelinkregister.vo.AppShareLinkRegisterPageReqVO;
+import cn.newfeifan.mall.module.distri.controller.app.sharelinkregister.vo.AppShareLinkRegisterRespVO;
+import cn.newfeifan.mall.module.distri.controller.app.sharelinkregister.vo.AppShareLinkRegisterSaveReqVO;
 import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
@@ -24,15 +27,14 @@ import cn.newfeifan.mall.framework.excel.core.util.ExcelUtils;
 import cn.newfeifan.mall.framework.operatelog.core.annotations.OperateLog;
 import static cn.newfeifan.mall.framework.operatelog.core.enums.OperateTypeEnum.*;
 
-import cn.newfeifan.mall.module.distri.controller.admin.sharelinkregister.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.sharelinkregister.ShareLinkRegisterDO;
 import cn.newfeifan.mall.module.distri.service.sharelinkregister.ShareLinkRegisterService;
 
-@Tag(name = "管理后台 - 通过分享链接,新注册用户")
+@Tag(name = "用户 APP - 通过分享链接,新注册用户")
 @RestController
 @RequestMapping("/distri/share-link-register")
 @Validated
-public class ShareLinkRegisterController {
+public class AppShareLinkRegisterController {
 
     @Resource
     private ShareLinkRegisterService shareLinkRegisterService;
@@ -40,14 +42,14 @@ public class ShareLinkRegisterController {
     @PostMapping("/create")
     @Operation(summary = "创建通过分享链接,新注册用户")
     @PreAuthorize("@ss.hasPermission('distri:share-link-register:create')")
-    public CommonResult<Long> createShareLinkRegister(@Valid @RequestBody ShareLinkRegisterSaveReqVO createReqVO) {
+    public CommonResult<Long> createShareLinkRegister(@Valid @RequestBody AppShareLinkRegisterSaveReqVO createReqVO) {
         return success(shareLinkRegisterService.createShareLinkRegister(createReqVO));
     }
 
     @PutMapping("/update")
     @Operation(summary = "更新通过分享链接,新注册用户")
     @PreAuthorize("@ss.hasPermission('distri:share-link-register:update')")
-    public CommonResult<Boolean> updateShareLinkRegister(@Valid @RequestBody ShareLinkRegisterSaveReqVO updateReqVO) {
+    public CommonResult<Boolean> updateShareLinkRegister(@Valid @RequestBody AppShareLinkRegisterSaveReqVO updateReqVO) {
         shareLinkRegisterService.updateShareLinkRegister(updateReqVO);
         return success(true);
     }
@@ -65,30 +67,30 @@ public class ShareLinkRegisterController {
     @Operation(summary = "获得通过分享链接,新注册用户")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
     @PreAuthorize("@ss.hasPermission('distri:share-link-register:query')")
-    public CommonResult<ShareLinkRegisterRespVO> getShareLinkRegister(@RequestParam("id") Long id) {
+    public CommonResult<AppShareLinkRegisterRespVO> getShareLinkRegister(@RequestParam("id") Long id) {
         ShareLinkRegisterDO shareLinkRegister = shareLinkRegisterService.getShareLinkRegister(id);
-        return success(BeanUtils.toBean(shareLinkRegister, ShareLinkRegisterRespVO.class));
+        return success(BeanUtils.toBean(shareLinkRegister, AppShareLinkRegisterRespVO.class));
     }
 
     @GetMapping("/page")
     @Operation(summary = "获得通过分享链接,新注册用户分页")
     @PreAuthorize("@ss.hasPermission('distri:share-link-register:query')")
-    public CommonResult<PageResult<ShareLinkRegisterRespVO>> getShareLinkRegisterPage(@Valid ShareLinkRegisterPageReqVO pageReqVO) {
+    public CommonResult<PageResult<AppShareLinkRegisterRespVO>> getShareLinkRegisterPage(@Valid AppShareLinkRegisterPageReqVO pageReqVO) {
         PageResult<ShareLinkRegisterDO> pageResult = shareLinkRegisterService.getShareLinkRegisterPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, ShareLinkRegisterRespVO.class));
+        return success(BeanUtils.toBean(pageResult, AppShareLinkRegisterRespVO.class));
     }
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出通过分享链接,新注册用户 Excel")
     @PreAuthorize("@ss.hasPermission('distri:share-link-register:export')")
     @OperateLog(type = EXPORT)
-    public void exportShareLinkRegisterExcel(@Valid ShareLinkRegisterPageReqVO pageReqVO,
+    public void exportShareLinkRegisterExcel(@Valid AppShareLinkRegisterPageReqVO pageReqVO,
               HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
         List<ShareLinkRegisterDO> list = shareLinkRegisterService.getShareLinkRegisterPage(pageReqVO).getList();
         // 导出 Excel
-        ExcelUtils.write(response, "通过分享链接,新注册用户.xls", "数据", ShareLinkRegisterRespVO.class,
-                        BeanUtils.toBean(list, ShareLinkRegisterRespVO.class));
+        ExcelUtils.write(response, "通过分享链接,新注册用户.xls", "数据", AppShareLinkRegisterRespVO.class,
+                        BeanUtils.toBean(list, AppShareLinkRegisterRespVO.class));
     }
 
 }

+ 2 - 2
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharelinkregister/vo/ShareLinkRegisterPageReqVO.java → feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelinkregister/vo/AppShareLinkRegisterPageReqVO.java

@@ -1,4 +1,4 @@
-package cn.newfeifan.mall.module.distri.controller.admin.sharelinkregister.vo;
+package cn.newfeifan.mall.module.distri.controller.app.sharelinkregister.vo;
 
 import lombok.*;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -12,7 +12,7 @@ import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
-public class ShareLinkRegisterPageReqVO extends PageParam {
+public class AppShareLinkRegisterPageReqVO extends PageParam {
 
     @Schema(description = "分享链接表id:关联分享链接表,本记录对应的分享链接表记录", example = "12173")
     private Long distriShareLinkId;

+ 2 - 2
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharelinkregister/vo/ShareLinkRegisterRespVO.java → feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelinkregister/vo/AppShareLinkRegisterRespVO.java

@@ -1,4 +1,4 @@
-package cn.newfeifan.mall.module.distri.controller.admin.sharelinkregister.vo;
+package cn.newfeifan.mall.module.distri.controller.app.sharelinkregister.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
@@ -8,7 +8,7 @@ import com.alibaba.excel.annotation.*;
 @Schema(description = "管理后台 - 通过分享链接,新注册用户 Response VO")
 @Data
 @ExcelIgnoreUnannotated
-public class ShareLinkRegisterRespVO {
+public class AppShareLinkRegisterRespVO {
 
     @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19900")
     @ExcelProperty("主键id")

+ 2 - 2
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharelinkregister/vo/ShareLinkRegisterSaveReqVO.java → feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/sharelinkregister/vo/AppShareLinkRegisterSaveReqVO.java

@@ -1,4 +1,4 @@
-package cn.newfeifan.mall.module.distri.controller.admin.sharelinkregister.vo;
+package cn.newfeifan.mall.module.distri.controller.app.sharelinkregister.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
@@ -6,7 +6,7 @@ import javax.validation.constraints.*;
 
 @Schema(description = "管理后台 - 通过分享链接,新注册用户新增/修改 Request VO")
 @Data
-public class ShareLinkRegisterSaveReqVO {
+public class AppShareLinkRegisterSaveReqVO {
 
     @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19900")
     private Long id;

+ 9 - 4
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/sharelink/ShareLinkMapper.java

@@ -1,13 +1,11 @@
 package cn.newfeifan.mall.module.distri.dal.mysql.sharelink;
 
-import java.util.*;
-
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.distri.controller.app.sharelink.vo.AppShareLinkPageReqVO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.sharelink.ShareLinkDO;
 import org.apache.ibatis.annotations.Mapper;
-import cn.newfeifan.mall.module.distri.controller.admin.sharelink.vo.*;
 
 /**
  * 分享链接 Mapper
@@ -17,7 +15,7 @@ import cn.newfeifan.mall.module.distri.controller.admin.sharelink.vo.*;
 @Mapper
 public interface ShareLinkMapper extends BaseMapperX<ShareLinkDO> {
 
-    default PageResult<ShareLinkDO> selectPage(ShareLinkPageReqVO reqVO) {
+    default PageResult<ShareLinkDO> selectPage(AppShareLinkPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<ShareLinkDO>()
                 .likeIfPresent(ShareLinkDO::getName, reqVO.getName())
                 .eqIfPresent(ShareLinkDO::getStatus, reqVO.getStatus())
@@ -29,4 +27,11 @@ public interface ShareLinkMapper extends BaseMapperX<ShareLinkDO> {
                 .orderByDesc(ShareLinkDO::getId));
     }
 
+    default ShareLinkDO selectByCategory(Integer category, Long loginUserId, Long objectId){
+        return selectOne(new LambdaQueryWrapperX<ShareLinkDO>()
+                .eq(ShareLinkDO::getCategory, category)
+                .eq(ShareLinkDO::getCreateUserId, loginUserId)
+                .eq(ShareLinkDO::getObjectId, objectId)
+        );
+    }
 }

+ 2 - 2
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/sharelinkregister/ShareLinkRegisterMapper.java

@@ -4,9 +4,9 @@ package cn.newfeifan.mall.module.distri.dal.mysql.sharelinkregister;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.distri.controller.app.sharelinkregister.vo.AppShareLinkRegisterPageReqVO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.sharelinkregister.ShareLinkRegisterDO;
 import org.apache.ibatis.annotations.Mapper;
-import cn.newfeifan.mall.module.distri.controller.admin.sharelinkregister.vo.*;
 
 /**
  * 通过分享链接,新注册用户 Mapper
@@ -16,7 +16,7 @@ import cn.newfeifan.mall.module.distri.controller.admin.sharelinkregister.vo.*;
 @Mapper
 public interface ShareLinkRegisterMapper extends BaseMapperX<ShareLinkRegisterDO> {
 
-    default PageResult<ShareLinkRegisterDO> selectPage(ShareLinkRegisterPageReqVO reqVO) {
+    default PageResult<ShareLinkRegisterDO> selectPage(AppShareLinkRegisterPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<ShareLinkRegisterDO>()
                 .eqIfPresent(ShareLinkRegisterDO::getDistriShareLinkId, reqVO.getDistriShareLinkId())
                 .eqIfPresent(ShareLinkRegisterDO::getRegisterUserId, reqVO.getRegisterUserId())

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

@@ -28,8 +28,8 @@ public class AddSharePathConsumer {
     public void onMessage(SharePathCreateMessage message) {
         log.info("[onMessage][消息内容({})]", message);
         SharePathSaveReqVO saveReqVO = SharePathSaveReqVO.builder()
-                .ancestor(1L)
-                .descendant(message.getUserId()).build();
+                .ancestor(message.getAncestor())
+                .descendant(message.getDescendant()).build();
         sharePathService.createSharePathByUserId(saveReqVO);
     }
 

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

@@ -1,11 +1,12 @@
 package cn.newfeifan.mall.module.distri.service.sharelink;
 
-import java.util.*;
 import javax.validation.*;
-import cn.newfeifan.mall.module.distri.controller.admin.sharelink.vo.*;
+
+import cn.newfeifan.mall.module.distri.controller.app.sharelink.vo.AppShareLinkPageReqVO;
+import cn.newfeifan.mall.module.distri.controller.app.sharelink.vo.AppShareLinkReqVO;
+import cn.newfeifan.mall.module.distri.controller.app.sharelink.vo.AppShareLinkSaveReqVO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.sharelink.ShareLinkDO;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
-import cn.newfeifan.mall.framework.common.pojo.PageParam;
 
 /**
  * 分享链接 Service 接口
@@ -20,14 +21,14 @@ public interface ShareLinkService {
      * @param createReqVO 创建信息
      * @return 编号
      */
-    Long createShareLink(@Valid ShareLinkSaveReqVO createReqVO);
+    Long createShareLink(@Valid AppShareLinkSaveReqVO createReqVO);
 
     /**
      * 更新分享链接
      *
      * @param updateReqVO 更新信息
      */
-    void updateShareLink(@Valid ShareLinkSaveReqVO updateReqVO);
+    void updateShareLink(@Valid AppShareLinkSaveReqVO updateReqVO);
 
     /**
      * 删除分享链接
@@ -39,10 +40,10 @@ public interface ShareLinkService {
     /**
      * 获得分享链接
      *
-     * @param id 编号
-     * @return 分享链接
+     * @param appShareLinkReqVO 链接对象
+     * @return 分享链接编号
      */
-    ShareLinkDO getShareLink(Long id);
+    String getShareLink(AppShareLinkReqVO appShareLinkReqVO);
 
     /**
      * 获得分享链接分页
@@ -50,6 +51,6 @@ public interface ShareLinkService {
      * @param pageReqVO 分页查询
      * @return 分享链接分页
      */
-    PageResult<ShareLinkDO> getShareLinkPage(ShareLinkPageReqVO pageReqVO);
+    PageResult<ShareLinkDO> getShareLinkPage(AppShareLinkPageReqVO pageReqVO);
 
 }

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

@@ -1,16 +1,30 @@
 package cn.newfeifan.mall.module.distri.service.sharelink;
 
+import cn.hutool.core.util.ObjectUtil;
+import cn.newfeifan.mall.module.distri.controller.app.sharelink.vo.AppShareLinkPageReqVO;
+import cn.newfeifan.mall.module.distri.controller.app.sharelink.vo.AppShareLinkReqVO;
+import cn.newfeifan.mall.module.distri.controller.app.sharelink.vo.AppShareLinkSaveReqVO;
+import cn.newfeifan.mall.module.product.dal.dataobject.spu.ProductSpuDO;
+import cn.newfeifan.mall.module.product.dal.mysql.spu.ProductSpuMapper;
+import cn.newfeifan.mall.module.sale.dal.dataobject.shop.ShopDO;
+import cn.newfeifan.mall.module.sale.dal.mysql.shop.ShopMapper;
 import org.springframework.stereotype.Service;
+
 import javax.annotation.Resource;
+
 import org.springframework.validation.annotation.Validated;
 
-import cn.newfeifan.mall.module.distri.controller.admin.sharelink.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.sharelink.ShareLinkDO;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
 
 import cn.newfeifan.mall.module.distri.dal.mysql.sharelink.ShareLinkMapper;
 
+import static cn.newfeifan.mall.framework.common.enums.CategoryEnum.*;
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+
 
 /**
  * 分享链接 Service 实现类
@@ -24,8 +38,14 @@ public class ShareLinkServiceImpl implements ShareLinkService {
     @Resource
     private ShareLinkMapper shareLinkMapper;
 
+    @Resource
+    private ShopMapper shopMapper;
+
+    @Resource
+    private ProductSpuMapper productSpuMapper;
+
     @Override
-    public Long createShareLink(ShareLinkSaveReqVO createReqVO) {
+    public Long createShareLink(AppShareLinkSaveReqVO createReqVO) {
         // 插入
         ShareLinkDO shareLink = BeanUtils.toBean(createReqVO, ShareLinkDO.class);
         shareLinkMapper.insert(shareLink);
@@ -34,7 +54,7 @@ public class ShareLinkServiceImpl implements ShareLinkService {
     }
 
     @Override
-    public void updateShareLink(ShareLinkSaveReqVO updateReqVO) {
+    public void updateShareLink(AppShareLinkSaveReqVO updateReqVO) {
         // 校验存在
         validateShareLinkExists(updateReqVO.getId());
         // 更新
@@ -52,18 +72,47 @@ public class ShareLinkServiceImpl implements ShareLinkService {
 
     private void validateShareLinkExists(Long id) {
         if (shareLinkMapper.selectById(id) == null) {
-//            throw exception(SHARE_LINK_NOT_EXISTS);
+            throw exception(SHARE_LINK_NOT_EXISTS);
         }
     }
 
     @Override
-    public ShareLinkDO getShareLink(Long id) {
-        return shareLinkMapper.selectById(id);
+    public String getShareLink(AppShareLinkReqVO appShareLinkReqVO) {
+        //先判断是否存在
+        ShareLinkDO shareLinkDO = shareLinkMapper.selectByCategory(appShareLinkReqVO.getCategory(), getLoginUserId(), appShareLinkReqVO.getObjectId());
+
+        if (ObjectUtil.isNotEmpty(shareLinkDO)) {
+            //存在就直接返回查询出来的id - 十六进制
+            return Long.toHexString(shareLinkDO.getId());
+        }
+
+        ShareLinkDO shareLink = BeanUtils.toBean(appShareLinkReqVO, ShareLinkDO.class);
+        shareLink.setCreateUserId(getLoginUserId());
+
+        //获取对象名
+        String name = getObjectName(shareLink.getCategory(), shareLink.getObjectId());
+
+        shareLink.setName(name);
+
+        shareLinkMapper.insert(shareLink);
+        return Long.toHexString(shareLink.getId());
+    }
+
+    private String getObjectName(Integer category, Long objectId) {
+        if (isMall(category)) {
+            return MALL.getName();
+        } else if (isShop(category)) {
+            ShopDO shopDO = shopMapper.selectById(objectId);
+            return shopDO.getName();
+        } else if (isProduct(category)) {
+            ProductSpuDO productSpuDO = productSpuMapper.selectById(objectId);
+            return productSpuDO.getName();
+        }
+        return null;
     }
 
     @Override
-    public PageResult<ShareLinkDO> getShareLinkPage(ShareLinkPageReqVO pageReqVO) {
+    public PageResult<ShareLinkDO> getShareLinkPage(AppShareLinkPageReqVO pageReqVO) {
         return shareLinkMapper.selectPage(pageReqVO);
     }
-
 }

+ 6 - 4
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharelinkregister/ShareLinkRegisterService.java

@@ -1,7 +1,9 @@
 package cn.newfeifan.mall.module.distri.service.sharelinkregister;
 
 import javax.validation.*;
-import cn.newfeifan.mall.module.distri.controller.admin.sharelinkregister.vo.*;
+
+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.dal.dataobject.sharelinkregister.ShareLinkRegisterDO;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 
@@ -18,14 +20,14 @@ public interface ShareLinkRegisterService {
      * @param createReqVO 创建信息
      * @return 编号
      */
-    Long createShareLinkRegister(@Valid ShareLinkRegisterSaveReqVO createReqVO);
+    Long createShareLinkRegister(@Valid AppShareLinkRegisterSaveReqVO createReqVO);
 
     /**
      * 更新通过分享链接,新注册用户
      *
      * @param updateReqVO 更新信息
      */
-    void updateShareLinkRegister(@Valid ShareLinkRegisterSaveReqVO updateReqVO);
+    void updateShareLinkRegister(@Valid AppShareLinkRegisterSaveReqVO updateReqVO);
 
     /**
      * 删除通过分享链接,新注册用户
@@ -48,6 +50,6 @@ public interface ShareLinkRegisterService {
      * @param pageReqVO 分页查询
      * @return 通过分享链接,新注册用户分页
      */
-    PageResult<ShareLinkRegisterDO> getShareLinkRegisterPage(ShareLinkRegisterPageReqVO pageReqVO);
+    PageResult<ShareLinkRegisterDO> getShareLinkRegisterPage(AppShareLinkRegisterPageReqVO pageReqVO);
 
 }

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

@@ -1,15 +1,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 org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.transaction.annotation.Transactional;
 
-import java.util.*;
-import cn.newfeifan.mall.module.distri.controller.admin.sharelinkregister.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.sharelinkregister.ShareLinkRegisterDO;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
-import cn.newfeifan.mall.framework.common.pojo.PageParam;
 import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
 
 import cn.newfeifan.mall.module.distri.dal.mysql.sharelinkregister.ShareLinkRegisterMapper;
@@ -29,8 +27,10 @@ public class ShareLinkRegisterServiceImpl implements ShareLinkRegisterService {
     @Resource
     private ShareLinkRegisterMapper shareLinkRegisterMapper;
 
+
+
     @Override
-    public Long createShareLinkRegister(ShareLinkRegisterSaveReqVO createReqVO) {
+    public Long createShareLinkRegister(AppShareLinkRegisterSaveReqVO createReqVO) {
         // 插入
         ShareLinkRegisterDO shareLinkRegister = BeanUtils.toBean(createReqVO, ShareLinkRegisterDO.class);
         shareLinkRegisterMapper.insert(shareLinkRegister);
@@ -39,7 +39,7 @@ public class ShareLinkRegisterServiceImpl implements ShareLinkRegisterService {
     }
 
     @Override
-    public void updateShareLinkRegister(ShareLinkRegisterSaveReqVO updateReqVO) {
+    public void updateShareLinkRegister(AppShareLinkRegisterSaveReqVO updateReqVO) {
         // 校验存在
         validateShareLinkRegisterExists(updateReqVO.getId());
         // 更新
@@ -57,7 +57,7 @@ public class ShareLinkRegisterServiceImpl implements ShareLinkRegisterService {
 
     private void validateShareLinkRegisterExists(Long id) {
         if (shareLinkRegisterMapper.selectById(id) == null) {
-//            throw exception(SHARE_LINK_REGISTER_NOT_EXISTS);
+            throw exception(SHARE_LINK_REGISTER_NOT_EXISTS);
         }
     }
 
@@ -67,7 +67,7 @@ public class ShareLinkRegisterServiceImpl implements ShareLinkRegisterService {
     }
 
     @Override
-    public PageResult<ShareLinkRegisterDO> getShareLinkRegisterPage(ShareLinkRegisterPageReqVO pageReqVO) {
+    public PageResult<ShareLinkRegisterDO> getShareLinkRegisterPage(AppShareLinkRegisterPageReqVO pageReqVO) {
         return shareLinkRegisterMapper.selectPage(pageReqVO);
     }
 

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

@@ -13,11 +13,15 @@ import javax.validation.constraints.NotNull;
 public class SharePathCreateMessage {
 
     /**
-     * 用户编号
+     * 直推人编号
      */
-    @NotNull(message = "用户编号不能为空")
-    private Long userId;
-
+    @NotNull(message = "直推人不能为空")
+    private Long descendant;
 
+    /**
+     * 推荐人编号
+     */
+    @NotNull(message = "推荐人不能为空")
+    private Long ancestor;
 
 }

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

@@ -21,4 +21,6 @@ public class SocialLoginValidateSmsCodeReqVO {
      */
     @Valid
     private AppAuthSocialLoginReqVO loginReqVO;
+
+    private String linkId;
 }

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

@@ -1,7 +1,6 @@
 package cn.newfeifan.mall.module.member.mq.producer.sharePath;
 
 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.ApplicationContext;
 import org.springframework.stereotype.Component;
@@ -23,10 +22,11 @@ public class SharePathProducer {
     /**
      * 发送 {@link SharePathCreateMessage} 消息
      *
-     * @param userId 用户编号
+     * @param ancestor 推荐人
+     * @param descendant 直推人
      */
-    public void sendSharePathCreatMessage(Long userId) {
-        applicationContext.publishEvent(new SharePathCreateMessage().setUserId(userId));
+    public void sendSharePathCreatMessage(Long ancestor,Long descendant) {
+        applicationContext.publishEvent(new SharePathCreateMessage().setAncestor(ancestor).setDescendant(descendant));
     }
 
 }

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

@@ -113,8 +113,8 @@ public class MemberUserServiceImpl implements MemberUserService {
         }
         memberUserMapper.insert(user);
 
-        // 发送 MQ 消息:创建会员
-        sharePathProducer.sendSharePathCreatMessage(user.getId());
+        // 发送 MQ 消息:创建会员
+        sharePathProducer.sendSharePathCreatMessage(1L,user.getId());
 
         // 发送 MQ 消息:用户创建
         TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {