Commit aaa01de21d5937451c3282ad58e4efc117a041aa

Authored by owen
1 parent d0d21b27

分销:修改佣金排名查询算法

yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageUserController.java
@@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.trade.convert.brokerage.BrokerageRecordConvert; @@ -11,6 +11,7 @@ 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.convert.brokerage.BrokerageUserConvert;
12 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; 12 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
13 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; 13 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
  14 +import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum;
14 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum; 15 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum;
15 import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageRecordService; 16 import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageRecordService;
16 import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageUserService; 17 import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageUserService;
@@ -84,7 +85,7 @@ public class AppBrokerageUserController { @@ -84,7 +85,7 @@ public class AppBrokerageUserController {
84 LocalDateTime beginTime = LocalDateTimeUtil.beginOfDay(yesterday); 85 LocalDateTime beginTime = LocalDateTimeUtil.beginOfDay(yesterday);
85 LocalDateTime endTime = LocalDateTimeUtil.endOfDay(yesterday); 86 LocalDateTime endTime = LocalDateTimeUtil.endOfDay(yesterday);
86 Integer yesterdayPrice = brokerageRecordService.getSummaryPriceByUserId(brokerageUser.getId(), 87 Integer yesterdayPrice = brokerageRecordService.getSummaryPriceByUserId(brokerageUser.getId(),
87 - BrokerageRecordBizTypeEnum.ORDER.getType(), beginTime, endTime); 88 + BrokerageRecordBizTypeEnum.ORDER, BrokerageRecordStatusEnum.SETTLEMENT, beginTime, endTime);
88 // 统计用户提现的佣金 89 // 统计用户提现的佣金
89 Integer withdrawPrice = brokerageWithdrawService.getWithdrawSummaryListByUserId(Collections.singleton(brokerageUser.getId()), 90 Integer withdrawPrice = brokerageWithdrawService.getWithdrawSummaryListByUserId(Collections.singleton(brokerageUser.getId()),
90 BrokerageWithdrawStatusEnum.AUDIT_SUCCESS).stream() 91 BrokerageWithdrawStatusEnum.AUDIT_SUCCESS).stream()
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/BrokerageRecordMapper.java
@@ -80,10 +80,11 @@ public interface BrokerageRecordMapper extends BaseMapperX<BrokerageRecordDO> { @@ -80,10 +80,11 @@ public interface BrokerageRecordMapper extends BaseMapperX<BrokerageRecordDO> {
80 } 80 }
81 81
82 @Select("SELECT SUM(price) FROM trade_brokerage_record " + 82 @Select("SELECT SUM(price) FROM trade_brokerage_record " +
83 - "WHERE user_id = #{userId} AND biz_type = #{bizType} " +  
84 - "AND create_time BETWEEN #{beginTime} AND #{endTime} AND deleted = FALSE") 83 + "WHERE user_id = #{userId} AND biz_type = #{bizType} AND status = #{status} " +
  84 + "AND unfreeze_time BETWEEN #{beginTime} AND #{endTime} AND deleted = FALSE")
85 Integer selectSummaryPriceByUserIdAndBizTypeAndCreateTimeBetween(@Param("userId") Long userId, 85 Integer selectSummaryPriceByUserIdAndBizTypeAndCreateTimeBetween(@Param("userId") Long userId,
86 @Param("bizType") Integer bizType, 86 @Param("bizType") Integer bizType,
  87 + @Param("status") Integer status,
87 @Param("beginTime") LocalDateTime beginTime, 88 @Param("beginTime") LocalDateTime beginTime,
88 @Param("endTime") LocalDateTime endTime); 89 @Param("endTime") LocalDateTime endTime);
89 90
@@ -98,4 +99,13 @@ public interface BrokerageRecordMapper extends BaseMapperX<BrokerageRecordDO> { @@ -98,4 +99,13 @@ public interface BrokerageRecordMapper extends BaseMapperX<BrokerageRecordDO> {
98 @Param("beginTime") LocalDateTime beginTime, 99 @Param("beginTime") LocalDateTime beginTime,
99 @Param("endTime") LocalDateTime endTime); 100 @Param("endTime") LocalDateTime endTime);
100 101
  102 + @Select("SELECT COUNT(1) FROM trade_brokerage_record " +
  103 + "WHERE biz_type = #{bizType} AND status = #{status} AND deleted = FALSE " +
  104 + "AND unfreeze_time BETWEEN #{beginTime} AND #{endTime} " +
  105 + "GROUP BY user_id HAVING SUM(price) > #{brokeragePrice}")
  106 + Integer selectCountByPriceGt(@Param("brokeragePrice") Integer brokeragePrice,
  107 + @Param("bizType") Integer bizType,
  108 + @Param("status") Integer status,
  109 + @Param("beginTime") LocalDateTime beginTime,
  110 + @Param("endTime") LocalDateTime endTime);
101 } 111 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordService.java
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokera @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokera
7 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankPageReqVO; 7 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankPageReqVO;
8 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageRecordDO; 8 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageRecordDO;
9 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; 9 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
  10 +import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum;
10 import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageAddReqBO; 11 import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageAddReqBO;
11 import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryRespBO; 12 import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryRespBO;
12 13
@@ -120,11 +121,13 @@ public interface BrokerageRecordService { @@ -120,11 +121,13 @@ public interface BrokerageRecordService {
120 * 121 *
121 * @param userId 用户编号 122 * @param userId 用户编号
122 * @param bizType 业务类型 123 * @param bizType 业务类型
  124 + * @param status 状态
123 * @param beginTime 开始时间 125 * @param beginTime 开始时间
124 * @param endTime 截止时间 126 * @param endTime 截止时间
125 * @return 用户佣金合计 127 * @return 用户佣金合计
126 */ 128 */
127 - Integer getSummaryPriceByUserId(Long userId, Integer bizType, LocalDateTime beginTime, LocalDateTime endTime); 129 + Integer getSummaryPriceByUserId(Long userId, BrokerageRecordBizTypeEnum bizType, BrokerageRecordStatusEnum status,
  130 + LocalDateTime beginTime, LocalDateTime endTime);
128 131
129 /** 132 /**
130 * 获得用户佣金排行分页列表(基于佣金总数) 133 * 获得用户佣金排行分页列表(基于佣金总数)
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImpl.java
@@ -2,10 +2,7 @@ package cn.iocoder.yudao.module.trade.service.brokerage; @@ -2,10 +2,7 @@ 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.collection.ListUtil; 4 import cn.hutool.core.collection.ListUtil;
5 -import cn.hutool.core.util.ArrayUtil;  
6 -import cn.hutool.core.util.BooleanUtil;  
7 -import cn.hutool.core.util.ObjectUtil;  
8 -import cn.hutool.core.util.StrUtil; 5 +import cn.hutool.core.util.*;
9 import cn.hutool.extra.spring.SpringUtil; 6 import cn.hutool.extra.spring.SpringUtil;
10 import cn.iocoder.yudao.framework.common.pojo.PageResult; 7 import cn.iocoder.yudao.framework.common.pojo.PageResult;
11 import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; 8 import cn.iocoder.yudao.framework.common.util.number.MoneyUtils;
@@ -265,9 +262,10 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { @@ -265,9 +262,10 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService {
265 } 262 }
266 263
267 @Override 264 @Override
268 - public Integer getSummaryPriceByUserId(Long userId, Integer bizType, LocalDateTime beginTime, LocalDateTime endTime) {  
269 - return brokerageRecordMapper.selectSummaryPriceByUserIdAndBizTypeAndCreateTimeBetween(userId, bizType,  
270 - beginTime, endTime); 265 + public Integer getSummaryPriceByUserId(Long userId, BrokerageRecordBizTypeEnum bizType, BrokerageRecordStatusEnum status,
  266 + LocalDateTime beginTime, LocalDateTime endTime) {
  267 + return brokerageRecordMapper.selectSummaryPriceByUserIdAndBizTypeAndCreateTimeBetween(userId,
  268 + bizType.getType(), status.getStatus(), beginTime, endTime);
271 } 269 }
272 270
273 @Override 271 @Override
@@ -279,17 +277,18 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { @@ -279,17 +277,18 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService {
279 return new PageResult<>(pageResult.getRecords(), pageResult.getTotal()); 277 return new PageResult<>(pageResult.getRecords(), pageResult.getTotal());
280 } 278 }
281 279
282 - // TODO @疯狂:这个要不我们先做精准的?先查询自己的推广金额,然后查询比该金额多的有多少人?  
283 @Override 280 @Override
284 public Integer getUserRankByPrice(Long userId, LocalDateTime[] times) { 281 public Integer getUserRankByPrice(Long userId, LocalDateTime[] times) {
285 - AppBrokerageUserRankPageReqVO pageParam = new AppBrokerageUserRankPageReqVO().setTimes(times);  
286 - // 取前 100 名  
287 - pageParam.setPageSize(100);  
288 - PageResult<AppBrokerageUserRankByPriceRespVO> pageResult = getBrokerageUserChildSummaryPageByPrice(pageParam);  
289 - // 获得索引  
290 - int index = CollUtil.indexOf(pageResult.getList(), user -> Objects.equals(userId, user.getId())); 282 + // 用户的推广金额
  283 + Integer price = brokerageRecordMapper.selectSummaryPriceByUserIdAndBizTypeAndCreateTimeBetween(userId,
  284 + BrokerageRecordBizTypeEnum.ORDER.getType(), BrokerageRecordStatusEnum.SETTLEMENT.getStatus(),
  285 + ArrayUtil.get(times, 0), ArrayUtil.get(times, 1));
  286 + // 排在用户前面的人数
  287 + Integer greaterCount = brokerageRecordMapper.selectCountByPriceGt(price,
  288 + BrokerageRecordBizTypeEnum.ORDER.getType(), BrokerageRecordStatusEnum.SETTLEMENT.getStatus(),
  289 + ArrayUtil.get(times, 0), ArrayUtil.get(times, 1));
291 // 获得排名 290 // 获得排名
292 - return index + 1; 291 + return ObjUtil.defaultIfNull(greaterCount, 0) + 1;
293 } 292 }
294 293
295 @Override 294 @Override