Browse Source

添加营销模块用户关系列表

Yangzw 11 months ago
parent
commit
77508c94ed

+ 18 - 2
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/DuserController.java

@@ -1,5 +1,7 @@
 package cn.newfeifan.mall.module.distri.controller.admin.duser;
 
+import cn.newfeifan.mall.module.member.controller.admin.user.vo.MemberUserRespVO;
+import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
 import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
@@ -8,7 +10,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Operation;
 
-import javax.validation.constraints.*;
 import javax.validation.*;
 import javax.servlet.http.*;
 import java.util.*;
@@ -71,12 +72,25 @@ public class DuserController {
         return success(BeanUtils.toBean(duser, DuserRespVO.class));
     }
 
+    @GetMapping("/getDescendants")
+    @Operation(summary = "通过推荐人获得直推人")
+    @Parameter(name = "userId", description = "编号", required = true, example = "1024")
+    @Parameter(name = "depth", description = "层次", required = true, example = "1")
+    @PreAuthorize("@ss.hasPermission('distri:duser:query')")
+    public CommonResult<List<MemberUserRespVO>> getDescendants(@RequestParam("userId") Long userId, Long depth) {
+        List<MemberUserDO> descendants = duserService.getDescendants(userId, depth);
+        return success(BeanUtils.toBean(descendants, MemberUserRespVO.class));
+    }
+
     @GetMapping("/page")
     @Operation(summary = "获得推荐用户分页")
     @PreAuthorize("@ss.hasPermission('distri:duser:query')")
     public CommonResult<PageResult<DuserRespVO>> getDuserPage(@Valid DuserPageReqVO pageReqVO) {
         PageResult<DuserDO> pageResult = duserService.getDuserPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, DuserRespVO.class));
+        PageResult<DuserRespVO> result = BeanUtils.toBean(pageResult, DuserRespVO.class);
+
+        duserService.getSharePathCount(result);
+        return success(result);
     }
 
     @GetMapping("/export-excel")
@@ -92,4 +106,6 @@ public class DuserController {
                         BeanUtils.toBean(list, DuserRespVO.class));
     }
 
+
+
 }

+ 9 - 3
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/vo/DuserRespVO.java

@@ -2,9 +2,6 @@ package cn.newfeifan.mall.module.distri.controller.admin.duser.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.*;
 
@@ -59,4 +56,13 @@ public class DuserRespVO {
     @ExcelProperty("用户名称")
     private String nickName;
 
+    @Schema(description = "直推人总数")
+    private Long descendantCount;
+
+    @Schema(description = "后代总数")
+    private Long childrenCount;
+
+    @Schema(description = "用户头像")
+    private String avatar;
+
 }

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

@@ -1,6 +1,5 @@
 package cn.newfeifan.mall.module.distri.dal.mysql.duser;
 
-import java.util.*;
 
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -31,7 +30,7 @@ public interface DuserMapper extends BaseMapperX<DuserDO> {
                 .eqIfPresent(DuserDO::getSocialUpNeed, reqVO.getSocialUpNeed())
                 .eqIfPresent(DuserDO::getCategoryId, reqVO.getCategoryId())
                 .likeIfPresent(DuserDO::getNickName, reqVO.getNickName())
-                .orderByDesc(DuserDO::getId));
+                .orderByAsc(DuserDO::getId));
     }
     int hasParent(Long userId);
 }

+ 3 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/duser/DuserService.java

@@ -6,7 +6,7 @@ import cn.newfeifan.mall.module.distri.controller.admin.duser.vo.*;
 import cn.newfeifan.mall.module.distri.controller.admin.sharepath.vo.SharePathSaveReqVO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
-import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
 
 /**
  * 推荐用户 Service 接口
@@ -67,5 +67,7 @@ public interface DuserService {
     List<DuserDO> selectAllUser();
 
 
+    void getSharePathCount(PageResult<DuserRespVO> result);
 
+    List<MemberUserDO> getDescendants(Long userId, Long depth);
 }

+ 44 - 5
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/duser/DuserServiceImpl.java

@@ -3,28 +3,27 @@ package cn.newfeifan.mall.module.distri.service.duser;
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.newfeifan.mall.module.distri.controller.admin.integral.vo.IntegralSaveReqVO;
 import cn.newfeifan.mall.module.distri.controller.admin.sharepath.vo.SharePathSaveReqVO;
-import cn.newfeifan.mall.module.distri.controller.admin.socialstatus.vo.SocialStatusSaveReqVO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO;
-import cn.newfeifan.mall.module.distri.dal.dataobject.socialstatus.SocialStatusDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.sharepath.SharePathDO;
+import cn.newfeifan.mall.module.distri.dal.mysql.sharepath.SharePathMapper;
 import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
 import cn.newfeifan.mall.module.distri.service.socialstatus.SocialStatusService;
 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.service.user.MemberUserService;
-import cn.newfeifan.mall.module.system.service.member.MemberService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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 java.util.stream.Collectors;
 
 import cn.newfeifan.mall.module.distri.controller.admin.duser.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO;
 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.duser.DuserMapper;
@@ -47,6 +46,12 @@ public class DuserServiceImpl implements DuserService {
     @Resource
     private MemberUserService memberUserService;
 
+    @Resource
+    private SharePathMapper sharePathMapper;
+
+    @Resource
+    private MemberUserMapper memberUserMapper;
+
 
     @Override
     public Long createDuser(DuserSaveReqVO createReqVO) {
@@ -153,4 +158,38 @@ public class DuserServiceImpl implements DuserService {
         }
     }
 
+
+    @Override
+    public void getSharePathCount(PageResult<DuserRespVO> result) {
+        List<DuserRespVO> list = result.getList();
+        for (DuserRespVO duserRespVO : list) {
+            duserRespVO.setDescendantCount(sharePathMapper.selectCount(new LambdaQueryWrapperX<SharePathDO>()
+                    .eq(SharePathDO::getAncestor, duserRespVO.getUserId())
+                    .eq(SharePathDO::getDepth,1)
+            ));
+            duserRespVO.setChildrenCount(sharePathMapper.selectCount(new LambdaQueryWrapperX<SharePathDO>()
+                    .eq(SharePathDO::getAncestor, duserRespVO.getUserId())
+                    .ne(SharePathDO::getDepth,1)
+            ));
+        }
+    }
+
+    @Override
+    public List<MemberUserDO> getDescendants(Long userId, Long depth) {
+        LambdaQueryWrapperX<SharePathDO> wrapper = new LambdaQueryWrapperX<SharePathDO>()
+                .eq(SharePathDO::getAncestor, userId);
+        if(depth != null){
+            wrapper.eq(SharePathDO::getDepth, 1);
+        }else {
+            wrapper.ne(SharePathDO::getDepth, 1);
+        }
+        List<SharePathDO> sharePathDOS = sharePathMapper.selectList(wrapper);
+        List<Long> userIds = sharePathDOS.stream().map(SharePathDO::getDescendant).collect(Collectors.toList());
+
+
+        return memberUserMapper.selectList(new LambdaQueryWrapper<MemberUserDO>()
+                .in(MemberUserDO::getId, userIds)
+        );
+    }
+
 }