Commit a431bccc02a41972a68998ab888efa40281ba5e9
1 parent
9e99b043
分销:Review代码修改
Showing
13 changed files
with
154 additions
and
73 deletions
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/BrokerageUserController.java
| @@ -10,10 +10,10 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; | @@ -10,10 +10,10 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; | ||
| 10 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; | 10 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; |
| 11 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum; | 11 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum; |
| 12 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum; | 12 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum; |
| 13 | -import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageWithdrawService; | ||
| 14 | -import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | ||
| 15 | import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageRecordService; | 13 | import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageRecordService; |
| 16 | import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageUserService; | 14 | import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageUserService; |
| 15 | +import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageWithdrawService; | ||
| 16 | +import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | ||
| 17 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserWithdrawSummaryBO; | 17 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserWithdrawSummaryBO; |
| 18 | import io.swagger.v3.oas.annotations.Operation; | 18 | import io.swagger.v3.oas.annotations.Operation; |
| 19 | import io.swagger.v3.oas.annotations.Parameter; | 19 | import io.swagger.v3.oas.annotations.Parameter; |
| @@ -92,20 +92,17 @@ public class BrokerageUserController { | @@ -92,20 +92,17 @@ public class BrokerageUserController { | ||
| 92 | Set<Long> userIds = convertSet(pageResult.getList(), BrokerageUserDO::getId); | 92 | Set<Long> userIds = convertSet(pageResult.getList(), BrokerageUserDO::getId); |
| 93 | // 查询用户信息 | 93 | // 查询用户信息 |
| 94 | Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(userIds); | 94 | Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(userIds); |
| 95 | - // TODO @疯狂:看看下面两个 getBrokerageUserCountByBindUserId、getWithdrawSummaryByUserId 有没可能一次性出结果,不然 n 次有点太花性能了; | ||
| 96 | // 合计分佣订单 | 95 | // 合计分佣订单 |
| 97 | - Map<Long, UserBrokerageSummaryBO> userOrderSummaryMap = convertMap(userIds, | ||
| 98 | - userId -> userId, | ||
| 99 | - userId -> brokerageRecordService.getUserBrokerageSummaryByUserId(userId, | ||
| 100 | - BrokerageRecordBizTypeEnum.ORDER.getType(), BrokerageRecordStatusEnum.SETTLEMENT.getStatus())); | 96 | + Map<Long, UserBrokerageSummaryBO> userOrderSummaryMap = brokerageRecordService.getUserBrokerageSummaryMapByUserId( |
| 97 | + userIds, BrokerageRecordBizTypeEnum.ORDER.getType(), BrokerageRecordStatusEnum.SETTLEMENT.getStatus()); | ||
| 98 | + // TODO @芋艿:看看下面 getBrokerageUserCountByBindUserId 有没可能一次性出结果,不然 n 次有点太花性能了; | ||
| 101 | // 合计推广用户数量 | 99 | // 合计推广用户数量 |
| 102 | Map<Long, Long> brokerageUserCountMap = convertMap(userIds, | 100 | Map<Long, Long> brokerageUserCountMap = convertMap(userIds, |
| 103 | userId -> userId, | 101 | userId -> userId, |
| 104 | userId -> brokerageUserService.getBrokerageUserCountByBindUserId(userId, null)); | 102 | userId -> brokerageUserService.getBrokerageUserCountByBindUserId(userId, null)); |
| 105 | // 合计提现 | 103 | // 合计提现 |
| 106 | - Map<Long, UserWithdrawSummaryBO> withdrawMap = convertMap(userIds, | ||
| 107 | - userId -> userId, | ||
| 108 | - userId -> brokerageWithdrawService.getWithdrawSummaryByUserId(userId, BrokerageWithdrawStatusEnum.AUDIT_SUCCESS)); | 104 | + Map<Long, UserWithdrawSummaryBO> withdrawMap = brokerageWithdrawService.getWithdrawSummaryMapByUserId(userIds, |
| 105 | + BrokerageWithdrawStatusEnum.AUDIT_SUCCESS); | ||
| 109 | // 拼接返回 | 106 | // 拼接返回 |
| 110 | return success(BrokerageUserConvert.INSTANCE.convertPage(pageResult, userMap, brokerageUserCountMap, | 107 | return success(BrokerageUserConvert.INSTANCE.convertPage(pageResult, userMap, brokerageUserCountMap, |
| 111 | userOrderSummaryMap, withdrawMap)); | 108 | userOrderSummaryMap, withdrawMap)); |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageUserController.java
| @@ -27,6 +27,7 @@ import org.springframework.web.bind.annotation.*; | @@ -27,6 +27,7 @@ import org.springframework.web.bind.annotation.*; | ||
| 27 | import javax.annotation.Resource; | 27 | import javax.annotation.Resource; |
| 28 | import javax.validation.Valid; | 28 | import javax.validation.Valid; |
| 29 | import java.time.LocalDateTime; | 29 | import java.time.LocalDateTime; |
| 30 | +import java.util.Collections; | ||
| 30 | import java.util.Map; | 31 | import java.util.Map; |
| 31 | import java.util.Optional; | 32 | import java.util.Optional; |
| 32 | 33 | ||
| @@ -76,23 +77,25 @@ public class AppBrokerageUserController { | @@ -76,23 +77,25 @@ public class AppBrokerageUserController { | ||
| 76 | @Operation(summary = "获得个人分销统计") | 77 | @Operation(summary = "获得个人分销统计") |
| 77 | @PreAuthenticated | 78 | @PreAuthenticated |
| 78 | public CommonResult<AppBrokerageUserMySummaryRespVO> getBrokerageUserSummary() { | 79 | public CommonResult<AppBrokerageUserMySummaryRespVO> getBrokerageUserSummary() { |
| 79 | - Long userId = getLoginUserId(); | ||
| 80 | - // TODO @疯狂:后面这种,要不也改成 convert;感觉 controller 这样更容易看到整体;核心其实是 86、8/87、9/90、9/91 这阶段 | ||
| 81 | - // 统计 yesterdayPrice、withdrawPrice、firstBrokerageUserCount、secondBrokerageUserCount 字段 | 80 | + // 查询当前登录用户信息 |
| 81 | + BrokerageUserDO brokerageUser = brokerageUserService.getBrokerageUser(getLoginUserId()); | ||
| 82 | + // 统计用户昨日的佣金 | ||
| 82 | LocalDateTime yesterday = LocalDateTime.now().minusDays(1); | 83 | LocalDateTime yesterday = LocalDateTime.now().minusDays(1); |
| 83 | LocalDateTime beginTime = LocalDateTimeUtil.beginOfDay(yesterday); | 84 | LocalDateTime beginTime = LocalDateTimeUtil.beginOfDay(yesterday); |
| 84 | LocalDateTime endTime = LocalDateTimeUtil.endOfDay(yesterday); | 85 | LocalDateTime endTime = LocalDateTimeUtil.endOfDay(yesterday); |
| 85 | - AppBrokerageUserMySummaryRespVO respVO = new AppBrokerageUserMySummaryRespVO() | ||
| 86 | - .setYesterdayPrice(brokerageRecordService.getSummaryPriceByUserId(userId, BrokerageRecordBizTypeEnum.ORDER.getType(), beginTime, endTime)) | ||
| 87 | - .setWithdrawPrice(Optional.ofNullable(brokerageWithdrawService.getWithdrawSummaryByUserId(userId, BrokerageWithdrawStatusEnum.AUDIT_SUCCESS)) | ||
| 88 | - .map(UserWithdrawSummaryBO::getPrice).orElse(0)) | ||
| 89 | - .setBrokeragePrice(0).setFrozenPrice(0) | ||
| 90 | - .setFirstBrokerageUserCount(brokerageUserService.getBrokerageUserCountByBindUserId(userId, 1)) | ||
| 91 | - .setSecondBrokerageUserCount(brokerageUserService.getBrokerageUserCountByBindUserId(userId, 2)); | ||
| 92 | - // 设置 brokeragePrice、frozenPrice 字段 | ||
| 93 | - Optional.ofNullable(brokerageUserService.getBrokerageUser(userId)) | ||
| 94 | - .ifPresent(user -> respVO.setBrokeragePrice(user.getBrokeragePrice()).setFrozenPrice(user.getFrozenPrice())); | ||
| 95 | - return success(respVO); | 86 | + Integer yesterdayPrice = brokerageRecordService.getSummaryPriceByUserId(brokerageUser.getId(), |
| 87 | + BrokerageRecordBizTypeEnum.ORDER.getType(), beginTime, endTime); | ||
| 88 | + // 统计用户提现的佣金 | ||
| 89 | + Integer withdrawPrice = brokerageWithdrawService.getWithdrawSummaryByUserId(Collections.singleton(brokerageUser.getId()), | ||
| 90 | + BrokerageWithdrawStatusEnum.AUDIT_SUCCESS).stream() | ||
| 91 | + .findFirst().map(UserWithdrawSummaryBO::getPrice).orElse(0); | ||
| 92 | + // 统计分销用户数量(一级) | ||
| 93 | + Long firstBrokerageUserCount = brokerageUserService.getBrokerageUserCountByBindUserId(brokerageUser.getId(), 1); | ||
| 94 | + // 统计分销用户数量(二级) | ||
| 95 | + Long secondBrokerageUserCount = brokerageUserService.getBrokerageUserCountByBindUserId(brokerageUser.getId(), 2); | ||
| 96 | + | ||
| 97 | + // 拼接返回 | ||
| 98 | + return success(BrokerageUserConvert.INSTANCE.convert(yesterdayPrice, withdrawPrice, firstBrokerageUserCount, secondBrokerageUserCount, brokerageUser)); | ||
| 96 | } | 99 | } |
| 97 | 100 | ||
| 98 | @GetMapping("/rank-page-by-user-count") | 101 | @GetMapping("/rank-page-by-user-count") |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/brokerage/BrokerageUserConvert.java
| 1 | package cn.iocoder.yudao.module.trade.convert.brokerage; | 1 | package cn.iocoder.yudao.module.trade.convert.brokerage; |
| 2 | 2 | ||
| 3 | import cn.hutool.core.map.MapUtil; | 3 | import cn.hutool.core.map.MapUtil; |
| 4 | +import cn.hutool.core.util.ObjUtil; | ||
| 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; | 6 | import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; |
| 6 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserRespVO; | 7 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserRespVO; |
| 8 | +import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserMySummaryRespVO; | ||
| 7 | import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankByUserCountRespVO; | 9 | import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankByUserCountRespVO; |
| 8 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; | 10 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; |
| 9 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | 11 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; |
| @@ -71,4 +73,18 @@ public interface BrokerageUserConvert { | @@ -71,4 +73,18 @@ public interface BrokerageUserConvert { | ||
| 71 | 73 | ||
| 72 | void copyTo(MemberUserRespDTO from, @MappingTarget AppBrokerageUserRankByUserCountRespVO to); | 74 | void copyTo(MemberUserRespDTO from, @MappingTarget AppBrokerageUserRankByUserCountRespVO to); |
| 73 | 75 | ||
| 76 | + default AppBrokerageUserMySummaryRespVO convert(Integer yesterdayPrice, Integer withdrawPrice, | ||
| 77 | + Long firstBrokerageUserCount, Long secondBrokerageUserCount, | ||
| 78 | + BrokerageUserDO brokerageUser) { | ||
| 79 | + AppBrokerageUserMySummaryRespVO respVO = new AppBrokerageUserMySummaryRespVO() | ||
| 80 | + .setYesterdayPrice(ObjUtil.defaultIfNull(yesterdayPrice, 0)) | ||
| 81 | + .setWithdrawPrice(ObjUtil.defaultIfNull(withdrawPrice, 0)) | ||
| 82 | + .setBrokeragePrice(0).setFrozenPrice(0) | ||
| 83 | + .setFirstBrokerageUserCount(ObjUtil.defaultIfNull(firstBrokerageUserCount, 0L)) | ||
| 84 | + .setSecondBrokerageUserCount(ObjUtil.defaultIfNull(secondBrokerageUserCount, 0L)); | ||
| 85 | + // 设置 brokeragePrice、frozenPrice 字段 | ||
| 86 | + Optional.ofNullable(brokerageUser) | ||
| 87 | + .ifPresent(user -> respVO.setBrokeragePrice(user.getBrokeragePrice()).setFrozenPrice(user.getFrozenPrice())); | ||
| 88 | + return respVO; | ||
| 89 | + } | ||
| 74 | } | 90 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/BrokerageRecordMapper.java
| 1 | package cn.iocoder.yudao.module.trade.dal.mysql.brokerage; | 1 | package cn.iocoder.yudao.module.trade.dal.mysql.brokerage; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.bean.BeanUtil; | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 5 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 6 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| @@ -9,12 +10,16 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageRecordDO; | @@ -9,12 +10,16 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageRecordDO; | ||
| 9 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | 10 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; |
| 10 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 11 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| 11 | import com.baomidou.mybatisplus.core.metadata.IPage; | 12 | import com.baomidou.mybatisplus.core.metadata.IPage; |
| 13 | +import com.github.yulichang.toolkit.LambdaUtils; | ||
| 14 | +import com.github.yulichang.toolkit.MPJWrappers; | ||
| 12 | import org.apache.ibatis.annotations.Mapper; | 15 | import org.apache.ibatis.annotations.Mapper; |
| 13 | import org.apache.ibatis.annotations.Param; | 16 | import org.apache.ibatis.annotations.Param; |
| 14 | import org.apache.ibatis.annotations.Select; | 17 | import org.apache.ibatis.annotations.Select; |
| 15 | 18 | ||
| 16 | import java.time.LocalDateTime; | 19 | import java.time.LocalDateTime; |
| 20 | +import java.util.Collection; | ||
| 17 | import java.util.List; | 21 | import java.util.List; |
| 22 | +import java.util.Map; | ||
| 18 | 23 | ||
| 19 | /** | 24 | /** |
| 20 | * 佣金记录 Mapper | 25 | * 佣金记录 Mapper |
| @@ -52,11 +57,27 @@ public interface BrokerageRecordMapper extends BaseMapperX<BrokerageRecordDO> { | @@ -52,11 +57,27 @@ public interface BrokerageRecordMapper extends BaseMapperX<BrokerageRecordDO> { | ||
| 52 | BrokerageRecordDO::getUserId, userId); | 57 | BrokerageRecordDO::getUserId, userId); |
| 53 | } | 58 | } |
| 54 | 59 | ||
| 55 | - @Select("SELECT COUNT(1), SUM(price) FROM trade_brokerage_record " + | ||
| 56 | - "WHERE user_id = #{userId} AND biz_type = #{bizType} AND status = #{status} AND deleted = FALSE") | ||
| 57 | - UserBrokerageSummaryBO selectCountAndSumPriceByUserIdAndBizTypeAndStatus(@Param("userId") Long userId, | ||
| 58 | - @Param("bizType") Integer bizType, | ||
| 59 | - @Param("status") Integer status); | 60 | + default List<UserBrokerageSummaryBO> selectCountAndSumPriceByUserIdInAndBizTypeAndStatus(Collection<Long> userIds, |
| 61 | + Integer bizType, | ||
| 62 | + Integer status) { | ||
| 63 | + List<Map<String, Object>> list = selectMaps(MPJWrappers.lambdaJoin(BrokerageRecordDO.class) | ||
| 64 | + .select(BrokerageRecordDO::getUserId) | ||
| 65 | + .selectCount(BrokerageRecordDO::getId, LambdaUtils.getName(UserBrokerageSummaryBO::getCount)) | ||
| 66 | + .selectSum(BrokerageRecordDO::getPrice) | ||
| 67 | + .in(BrokerageRecordDO::getUserId, userIds) | ||
| 68 | + .eq(BrokerageRecordDO::getBizId, bizType) | ||
| 69 | + .eq(BrokerageRecordDO::getStatus, status) | ||
| 70 | + .groupBy(BrokerageRecordDO::getUserId)); | ||
| 71 | + return BeanUtil.copyToList(list, UserBrokerageSummaryBO.class); | ||
| 72 | +// return selectJoinList(UserBrokerageSummaryBO.class, MPJWrappers.lambdaJoin(BrokerageRecordDO.class) | ||
| 73 | +// .select(BrokerageRecordDO::getUserId) | ||
| 74 | +// .selectCount(BrokerageRecordDO::getId, LambdaUtils.getName(UserBrokerageSummaryBO::getCount)) | ||
| 75 | +// .selectSum(BrokerageRecordDO::getPrice) | ||
| 76 | +// .in(BrokerageRecordDO::getUserId, userIds) | ||
| 77 | +// .eq(BrokerageRecordDO::getBizId, bizType) | ||
| 78 | +// .eq(BrokerageRecordDO::getStatus, status) | ||
| 79 | +// .groupBy(BrokerageRecordDO::getUserId)); | ||
| 80 | + } | ||
| 60 | 81 | ||
| 61 | @Select("SELECT SUM(price) FROM trade_brokerage_record " + | 82 | @Select("SELECT SUM(price) FROM trade_brokerage_record " + |
| 62 | "WHERE user_id = #{userId} AND biz_type = #{bizType} " + | 83 | "WHERE user_id = #{userId} AND biz_type = #{bizType} " + |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/BrokerageWithdrawMapper.java
| 1 | package cn.iocoder.yudao.module.trade.dal.mysql.brokerage; | 1 | package cn.iocoder.yudao.module.trade.dal.mysql.brokerage; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.bean.BeanUtil; | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 5 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 6 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| @@ -7,9 +8,13 @@ import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.withdraw.Brok | @@ -7,9 +8,13 @@ import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.withdraw.Brok | ||
| 7 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageWithdrawDO; | 8 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageWithdrawDO; |
| 8 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserWithdrawSummaryBO; | 9 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserWithdrawSummaryBO; |
| 9 | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | 10 | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| 11 | +import com.github.yulichang.toolkit.LambdaUtils; | ||
| 12 | +import com.github.yulichang.wrapper.MPJLambdaWrapper; | ||
| 10 | import org.apache.ibatis.annotations.Mapper; | 13 | import org.apache.ibatis.annotations.Mapper; |
| 11 | -import org.apache.ibatis.annotations.Param; | ||
| 12 | -import org.apache.ibatis.annotations.Select; | 14 | + |
| 15 | +import java.util.Collection; | ||
| 16 | +import java.util.List; | ||
| 17 | +import java.util.Map; | ||
| 13 | 18 | ||
| 14 | /** | 19 | /** |
| 15 | * 佣金提现 Mapper | 20 | * 佣金提现 Mapper |
| @@ -37,9 +42,23 @@ public interface BrokerageWithdrawMapper extends BaseMapperX<BrokerageWithdrawDO | @@ -37,9 +42,23 @@ public interface BrokerageWithdrawMapper extends BaseMapperX<BrokerageWithdrawDO | ||
| 37 | .eq(BrokerageWithdrawDO::getStatus, status)); | 42 | .eq(BrokerageWithdrawDO::getStatus, status)); |
| 38 | } | 43 | } |
| 39 | 44 | ||
| 40 | - @Select("SELECT COUNT(1) AS count, SUM(price) AS price FROM trade_brokerage_withdraw " + | ||
| 41 | - "WHERE user_id = #{userId} AND status = #{status} AND deleted = FALSE") | ||
| 42 | - UserWithdrawSummaryBO selectCountAndSumPriceByUserIdAndStatus(@Param("userId") Long userId, | ||
| 43 | - @Param("status") Integer status); | 45 | + default List<UserWithdrawSummaryBO> selectCountAndSumPriceByUserIdAndStatus(Collection<Long> userIds, Integer status) { |
| 46 | + List<Map<String, Object>> list = selectMaps(new MPJLambdaWrapper<BrokerageWithdrawDO>() | ||
| 47 | + .select(BrokerageWithdrawDO::getUserId) | ||
| 48 | + .selectCount(BrokerageWithdrawDO::getId, LambdaUtils.getName(UserWithdrawSummaryBO::getCount)) | ||
| 49 | + .selectSum(BrokerageWithdrawDO::getPrice) | ||
| 50 | + .in(BrokerageWithdrawDO::getUserId, userIds) | ||
| 51 | + .eq(BrokerageWithdrawDO::getStatus, status) | ||
| 52 | + .groupBy(BrokerageWithdrawDO::getUserId)); | ||
| 53 | + return BeanUtil.copyToList(list, UserWithdrawSummaryBO.class); | ||
| 54 | + // selectJoinList有BUG,会与租户插件冲突:解析SQL时,发生异常 https://gitee.com/best_handsome/mybatis-plus-join/issues/I84GYW | ||
| 55 | +// return selectJoinList(UserWithdrawSummaryBO.class, new MPJLambdaWrapper<BrokerageWithdrawDO>() | ||
| 56 | +// .select(BrokerageWithdrawDO::getUserId) | ||
| 57 | +// .selectCount(BrokerageWithdrawDO::getId, LambdaUtils.getName(UserWithdrawSummaryBO::getCount)) | ||
| 58 | +// .selectSum(BrokerageWithdrawDO::getPrice) | ||
| 59 | +// .in(BrokerageWithdrawDO::getUserId, userIds) | ||
| 60 | +// .eq(BrokerageWithdrawDO::getStatus, status) | ||
| 61 | +// .groupBy(BrokerageWithdrawDO::getUserId)); | ||
| 62 | + } | ||
| 44 | 63 | ||
| 45 | } | 64 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordService.java
| @@ -12,7 +12,11 @@ import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO | @@ -12,7 +12,11 @@ import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO | ||
| 12 | 12 | ||
| 13 | import javax.validation.Valid; | 13 | import javax.validation.Valid; |
| 14 | import java.time.LocalDateTime; | 14 | import java.time.LocalDateTime; |
| 15 | +import java.util.Collection; | ||
| 15 | import java.util.List; | 16 | import java.util.List; |
| 17 | +import java.util.Map; | ||
| 18 | + | ||
| 19 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; | ||
| 16 | 20 | ||
| 17 | /** | 21 | /** |
| 18 | * 佣金记录 Service 接口 | 22 | * 佣金记录 Service 接口 |
| @@ -76,12 +80,24 @@ public interface BrokerageRecordService { | @@ -76,12 +80,24 @@ public interface BrokerageRecordService { | ||
| 76 | /** | 80 | /** |
| 77 | * 汇总用户佣金 | 81 | * 汇总用户佣金 |
| 78 | * | 82 | * |
| 79 | - * @param userId 用户编号 | 83 | + * @param userIds 用户编号 |
| 84 | + * @param bizType 业务类型 | ||
| 85 | + * @param status 佣金状态 | ||
| 86 | + * @return 用户佣金汇总 | ||
| 87 | + */ | ||
| 88 | + List<UserBrokerageSummaryBO> getUserBrokerageSummaryByUserId(Collection<Long> userIds, Integer bizType, Integer status); | ||
| 89 | + | ||
| 90 | + /** | ||
| 91 | + * 汇总用户佣金 | ||
| 92 | + * | ||
| 93 | + * @param userIds 用户编号 | ||
| 80 | * @param bizType 业务类型 | 94 | * @param bizType 业务类型 |
| 81 | * @param status 佣金状态 | 95 | * @param status 佣金状态 |
| 82 | * @return 用户佣金汇总 | 96 | * @return 用户佣金汇总 |
| 83 | */ | 97 | */ |
| 84 | - UserBrokerageSummaryBO getUserBrokerageSummaryByUserId(Long userId, Integer bizType, Integer status); | 98 | + default Map<Long, UserBrokerageSummaryBO> getUserBrokerageSummaryMapByUserId(Collection<Long> userIds, Integer bizType, Integer status) { |
| 99 | + return convertMap(getUserBrokerageSummaryByUserId(userIds, bizType, status), UserBrokerageSummaryBO::getUserId); | ||
| 100 | + } | ||
| 85 | 101 | ||
| 86 | /** | 102 | /** |
| 87 | * 获得用户佣金合计 | 103 | * 获得用户佣金合计 |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImpl.java
| @@ -36,10 +36,7 @@ import org.springframework.validation.annotation.Validated; | @@ -36,10 +36,7 @@ import org.springframework.validation.annotation.Validated; | ||
| 36 | 36 | ||
| 37 | import javax.annotation.Resource; | 37 | import javax.annotation.Resource; |
| 38 | import java.time.LocalDateTime; | 38 | import java.time.LocalDateTime; |
| 39 | -import java.util.ArrayList; | ||
| 40 | -import java.util.List; | ||
| 41 | -import java.util.Objects; | ||
| 42 | -import java.util.Optional; | 39 | +import java.util.*; |
| 43 | 40 | ||
| 44 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 41 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 45 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.getMaxValue; | 42 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.getMaxValue; |
| @@ -235,9 +232,8 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { | @@ -235,9 +232,8 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { | ||
| 235 | } | 232 | } |
| 236 | 233 | ||
| 237 | @Override | 234 | @Override |
| 238 | - public UserBrokerageSummaryBO getUserBrokerageSummaryByUserId(Long userId, Integer bizType, Integer status) { | ||
| 239 | - UserBrokerageSummaryBO summaryBO = brokerageRecordMapper.selectCountAndSumPriceByUserIdAndBizTypeAndStatus(userId, bizType, status); | ||
| 240 | - return summaryBO != null ? summaryBO : new UserBrokerageSummaryBO(0, 0); | 235 | + public List<UserBrokerageSummaryBO> getUserBrokerageSummaryByUserId(Collection<Long> userIds, Integer bizType, Integer status) { |
| 236 | + return brokerageRecordMapper.selectCountAndSumPriceByUserIdInAndBizTypeAndStatus(userIds, bizType, status); | ||
| 241 | } | 237 | } |
| 242 | 238 | ||
| 243 | @Override | 239 | @Override |
| @@ -338,7 +334,7 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { | @@ -338,7 +334,7 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { | ||
| 338 | if (BooleanUtil.isTrue(spu.getSubCommissionType())) { | 334 | if (BooleanUtil.isTrue(spu.getSubCommissionType())) { |
| 339 | fixedMinPrice = getMinValue(skuList, ProductSkuRespDTO::getFirstBrokeragePrice); | 335 | fixedMinPrice = getMinValue(skuList, ProductSkuRespDTO::getFirstBrokeragePrice); |
| 340 | fixedMaxPrice = getMaxValue(skuList, ProductSkuRespDTO::getFirstBrokeragePrice); | 336 | fixedMaxPrice = getMaxValue(skuList, ProductSkuRespDTO::getFirstBrokeragePrice); |
| 341 | - // 3.2 全局分佣模式(根据商品价格比例计算) | 337 | + // 3.2 全局分佣模式(根据商品价格比例计算) |
| 342 | } else { | 338 | } else { |
| 343 | spuMinPrice = getMinValue(skuList, ProductSkuRespDTO::getPrice); | 339 | spuMinPrice = getMinValue(skuList, ProductSkuRespDTO::getPrice); |
| 344 | spuMaxPrice = getMaxValue(skuList, ProductSkuRespDTO::getPrice); | 340 | spuMaxPrice = getMaxValue(skuList, ProductSkuRespDTO::getPrice); |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserService.java
| 1 | package cn.iocoder.yudao.module.trade.service.brokerage; | 1 | package cn.iocoder.yudao.module.trade.service.brokerage; |
| 2 | 2 | ||
| 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; | ||
| 5 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO; | 4 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO; |
| 6 | import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryPageReqVO; | 5 | import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryPageReqVO; |
| 7 | import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryRespVO; | 6 | import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryRespVO; |
| @@ -111,21 +110,7 @@ public interface BrokerageUserService { | @@ -111,21 +110,7 @@ public interface BrokerageUserService { | ||
| 111 | * @param registerTime 用户注册时间 | 110 | * @param registerTime 用户注册时间 |
| 112 | * @return 是否绑定 | 111 | * @return 是否绑定 |
| 113 | */ | 112 | */ |
| 114 | - default boolean bindBrokerageUser(@NotNull Long userId, @NotNull Long bindUserId, @NotNull LocalDateTime registerTime) { | ||
| 115 | - // 注册时间在30秒内的,都算新用户 | ||
| 116 | - boolean isNewUser = LocalDateTimeUtils.afterNow(registerTime.minusSeconds(30)); | ||
| 117 | - return bindBrokerageUser(userId, bindUserId, isNewUser); | ||
| 118 | - } | ||
| 119 | - | ||
| 120 | - /** | ||
| 121 | - * 【会员】绑定推广员 | ||
| 122 | - * | ||
| 123 | - * @param userId 用户编号 | ||
| 124 | - * @param bindUserId 推广员编号 | ||
| 125 | - * @param isNewUser 是否为新用户 | ||
| 126 | - * @return 是否绑定 | ||
| 127 | - */ | ||
| 128 | - boolean bindBrokerageUser(Long userId, Long bindUserId, Boolean isNewUser); | 113 | + boolean bindBrokerageUser(@NotNull Long userId, @NotNull Long bindUserId, @NotNull LocalDateTime registerTime); |
| 129 | 114 | ||
| 130 | /** | 115 | /** |
| 131 | * 获取用户是否有分销资格 | 116 | * 获取用户是否有分销资格 |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserServiceImpl.java
| @@ -5,6 +5,7 @@ import cn.hutool.core.lang.Assert; | @@ -5,6 +5,7 @@ import cn.hutool.core.lang.Assert; | ||
| 5 | import cn.hutool.core.util.ArrayUtil; | 5 | import cn.hutool.core.util.ArrayUtil; |
| 6 | import cn.hutool.core.util.BooleanUtil; | 6 | import cn.hutool.core.util.BooleanUtil; |
| 7 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 7 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 8 | +import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils; | ||
| 8 | import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; | 9 | import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; |
| 9 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO; | 10 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO; |
| 10 | import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryPageReqVO; | 11 | import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryPageReqVO; |
| @@ -154,7 +155,7 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | @@ -154,7 +155,7 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | ||
| 154 | } | 155 | } |
| 155 | 156 | ||
| 156 | @Override | 157 | @Override |
| 157 | - public boolean bindBrokerageUser(Long userId, Long bindUserId, Boolean isNewUser) { | 158 | + public boolean bindBrokerageUser(Long userId, Long bindUserId, LocalDateTime registerTime) { |
| 158 | // 1. 获得分销用户 | 159 | // 1. 获得分销用户 |
| 159 | boolean isNewBrokerageUser = false; | 160 | boolean isNewBrokerageUser = false; |
| 160 | BrokerageUserDO brokerageUser = brokerageUserMapper.selectById(userId); | 161 | BrokerageUserDO brokerageUser = brokerageUserMapper.selectById(userId); |
| @@ -164,7 +165,7 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | @@ -164,7 +165,7 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | ||
| 164 | } | 165 | } |
| 165 | 166 | ||
| 166 | // 2.1 校验是否能绑定用户 | 167 | // 2.1 校验是否能绑定用户 |
| 167 | - boolean validated = isUserCanBind(brokerageUser, isNewUser); | 168 | + boolean validated = isUserCanBind(brokerageUser, registerTime); |
| 168 | if (!validated) { | 169 | if (!validated) { |
| 169 | return false; | 170 | return false; |
| 170 | } | 171 | } |
| @@ -222,7 +223,7 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | @@ -222,7 +223,7 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | ||
| 222 | return new PageResult<>(pageResult.getRecords(), pageResult.getTotal()); | 223 | return new PageResult<>(pageResult.getRecords(), pageResult.getTotal()); |
| 223 | } | 224 | } |
| 224 | 225 | ||
| 225 | - private boolean isUserCanBind(BrokerageUserDO user, Boolean isNewUser) { | 226 | + private boolean isUserCanBind(BrokerageUserDO user, LocalDateTime registerTime) { |
| 226 | // 校验分销功能是否启用 | 227 | // 校验分销功能是否启用 |
| 227 | TradeConfigDO tradeConfig = tradeConfigService.getTradeConfig(); | 228 | TradeConfigDO tradeConfig = tradeConfigService.getTradeConfig(); |
| 228 | if (tradeConfig == null || !BooleanUtil.isTrue(tradeConfig.getBrokerageEnabled())) { | 229 | if (tradeConfig == null || !BooleanUtil.isTrue(tradeConfig.getBrokerageEnabled())) { |
| @@ -236,8 +237,9 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | @@ -236,8 +237,9 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | ||
| 236 | 237 | ||
| 237 | // 校验分销关系绑定模式 | 238 | // 校验分销关系绑定模式 |
| 238 | if (BrokerageBindModeEnum.REGISTER.getMode().equals(tradeConfig.getBrokerageBindMode())) { | 239 | if (BrokerageBindModeEnum.REGISTER.getMode().equals(tradeConfig.getBrokerageBindMode())) { |
| 239 | - // TODO @疯狂:是不是把 isNewUser 挪到这里好点呀? | ||
| 240 | - if (!BooleanUtil.isTrue(isNewUser)) { | 240 | + // 判断是否为新用户:注册时间在30秒内的,都算新用户 |
| 241 | + boolean isNotNewUser = LocalDateTimeUtils.beforeNow(registerTime.plusSeconds(30)); | ||
| 242 | + if (isNotNewUser) { | ||
| 241 | throw exception(BROKERAGE_BIND_MODE_REGISTER); // 只有在注册时可以绑定 | 243 | throw exception(BROKERAGE_BIND_MODE_REGISTER); // 只有在注册时可以绑定 |
| 242 | } | 244 | } |
| 243 | } else if (BrokerageBindModeEnum.ANYTIME.getMode().equals(tradeConfig.getBrokerageBindMode())) { | 245 | } else if (BrokerageBindModeEnum.ANYTIME.getMode().equals(tradeConfig.getBrokerageBindMode())) { |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageWithdrawService.java
| @@ -7,6 +7,13 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageWithdrawD | @@ -7,6 +7,13 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageWithdrawD | ||
| 7 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum; | 7 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum; |
| 8 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserWithdrawSummaryBO; | 8 | import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserWithdrawSummaryBO; |
| 9 | 9 | ||
| 10 | +import java.util.Collection; | ||
| 11 | +import java.util.List; | ||
| 12 | +import java.util.Map; | ||
| 13 | +import java.util.Set; | ||
| 14 | + | ||
| 15 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; | ||
| 16 | + | ||
| 10 | /** | 17 | /** |
| 11 | * 佣金提现 Service 接口 | 18 | * 佣金提现 Service 接口 |
| 12 | * | 19 | * |
| @@ -51,10 +58,20 @@ public interface BrokerageWithdrawService { | @@ -51,10 +58,20 @@ public interface BrokerageWithdrawService { | ||
| 51 | /** | 58 | /** |
| 52 | * 汇总用户提现 | 59 | * 汇总用户提现 |
| 53 | * | 60 | * |
| 54 | - * @param userId 用户编号 | ||
| 55 | - * @param status 提现状态 | 61 | + * @param userIds 用户编号 |
| 62 | + * @param status 提现状态 | ||
| 56 | * @return 用户提现汇总 | 63 | * @return 用户提现汇总 |
| 57 | */ | 64 | */ |
| 58 | - UserWithdrawSummaryBO getWithdrawSummaryByUserId(Long userId, BrokerageWithdrawStatusEnum status); | 65 | + List<UserWithdrawSummaryBO> getWithdrawSummaryByUserId(Collection<Long> userIds, BrokerageWithdrawStatusEnum status); |
| 59 | 66 | ||
| 67 | + /** | ||
| 68 | + * 汇总用户提现 | ||
| 69 | + * | ||
| 70 | + * @param userIds 用户编号 | ||
| 71 | + * @param status 提现状态 | ||
| 72 | + * @return 用户提现汇总 | ||
| 73 | + */ | ||
| 74 | + default Map<Long, UserWithdrawSummaryBO> getWithdrawSummaryMapByUserId(Set<Long> userIds, BrokerageWithdrawStatusEnum status) { | ||
| 75 | + return convertMap(getWithdrawSummaryByUserId(userIds, status), UserWithdrawSummaryBO::getUserId); | ||
| 76 | + } | ||
| 60 | } | 77 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageWithdrawServiceImpl.java
| @@ -26,6 +26,8 @@ import org.springframework.validation.annotation.Validated; | @@ -26,6 +26,8 @@ import org.springframework.validation.annotation.Validated; | ||
| 26 | import javax.annotation.Resource; | 26 | import javax.annotation.Resource; |
| 27 | import javax.validation.Validator; | 27 | import javax.validation.Validator; |
| 28 | import java.time.LocalDateTime; | 28 | import java.time.LocalDateTime; |
| 29 | +import java.util.Collection; | ||
| 30 | +import java.util.List; | ||
| 29 | import java.util.Map; | 31 | import java.util.Map; |
| 30 | 32 | ||
| 31 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 33 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| @@ -142,9 +144,8 @@ public class BrokerageWithdrawServiceImpl implements BrokerageWithdrawService { | @@ -142,9 +144,8 @@ public class BrokerageWithdrawServiceImpl implements BrokerageWithdrawService { | ||
| 142 | } | 144 | } |
| 143 | 145 | ||
| 144 | @Override | 146 | @Override |
| 145 | - public UserWithdrawSummaryBO getWithdrawSummaryByUserId(Long userId, BrokerageWithdrawStatusEnum status) { | ||
| 146 | - UserWithdrawSummaryBO summaryBO = brokerageWithdrawMapper.selectCountAndSumPriceByUserIdAndStatus(userId, status.getStatus()); | ||
| 147 | - return summaryBO != null ? summaryBO : new UserWithdrawSummaryBO(0, 0); | 147 | + public List<UserWithdrawSummaryBO> getWithdrawSummaryByUserId(Collection<Long> userIds, BrokerageWithdrawStatusEnum status) { |
| 148 | + return brokerageWithdrawMapper.selectCountAndSumPriceByUserIdAndStatus(userIds, status.getStatus()); | ||
| 148 | } | 149 | } |
| 149 | 150 | ||
| 150 | /** | 151 | /** |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/bo/UserBrokerageSummaryBO.java
| @@ -13,7 +13,10 @@ import lombok.NoArgsConstructor; | @@ -13,7 +13,10 @@ import lombok.NoArgsConstructor; | ||
| 13 | @NoArgsConstructor | 13 | @NoArgsConstructor |
| 14 | @AllArgsConstructor | 14 | @AllArgsConstructor |
| 15 | public class UserBrokerageSummaryBO { | 15 | public class UserBrokerageSummaryBO { |
| 16 | - | 16 | + /** |
| 17 | + * 用户编号 | ||
| 18 | + */ | ||
| 19 | + private Long userId; | ||
| 17 | /** | 20 | /** |
| 18 | * 佣金数量 | 21 | * 佣金数量 |
| 19 | */ | 22 | */ |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/bo/UserWithdrawSummaryBO.java
| @@ -15,6 +15,11 @@ import lombok.NoArgsConstructor; | @@ -15,6 +15,11 @@ import lombok.NoArgsConstructor; | ||
| 15 | public class UserWithdrawSummaryBO { | 15 | public class UserWithdrawSummaryBO { |
| 16 | 16 | ||
| 17 | /** | 17 | /** |
| 18 | + * 用户编号 | ||
| 19 | + */ | ||
| 20 | + private Long userId; | ||
| 21 | + | ||
| 22 | + /** | ||
| 18 | * 提现次数 | 23 | * 提现次数 |
| 19 | */ | 24 | */ |
| 20 | private Integer count; | 25 | private Integer count; |