Commit ee15b802b24f52359ed610263186bbee6a051073
1 parent
972b01c0
分佣: 推广人排行
Showing
6 changed files
with
56 additions
and
16 deletions
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<BrokerageRecordDO> { |
| 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<BrokerageUserDO> { |
| 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(); | ... | ... |