mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	分佣: 推广人排行
This commit is contained in:
		@@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
 | 
			
		||||
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.*;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.convert.brokerage.BrokerageRecordConvert;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.convert.brokerage.BrokerageUserConvert;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum;
 | 
			
		||||
@@ -90,24 +91,15 @@ public class AppBrokerageUserController {
 | 
			
		||||
        return success(respVO);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // TODO 芋艿:临时 mock =>
 | 
			
		||||
    @GetMapping("/rank-page-by-user-count")
 | 
			
		||||
    @Operation(summary = "获得分销用户排行分页(基于用户量)")
 | 
			
		||||
    @PreAuthenticated
 | 
			
		||||
    public CommonResult<PageResult<AppBrokerageUserRankByUserCountRespVO>> getBrokerageUserRankPageByUserCount(AppBrokerageUserRankPageReqVO pageReqVO) {
 | 
			
		||||
        AppBrokerageUserRankByUserCountRespVO vo1 = new AppBrokerageUserRankByUserCountRespVO()
 | 
			
		||||
                .setId(1L).setNickname("芋1**艿").setAvatar("http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg")
 | 
			
		||||
                .setBrokerageUserCount(10);
 | 
			
		||||
        AppBrokerageUserRankByUserCountRespVO vo2 = new AppBrokerageUserRankByUserCountRespVO()
 | 
			
		||||
                .setId(2L).setNickname("芋2**艿").setAvatar("http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg")
 | 
			
		||||
                .setBrokerageUserCount(6);
 | 
			
		||||
        AppBrokerageUserRankByUserCountRespVO vo3 = new AppBrokerageUserRankByUserCountRespVO()
 | 
			
		||||
                .setId(3L).setNickname("芋3**艿").setAvatar("http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg")
 | 
			
		||||
                .setBrokerageUserCount(4);
 | 
			
		||||
        AppBrokerageUserRankByUserCountRespVO vo4 = new AppBrokerageUserRankByUserCountRespVO()
 | 
			
		||||
                .setId(3L).setNickname("芋3**艿").setAvatar("http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg")
 | 
			
		||||
                .setBrokerageUserCount(4);
 | 
			
		||||
        return success(new PageResult<>(asList(vo1, vo2, vo3, vo4), 10L));
 | 
			
		||||
        // 分页查询
 | 
			
		||||
        PageResult<AppBrokerageUserRankByUserCountRespVO> pageResult = brokerageUserService.getBrokerageUserRankPageByUserCount(pageReqVO);
 | 
			
		||||
        // 拼接数据
 | 
			
		||||
        Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(convertSet(pageResult.getList(), AppBrokerageUserRankByUserCountRespVO::getId));
 | 
			
		||||
        return success(BrokerageUserConvert.INSTANCE.convertPage03(pageResult, userMap));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @GetMapping("/rank-page-by-price")
 | 
			
		||||
 
 | 
			
		||||
@@ -4,9 +4,11 @@ import cn.hutool.core.map.MapUtil;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserRespVO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankByUserCountRespVO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO;
 | 
			
		||||
import org.mapstruct.Mapper;
 | 
			
		||||
import org.mapstruct.MappingTarget;
 | 
			
		||||
import org.mapstruct.factory.Mappers;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
@@ -55,4 +57,13 @@ public interface BrokerageUserConvert {
 | 
			
		||||
                user -> target.setNickname(user.getNickname()).setAvatar(user.getAvatar()));
 | 
			
		||||
        return target;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    default PageResult<AppBrokerageUserRankByUserCountRespVO> convertPage03(PageResult<AppBrokerageUserRankByUserCountRespVO> pageResult, Map<Long, MemberUserRespDTO> userMap) {
 | 
			
		||||
        for (AppBrokerageUserRankByUserCountRespVO vo : pageResult.getList()) {
 | 
			
		||||
            copyTo(userMap.get(vo.getId()), vo);
 | 
			
		||||
        }
 | 
			
		||||
        return pageResult;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void copyTo(MemberUserRespDTO from, @MappingTarget AppBrokerageUserRankByUserCountRespVO to);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -67,9 +67,10 @@ public interface BrokerageRecordMapper extends BaseMapperX<BrokerageRecordDO> {
 | 
			
		||||
                                                                     @Param("endTime") LocalDateTime endTime);
 | 
			
		||||
 | 
			
		||||
    @Select("SELECT user_id AS id, SUM(price) AS brokeragePrice FROM trade_brokerage_record " +
 | 
			
		||||
            "WHERE biz_type = #{bizType} AND status = #{status} AND create_time BETWEEN #{beginTime} AND #{endTime} " +
 | 
			
		||||
            "WHERE biz_type = #{bizType} AND status = #{status} AND deleted = FALSE " +
 | 
			
		||||
            "AND unfreeze_time BETWEEN #{beginTime} AND #{endTime} " +
 | 
			
		||||
            "GROUP BY user_id " +
 | 
			
		||||
            "ORDER BY SUM(price) DESC")
 | 
			
		||||
            "ORDER BY brokeragePrice DESC")
 | 
			
		||||
    IPage<AppBrokerageUserRankByPriceRespVO> selectSummaryPricePageGroupByUserId(IPage<?> page,
 | 
			
		||||
                                                                                 @Param("bizType") Integer bizType,
 | 
			
		||||
                                                                                 @Param("status") Integer status,
 | 
			
		||||
 
 | 
			
		||||
@@ -5,10 +5,16 @@ 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.AppBrokerageUserRankByUserCountRespVO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
 | 
			
		||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 | 
			
		||||
import com.baomidou.mybatisplus.core.metadata.IPage;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
import org.apache.ibatis.annotations.Param;
 | 
			
		||||
import org.apache.ibatis.annotations.Select;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -124,4 +130,12 @@ public interface BrokerageUserMapper extends BaseMapperX<BrokerageUserDO> {
 | 
			
		||||
                .inIfPresent(BrokerageUserDO::getLevel, levels));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Select("SELECT bind_user_id AS id, COUNT(1) AS brokerageUserCount FROM trade_brokerage_user " +
 | 
			
		||||
            "WHERE bind_user_id IS NOT NULL AND deleted = FALSE " +
 | 
			
		||||
            "AND bind_user_time BETWEEN #{beginTime} AND #{endTime} " +
 | 
			
		||||
            "GROUP BY bind_user_id " +
 | 
			
		||||
            "ORDER BY brokerageUserCount DESC")
 | 
			
		||||
    IPage<AppBrokerageUserRankByUserCountRespVO> selectCountPageGroupByBindUserId(Page<?> page,
 | 
			
		||||
                                                                                  @Param("beginTime") LocalDateTime beginTime,
 | 
			
		||||
                                                                                  @Param("endTime") LocalDateTime endTime);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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.AppBrokerageUserRankByUserCountRespVO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankPageReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
 | 
			
		||||
 | 
			
		||||
import javax.validation.constraints.NotNull;
 | 
			
		||||
@@ -130,4 +132,12 @@ public interface BrokerageUserService {
 | 
			
		||||
     * @return 是否有分销资格
 | 
			
		||||
     */
 | 
			
		||||
    Boolean getUserBrokerageEnabled(Long userId);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得推广人排行
 | 
			
		||||
     *
 | 
			
		||||
     * @param pageReqVO 分页查询
 | 
			
		||||
     * @return 推广人排行
 | 
			
		||||
     */
 | 
			
		||||
    PageResult<AppBrokerageUserRankByUserCountRespVO> getBrokerageUserRankPageByUserCount(AppBrokerageUserRankPageReqVO pageReqVO);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,17 +2,22 @@ package cn.iocoder.yudao.module.trade.service.brokerage;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.collection.CollUtil;
 | 
			
		||||
import cn.hutool.core.lang.Assert;
 | 
			
		||||
import cn.hutool.core.util.ArrayUtil;
 | 
			
		||||
import cn.hutool.core.util.BooleanUtil;
 | 
			
		||||
import cn.hutool.core.util.ObjectUtil;
 | 
			
		||||
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.AppBrokerageUserRankByUserCountRespVO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankPageReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.BrokerageUserMapper;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageBindModeEnum;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageEnabledConditionEnum;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.service.config.TradeConfigService;
 | 
			
		||||
import com.baomidou.mybatisplus.core.metadata.IPage;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
 | 
			
		||||
@@ -208,6 +213,13 @@ public class BrokerageUserServiceImpl implements BrokerageUserService {
 | 
			
		||||
                .orElse(false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public PageResult<AppBrokerageUserRankByUserCountRespVO> getBrokerageUserRankPageByUserCount(AppBrokerageUserRankPageReqVO pageReqVO) {
 | 
			
		||||
        IPage<AppBrokerageUserRankByUserCountRespVO> pageResult = brokerageUserMapper.selectCountPageGroupByBindUserId(MyBatisUtils.buildPage(pageReqVO),
 | 
			
		||||
                ArrayUtil.get(pageReqVO.getTimes(), 0), ArrayUtil.get(pageReqVO.getTimes(), 1));
 | 
			
		||||
        return new PageResult<>(pageResult.getRecords(), pageResult.getTotal());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean isUserCanBind(BrokerageUserDO user, Boolean isNewUser) {
 | 
			
		||||
        // 校验分销功能是否启用
 | 
			
		||||
        TradeConfigDO tradeConfig = tradeConfigService.getTradeConfig();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user