Commit 557b09a15773733b7d3c1730059d222b37bfc508
1 parent
3b5215db
code review:分销逻辑
Showing
16 changed files
with
68 additions
and
76 deletions
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/api/brokerage/BrokerageApiImpl.java
| ... | ... | @@ -20,6 +20,7 @@ public class BrokerageApiImpl implements BrokerageApi { |
| 20 | 20 | @Resource |
| 21 | 21 | private BrokerageUserService brokerageUserService; |
| 22 | 22 | |
| 23 | + @Override | |
| 23 | 24 | public BrokerageUserDTO getBrokerageUser(Long userId) { |
| 24 | 25 | return BrokerageUserConvert.INSTANCE.convertDTO(brokerageUserService.getBrokerageUser(userId)); |
| 25 | 26 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/user/BrokerageUserController.java
| ... | ... | @@ -62,7 +62,7 @@ public class BrokerageUserController { |
| 62 | 62 | @Operation(summary = "修改推广资格") |
| 63 | 63 | @PreAuthorize("@ss.hasPermission('trade:brokerage-user:update-brokerage-enable')") |
| 64 | 64 | public CommonResult<Boolean> updateBrokerageEnabled(@Valid @RequestBody BrokerageUserUpdateBrokerageEnabledReqVO updateReqVO) { |
| 65 | - brokerageUserService.updateBrokerageEnabled(updateReqVO.getId(), updateReqVO.getEnabled()); | |
| 65 | + brokerageUserService.updateBrokerageUserEnabled(updateReqVO.getId(), updateReqVO.getEnabled()); | |
| 66 | 66 | return success(true); |
| 67 | 67 | } |
| 68 | 68 | |
| ... | ... | @@ -89,12 +89,12 @@ public class BrokerageUserController { |
| 89 | 89 | // 合计分佣订单 |
| 90 | 90 | Map<Long, UserBrokerageSummaryBO> userOrderSummaryMap = convertMap(userIds, |
| 91 | 91 | userId -> userId, |
| 92 | - userId -> brokerageRecordService.summaryByUserIdAndBizTypeAndStatus(userId, | |
| 92 | + userId -> brokerageRecordService.getUserBrokerageSummaryByUserId(userId, | |
| 93 | 93 | BrokerageRecordBizTypeEnum.ORDER.getType(), BrokerageRecordStatusEnum.SETTLEMENT.getStatus())); |
| 94 | 94 | // 合计推广用户数量 |
| 95 | 95 | Map<Long, Long> brokerageUserCountMap = convertMap(userIds, |
| 96 | 96 | userId -> userId, |
| 97 | - userId -> brokerageUserService.getCountByBindUserId(userId)); | |
| 97 | + userId -> brokerageUserService.getBrokerageUserCountByBindUserId(userId)); | |
| 98 | 98 | |
| 99 | 99 | // todo 合计提现 |
| 100 | 100 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/vo/withdraw/AppBrokerageWithdrawCreateReqVO.java
| ... | ... | @@ -23,21 +23,18 @@ public class AppBrokerageWithdrawCreateReqVO { |
| 23 | 23 | @Min(value = 1, message = "提现金额不能小于 1") |
| 24 | 24 | private Integer price; |
| 25 | 25 | |
| 26 | - | |
| 27 | 26 | // ========== 银行卡、微信、支付宝 提现相关字段 ========== |
| 28 | 27 | |
| 29 | 28 | @Schema(description = "提现账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456789") |
| 30 | 29 | @NotBlank(message = "提现账号不能为空", groups = {Bank.class, Wechat.class, Alipay.class}) |
| 31 | 30 | private String accountNo; |
| 32 | 31 | |
| 33 | - | |
| 34 | 32 | // ========== 微信、支付宝 提现相关字段 ========== |
| 35 | 33 | |
| 36 | 34 | @Schema(description = "收款码的图片", example = "https://www.iocoder.cn/1.png") |
| 37 | 35 | @URL(message = "收款码的图片,必须是一个 URL") |
| 38 | 36 | private String accountQrCodeUrl; |
| 39 | 37 | |
| 40 | - | |
| 41 | 38 | // ========== 银行卡 提现相关字段 ========== |
| 42 | 39 | |
| 43 | 40 | @Schema(description = "持卡人姓名", example = "张三") | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/brokerage/record/BrokerageRecordConvert.java
| ... | ... | @@ -30,25 +30,21 @@ public interface BrokerageRecordConvert { |
| 30 | 30 | |
| 31 | 31 | PageResult<BrokerageRecordRespVO> convertPage(PageResult<BrokerageRecordDO> page); |
| 32 | 32 | |
| 33 | + // TODO @疯狂:可能 title 不是很固化,会存在类似:沐晴成功购买《XXX JVM 实战》 | |
| 33 | 34 | default BrokerageRecordDO convert(BrokerageUserDO user, BrokerageRecordBizTypeEnum bizType, String bizId, |
| 34 | - Integer brokerageFrozenDays, int brokerage, LocalDateTime unfreezeTime, | |
| 35 | + Integer brokerageFrozenDays, int brokeragePrice, LocalDateTime unfreezeTime, | |
| 35 | 36 | String title) { |
| 36 | 37 | brokerageFrozenDays = ObjectUtil.defaultIfNull(brokerageFrozenDays, 0); |
| 37 | 38 | // 不冻结时,佣金直接就是结算状态 |
| 38 | 39 | Integer status = brokerageFrozenDays > 0 |
| 39 | 40 | ? BrokerageRecordStatusEnum.WAIT_SETTLEMENT.getStatus() |
| 40 | 41 | : BrokerageRecordStatusEnum.SETTLEMENT.getStatus(); |
| 41 | - return new BrokerageRecordDO() | |
| 42 | - .setUserId(user.getId()) | |
| 43 | - .setBizType(bizType.getType()) | |
| 44 | - .setBizId(bizId) | |
| 45 | - .setPrice(brokerage) | |
| 46 | - .setTotalPrice(user.getPrice()) | |
| 42 | + return new BrokerageRecordDO().setUserId(user.getId()) | |
| 43 | + .setBizType(bizType.getType()).setBizId(bizId) | |
| 44 | + .setPrice(brokeragePrice).setTotalPrice(user.getPrice()) | |
| 47 | 45 | .setTitle(title) |
| 48 | - .setDescription(StrUtil.format(bizType.getDescription(), String.valueOf(brokerage / 100.0))) | |
| 49 | - .setStatus(status) | |
| 50 | - .setFrozenDays(brokerageFrozenDays) | |
| 51 | - .setUnfreezeTime(unfreezeTime); | |
| 46 | + .setDescription(StrUtil.format(bizType.getDescription(), String.valueOf(brokeragePrice / 100.0))) | |
| 47 | + .setStatus(status).setFrozenDays(brokerageFrozenDays).setUnfreezeTime(unfreezeTime); | |
| 52 | 48 | } |
| 53 | 49 | |
| 54 | 50 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/brokerage/user/BrokerageUserConvert.java
| ... | ... | @@ -37,24 +37,16 @@ public interface BrokerageUserConvert { |
| 37 | 37 | PageResult<BrokerageUserRespVO> result = convertPage(pageResult); |
| 38 | 38 | for (BrokerageUserRespVO vo : result.getList()) { |
| 39 | 39 | // 用户信息 |
| 40 | - Optional.ofNullable(userMap.get(vo.getId())) | |
| 41 | - .ifPresent(user -> { | |
| 42 | - vo.setNickname(user.getNickname()); | |
| 43 | - vo.setAvatar(user.getAvatar()); | |
| 44 | - }); | |
| 45 | - | |
| 40 | + Optional.ofNullable(userMap.get(vo.getId())).ifPresent( | |
| 41 | + user -> vo.setNickname(user.getNickname()).setAvatar(user.getAvatar())); | |
| 46 | 42 | // 推广用户数量(一级) |
| 47 | 43 | vo.setBrokerageUserCount(MapUtil.getInt(brokerageUserCountMap, vo.getId(), 0)); |
| 48 | - | |
| 44 | + // 推广订单数量、推广订单金额 | |
| 49 | 45 | Optional<UserBrokerageSummaryBO> orderSummaryOptional = Optional.ofNullable(userOrderSummaryMap.get(vo.getId())); |
| 50 | - // 推广订单数量 | |
| 51 | - vo.setBrokerageOrderCount(orderSummaryOptional.map(UserBrokerageSummaryBO::getCount).orElse(0)); | |
| 52 | - // 推广订单金额 | |
| 53 | - vo.setBrokerageOrderPrice(orderSummaryOptional.map(UserBrokerageSummaryBO::getPrice).orElse(0)); | |
| 54 | - | |
| 55 | - // todo 已提现次数 | |
| 46 | + vo.setBrokerageOrderCount(orderSummaryOptional.map(UserBrokerageSummaryBO::getCount).orElse(0)) | |
| 47 | + .setBrokerageOrderPrice(orderSummaryOptional.map(UserBrokerageSummaryBO::getPrice).orElse(0)); | |
| 48 | + // todo 已提现次数、已提现金额 | |
| 56 | 49 | vo.setWithdrawCount(0); |
| 57 | - // todo 已提现金额 | |
| 58 | 50 | vo.setWithdrawPrice(0); |
| 59 | 51 | } |
| 60 | 52 | return result; | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/record/BrokerageRecordMapper.java
| ... | ... | @@ -48,6 +48,7 @@ public interface BrokerageRecordMapper extends BaseMapperX<BrokerageRecordDO> { |
| 48 | 48 | BrokerageRecordDO::getBizId, bizId); |
| 49 | 49 | } |
| 50 | 50 | |
| 51 | + // TODO @疯狂:mysql 关键字,大写哈;这样看起来清晰点;例如说 SELECT COUNT(1) | |
| 51 | 52 | @Select("select count(1), sum(price) from trade_brokerage_record where user_id = #{userId} and biz_type = #{bizType} and status = #{status}") |
| 52 | 53 | UserBrokerageSummaryBO selectCountAndSumPriceByUserIdAndBizTypeAndStatus(@Param("userId") Long userId, |
| 53 | 54 | @Param("bizType") Integer bizType, | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/user/BrokerageUserMapper.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/bo/BrokerageAddReqBO.java
| ... | ... | @@ -5,6 +5,7 @@ import lombok.Data; |
| 5 | 5 | import lombok.NoArgsConstructor; |
| 6 | 6 | |
| 7 | 7 | import javax.validation.constraints.NotBlank; |
| 8 | +import javax.validation.constraints.NotNull; | |
| 8 | 9 | |
| 9 | 10 | /** |
| 10 | 11 | * 佣金 增加 Request BO |
| ... | ... | @@ -24,6 +25,7 @@ public class BrokerageAddReqBO { |
| 24 | 25 | /** |
| 25 | 26 | * 佣金基数 |
| 26 | 27 | */ |
| 28 | + @NotNull(message = "佣金基数不能为空") | |
| 27 | 29 | private Integer basePrice; |
| 28 | 30 | /** |
| 29 | 31 | * 一级佣金(固定) | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/bo/UserBrokerageSummaryBO.java
| ... | ... | @@ -13,6 +13,7 @@ import lombok.NoArgsConstructor; |
| 13 | 13 | @NoArgsConstructor |
| 14 | 14 | @AllArgsConstructor |
| 15 | 15 | public class UserBrokerageSummaryBO { |
| 16 | + | |
| 16 | 17 | /** |
| 17 | 18 | * 佣金数量 |
| 18 | 19 | */ |
| ... | ... | @@ -21,4 +22,5 @@ public class UserBrokerageSummaryBO { |
| 21 | 22 | * 佣金总额 |
| 22 | 23 | */ |
| 23 | 24 | private Integer price; |
| 25 | + | |
| 24 | 26 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/record/BrokerageRecordService.java
| ... | ... | @@ -66,5 +66,5 @@ public interface BrokerageRecordService { |
| 66 | 66 | * @param status 佣金状态 |
| 67 | 67 | * @return 用户佣金汇总 |
| 68 | 68 | */ |
| 69 | - UserBrokerageSummaryBO summaryByUserIdAndBizTypeAndStatus(Long userId, Integer bizType, Integer status); | |
| 69 | + UserBrokerageSummaryBO getUserBrokerageSummaryByUserId(Long userId, Integer bizType, Integer status); | |
| 70 | 70 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/record/BrokerageRecordServiceImpl.java
| ... | ... | @@ -89,6 +89,7 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { |
| 89 | 89 | @Override |
| 90 | 90 | @Transactional(rollbackFor = Exception.class) |
| 91 | 91 | public void cancelBrokerage(Long userId, BrokerageRecordBizTypeEnum bizType, String bizId) { |
| 92 | + // TODO @疯狂:userId 加进去查询,会不会更好一点?万一穿错参数; | |
| 92 | 93 | BrokerageRecordDO record = brokerageRecordMapper.selectByBizTypeAndBizId(bizType.getType(), bizId); |
| 93 | 94 | if (record == null || ObjectUtil.notEqual(record.getUserId(), userId)) { |
| 94 | 95 | log.error("[cancelBrokerage][userId({})][bizId({}) 更新为已失效失败:记录不存在]", userId, bizId); |
| ... | ... | @@ -138,7 +139,7 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { |
| 138 | 139 | * @param list 佣金增加参数列表 |
| 139 | 140 | * @param brokerageFrozenDays 冻结天数 |
| 140 | 141 | * @param brokeragePercent 佣金比例 |
| 141 | - * @param fixedPriceFun 固定佣金 | |
| 142 | + * @param fixedPriceFun 固定佣金 // TODO 疯狂:这里是不是可以直接传递 fixedPrice 呀? | |
| 142 | 143 | * @param bizType 业务类型 |
| 143 | 144 | */ |
| 144 | 145 | private void addBrokerage(BrokerageUserDO user, List<BrokerageAddReqBO> list, Integer brokerageFrozenDays, |
| ... | ... | @@ -200,9 +201,9 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { |
| 200 | 201 | } |
| 201 | 202 | |
| 202 | 203 | @Override |
| 203 | - public UserBrokerageSummaryBO summaryByUserIdAndBizTypeAndStatus(Long userId, Integer bizType, Integer status) { | |
| 204 | + public UserBrokerageSummaryBO getUserBrokerageSummaryByUserId(Long userId, Integer bizType, Integer status) { | |
| 204 | 205 | UserBrokerageSummaryBO summaryBO = brokerageRecordMapper.selectCountAndSumPriceByUserIdAndBizTypeAndStatus(userId, bizType, status); |
| 205 | - return summaryBO == null ? new UserBrokerageSummaryBO(0, 0) : summaryBO; | |
| 206 | + return summaryBO != null ? summaryBO : new UserBrokerageSummaryBO(0, 0); | |
| 206 | 207 | } |
| 207 | 208 | |
| 208 | 209 | @Transactional(rollbackFor = Exception.class) | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/user/BrokerageUserService.java
| ... | ... | @@ -52,7 +52,7 @@ public interface BrokerageUserService { |
| 52 | 52 | * @param id 用户编号 |
| 53 | 53 | * @param enabled 推广资格 |
| 54 | 54 | */ |
| 55 | - void updateBrokerageEnabled(Long id, Boolean enabled); | |
| 55 | + void updateBrokerageUserEnabled(Long id, Boolean enabled); | |
| 56 | 56 | |
| 57 | 57 | /** |
| 58 | 58 | * 获得用户的推广人 |
| ... | ... | @@ -79,20 +79,21 @@ public interface BrokerageUserService { |
| 79 | 79 | void updateUserFrozenPrice(Long id, Integer frozenPrice); |
| 80 | 80 | |
| 81 | 81 | /** |
| 82 | - * 更新用户冻结佣金(减少), 更新用户佣金(增加) | |
| 82 | + * 更新用户冻结佣金(减少),更新用户佣金(增加) | |
| 83 | 83 | * |
| 84 | 84 | * @param id 用户编号 |
| 85 | 85 | * @param frozenPrice 减少冻结佣金(负数) |
| 86 | 86 | */ |
| 87 | 87 | void updateFrozenPriceDecrAndPriceIncr(Long id, Integer frozenPrice); |
| 88 | 88 | |
| 89 | + // TODO @疯狂:这个后面可能要支持下,二级 | |
| 89 | 90 | /** |
| 90 | 91 | * 获得推广用户数量(一级) |
| 91 | 92 | * |
| 92 | 93 | * @param bindUserId 绑定的推广员编号 |
| 93 | 94 | * @return 推广用户数量 |
| 94 | 95 | */ |
| 95 | - Long getCountByBindUserId(Long bindUserId); | |
| 96 | + Long getBrokerageUserCountByBindUserId(Long bindUserId); | |
| 96 | 97 | |
| 97 | 98 | /** |
| 98 | 99 | * 【会员】绑定推广员 |
| ... | ... | @@ -103,4 +104,5 @@ public interface BrokerageUserService { |
| 103 | 104 | * @return 是否绑定 |
| 104 | 105 | */ |
| 105 | 106 | boolean bindUser(Long userId, Long bindUserId, Boolean isNewUser); |
| 107 | + | |
| 106 | 108 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/user/BrokerageUserServiceImpl.java
| ... | ... | @@ -57,18 +57,22 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { |
| 57 | 57 | public void updateBrokerageUserId(Long id, Long bindUserId) { |
| 58 | 58 | // 校验存在 |
| 59 | 59 | validateBrokerageUserExists(id); |
| 60 | + | |
| 61 | + // 情况一:清除推广员 | |
| 60 | 62 | if (bindUserId == null) { |
| 61 | 63 | // 清除推广员 |
| 62 | 64 | brokerageUserMapper.updateBindUserIdAndBindUserTimeToNull(id); |
| 63 | - } else { | |
| 64 | - // 修改推广员 | |
| 65 | - brokerageUserMapper.updateById(new BrokerageUserDO().setId(id) | |
| 66 | - .setBindUserId(bindUserId).setBindUserTime(LocalDateTime.now())); | |
| 65 | + return; | |
| 67 | 66 | } |
| 67 | + | |
| 68 | + // 情况二:修改推广员 | |
| 69 | + // TODO @疯狂:要复用一些 validateCanBindUser 的校验哈; | |
| 70 | + brokerageUserMapper.updateById(new BrokerageUserDO().setId(id) | |
| 71 | + .setBindUserId(bindUserId).setBindUserTime(LocalDateTime.now())); | |
| 68 | 72 | } |
| 69 | 73 | |
| 70 | 74 | @Override |
| 71 | - public void updateBrokerageEnabled(Long id, Boolean enabled) { | |
| 75 | + public void updateBrokerageUserEnabled(Long id, Boolean enabled) { | |
| 72 | 76 | // 校验存在 |
| 73 | 77 | validateBrokerageUserExists(id); |
| 74 | 78 | if (BooleanUtil.isTrue(enabled)) { |
| ... | ... | @@ -124,36 +128,41 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { |
| 124 | 128 | } |
| 125 | 129 | |
| 126 | 130 | @Override |
| 127 | - public Long getCountByBindUserId(Long bindUserId) { | |
| 131 | + public Long getBrokerageUserCountByBindUserId(Long bindUserId) { | |
| 132 | + // TODO @疯狂:mapper 封装下哈;不直接在 service 调用这种基础 mapper 的基础方法 | |
| 128 | 133 | return brokerageUserMapper.selectCount(BrokerageUserDO::getBindUserId, bindUserId); |
| 129 | 134 | } |
| 130 | 135 | |
| 136 | + // TODO @疯狂:因为现在 user 会存在使用验证码直接注册,所以 isNewUser 不太好传递;我们是不是可以约定绑定的时间,createTime 在 30 秒内,就认为新用户; | |
| 131 | 137 | @Override |
| 132 | 138 | public boolean bindUser(Long userId, Long bindUserId, Boolean isNewUser) { |
| 139 | + // TODO @疯狂:userId 为空,搞到参数校验里哇; | |
| 133 | 140 | if (userId == null) { |
| 134 | 141 | throw exception(0); |
| 135 | 142 | } |
| 136 | 143 | |
| 137 | - boolean isInsert = false; | |
| 144 | + // 1. 获得分销用户 | |
| 145 | + boolean isNewBrokerageUser = false; | |
| 138 | 146 | BrokerageUserDO brokerageUser = brokerageUserMapper.selectById(userId); |
| 139 | - // 分销用户不存在的情况:1.新注册 2.旧数据 3.分销功能关闭后又打开 | |
| 140 | - if (brokerageUser == null) { | |
| 141 | - isInsert = true; | |
| 147 | + if (brokerageUser == null) { // 分销用户不存在的情况:1. 新注册;2. 旧数据;3. 分销功能关闭后又打开 | |
| 148 | + isNewBrokerageUser = true; | |
| 142 | 149 | brokerageUser = new BrokerageUserDO().setId(userId).setBrokerageEnabled(false).setPrice(0).setFrozenPrice(0); |
| 143 | 150 | } |
| 144 | 151 | |
| 145 | - // 校验能否绑定 | |
| 152 | + // 2.1 校验能否绑定 | |
| 146 | 153 | boolean validated = validateCanBindUser(brokerageUser, bindUserId, isNewUser); |
| 147 | 154 | if (!validated) { |
| 148 | 155 | return false; |
| 149 | 156 | } |
| 150 | 157 | |
| 151 | - if (isInsert) { | |
| 158 | + // 2.2 绑定用户 | |
| 159 | + if (isNewBrokerageUser) { | |
| 152 | 160 | Integer enabledCondition = tradeConfigService.getTradeConfig().getBrokerageEnabledCondition(); |
| 153 | - if (BrokerageEnabledConditionEnum.ALL.getCondition().equals(enabledCondition)) { | |
| 154 | - // 人人分销:用户默认就有分销资格 | |
| 161 | + if (BrokerageEnabledConditionEnum.ALL.getCondition().equals(enabledCondition)) { // 人人分销:用户默认就有分销资格 | |
| 162 | + // TODO @疯狂:应该设置下 brokerageTime,而不是 bindUserTime | |
| 155 | 163 | brokerageUser.setBrokerageEnabled(true).setBindUserTime(LocalDateTime.now()); |
| 156 | 164 | } |
| 165 | + // TODO @疯狂:这里是不是要设置 bindUserId、bindUserTime 字段哈; | |
| 157 | 166 | brokerageUserMapper.insert(brokerageUser); |
| 158 | 167 | } else { |
| 159 | 168 | brokerageUserMapper.updateById(new BrokerageUserDO().setId(userId) |
| ... | ... | @@ -162,14 +171,16 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { |
| 162 | 171 | return true; |
| 163 | 172 | } |
| 164 | 173 | |
| 174 | + // TODO @疯狂:validate 方法,一般不返回 true false,而是抛出异常;如果要返回 true false 这种,方法名字可以改成 isUserCanBind | |
| 165 | 175 | private boolean validateCanBindUser(BrokerageUserDO user, Long bindUserId, Boolean isNewUser) { |
| 176 | + // TODO @疯狂:bindUserId 为空,搞到参数校验里哇; | |
| 166 | 177 | if (bindUserId == null) { |
| 167 | 178 | return false; |
| 168 | 179 | } |
| 169 | 180 | |
| 170 | 181 | // 校验分销功能是否启用 |
| 171 | 182 | TradeConfigDO tradeConfig = tradeConfigService.getTradeConfig(); |
| 172 | - if (tradeConfig == null || !BooleanUtil.isTrue(tradeConfig.getBrokerageEnabled())) { | |
| 183 | + if (tradeConfig == null || BooleanUtil.isFalse(tradeConfig.getBrokerageEnabled())) { | |
| 173 | 184 | return false; |
| 174 | 185 | } |
| 175 | 186 | |
| ... | ... | @@ -180,7 +191,7 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { |
| 180 | 191 | |
| 181 | 192 | // 校验要绑定的用户有无推广资格 |
| 182 | 193 | BrokerageUserDO bindUser = brokerageUserMapper.selectById(bindUserId); |
| 183 | - if (bindUser == null || !BooleanUtil.isTrue(bindUser.getBrokerageEnabled())) { | |
| 194 | + if (bindUser == null || BooleanUtil.isFalse(bindUser.getBrokerageEnabled())) { | |
| 184 | 195 | throw exception(BROKERAGE_BIND_USER_NOT_ENABLED); |
| 185 | 196 | } |
| 186 | 197 | |
| ... | ... | @@ -200,6 +211,7 @@ public class BrokerageUserServiceImpl implements BrokerageUserService { |
| 200 | 211 | } |
| 201 | 212 | } |
| 202 | 213 | |
| 214 | + // TODO @疯狂:这块是不是一直查询到根节点,中间不允许出现自己;就是不能形成环。虽然目前是 2 级,但是未来可能会改多级; = = 环的话,就会存在问题哈 | |
| 203 | 215 | // A->B->A:下级不能绑定自己的上级, A->B->C->A可以!! |
| 204 | 216 | if (Objects.equals(user.getId(), bindUser.getBindUserId())) { |
| 205 | 217 | throw exception(BROKERAGE_BIND_LOOP); | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
| ... | ... | @@ -395,7 +395,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { |
| 395 | 395 | // 增加用户经验 |
| 396 | 396 | getSelf().addUserExperienceAsync(order.getUserId(), order.getPayPrice(), order.getId()); |
| 397 | 397 | // 增加用户佣金 |
| 398 | - getSelf().addBrokerageAsync(order.getUserId(), BrokerageRecordBizTypeEnum.ORDER, order.getId()); | |
| 398 | + getSelf().addBrokerageAsync(order.getUserId(), order.getId()); | |
| 399 | 399 | } |
| 400 | 400 | |
| 401 | 401 | /** |
| ... | ... | @@ -675,7 +675,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { |
| 675 | 675 | // 扣减用户经验 |
| 676 | 676 | getSelf().reduceUserExperienceAsync(order.getUserId(), orderRefundPrice, afterSaleId); |
| 677 | 677 | // 更新分佣记录为已失效 |
| 678 | - getSelf().cancelBrokerageAsync(order.getUserId(), BrokerageRecordBizTypeEnum.ORDER, id); | |
| 678 | + getSelf().cancelBrokerageAsync(order.getUserId(), id); | |
| 679 | 679 | } |
| 680 | 680 | |
| 681 | 681 | @Override |
| ... | ... | @@ -785,16 +785,16 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { |
| 785 | 785 | |
| 786 | 786 | |
| 787 | 787 | @Async |
| 788 | - protected void addBrokerageAsync(Long userId, BrokerageRecordBizTypeEnum bizType, Long orderId) { | |
| 788 | + protected void addBrokerageAsync(Long userId, Long orderId) { | |
| 789 | 789 | List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(orderId); |
| 790 | 790 | List<BrokerageAddReqBO> list = convertList(orderItems, |
| 791 | 791 | item -> TradeOrderConvert.INSTANCE.convert(item, productSkuApi.getSku(item.getSkuId()))); |
| 792 | - brokerageRecordService.addBrokerage(userId, bizType, list); | |
| 792 | + brokerageRecordService.addBrokerage(userId, BrokerageRecordBizTypeEnum.ORDER, list); | |
| 793 | 793 | } |
| 794 | 794 | |
| 795 | 795 | @Async |
| 796 | - protected void cancelBrokerageAsync(Long userId, BrokerageRecordBizTypeEnum bizType, Long orderItemId) { | |
| 797 | - brokerageRecordService.cancelBrokerage(userId, bizType, String.valueOf(orderItemId)); | |
| 796 | + protected void cancelBrokerageAsync(Long userId, Long orderItemId) { | |
| 797 | + brokerageRecordService.cancelBrokerage(userId, BrokerageRecordBizTypeEnum.ORDER, String.valueOf(orderItemId)); | |
| 798 | 798 | } |
| 799 | 799 | |
| 800 | 800 | /** | ... | ... |
yudao-module-member/yudao-module-member-biz/pom.xml
| ... | ... | @@ -33,11 +33,6 @@ |
| 33 | 33 | <artifactId>yudao-module-infra-api</artifactId> |
| 34 | 34 | <version>${revision}</version> |
| 35 | 35 | </dependency> |
| 36 | - <dependency> | |
| 37 | - <groupId>cn.iocoder.boot</groupId> | |
| 38 | - <artifactId>yudao-module-trade-api</artifactId> | |
| 39 | - <version>${revision}</version> | |
| 40 | - </dependency> | |
| 41 | 36 | |
| 42 | 37 | <!-- 业务组件 --> |
| 43 | 38 | <dependency> | ... | ... |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java
| ... | ... | @@ -8,8 +8,6 @@ import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; |
| 8 | 8 | import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; |
| 9 | 9 | import cn.iocoder.yudao.module.member.service.level.MemberLevelService; |
| 10 | 10 | import cn.iocoder.yudao.module.member.service.user.MemberUserService; |
| 11 | -import cn.iocoder.yudao.module.trade.api.brokerage.BrokerageApi; | |
| 12 | -import cn.iocoder.yudao.module.trade.api.brokerage.dto.BrokerageUserDTO; | |
| 13 | 11 | import io.swagger.v3.oas.annotations.Operation; |
| 14 | 12 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 15 | 13 | import lombok.extern.slf4j.Slf4j; |
| ... | ... | @@ -18,7 +16,6 @@ import org.springframework.web.bind.annotation.*; |
| 18 | 16 | |
| 19 | 17 | import javax.annotation.Resource; |
| 20 | 18 | import javax.validation.Valid; |
| 21 | -import java.util.Optional; | |
| 22 | 19 | |
| 23 | 20 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 24 | 21 | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| ... | ... | @@ -32,23 +29,16 @@ public class AppMemberUserController { |
| 32 | 29 | |
| 33 | 30 | @Resource |
| 34 | 31 | private MemberUserService userService; |
| 35 | - | |
| 36 | 32 | @Resource |
| 37 | 33 | private MemberLevelService levelService; |
| 38 | 34 | |
| 39 | - @Resource | |
| 40 | - private BrokerageApi brokerageApi; | |
| 41 | - | |
| 42 | 35 | @GetMapping("/get") |
| 43 | 36 | @Operation(summary = "获得基本信息") |
| 44 | 37 | @PreAuthenticated |
| 45 | 38 | public CommonResult<AppMemberUserInfoRespVO> getUserInfo() { |
| 46 | 39 | MemberUserDO user = userService.getUser(getLoginUserId()); |
| 47 | 40 | MemberLevelDO level = levelService.getLevel(user.getLevelId()); |
| 48 | - BrokerageUserDTO brokerageUser = brokerageApi.getBrokerageUser(user.getId()); | |
| 49 | - return success(MemberUserConvert.INSTANCE.convert(user, level) | |
| 50 | - .setBrokerageEnabled(Optional.ofNullable(brokerageUser).map(BrokerageUserDTO::getBrokerageEnabled).orElse(false)) | |
| 51 | - ); | |
| 41 | + return success(MemberUserConvert.INSTANCE.convert(user, level)); | |
| 52 | 42 | } |
| 53 | 43 | |
| 54 | 44 | @PutMapping("/update") | ... | ... |