浏览代码

修改计算方法

gaohp 1 年之前
父节点
当前提交
fe10673f3c
共有 14 个文件被更改,包括 192 次插入26 次删除
  1. 3 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/constant/DistriConstants.java
  2. 26 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/CaclEnum.java
  3. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralPageReqVO.java
  4. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralRespVO.java
  5. 4 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralSaveReqVO.java
  6. 1 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitlog/vo/PtProfitLogSaveReqVO.java
  7. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharepath/vo/SharePathSaveReqVO.java
  8. 1 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/integral/IntegralDO.java
  9. 1 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/integral/IntegralMapper.java
  10. 2 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/sharepath/SharePathMapper.java
  11. 97 18
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcServiceImpl.java
  12. 4 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathService.java
  13. 29 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathServiceImpl.java
  14. 15 3
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/sharepath/SharePathMapper.xml

+ 3 - 0
feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/constant/DistriConstants.java

@@ -6,5 +6,8 @@ public class DistriConstants {
     // ========== 分销信息商户信息 1-002-029-000 ==========
     public static final Integer PERCENT = 10000;
     public static final Double ONE_HUNDRED = 1d;
+    public static final Integer THREE = 3;
+    public static final Long PT_ID = 1L;
+
 
 }

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

@@ -0,0 +1,26 @@
+package cn.newfeifan.mall.module.distri.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum CaclEnum {
+    PLATFORM_SERVICE_FEE(1, "平台服务费"),
+    PLATFORM_REVENUE(2, "平台收益"),
+    RECOMMENDED_PERSON_QUOTA(3, "推荐人额度"),
+    DIRECT_REFERRAL_QUOTA(4, "直推人额度"),
+    TOGETHER_AWARD(5, "合赢奖"),
+    HIGH_QUOTA(6, "最高可以获得积分"),
+    ;
+
+    /**
+     * 来源
+     */
+    private final Integer type;
+    /**
+     * 类型的名字
+     */
+    private final String name;
+
+}

+ 3 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralPageReqVO.java

@@ -31,4 +31,7 @@ public class IntegralPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    @Schema(description = "最高可获取积分")
+    private Integer highQuota;
+
 }

+ 3 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralRespVO.java

@@ -37,4 +37,7 @@ public class IntegralRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "最高可获取积分")
+    @ExcelProperty("最高可获取积分")
+    private Integer highQuota;
 }

+ 4 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralSaveReqVO.java

@@ -28,4 +28,8 @@ public class IntegralSaveReqVO {
     @Schema(description = "用户类型", example = "17348")
     private Long categoryId;
 
+    @Schema(description = "最高可获取积分")
+    private Integer highQuota;
+
+
 }

+ 1 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitlog/vo/PtProfitLogSaveReqVO.java

@@ -22,7 +22,7 @@ public class PtProfitLogSaveReqVO {
     @Schema(description = "增加后金额")
     private Integer afterAmount;
 
-    @Schema(description = "收益类型 1:平台服务器费 2:平台收益 3用户下单返回毛利额度 4直推人额度 5合赢奖", example = "2")
+    @Schema(description = "收益类型 1:平台服务器费 2:平台收益 3推荐人额度 4直推人额度 5合赢奖 6最高可以获得积分", example = "2")
     private Integer profitStatus;
 
     @Schema(description = "用户ID , 只有收益类型为 3,4才有值", example = "6982")

+ 3 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/sharepath/vo/SharePathSaveReqVO.java

@@ -8,6 +8,9 @@ import javax.validation.constraints.*;
 
 @Schema(description = "管理后台 - 分销用户关系新增/修改 Request VO")
 @Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
 public class SharePathSaveReqVO {
 
     @Schema(description = "层级")

+ 1 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/integral/IntegralDO.java

@@ -44,4 +44,5 @@ public class IntegralDO extends BaseDO {
      */
     private Long categoryId;
 
+    private Integer highQuota;
 }

+ 1 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/integral/IntegralMapper.java

@@ -24,7 +24,7 @@ public interface IntegralMapper extends BaseMapperX<IntegralDO> {
                 .eqIfPresent(IntegralDO::getFreezeQuota, reqVO.getFreezeQuota())
                 .eqIfPresent(IntegralDO::getCategoryId, reqVO.getCategoryId())
                 .betweenIfPresent(IntegralDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(IntegralDO::getHighQuota, reqVO.getHighQuota())
                 .orderByDesc(IntegralDO::getId));
     }
-
 }

+ 2 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/sharepath/SharePathMapper.java

@@ -32,7 +32,8 @@ public interface SharePathMapper extends BaseMapperX<SharePathDO> {
                 .orderByDesc(SharePathDO::getId));
     }
 
-    void addNode(@Param("parentId") Long parentId, @Param("newDescendantId") Long newDescendantId);
+    void addNode(@Param("parentId") Long parentId, @Param("parentName") String parentName, @Param("parentMobile") String parentMobile,
+                 @Param("newDescendantId") Long newDescendantId, @Param("newDescendantName") String newDescendantName, @Param("newDescendantMobile") String newDescendantMobile);
 
 
     int getMaxSortByParentId(@Param("parentId") Long parentId);

+ 97 - 18
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcServiceImpl.java

@@ -6,10 +6,12 @@ import cn.newfeifan.mall.module.distri.controller.admin.duser.vo.DuserSaveReqVO;
 import cn.newfeifan.mall.module.distri.controller.admin.integral.vo.IntegralSaveReqVO;
 import cn.newfeifan.mall.module.distri.controller.admin.ptprofit.vo.PtProfitSaveReqVO;
 import cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo.PtProfitLogSaveReqVO;
+import cn.newfeifan.mall.module.distri.controller.admin.sharepath.vo.SharePathSaveReqVO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.orderpercentage.OrderPercentageDO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofit.PtProfitDO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.sharepath.SharePathDO;
+import cn.newfeifan.mall.module.distri.enums.CaclEnum;
 import cn.newfeifan.mall.module.distri.service.duser.DuserService;
 import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
 import cn.newfeifan.mall.module.distri.service.orderpercentage.OrderPercentageService;
@@ -21,23 +23,20 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 
 import org.springframework.validation.annotation.Validated;
-import org.springframework.transaction.annotation.Transactional;
 
-import java.awt.print.PrinterGraphics;
-import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
 import cn.newfeifan.mall.module.distri.controller.admin.ordercalc.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.ordercalc.OrderCalcDO;
 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.ordercalc.OrderCalcMapper;
 
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.newfeifan.mall.module.distri.constant.DistriConstants.PERCENT;
+import static cn.newfeifan.mall.module.distri.constant.DistriConstants.THREE;
 import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
 
 /**
@@ -113,7 +112,6 @@ public class OrderCalcServiceImpl implements OrderCalcService {
     }
 
 
-
     @Override
     public void calc(List<DistriOrderMessage> tradeOrderDO) {
 
@@ -121,6 +119,8 @@ public class OrderCalcServiceImpl implements OrderCalcService {
         List<Long> userId = tradeOrderDO.stream().map(DistriOrderMessage::getUserId).collect(Collectors.toList());
         // 判断当前下单的人员是否有进入营销模块用户表, 如果没有的话, 需要初始化
         duserService.hasUserAndCreat(userId);
+        // 判断当前下单人是否有有上级, 如果没有, 创建直推人关系
+        sharePathService.createSharePathByUserId(userId);
 
         OrderPercentageDO orderPercentageDO = orderPercentageService.queryStatus();
         // 当前计算百分比模板
@@ -130,7 +130,6 @@ public class OrderCalcServiceImpl implements OrderCalcService {
 
         // todo 计算当天用户的碰撞
 
-
     }
 
     private void calc(List<DistriOrderMessage> tradeOrderDO, OrderPercentageDO orderPercentageDO, String percentTemplate) {
@@ -140,11 +139,9 @@ public class OrderCalcServiceImpl implements OrderCalcService {
         List<PtProfitSaveReqVO> ptProfitSaveReqVOS = new ArrayList<>();
         // 平台收益日志
         List<PtProfitLogSaveReqVO> ptProfitLogSaveReqVOS = new ArrayList<>();
-
         // 修改用户钱包
         List<IntegralSaveReqVO> integralSaveReqVOS = new ArrayList<>();
 
-
         // todo 修改用户身价 如何从订单中获取身价?
         List<DuserSaveReqVO> duserSaveReqVOS = new ArrayList<>();
 
@@ -152,27 +149,31 @@ public class OrderCalcServiceImpl implements OrderCalcService {
         tradeOrderDO.forEach(k -> {
             // 获取当前下单人关系
             SharePathDO sharePath = getSharePath(k.getUserId());
-            // 获取下单人的钱包以及用户表
-            IntegralDO integralDO = integralService.selectByUser(sharePath.getDescendant());
+            // 如果sharePath为空, 则说明没有直推人关系
             IntegralDO integralDOAncestor = integralService.selectByUser(sharePath.getAncestor());
+            IntegralDO integralDO =  integralService.selectByUser(sharePath.getDescendant());
 
             // 计算利润: (价格 - 成本价格) * 产品数量
             Integer profit = (k.getPrice() - k.getCostPrice()) * k.getProductCount();
             // 计算毛利: 利润 * 0.38
             Integer grossProfit = profit * orderPercentageDO.getGrossProfitPerc();
-            // 计算推荐人额度: 利润 * 0.38
+            // 计算推荐人额度: 毛利 * 0.35
             Integer ancestorQuota = grossProfit * orderPercentageDO.getGrossProfitUserQuotaPerc();
-            // 计算直推人额度: 利润 * 0.38
+            // 计算直推人额度: 毛利 * 0.35
             Integer descendantQuota = grossProfit * orderPercentageDO.getGrossProfitAncestorQuotaPerc();
-            // 计算合赢奖: 利润 * 0.38
+            // 计算合赢奖: 毛利 * 0.08
             Integer bonusQuota = grossProfit * orderPercentageDO.getGrossProfitBonusQuotaPerc();
-            // 计算平台收益: 利润 * 0.38
+            // 计算平台收益: 毛利 * 0.22
             Integer platformQuota = grossProfit * orderPercentageDO.getGrossProfitPlatformQuotaPerc();
 
+            // 计算当前下单人的毛利的三倍
+            Integer highQuota = grossProfit * THREE;
+
+
             // ========== 汇总计算 =================
             addCaclDo(percentTemplate, saveList, k, grossProfit, ancestorQuota, descendantQuota, bonusQuota, platformQuota);
             // ========== 修改用户钱包 =================
-            changeUserWallet(integralSaveReqVOS, integralDO, integralDOAncestor, ancestorQuota, descendantQuota);
+            changeUserWallet(integralSaveReqVOS, integralDO, integralDOAncestor, ancestorQuota, descendantQuota, highQuota);
             // ========== 修改平台信息 =================
             // 每个订单计算的过程
             // 增加平台收益
@@ -189,7 +190,72 @@ public class OrderCalcServiceImpl implements OrderCalcService {
                     .ptTotalAdd(ptTotal).build();
             ptProfitSaveReqVOS.add(ptProfitSaveReqVO);
             // ========== 增加日志记录 =================
-            addLog(orderPercentageDO, percentTemplate, ptProfitLogSaveReqVOS, k, sharePath, integralDO, integralDOAncestor, grossProfit, ancestorQuota, descendantQuota, bonusQuota, platformQuota, ptProfitSaveReqVO);
+
+            // 平台记录
+            PtProfitLogSaveReqVO ptGrossAddLog = PtProfitLogSaveReqVO.builder()
+                    .orderId(k.getOrderId())
+                    .profitStatus(CaclEnum.PLATFORM_SERVICE_FEE.getType())
+                    .orderNo(k.getNo())
+                    .amount(platformQuota)
+                    .afterAmount(ptProfitSaveReqVO.getPtGrossAdd())
+                    .percentTemplate(percentTemplate).build();
+
+            PtProfitLogSaveReqVO ptAddLog = PtProfitLogSaveReqVO.builder()
+                    .orderId(k.getOrderId())
+                    .profitStatus(CaclEnum.PLATFORM_REVENUE.getType())
+                    .orderNo(k.getNo())
+                    .amount(grossProfit * (PERCENT - orderPercentageDO.getGrossProfitBonusQuotaPerc()))
+                    .afterAmount(ptProfitSaveReqVO.getPtAdd())
+                    .percentTemplate(percentTemplate).build();
+
+
+            // 推荐人记录
+            PtProfitLogSaveReqVO tjrLog = PtProfitLogSaveReqVO.builder()
+                    .orderId(k.getOrderId())
+                    .profitStatus(CaclEnum.RECOMMENDED_PERSON_QUOTA.getType())
+                    .orderNo(k.getNo())
+                    .userId(sharePath.getAncestor())
+                    .amount(ancestorQuota)
+                    .afterAmount(integralDOAncestor.getCurrentQuota() + ancestorQuota)
+                    .percentTemplate(percentTemplate).build();
+
+
+            // 直推人记录
+            PtProfitLogSaveReqVO ztrLog = PtProfitLogSaveReqVO.builder()
+                    .orderId(k.getOrderId())
+                    .profitStatus(CaclEnum.DIRECT_REFERRAL_QUOTA.getType())
+                    .orderNo(k.getNo())
+                    .userId(sharePath.getDescendant())
+                    .amount(descendantQuota)
+                    .afterAmount(integralDO.getCurrentQuota() + descendantQuota)
+                    .percentTemplate(percentTemplate).build();
+            PtProfitLogSaveReqVO highQuotaLog = PtProfitLogSaveReqVO.builder()
+                    .orderId(k.getOrderId())
+                    .profitStatus(CaclEnum.HIGH_QUOTA.getType())
+                    .orderNo(k.getNo())
+                    .userId(sharePath.getDescendant())
+                    .amount(highQuota)
+                    .afterAmount(integralDO.getHighQuota() + highQuota)
+                    .percentTemplate(percentTemplate).build();
+
+            // 合赢奖记录
+            PtProfitLogSaveReqVO hyjLog = PtProfitLogSaveReqVO.builder()
+                    .orderId(k.getOrderId())
+                    .profitStatus(CaclEnum.TOGETHER_AWARD.getType())
+                    .orderNo(k.getNo())
+                    .amount(bonusQuota)
+                    .afterAmount(0)
+                    .percentTemplate(percentTemplate).build();
+
+
+            ptProfitLogSaveReqVOS.add(ptGrossAddLog);
+            ptProfitLogSaveReqVOS.add(ptAddLog);
+            ptProfitLogSaveReqVOS.add(tjrLog);
+            ptProfitLogSaveReqVOS.add(ztrLog);
+            ptProfitLogSaveReqVOS.add(hyjLog);
+            ptProfitLogSaveReqVOS.add(highQuotaLog);
+
+
         });
 
         // 将信息存储到数据库中
@@ -215,9 +281,13 @@ public class OrderCalcServiceImpl implements OrderCalcService {
         saveList.add(orderCalcSaveReqVO);
     }
 
-    private static void changeUserWallet(List<IntegralSaveReqVO> integralSaveReqVOS, IntegralDO integralDO, IntegralDO integralDOAncestor, Integer ancestorQuota, Integer descendantQuota) {
+    private static void changeUserWallet(List<IntegralSaveReqVO> integralSaveReqVOS, IntegralDO integralDO, IntegralDO integralDOAncestor, Integer ancestorQuota, Integer descendantQuota, Integer highQuota) {
         // 修改用户钱包
+        // 增加直推人额度
+        integralDO.setHighQuota(integralDO.getHighQuota() + highQuota);
         integralDO.setCurrentQuota(integralDO.getCurrentQuota() + descendantQuota);
+
+        // 增加推荐人额度
         integralDOAncestor.setCurrentQuota(integralDO.getCurrentQuota() + ancestorQuota);
 
         integralSaveReqVOS.add(BeanUtils.toBean(integralDO, IntegralSaveReqVO.class));
@@ -255,6 +325,15 @@ public class OrderCalcServiceImpl implements OrderCalcService {
                 .afterAmount(integralDOAncestor.getCurrentQuota() + ancestorQuota)
                 .percentTemplate(percentTemplate).build();
 
+        PtProfitLogSaveReqVO highQuotaLog = PtProfitLogSaveReqVO.builder()
+                .orderId(k.getOrderId())
+                .profitStatus(6)
+                .orderNo(k.getNo())
+                .userId(sharePath.getAncestor())
+                .amount(ancestorQuota)
+                .afterAmount(integralDOAncestor.getCurrentQuota() + ancestorQuota)
+                .percentTemplate(percentTemplate).build();
+
 
         // 直推人记录
         PtProfitLogSaveReqVO ztrLog = PtProfitLogSaveReqVO.builder()
@@ -282,10 +361,10 @@ public class OrderCalcServiceImpl implements OrderCalcService {
         ptProfitLogSaveReqVOS.add(tjrLog);
         ptProfitLogSaveReqVOS.add(ztrLog);
         ptProfitLogSaveReqVOS.add(hyjLog);
+        ptProfitLogSaveReqVOS.add(highQuotaLog);
     }
 
 
-
     // 获取当前订单的下单人的直推关系
     public SharePathDO getSharePath(Long userId) {
 

+ 4 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathService.java

@@ -2,6 +2,7 @@ package cn.newfeifan.mall.module.distri.service.sharepath;
 
 import java.util.*;
 import javax.validation.*;
+
 import cn.newfeifan.mall.module.distri.controller.admin.sharepath.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.sharepath.SharePathDO;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
@@ -24,6 +25,7 @@ public interface SharePathService {
 
     void createSharePathByUserId(SharePathSaveReqVO createReqVO);
 
+    void createSharePathByUserId(List<Long> userIds);
 
 
     /**
@@ -62,6 +64,7 @@ public interface SharePathService {
 
     /**
      * 转让分销用户关系
+     *
      * @param sharePathtransFerenceRelaReqVO
      */
     void transferenceRela(SharePathtransFerenceRelaReqVO sharePathtransFerenceRelaReqVO);
@@ -69,6 +72,7 @@ public interface SharePathService {
 
     /**
      * 通过直推人, 获取当前的直推关系
+     *
      * @param userId
      * @return
      */

+ 29 - 2
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathServiceImpl.java

@@ -1,7 +1,10 @@
 package cn.newfeifan.mall.module.distri.service.sharepath;
 
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO;
 import cn.newfeifan.mall.module.distri.service.duser.DuserService;
+import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
+import cn.newfeifan.mall.module.member.service.user.MemberUserService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.stereotype.Service;
 
@@ -21,6 +24,7 @@ import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
 import cn.newfeifan.mall.module.distri.dal.mysql.sharepath.SharePathMapper;
 
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.distri.constant.DistriConstants.PT_ID;
 import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
 
 /**
@@ -37,7 +41,8 @@ public class SharePathServiceImpl implements SharePathService {
 
     @Resource
     private DuserService duserService;
-
+    @Resource
+    private MemberUserService memberUserService;
 
     @Override
     public Long createSharePath(SharePathSaveReqVO createReqVO) {
@@ -59,8 +64,30 @@ public class SharePathServiceImpl implements SharePathService {
         // 创建直推人以及推荐人的关系
         // 需要判断当前推荐人跟直推人是否已经存在于用户表(duser)了
         duserService.hasUserAndCreat(createReqVO);
+        MemberUserDO ancestor = memberUserService.getUser(createReqVO.getAncestor());
+        MemberUserDO descendant = memberUserService.getUser(createReqVO.getDescendant());
         // 存储他们之间的关系
-        sharePathMapper.addNode(createReqVO.getAncestor(), createReqVO.getDescendant());
+        sharePathMapper.addNode(createReqVO.getAncestor(), ancestor.getName(), ancestor.getMobile(),
+                createReqVO.getDescendant(), descendant.getName(), descendant.getMobile());
+    }
+
+    @Override
+    public void createSharePathByUserId(List<Long> userIds) {
+
+        for (Long userId : userIds) {
+            Boolean has = hasParent(userId);
+            if (has) {
+                continue;
+            }
+            // 如果是没有父亲, 将其推荐人设置为平台
+            SharePathSaveReqVO build = SharePathSaveReqVO.builder()
+                    .ancestor(PT_ID)
+                    .descendant(userId)
+                    .build();
+            createSharePathByUserId(build);
+        }
+
+
     }
 
     private Boolean hasParent(Long descendant) {

+ 15 - 3
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/sharepath/SharePathMapper.xml

@@ -5,13 +5,25 @@
 
     <!-- 增加节点 -->
     <insert id="addNode">
-        INSERT INTO distri_share_path (ancestor, descendant, depth, sort)
-        SELECT ancestor, #{newDescendantId}, depth + 1,
+        INSERT INTO distri_share_path (ancestor, anc_name, anc_phone, descendant, desc_name, desc_phone, depth, sort)
+        SELECT ancestor,
+               anc_name,
+               anc_phone,
+               #{newDescendantId},
+               #{newDescendantName},
+               #{newDescendantMobile},
+               depth + 1,
                (SELECT IFNULL(MAX(sort), 0) + 1 FROM distri_share_path WHERE ancestor = #{parentId} AND depth = 1)
         FROM distri_share_path
         WHERE descendant = #{parentId}
         UNION ALL
-        SELECT #{parentId}, #{newDescendantId}, 1,
+        SELECT #{parentId},
+               #{parentName},
+               #{parentMobile},
+               #{newDescendantId},
+               #{newDescendantName},
+               #{newDescendantMobile},
+               1,
                (SELECT IFNULL(MAX(sort), 0) + 1 FROM distri_share_path WHERE ancestor = #{parentId} AND depth = 1);
     </insert>