Browse Source

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

owen 1 year ago
parent
commit
aaa01de21d

+ 2 - 1
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;
 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.BrokerageRecordStatusEnum;
 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum;
 import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageRecordService;
 import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageUserService;
@@ -84,7 +85,7 @@ public class AppBrokerageUserController {
         LocalDateTime beginTime = LocalDateTimeUtil.beginOfDay(yesterday);
         LocalDateTime endTime = LocalDateTimeUtil.endOfDay(yesterday);
         Integer yesterdayPrice = brokerageRecordService.getSummaryPriceByUserId(brokerageUser.getId(),
-                BrokerageRecordBizTypeEnum.ORDER.getType(), beginTime, endTime);
+                BrokerageRecordBizTypeEnum.ORDER, BrokerageRecordStatusEnum.SETTLEMENT, beginTime, endTime);
         // 统计用户提现的佣金
         Integer withdrawPrice = brokerageWithdrawService.getWithdrawSummaryListByUserId(Collections.singleton(brokerageUser.getId()),
                         BrokerageWithdrawStatusEnum.AUDIT_SUCCESS).stream()

+ 12 - 2
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> {
     }
 
     @Select("SELECT SUM(price) FROM trade_brokerage_record " +
-            "WHERE user_id = #{userId} AND biz_type = #{bizType} " +
-            "AND create_time BETWEEN #{beginTime} AND #{endTime} AND deleted = FALSE")
+            "WHERE user_id = #{userId} AND biz_type = #{bizType} AND status = #{status} " +
+            "AND unfreeze_time BETWEEN #{beginTime} AND #{endTime} AND deleted = FALSE")
     Integer selectSummaryPriceByUserIdAndBizTypeAndCreateTimeBetween(@Param("userId") Long userId,
                                                                      @Param("bizType") Integer bizType,
+                                                                     @Param("status") Integer status,
                                                                      @Param("beginTime") LocalDateTime beginTime,
                                                                      @Param("endTime") LocalDateTime endTime);
 
@@ -98,4 +99,13 @@ public interface BrokerageRecordMapper extends BaseMapperX<BrokerageRecordDO> {
                                                                                  @Param("beginTime") LocalDateTime beginTime,
                                                                                  @Param("endTime") LocalDateTime endTime);
 
+    @Select("SELECT COUNT(1) FROM trade_brokerage_record " +
+            "WHERE biz_type = #{bizType} AND status = #{status} AND deleted = FALSE " +
+            "AND unfreeze_time BETWEEN #{beginTime} AND #{endTime} " +
+            "GROUP BY user_id HAVING SUM(price) > #{brokeragePrice}")
+    Integer selectCountByPriceGt(@Param("brokeragePrice") Integer brokeragePrice,
+                                 @Param("bizType") Integer bizType,
+                                 @Param("status") Integer status,
+                                 @Param("beginTime") LocalDateTime beginTime,
+                                 @Param("endTime") LocalDateTime endTime);
 }

+ 4 - 1
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
 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankPageReqVO;
 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageRecordDO;
 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
+import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum;
 import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageAddReqBO;
 import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryRespBO;
 
@@ -120,11 +121,13 @@ public interface BrokerageRecordService {
      *
      * @param userId    用户编号
      * @param bizType   业务类型
+     * @param status    状态
      * @param beginTime 开始时间
      * @param endTime   截止时间
      * @return 用户佣金合计
      */
-    Integer getSummaryPriceByUserId(Long userId, Integer bizType, LocalDateTime beginTime, LocalDateTime endTime);
+    Integer getSummaryPriceByUserId(Long userId, BrokerageRecordBizTypeEnum bizType, BrokerageRecordStatusEnum status,
+                                    LocalDateTime beginTime, LocalDateTime endTime);
 
     /**
      * 获得用户佣金排行分页列表(基于佣金总数)

+ 14 - 15
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;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.ListUtil;
-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.hutool.core.util.*;
 import cn.hutool.extra.spring.SpringUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.number.MoneyUtils;
@@ -265,9 +262,10 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService {
     }
 
     @Override
-    public Integer getSummaryPriceByUserId(Long userId, Integer bizType, LocalDateTime beginTime, LocalDateTime endTime) {
-        return brokerageRecordMapper.selectSummaryPriceByUserIdAndBizTypeAndCreateTimeBetween(userId, bizType,
-                beginTime, endTime);
+    public Integer getSummaryPriceByUserId(Long userId, BrokerageRecordBizTypeEnum bizType, BrokerageRecordStatusEnum status,
+                                           LocalDateTime beginTime, LocalDateTime endTime) {
+        return brokerageRecordMapper.selectSummaryPriceByUserIdAndBizTypeAndCreateTimeBetween(userId,
+                bizType.getType(), status.getStatus(), beginTime, endTime);
     }
 
     @Override
@@ -279,17 +277,18 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService {
         return new PageResult<>(pageResult.getRecords(), pageResult.getTotal());
     }
 
-    // TODO @疯狂:这个要不我们先做精准的?先查询自己的推广金额,然后查询比该金额多的有多少人?
     @Override
     public Integer getUserRankByPrice(Long userId, LocalDateTime[] times) {
-        AppBrokerageUserRankPageReqVO pageParam = new AppBrokerageUserRankPageReqVO().setTimes(times);
-        // 取前 100 名
-        pageParam.setPageSize(100);
-        PageResult<AppBrokerageUserRankByPriceRespVO> pageResult = getBrokerageUserChildSummaryPageByPrice(pageParam);
-        // 获得索引
-        int index = CollUtil.indexOf(pageResult.getList(), user -> Objects.equals(userId, user.getId()));
+        // 用户的推广金额
+        Integer price = brokerageRecordMapper.selectSummaryPriceByUserIdAndBizTypeAndCreateTimeBetween(userId,
+                BrokerageRecordBizTypeEnum.ORDER.getType(), BrokerageRecordStatusEnum.SETTLEMENT.getStatus(),
+                ArrayUtil.get(times, 0), ArrayUtil.get(times, 1));
+        // 排在用户前面的人数
+        Integer greaterCount = brokerageRecordMapper.selectCountByPriceGt(price,
+                BrokerageRecordBizTypeEnum.ORDER.getType(), BrokerageRecordStatusEnum.SETTLEMENT.getStatus(),
+                ArrayUtil.get(times, 0), ArrayUtil.get(times, 1));
         // 获得排名
-        return index + 1;
+        return ObjUtil.defaultIfNull(greaterCount, 0) + 1;
     }
 
     @Override