Browse Source

分佣: 推广人列表

owen 1 year ago
parent
commit
ad0513c87c

+ 3 - 11
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageUserController.java

@@ -33,7 +33,6 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
-import static java.util.Arrays.asList;
 
 @Tag(name = "用户 APP - 分销用户")
 @RestController
@@ -113,21 +112,14 @@ public class AppBrokerageUserController {
         return success(BrokerageRecordConvert.INSTANCE.convertPage03(pageResult, userMap));
     }
 
-    // TODO 芋艿:临时 mock =>
     @GetMapping("/child-summary-page")
     @Operation(summary = "获得下级分销统计分页")
     @PreAuthenticated
     public CommonResult<PageResult<AppBrokerageUserChildSummaryRespVO>> getBrokerageUserChildSummaryPage(
             AppBrokerageUserChildSummaryPageReqVO pageReqVO) {
-        AppBrokerageUserChildSummaryRespVO vo1 = new AppBrokerageUserChildSummaryRespVO()
-                .setId(1L).setNickname("芋1**艿").setAvatar("http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg")
-                .setBrokeragePrice(10).setBrokeragePrice(20).setBrokerageOrderCount(30)
-                .setBrokerageTime(LocalDateTime.now());
-        AppBrokerageUserChildSummaryRespVO vo2 = new AppBrokerageUserChildSummaryRespVO()
-                .setId(1L).setNickname("芋2**艿").setAvatar("http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg")
-                .setBrokeragePrice(20).setBrokeragePrice(30).setBrokerageOrderCount(40)
-                .setBrokerageTime(LocalDateTime.now());
-        return success(new PageResult<>(asList(vo1, vo2), 10L));
+        // 分页查询
+        PageResult<AppBrokerageUserChildSummaryRespVO> pageResult = brokerageUserService.getBrokerageUserChildSummaryPage(pageReqVO, getLoginUserId());
+        return success(pageResult);
     }
 
     @GetMapping("/get-rank-by-price")

+ 1 - 1
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/vo/user/AppBrokerageUserChildSummaryRespVO.java

@@ -27,7 +27,7 @@ public class AppBrokerageUserChildSummaryRespVO {
     @Schema(description = "分销用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "30")
     private Integer brokerageUserCount;
 
-    @Schema(description = "成为分销员时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "绑定推广员的时间", requiredMode = Schema.RequiredMode.REQUIRED)
     private LocalDateTime brokerageTime;
 
 }

+ 6 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/BrokerageUserMapper.java

@@ -5,6 +5,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO;
+import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryPageReqVO;
+import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryRespVO;
 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankByUserCountRespVO;
 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -138,4 +140,8 @@ public interface BrokerageUserMapper extends BaseMapperX<BrokerageUserDO> {
     IPage<AppBrokerageUserRankByUserCountRespVO> selectCountPageGroupByBindUserId(Page<?> page,
                                                                                   @Param("beginTime") LocalDateTime beginTime,
                                                                                   @Param("endTime") LocalDateTime endTime);
+
+    IPage<AppBrokerageUserChildSummaryRespVO> selectSummaryPageByUserId(Page<?> page,
+                                                                        @Param("param") AppBrokerageUserChildSummaryPageReqVO param,
+                                                                        @Param("userId") Long userId);
 }

+ 11 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserService.java

@@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.trade.service.brokerage;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
 import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO;
+import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryPageReqVO;
+import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryRespVO;
 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankByUserCountRespVO;
 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankPageReqVO;
 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
@@ -140,4 +142,13 @@ public interface BrokerageUserService {
      * @return 推广人排行
      */
     PageResult<AppBrokerageUserRankByUserCountRespVO> getBrokerageUserRankPageByUserCount(AppBrokerageUserRankPageReqVO pageReqVO);
+
+    /**
+     * 获得下级分销统计分页
+     *
+     * @param pageReqVO 分页查询
+     * @param userId    用户编号
+     * @return 下级分销统计分页
+     */
+    PageResult<AppBrokerageUserChildSummaryRespVO> getBrokerageUserChildSummaryPage(AppBrokerageUserChildSummaryPageReqVO pageReqVO, Long userId);
 }

+ 8 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserServiceImpl.java

@@ -9,6 +9,8 @@ import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
 import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO;
+import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryPageReqVO;
+import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryRespVO;
 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankByUserCountRespVO;
 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankPageReqVO;
 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
@@ -220,6 +222,12 @@ public class BrokerageUserServiceImpl implements BrokerageUserService {
         return new PageResult<>(pageResult.getRecords(), pageResult.getTotal());
     }
 
+    @Override
+    public PageResult<AppBrokerageUserChildSummaryRespVO> getBrokerageUserChildSummaryPage(AppBrokerageUserChildSummaryPageReqVO pageReqVO, Long userId) {
+        IPage<AppBrokerageUserChildSummaryRespVO> pageResult = brokerageUserMapper.selectSummaryPageByUserId(MyBatisUtils.buildPage(pageReqVO), pageReqVO, userId);
+        return new PageResult<>(pageResult.getRecords(), pageResult.getTotal());
+    }
+
     private boolean isUserCanBind(BrokerageUserDO user, Boolean isNewUser) {
         // 校验分销功能是否启用
         TradeConfigDO tradeConfig = tradeConfigService.getTradeConfig();

+ 44 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/resources/mapper/brokerage/BrokerageUserMapper.xml

@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.iocoder.yudao.module.trade.dal.mysql.brokerage.BrokerageUserMapper">
+
+    <select id="selectSummaryPageByUserId"
+            resultType="cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryRespVO">
+        SELECT bu.id, bu.bind_user_time AS brokerageTime,
+        u.nickname, u.avatar,
+        (SELECT SUM(price) FROM trade_brokerage_record r
+        WHERE r.user_id = u.id AND biz_type = 1 AND r.status = 1 AND r.deleted = FALSE) AS brokeragePrice,
+        (SELECT COUNT(1) FROM trade_brokerage_record r
+        WHERE r.user_id = u.id AND biz_type = 1 AND r.status = 1 AND r.deleted = FALSE) AS brokerageOrderCount,
+        (SELECT COUNT(1) FROM trade_brokerage_user c
+        WHERE c.bind_user_id = u.id AND c.deleted = FALSE) AS brokerageUserCount
+        FROM member_user AS u
+        JOIN trade_brokerage_user AS bu ON bu.id = u.id
+        <where>
+            <if test="param.nickname != null and param.nickname != ''">
+                AND u.nickname LIKE concat('', #{param.nickname}, '')
+            </if>
+            <if test="param.level == 1">
+                AND bu.bind_user_id = #{userId}
+            </if>
+            <if test="param.level == 2">
+                AND bu.bind_user_id = (SELECT id FROM trade_brokerage_user c WHERE c.bind_user_id =
+                #{userId})
+            </if>
+        </where>
+        <choose>
+            <when test="param.sortingField.field == 'userCount'">
+                ORDER BY brokerageUserCount ${param.sortingField.order}
+            </when>
+            <when test="param.sortingField.field == 'orderCount'">
+                ORDER BY brokerageOrderCount ${param.sortingField.order}
+            </when>
+            <when test="param.sortingField.field == 'price'">
+                ORDER BY brokeragePrice ${param.sortingField.order}
+            </when>
+            <otherwise>
+                ORDER BY bu.bind_user_time DESC
+            </otherwise>
+        </choose>
+    </select>
+</mapper>