Commit ee15b802b24f52359ed610263186bbee6a051073

Authored by owen
1 parent 972b01c0

分佣: 推广人排行

yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageUserController.java
... ... @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
8 8 import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
9 9 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.*;
10 10 import cn.iocoder.yudao.module.trade.convert.brokerage.BrokerageRecordConvert;
  11 +import cn.iocoder.yudao.module.trade.convert.brokerage.BrokerageUserConvert;
11 12 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
12 13 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
13 14 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum;
... ... @@ -90,24 +91,15 @@ public class AppBrokerageUserController {
90 91 return success(respVO);
91 92 }
92 93  
93   - // TODO 芋艿:临时 mock =>
94 94 @GetMapping("/rank-page-by-user-count")
95 95 @Operation(summary = "获得分销用户排行分页(基于用户量)")
96 96 @PreAuthenticated
97 97 public CommonResult<PageResult<AppBrokerageUserRankByUserCountRespVO>> getBrokerageUserRankPageByUserCount(AppBrokerageUserRankPageReqVO pageReqVO) {
98   - AppBrokerageUserRankByUserCountRespVO vo1 = new AppBrokerageUserRankByUserCountRespVO()
99   - .setId(1L).setNickname("芋1**艿").setAvatar("http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg")
100   - .setBrokerageUserCount(10);
101   - AppBrokerageUserRankByUserCountRespVO vo2 = new AppBrokerageUserRankByUserCountRespVO()
102   - .setId(2L).setNickname("芋2**艿").setAvatar("http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg")
103   - .setBrokerageUserCount(6);
104   - AppBrokerageUserRankByUserCountRespVO vo3 = new AppBrokerageUserRankByUserCountRespVO()
105   - .setId(3L).setNickname("芋3**艿").setAvatar("http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg")
106   - .setBrokerageUserCount(4);
107   - AppBrokerageUserRankByUserCountRespVO vo4 = new AppBrokerageUserRankByUserCountRespVO()
108   - .setId(3L).setNickname("芋3**艿").setAvatar("http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg")
109   - .setBrokerageUserCount(4);
110   - return success(new PageResult<>(asList(vo1, vo2, vo3, vo4), 10L));
  98 + // 分页查询
  99 + PageResult<AppBrokerageUserRankByUserCountRespVO> pageResult = brokerageUserService.getBrokerageUserRankPageByUserCount(pageReqVO);
  100 + // 拼接数据
  101 + Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(convertSet(pageResult.getList(), AppBrokerageUserRankByUserCountRespVO::getId));
  102 + return success(BrokerageUserConvert.INSTANCE.convertPage03(pageResult, userMap));
111 103 }
112 104  
113 105 @GetMapping("/rank-page-by-price")
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/brokerage/BrokerageUserConvert.java
... ... @@ -4,9 +4,11 @@ import cn.hutool.core.map.MapUtil;
4 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 5 import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
6 6 import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserRespVO;
  7 +import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankByUserCountRespVO;
7 8 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
8 9 import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO;
9 10 import org.mapstruct.Mapper;
  11 +import org.mapstruct.MappingTarget;
10 12 import org.mapstruct.factory.Mappers;
11 13  
12 14 import java.util.List;
... ... @@ -55,4 +57,13 @@ public interface BrokerageUserConvert {
55 57 user -> target.setNickname(user.getNickname()).setAvatar(user.getAvatar()));
56 58 return target;
57 59 }
  60 +
  61 + default PageResult<AppBrokerageUserRankByUserCountRespVO> convertPage03(PageResult<AppBrokerageUserRankByUserCountRespVO> pageResult, Map<Long, MemberUserRespDTO> userMap) {
  62 + for (AppBrokerageUserRankByUserCountRespVO vo : pageResult.getList()) {
  63 + copyTo(userMap.get(vo.getId()), vo);
  64 + }
  65 + return pageResult;
  66 + }
  67 +
  68 + void copyTo(MemberUserRespDTO from, @MappingTarget AppBrokerageUserRankByUserCountRespVO to);
58 69 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/BrokerageRecordMapper.java
... ... @@ -67,9 +67,10 @@ public interface BrokerageRecordMapper extends BaseMapperX&lt;BrokerageRecordDO&gt; {
67 67 @Param("endTime") LocalDateTime endTime);
68 68  
69 69 @Select("SELECT user_id AS id, SUM(price) AS brokeragePrice FROM trade_brokerage_record " +
70   - "WHERE biz_type = #{bizType} AND status = #{status} AND create_time BETWEEN #{beginTime} AND #{endTime} " +
  70 + "WHERE biz_type = #{bizType} AND status = #{status} AND deleted = FALSE " +
  71 + "AND unfreeze_time BETWEEN #{beginTime} AND #{endTime} " +
71 72 "GROUP BY user_id " +
72   - "ORDER BY SUM(price) DESC")
  73 + "ORDER BY brokeragePrice DESC")
73 74 IPage<AppBrokerageUserRankByPriceRespVO> selectSummaryPricePageGroupByUserId(IPage<?> page,
74 75 @Param("bizType") Integer bizType,
75 76 @Param("status") Integer status,
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/BrokerageUserMapper.java
... ... @@ -5,10 +5,16 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 5 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
6 6 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
7 7 import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO;
  8 +import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankByUserCountRespVO;
8 9 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
9 10 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  11 +import com.baomidou.mybatisplus.core.metadata.IPage;
  12 +import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
10 13 import org.apache.ibatis.annotations.Mapper;
  14 +import org.apache.ibatis.annotations.Param;
  15 +import org.apache.ibatis.annotations.Select;
11 16  
  17 +import java.time.LocalDateTime;
12 18 import java.util.List;
13 19  
14 20 /**
... ... @@ -124,4 +130,12 @@ public interface BrokerageUserMapper extends BaseMapperX&lt;BrokerageUserDO&gt; {
124 130 .inIfPresent(BrokerageUserDO::getLevel, levels));
125 131 }
126 132  
  133 + @Select("SELECT bind_user_id AS id, COUNT(1) AS brokerageUserCount FROM trade_brokerage_user " +
  134 + "WHERE bind_user_id IS NOT NULL AND deleted = FALSE " +
  135 + "AND bind_user_time BETWEEN #{beginTime} AND #{endTime} " +
  136 + "GROUP BY bind_user_id " +
  137 + "ORDER BY brokerageUserCount DESC")
  138 + IPage<AppBrokerageUserRankByUserCountRespVO> selectCountPageGroupByBindUserId(Page<?> page,
  139 + @Param("beginTime") LocalDateTime beginTime,
  140 + @Param("endTime") LocalDateTime endTime);
127 141 }
... ...
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;
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
5 5 import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO;
  6 +import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankByUserCountRespVO;
  7 +import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankPageReqVO;
6 8 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
7 9  
8 10 import javax.validation.constraints.NotNull;
... ... @@ -130,4 +132,12 @@ public interface BrokerageUserService {
130 132 * @return 是否有分销资格
131 133 */
132 134 Boolean getUserBrokerageEnabled(Long userId);
  135 +
  136 + /**
  137 + * 获得推广人排行
  138 + *
  139 + * @param pageReqVO 分页查询
  140 + * @return 推广人排行
  141 + */
  142 + PageResult<AppBrokerageUserRankByUserCountRespVO> getBrokerageUserRankPageByUserCount(AppBrokerageUserRankPageReqVO pageReqVO);
133 143 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserServiceImpl.java
... ... @@ -2,17 +2,22 @@ package cn.iocoder.yudao.module.trade.service.brokerage;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.lang.Assert;
  5 +import cn.hutool.core.util.ArrayUtil;
5 6 import cn.hutool.core.util.BooleanUtil;
6 7 import cn.hutool.core.util.ObjectUtil;
7 8 import cn.hutool.core.util.StrUtil;
8 9 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  10 +import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
9 11 import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO;
  12 +import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankByUserCountRespVO;
  13 +import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankPageReqVO;
10 14 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
11 15 import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO;
12 16 import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.BrokerageUserMapper;
13 17 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageBindModeEnum;
14 18 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageEnabledConditionEnum;
15 19 import cn.iocoder.yudao.module.trade.service.config.TradeConfigService;
  20 +import com.baomidou.mybatisplus.core.metadata.IPage;
16 21 import org.springframework.stereotype.Service;
17 22 import org.springframework.validation.annotation.Validated;
18 23  
... ... @@ -208,6 +213,13 @@ public class BrokerageUserServiceImpl implements BrokerageUserService {
208 213 .orElse(false);
209 214 }
210 215  
  216 + @Override
  217 + public PageResult<AppBrokerageUserRankByUserCountRespVO> getBrokerageUserRankPageByUserCount(AppBrokerageUserRankPageReqVO pageReqVO) {
  218 + IPage<AppBrokerageUserRankByUserCountRespVO> pageResult = brokerageUserMapper.selectCountPageGroupByBindUserId(MyBatisUtils.buildPage(pageReqVO),
  219 + ArrayUtil.get(pageReqVO.getTimes(), 0), ArrayUtil.get(pageReqVO.getTimes(), 1));
  220 + return new PageResult<>(pageResult.getRecords(), pageResult.getTotal());
  221 + }
  222 +
211 223 private boolean isUserCanBind(BrokerageUserDO user, Boolean isNewUser) {
212 224 // 校验分销功能是否启用
213 225 TradeConfigDO tradeConfig = tradeConfigService.getTradeConfig();
... ...