mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 10:18:42 +08:00 
			
		
		
		
	code review:解决分佣的 npe 问题
This commit is contained in:
		| @@ -16,7 +16,6 @@ import cn.iocoder.yudao.module.product.dal.mysql.comment.ProductCommentMapper; | ||||
| import cn.iocoder.yudao.module.product.enums.comment.ProductCommentScoresEnum; | ||||
| import cn.iocoder.yudao.module.product.service.sku.ProductSkuService; | ||||
| import cn.iocoder.yudao.module.product.service.spu.ProductSpuService; | ||||
| import cn.iocoder.yudao.module.trade.api.order.TradeOrderApi; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.boot.test.mock.mockito.MockBean; | ||||
| import org.springframework.context.annotation.Import; | ||||
| @@ -48,8 +47,6 @@ public class ProductCommentServiceImplTest extends BaseDbUnitTest { | ||||
|     @Lazy | ||||
|     private ProductCommentServiceImpl productCommentService; | ||||
|  | ||||
|     @MockBean | ||||
|     private TradeOrderApi tradeOrderApi; | ||||
|     @MockBean | ||||
|     private ProductSpuService productSpuService; | ||||
|     @MockBean | ||||
|   | ||||
| @@ -13,8 +13,8 @@ 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; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageWithdrawService; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserWithdrawSummaryBO; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryRespBO; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageWithdrawSummaryRespBO; | ||||
| import io.swagger.v3.oas.annotations.Operation; | ||||
| import io.swagger.v3.oas.annotations.Parameter; | ||||
| import io.swagger.v3.oas.annotations.tags.Tag; | ||||
| @@ -88,24 +88,24 @@ public class BrokerageUserController { | ||||
|         // 分页查询 | ||||
|         PageResult<BrokerageUserDO> pageResult = brokerageUserService.getBrokerageUserPage(pageVO); | ||||
|  | ||||
|         // 涉及到的用户 | ||||
|         Set<Long> userIds = convertSet(pageResult.getList(), BrokerageUserDO::getId); | ||||
|         // 查询用户信息 | ||||
|         Set<Long> userIds = convertSet(pageResult.getList(), BrokerageUserDO::getId); | ||||
|         Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(userIds); | ||||
|         // 合计分佣订单 | ||||
|         Map<Long, UserBrokerageSummaryBO> userOrderSummaryMap = brokerageRecordService.getUserBrokerageSummaryMapByUserId( | ||||
|         // 合计分佣的推广订单 | ||||
|         Map<Long, UserBrokerageSummaryRespBO> brokerageOrderSummaryMap = brokerageRecordService.getUserBrokerageSummaryMapByUserId( | ||||
|                 userIds, BrokerageRecordBizTypeEnum.ORDER.getType(), BrokerageRecordStatusEnum.SETTLEMENT.getStatus()); | ||||
|         // TODO @芋艿:看看下面 getBrokerageUserCountByBindUserId 有没可能一次性出结果,不然 n 次有点太花性能了; | ||||
|         // 合计推广用户数量 | ||||
|         // 合计分佣的推广用户 | ||||
|         // TODO @疯狂:转成 map 批量读取 | ||||
|         Map<Long, Long> brokerageUserCountMap = convertMap(userIds, | ||||
|                 userId -> userId, | ||||
|                 userId -> brokerageUserService.getBrokerageUserCountByBindUserId(userId, null)); | ||||
|         // 合计提现 | ||||
|         Map<Long, UserWithdrawSummaryBO> withdrawMap = brokerageWithdrawService.getWithdrawSummaryMapByUserId(userIds, | ||||
|                 BrokerageWithdrawStatusEnum.AUDIT_SUCCESS); | ||||
|         // 合计分佣的提现 | ||||
|         // TODO @疯狂:如果未来支持了打款这个动作,可能 status 会不对; | ||||
|         Map<Long, BrokerageWithdrawSummaryRespBO> withdrawMap = brokerageWithdrawService.getWithdrawSummaryMapByUserId( | ||||
|                 userIds, BrokerageWithdrawStatusEnum.AUDIT_SUCCESS); | ||||
|         // 拼接返回 | ||||
|         return success(BrokerageUserConvert.INSTANCE.convertPage(pageResult, userMap, brokerageUserCountMap, | ||||
|                 userOrderSummaryMap, withdrawMap)); | ||||
|                 brokerageOrderSummaryMap, withdrawMap)); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -21,25 +21,25 @@ public class BrokerageUserRespVO extends BrokerageUserBaseVO { | ||||
|  | ||||
|     // ========== 用户信息 ========== | ||||
|  | ||||
|     @Schema(description = "用户头像", example = "https://www.iocoder.cn/xxx.png") | ||||
|     @Schema(description = "用户头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/xxx.png") | ||||
|     private String avatar; | ||||
|     @Schema(description = "用户昵称", example = "李四") | ||||
|     @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") | ||||
|     private String nickname; | ||||
|  | ||||
|     // ========== 推广信息 ========== | ||||
|  | ||||
|     @Schema(description = "推广用户数量", example = "20019") | ||||
|     @Schema(description = "推广用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "20019") | ||||
|     private Integer brokerageUserCount; | ||||
|     @Schema(description = "推广订单数量", example = "20019") | ||||
|     @Schema(description = "推广订单数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "20019") | ||||
|     private Integer brokerageOrderCount; | ||||
|     @Schema(description = "推广订单金额", example = "20019") | ||||
|     @Schema(description = "推广订单金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "20019") | ||||
|     private Integer brokerageOrderPrice; | ||||
|  | ||||
|     // ========== 提现信息 ========== | ||||
|  | ||||
|     @Schema(description = "已提现金额", example = "20019") | ||||
|     @Schema(description = "已提现金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "20019") | ||||
|     private Integer withdrawPrice; | ||||
|     @Schema(description = "已提现次数", example = "20019") | ||||
|     @Schema(description = "已提现次数", requiredMode = Schema.RequiredMode.REQUIRED, example = "20019") | ||||
|     private Integer withdrawCount; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -15,7 +15,7 @@ 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; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageWithdrawService; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserWithdrawSummaryBO; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageWithdrawSummaryRespBO; | ||||
| import io.swagger.v3.oas.annotations.Operation; | ||||
| import io.swagger.v3.oas.annotations.Parameter; | ||||
| import io.swagger.v3.oas.annotations.tags.Tag; | ||||
| @@ -88,7 +88,7 @@ public class AppBrokerageUserController { | ||||
|         // 统计用户提现的佣金 | ||||
|         Integer withdrawPrice = brokerageWithdrawService.getWithdrawSummaryListByUserId(Collections.singleton(brokerageUser.getId()), | ||||
|                         BrokerageWithdrawStatusEnum.AUDIT_SUCCESS).stream() | ||||
|                 .findFirst().map(UserWithdrawSummaryBO::getPrice).orElse(0); | ||||
|                 .findFirst().map(BrokerageWithdrawSummaryRespBO::getPrice).orElse(0); | ||||
|         // 统计分销用户数量(一级) | ||||
|         Long firstBrokerageUserCount = brokerageUserService.getBrokerageUserCountByBindUserId(brokerageUser.getId(), 1); | ||||
|         // 统计分销用户数量(二级) | ||||
|   | ||||
| @@ -8,8 +8,8 @@ import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.Brokerag | ||||
| import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserMySummaryRespVO; | ||||
| 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 cn.iocoder.yudao.module.trade.service.brokerage.bo.UserWithdrawSummaryBO; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryRespBO; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageWithdrawSummaryRespBO; | ||||
| import org.mapstruct.Mapper; | ||||
| import org.mapstruct.MappingTarget; | ||||
| import org.mapstruct.factory.Mappers; | ||||
| @@ -32,29 +32,27 @@ public interface BrokerageUserConvert { | ||||
|  | ||||
|     List<BrokerageUserRespVO> convertList(List<BrokerageUserDO> list); | ||||
|  | ||||
|     PageResult<BrokerageUserRespVO> convertPage(PageResult<BrokerageUserDO> page, Map<Long, MemberUserRespDTO> userMap, Map<Long, Long> brokerageUserCountMap, Map<Long, UserBrokerageSummaryBO> userOrderSummaryMap); | ||||
|     PageResult<BrokerageUserRespVO> convertPage(PageResult<BrokerageUserDO> page, Map<Long, MemberUserRespDTO> userMap, Map<Long, Long> brokerageUserCountMap, Map<Long, UserBrokerageSummaryRespBO> userOrderSummaryMap); | ||||
|  | ||||
|     default PageResult<BrokerageUserRespVO> convertPage(PageResult<BrokerageUserDO> pageResult, | ||||
|                                                         Map<Long, MemberUserRespDTO> userMap, | ||||
|                                                         Map<Long, Long> brokerageUserCountMap, | ||||
|                                                         Map<Long, UserBrokerageSummaryBO> userOrderSummaryMap, | ||||
|                                                         Map<Long, UserWithdrawSummaryBO> withdrawMap) { | ||||
|                                                         Map<Long, UserBrokerageSummaryRespBO> userOrderSummaryMap, | ||||
|                                                         Map<Long, BrokerageWithdrawSummaryRespBO> withdrawMap) { | ||||
|         PageResult<BrokerageUserRespVO> result = convertPage(pageResult, userMap, brokerageUserCountMap, userOrderSummaryMap); | ||||
|         for (BrokerageUserRespVO userVO : result.getList()) { | ||||
|             // 用户信息 | ||||
|             copyTo(userMap.get(userVO.getId()), userVO); | ||||
|  | ||||
|             // 推广用户数量 | ||||
|             userVO.setBrokerageUserCount(MapUtil.getInt(brokerageUserCountMap, userVO.getId(), 0)); | ||||
|             // 推广订单数量、推广订单金额 | ||||
|             Optional<UserBrokerageSummaryBO> orderSummaryOptional = Optional.ofNullable(userOrderSummaryMap.get(userVO.getId())); | ||||
|             userVO.setBrokerageOrderCount(orderSummaryOptional.map(UserBrokerageSummaryBO::getCount).orElse(0)) | ||||
|                     .setBrokerageOrderPrice(orderSummaryOptional.map(UserBrokerageSummaryBO::getPrice).orElse(0)); | ||||
|             Optional<UserBrokerageSummaryRespBO> orderSummaryOptional = Optional.ofNullable(userOrderSummaryMap.get(userVO.getId())); | ||||
|             userVO.setBrokerageOrderCount(orderSummaryOptional.map(UserBrokerageSummaryRespBO::getCount).orElse(0)) | ||||
|                     .setBrokerageOrderPrice(orderSummaryOptional.map(UserBrokerageSummaryRespBO::getPrice).orElse(0)); | ||||
|             // 已提现次数、已提现金额 | ||||
|             Optional<UserWithdrawSummaryBO> withdrawSummaryOptional = Optional.ofNullable(withdrawMap.get(userVO.getId())); | ||||
|             userVO.setWithdrawCount(withdrawSummaryOptional.map(UserWithdrawSummaryBO::getCount).orElse(0)) | ||||
|                     .setWithdrawPrice(withdrawSummaryOptional.map(UserWithdrawSummaryBO::getPrice).orElse(0)); | ||||
|             userVO.setWithdrawCount(0).setWithdrawPrice(0); | ||||
|             Optional<BrokerageWithdrawSummaryRespBO> withdrawSummaryOptional = Optional.ofNullable(withdrawMap.get(userVO.getId())); | ||||
|             userVO.setWithdrawCount(withdrawSummaryOptional.map(BrokerageWithdrawSummaryRespBO::getCount).orElse(0)) | ||||
|                     .setWithdrawPrice(withdrawSummaryOptional.map(BrokerageWithdrawSummaryRespBO::getPrice).orElse(0)); | ||||
|         } | ||||
|         return result; | ||||
|     } | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||
| import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.record.BrokerageRecordPageReqVO; | ||||
| import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankByPriceRespVO; | ||||
| import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageRecordDO; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryRespBO; | ||||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
| import com.baomidou.mybatisplus.core.metadata.IPage; | ||||
| import com.github.yulichang.toolkit.MPJWrappers; | ||||
| @@ -56,18 +56,18 @@ public interface BrokerageRecordMapper extends BaseMapperX<BrokerageRecordDO> { | ||||
|                 BrokerageRecordDO::getUserId, userId); | ||||
|     } | ||||
|  | ||||
|     default List<UserBrokerageSummaryBO> selectCountAndSumPriceByUserIdInAndBizTypeAndStatus(Collection<Long> userIds, | ||||
|                                                                                              Integer bizType, | ||||
|                                                                                              Integer status) { | ||||
|     default List<UserBrokerageSummaryRespBO> selectCountAndSumPriceByUserIdInAndBizTypeAndStatus(Collection<Long> userIds, | ||||
|                                                                                                  Integer bizType, | ||||
|                                                                                                  Integer status) { | ||||
|         List<Map<String, Object>> list = selectMaps(MPJWrappers.lambdaJoin(BrokerageRecordDO.class) | ||||
|                 .select(BrokerageRecordDO::getUserId) | ||||
|                 .selectCount(BrokerageRecordDO::getId, UserBrokerageSummaryBO::getCount) | ||||
|                 .selectCount(BrokerageRecordDO::getId, UserBrokerageSummaryRespBO::getCount) | ||||
|                 .selectSum(BrokerageRecordDO::getPrice) | ||||
|                 .in(BrokerageRecordDO::getUserId, userIds) | ||||
|                 .eq(BrokerageRecordDO::getBizId, bizType) | ||||
|                 .eq(BrokerageRecordDO::getStatus, status) | ||||
|                 .groupBy(BrokerageRecordDO::getUserId)); | ||||
|         return BeanUtil.copyToList(list, UserBrokerageSummaryBO.class); | ||||
|         return BeanUtil.copyToList(list, UserBrokerageSummaryRespBO.class); | ||||
|         // selectJoinList有BUG,会与租户插件冲突:解析SQL时,发生异常 https://gitee.com/best_handsome/mybatis-plus-join/issues/I84GYW | ||||
| //            return selectJoinList(UserBrokerageSummaryBO.class, MPJWrappers.lambdaJoin(BrokerageRecordDO.class) | ||||
| //                    .select(BrokerageRecordDO::getUserId) | ||||
|   | ||||
| @@ -6,7 +6,7 @@ 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.withdraw.BrokerageWithdrawPageReqVO; | ||||
| import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageWithdrawDO; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserWithdrawSummaryBO; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageWithdrawSummaryRespBO; | ||||
| import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | ||||
| import com.github.yulichang.wrapper.MPJLambdaWrapper; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
| @@ -41,15 +41,15 @@ public interface BrokerageWithdrawMapper extends BaseMapperX<BrokerageWithdrawDO | ||||
|                 .eq(BrokerageWithdrawDO::getStatus, status)); | ||||
|     } | ||||
|  | ||||
|     default List<UserWithdrawSummaryBO> selectCountAndSumPriceByUserIdAndStatus(Collection<Long> userIds, Integer status) { | ||||
|     default List<BrokerageWithdrawSummaryRespBO> selectCountAndSumPriceByUserIdAndStatus(Collection<Long> userIds, Integer status) { | ||||
|         List<Map<String, Object>> list = selectMaps(new MPJLambdaWrapper<BrokerageWithdrawDO>() | ||||
|                 .select(BrokerageWithdrawDO::getUserId) | ||||
|                 .selectCount(BrokerageWithdrawDO::getId, UserWithdrawSummaryBO::getCount) | ||||
|                 .selectCount(BrokerageWithdrawDO::getId, BrokerageWithdrawSummaryRespBO::getCount) | ||||
|                 .selectSum(BrokerageWithdrawDO::getPrice) | ||||
|                 .in(BrokerageWithdrawDO::getUserId, userIds) | ||||
|                 .eq(BrokerageWithdrawDO::getStatus, status) | ||||
|                 .groupBy(BrokerageWithdrawDO::getUserId)); | ||||
|         return BeanUtil.copyToList(list, UserWithdrawSummaryBO.class); | ||||
|         return BeanUtil.copyToList(list, BrokerageWithdrawSummaryRespBO.class); | ||||
|         // selectJoinList有BUG,会与租户插件冲突:解析SQL时,发生异常 https://gitee.com/best_handsome/mybatis-plus-join/issues/I84GYW | ||||
| //        return selectJoinList(UserWithdrawSummaryBO.class, new MPJLambdaWrapper<BrokerageWithdrawDO>() | ||||
| //                .select(BrokerageWithdrawDO::getUserId) | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokera | ||||
| 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.service.brokerage.bo.BrokerageAddReqBO; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryRespBO; | ||||
|  | ||||
| import javax.validation.Valid; | ||||
| import java.time.LocalDateTime; | ||||
| @@ -85,7 +85,8 @@ public interface BrokerageRecordService { | ||||
|      * @param status  佣金状态 | ||||
|      * @return 用户佣金汇总 List | ||||
|      */ | ||||
|     List<UserBrokerageSummaryBO> getUserBrokerageSummaryListByUserId(Collection<Long> userIds, Integer bizType, Integer status); | ||||
|     List<UserBrokerageSummaryRespBO> getUserBrokerageSummaryListByUserId(Collection<Long> userIds, | ||||
|                                                                          Integer bizType, Integer status); | ||||
|  | ||||
|     /** | ||||
|      * 按照 userId,汇总每个用户的佣金 | ||||
| @@ -95,8 +96,10 @@ public interface BrokerageRecordService { | ||||
|      * @param status  佣金状态 | ||||
|      * @return 用户佣金汇总 Map | ||||
|      */ | ||||
|     default Map<Long, UserBrokerageSummaryBO> getUserBrokerageSummaryMapByUserId(Collection<Long> userIds, Integer bizType, Integer status) { | ||||
|         return convertMap(getUserBrokerageSummaryListByUserId(userIds, bizType, status), UserBrokerageSummaryBO::getUserId); | ||||
|     default Map<Long, UserBrokerageSummaryRespBO> getUserBrokerageSummaryMapByUserId(Collection<Long> userIds, | ||||
|                                                                                      Integer bizType, Integer status) { | ||||
|         return convertMap(getUserBrokerageSummaryListByUserId(userIds, bizType, status), | ||||
|                 UserBrokerageSummaryRespBO::getUserId); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -116,7 +119,8 @@ public interface BrokerageRecordService { | ||||
|      * @param pageReqVO 分页查询 | ||||
|      * @return 排行榜分页 | ||||
|      */ | ||||
|     PageResult<AppBrokerageUserRankByPriceRespVO> getBrokerageUserChildSummaryPageByPrice(AppBrokerageUserRankPageReqVO pageReqVO); | ||||
|     PageResult<AppBrokerageUserRankByPriceRespVO> getBrokerageUserChildSummaryPageByPrice( | ||||
|             AppBrokerageUserRankPageReqVO pageReqVO); | ||||
|  | ||||
|     /** | ||||
|      * 获取用户的排名(基于佣金总数) | ||||
| @@ -135,4 +139,5 @@ public interface BrokerageRecordService { | ||||
|      * @return 用户佣金 | ||||
|      */ | ||||
|     AppBrokerageProductPriceRespVO calculateProductBrokeragePrice(Long spuId, Long userId); | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -26,7 +26,7 @@ import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.BrokerageRecordMapper; | ||||
| 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.UserBrokerageSummaryBO; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryRespBO; | ||||
| import cn.iocoder.yudao.module.trade.service.config.TradeConfigService; | ||||
| import com.baomidou.mybatisplus.core.metadata.IPage; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| @@ -232,18 +232,24 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<UserBrokerageSummaryBO> getUserBrokerageSummaryListByUserId(Collection<Long> userIds, Integer bizType, Integer status) { | ||||
|     public List<UserBrokerageSummaryRespBO> getUserBrokerageSummaryListByUserId(Collection<Long> userIds, | ||||
|                                                                                 Integer bizType, Integer status) { | ||||
|          if (CollUtil.isEmpty(userIds)) { | ||||
|              return Collections.emptyList(); | ||||
|          } | ||||
|         return brokerageRecordMapper.selectCountAndSumPriceByUserIdInAndBizTypeAndStatus(userIds, bizType, status); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Integer getSummaryPriceByUserId(Long userId, Integer bizType, LocalDateTime beginTime, LocalDateTime endTime) { | ||||
|         return brokerageRecordMapper.selectSummaryPriceByUserIdAndBizTypeAndCreateTimeBetween(userId, bizType, beginTime, endTime); | ||||
|         return brokerageRecordMapper.selectSummaryPriceByUserIdAndBizTypeAndCreateTimeBetween(userId, bizType, | ||||
|                 beginTime, endTime); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public PageResult<AppBrokerageUserRankByPriceRespVO> getBrokerageUserChildSummaryPageByPrice(AppBrokerageUserRankPageReqVO pageReqVO) { | ||||
|         IPage<AppBrokerageUserRankByPriceRespVO> pageResult = brokerageRecordMapper.selectSummaryPricePageGroupByUserId(MyBatisUtils.buildPage(pageReqVO), | ||||
|         IPage<AppBrokerageUserRankByPriceRespVO> pageResult = brokerageRecordMapper.selectSummaryPricePageGroupByUserId( | ||||
|                 MyBatisUtils.buildPage(pageReqVO), | ||||
|                 BrokerageRecordBizTypeEnum.ORDER.getType(), BrokerageRecordStatusEnum.SETTLEMENT.getStatus(), | ||||
|                 ArrayUtil.get(pageReqVO.getTimes(), 0), ArrayUtil.get(pageReqVO.getTimes(), 1)); | ||||
|         return new PageResult<>(pageResult.getRecords(), pageResult.getTotal()); | ||||
|   | ||||
| @@ -26,10 +26,7 @@ import org.springframework.validation.annotation.Validated; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import java.time.LocalDateTime; | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| import java.util.Objects; | ||||
| import java.util.Optional; | ||||
| import java.util.*; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||
| import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; | ||||
| @@ -304,6 +301,9 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { | ||||
|      * @return 绑定用户编号列表 | ||||
|      */ | ||||
|     private List<Long> buildBindUserIdsByLevel(Long bindUserId, Integer level) { | ||||
|         if (bindUserId == null) { | ||||
|             return Collections.emptyList(); | ||||
|         } | ||||
|         Assert.isTrue(level == null || level <= 2, "目前只支持 level 小于等于 2"); | ||||
|         List<Long> bindUserIds = CollUtil.newArrayList(); | ||||
|         if (level == null || level == 1) { | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.withdraw.Brok | ||||
| import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.withdraw.AppBrokerageWithdrawCreateReqVO; | ||||
| import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageWithdrawDO; | ||||
| import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserWithdrawSummaryBO; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageWithdrawSummaryRespBO; | ||||
|  | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| @@ -62,7 +62,7 @@ public interface BrokerageWithdrawService { | ||||
|      * @param status  提现状态 | ||||
|      * @return 用户提现汇总 List | ||||
|      */ | ||||
|     List<UserWithdrawSummaryBO> getWithdrawSummaryListByUserId(Collection<Long> userIds, BrokerageWithdrawStatusEnum status); | ||||
|     List<BrokerageWithdrawSummaryRespBO> getWithdrawSummaryListByUserId(Collection<Long> userIds, BrokerageWithdrawStatusEnum status); | ||||
|  | ||||
|     /** | ||||
|      * 按照 userId,汇总每个用户的提现 | ||||
| @@ -71,8 +71,9 @@ public interface BrokerageWithdrawService { | ||||
|      * @param status  提现状态 | ||||
|      * @return 用户提现汇总 Map | ||||
|      */ | ||||
|     default Map<Long, UserWithdrawSummaryBO> getWithdrawSummaryMapByUserId(Set<Long> userIds, BrokerageWithdrawStatusEnum status) { | ||||
|         return convertMap(getWithdrawSummaryListByUserId(userIds, status), UserWithdrawSummaryBO::getUserId); | ||||
|     default Map<Long, BrokerageWithdrawSummaryRespBO> getWithdrawSummaryMapByUserId(Set<Long> userIds, | ||||
|                                                                                     BrokerageWithdrawStatusEnum status) { | ||||
|         return convertMap(getWithdrawSummaryListByUserId(userIds, status), BrokerageWithdrawSummaryRespBO::getUserId); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| package cn.iocoder.yudao.module.trade.service.brokerage; | ||||
|  | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import cn.hutool.core.date.LocalDateTimeUtil; | ||||
| import cn.hutool.core.map.MapUtil; | ||||
| import cn.hutool.core.util.ObjectUtil; | ||||
| @@ -17,7 +18,7 @@ import cn.iocoder.yudao.module.trade.enums.MessageTemplateConstants; | ||||
| import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; | ||||
| import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum; | ||||
| import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawTypeEnum; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserWithdrawSummaryBO; | ||||
| import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageWithdrawSummaryRespBO; | ||||
| import cn.iocoder.yudao.module.trade.service.config.TradeConfigService; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
| @@ -27,6 +28,7 @@ import javax.annotation.Resource; | ||||
| import javax.validation.Validator; | ||||
| import java.time.LocalDateTime; | ||||
| import java.util.Collection; | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| @@ -144,7 +146,11 @@ public class BrokerageWithdrawServiceImpl implements BrokerageWithdrawService { | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<UserWithdrawSummaryBO> getWithdrawSummaryListByUserId(Collection<Long> userIds, BrokerageWithdrawStatusEnum status) { | ||||
|     public List<BrokerageWithdrawSummaryRespBO> getWithdrawSummaryListByUserId(Collection<Long> userIds, | ||||
|                                                                                BrokerageWithdrawStatusEnum status) { | ||||
|         if (CollUtil.isEmpty(userIds)) { | ||||
|             return Collections.emptyList(); | ||||
|         } | ||||
|         return brokerageWithdrawMapper.selectCountAndSumPriceByUserIdAndStatus(userIds, status.getStatus()); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -5,14 +5,14 @@ import lombok.Data; | ||||
| import lombok.NoArgsConstructor; | ||||
| 
 | ||||
| /** | ||||
|  * 用户佣金提现合计 BO | ||||
|  * 佣金提现合计 BO | ||||
|  * | ||||
|  * @author owen | ||||
|  */ | ||||
| @Data | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class UserWithdrawSummaryBO { | ||||
| public class BrokerageWithdrawSummaryRespBO { | ||||
| 
 | ||||
|     /** | ||||
|      * 用户编号 | ||||
| @@ -12,7 +12,7 @@ import lombok.NoArgsConstructor; | ||||
| @Data | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class UserBrokerageSummaryBO { | ||||
| public class UserBrokerageSummaryRespBO { | ||||
| 
 | ||||
|     /** | ||||
|      * 用户编号 | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV