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,6 +8,7 @@ import cn.iocoder.yudao.module.member.api.user.MemberUserApi; | ||
| 8 | import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; | 8 | import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; |
| 9 | import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.*; | 9 | import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.*; |
| 10 | import cn.iocoder.yudao.module.trade.convert.brokerage.BrokerageRecordConvert; | 10 | import cn.iocoder.yudao.module.trade.convert.brokerage.BrokerageRecordConvert; |
| 11 | +import cn.iocoder.yudao.module.trade.convert.brokerage.BrokerageUserConvert; | ||
| 11 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; | 12 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; |
| 12 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; | 13 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; |
| 13 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum; | 14 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum; |
| @@ -90,24 +91,15 @@ public class AppBrokerageUserController { | @@ -90,24 +91,15 @@ public class AppBrokerageUserController { | ||
| 90 | return success(respVO); | 91 | return success(respVO); |
| 91 | } | 92 | } |
| 92 | 93 | ||
| 93 | - // TODO 芋艿:临时 mock => | ||
| 94 | @GetMapping("/rank-page-by-user-count") | 94 | @GetMapping("/rank-page-by-user-count") |
| 95 | @Operation(summary = "获得分销用户排行分页(基于用户量)") | 95 | @Operation(summary = "获得分销用户排行分页(基于用户量)") |
| 96 | @PreAuthenticated | 96 | @PreAuthenticated |
| 97 | public CommonResult<PageResult<AppBrokerageUserRankByUserCountRespVO>> getBrokerageUserRankPageByUserCount(AppBrokerageUserRankPageReqVO pageReqVO) { | 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 | @GetMapping("/rank-page-by-price") | 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,9 +4,11 @@ import cn.hutool.core.map.MapUtil; | ||
| 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; | 5 | import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; |
| 6 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserRespVO; | 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 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; | 8 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; |
| 8 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | 9 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; |
| 9 | import org.mapstruct.Mapper; | 10 | import org.mapstruct.Mapper; |
| 11 | +import org.mapstruct.MappingTarget; | ||
| 10 | import org.mapstruct.factory.Mappers; | 12 | import org.mapstruct.factory.Mappers; |
| 11 | 13 | ||
| 12 | import java.util.List; | 14 | import java.util.List; |
| @@ -55,4 +57,13 @@ public interface BrokerageUserConvert { | @@ -55,4 +57,13 @@ public interface BrokerageUserConvert { | ||
| 55 | user -> target.setNickname(user.getNickname()).setAvatar(user.getAvatar())); | 57 | user -> target.setNickname(user.getNickname()).setAvatar(user.getAvatar())); |
| 56 | return target; | 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,9 +67,10 @@ public interface BrokerageRecordMapper extends BaseMapperX<BrokerageRecordDO> { | ||
| 67 | @Param("endTime") LocalDateTime endTime); | 67 | @Param("endTime") LocalDateTime endTime); |
| 68 | 68 | ||
| 69 | @Select("SELECT user_id AS id, SUM(price) AS brokeragePrice FROM trade_brokerage_record " + | 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 | "GROUP BY user_id " + | 72 | "GROUP BY user_id " + |
| 72 | - "ORDER BY SUM(price) DESC") | 73 | + "ORDER BY brokeragePrice DESC") |
| 73 | IPage<AppBrokerageUserRankByPriceRespVO> selectSummaryPricePageGroupByUserId(IPage<?> page, | 74 | IPage<AppBrokerageUserRankByPriceRespVO> selectSummaryPricePageGroupByUserId(IPage<?> page, |
| 74 | @Param("bizType") Integer bizType, | 75 | @Param("bizType") Integer bizType, |
| 75 | @Param("status") Integer status, | 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,10 +5,16 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 5 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 5 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 6 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 6 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 7 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO; | 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 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; | 9 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; |
| 9 | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | 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 | import org.apache.ibatis.annotations.Mapper; | 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 | import java.util.List; | 18 | import java.util.List; |
| 13 | 19 | ||
| 14 | /** | 20 | /** |
| @@ -124,4 +130,12 @@ public interface BrokerageUserMapper extends BaseMapperX<BrokerageUserDO> { | @@ -124,4 +130,12 @@ public interface BrokerageUserMapper extends BaseMapperX<BrokerageUserDO> { | ||
| 124 | .inIfPresent(BrokerageUserDO::getLevel, levels)); | 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,6 +3,8 @@ package cn.iocoder.yudao.module.trade.service.brokerage; | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils; | 4 | import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils; |
| 5 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO; | 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 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; | 8 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; |
| 7 | 9 | ||
| 8 | import javax.validation.constraints.NotNull; | 10 | import javax.validation.constraints.NotNull; |
| @@ -130,4 +132,12 @@ public interface BrokerageUserService { | @@ -130,4 +132,12 @@ public interface BrokerageUserService { | ||
| 130 | * @return 是否有分销资格 | 132 | * @return 是否有分销资格 |
| 131 | */ | 133 | */ |
| 132 | Boolean getUserBrokerageEnabled(Long userId); | 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,17 +2,22 @@ package cn.iocoder.yudao.module.trade.service.brokerage; | ||
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.hutool.core.lang.Assert; | 4 | import cn.hutool.core.lang.Assert; |
| 5 | +import cn.hutool.core.util.ArrayUtil; | ||
| 5 | import cn.hutool.core.util.BooleanUtil; | 6 | import cn.hutool.core.util.BooleanUtil; |
| 6 | import cn.hutool.core.util.ObjectUtil; | 7 | import cn.hutool.core.util.ObjectUtil; |
| 7 | import cn.hutool.core.util.StrUtil; | 8 | import cn.hutool.core.util.StrUtil; |
| 8 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 9 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 10 | +import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; | ||
| 9 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO; | 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 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; | 14 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; |
| 11 | import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO; | 15 | import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO; |
| 12 | import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.BrokerageUserMapper; | 16 | import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.BrokerageUserMapper; |
| 13 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageBindModeEnum; | 17 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageBindModeEnum; |
| 14 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageEnabledConditionEnum; | 18 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageEnabledConditionEnum; |
| 15 | import cn.iocoder.yudao.module.trade.service.config.TradeConfigService; | 19 | import cn.iocoder.yudao.module.trade.service.config.TradeConfigService; |
| 20 | +import com.baomidou.mybatisplus.core.metadata.IPage; | ||
| 16 | import org.springframework.stereotype.Service; | 21 | import org.springframework.stereotype.Service; |
| 17 | import org.springframework.validation.annotation.Validated; | 22 | import org.springframework.validation.annotation.Validated; |
| 18 | 23 | ||
| @@ -208,6 +213,13 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | @@ -208,6 +213,13 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | ||
| 208 | .orElse(false); | 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 | private boolean isUserCanBind(BrokerageUserDO user, Boolean isNewUser) { | 223 | private boolean isUserCanBind(BrokerageUserDO user, Boolean isNewUser) { |
| 212 | // 校验分销功能是否启用 | 224 | // 校验分销功能是否启用 |
| 213 | TradeConfigDO tradeConfig = tradeConfigService.getTradeConfig(); | 225 | TradeConfigDO tradeConfig = tradeConfigService.getTradeConfig(); |