Commit 77daa0085ed7c42b8d0f2c7689fed678ec3f0b02

Authored by owen
1 parent cddeb372

trade: 分销业务review代码修改

Showing 15 changed files with 103 additions and 34 deletions
yudao-module-mall/yudao-module-trade-api/pom.xml
... ... @@ -21,6 +21,13 @@
21 21 <groupId>cn.iocoder.boot</groupId>
22 22 <artifactId>yudao-common</artifactId>
23 23 </dependency>
  24 +
  25 + <!-- 参数校验 -->
  26 + <dependency>
  27 + <groupId>org.springframework.boot</groupId>
  28 + <artifactId>spring-boot-starter-validation</artifactId>
  29 + <optional>true</optional>
  30 + </dependency>
24 31 </dependencies>
25 32  
26 33 </project>
... ...
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/api/brokerage/BrokerageApi.java
1 1 package cn.iocoder.yudao.module.trade.api.brokerage;
2 2  
  3 +import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
3 4 import cn.iocoder.yudao.module.trade.api.brokerage.dto.BrokerageUserDTO;
4 5  
  6 +import javax.validation.constraints.NotNull;
  7 +import java.time.LocalDateTime;
  8 +
5 9 /**
6 10 * 分销 API 接口
7 11 *
... ... @@ -18,6 +22,20 @@ public interface BrokerageApi {
18 22 BrokerageUserDTO getBrokerageUser(Long userId);
19 23  
20 24 /**
  25 + * 【会员】绑定推广员
  26 + *
  27 + * @param userId 用户编号
  28 + * @param bindUserId 推广员编号
  29 + * @param registerTime 用户注册时间
  30 + * @return 是否绑定
  31 + */
  32 + default boolean bindUser(@NotNull Long userId, @NotNull Long bindUserId, @NotNull LocalDateTime registerTime) {
  33 + // 注册时间在30秒内的,都算新用户
  34 + boolean isNewUser = LocalDateTimeUtils.afterNow(registerTime.minusSeconds(30));
  35 + return bindUser(userId, bindUserId, isNewUser);
  36 + }
  37 +
  38 + /**
21 39 * 绑定推广员
22 40 *
23 41 * @param userId 用户编号
... ... @@ -25,5 +43,5 @@ public interface BrokerageApi {
25 43 * @param isNewUser 是否为新用户
26 44 * @return 是否绑定
27 45 */
28   - boolean bindUser(Long userId, Long bindUserId, Boolean isNewUser);
  46 + boolean bindUser(@NotNull Long userId, @NotNull Long bindUserId, @NotNull Boolean isNewUser);
29 47 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/user/BrokerageUserController.java
... ... @@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.trade.convert.brokerage.user.BrokerageUserConvert
9 9 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.user.BrokerageUserDO;
10 10 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
11 11 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum;
  12 +import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageUserTypeEnum;
12 13 import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO;
13 14 import cn.iocoder.yudao.module.trade.service.brokerage.record.BrokerageRecordService;
14 15 import cn.iocoder.yudao.module.trade.service.brokerage.user.BrokerageUserService;
... ... @@ -95,7 +96,7 @@ public class BrokerageUserController {
95 96 // 合计推广用户数量
96 97 Map<Long, Long> brokerageUserCountMap = convertMap(userIds,
97 98 userId -> userId,
98   - userId -> brokerageUserService.getBrokerageUserCountByBindUserId(userId));
  99 + userId -> brokerageUserService.getBrokerageUserCountByBindUserId(userId, BrokerageUserTypeEnum.ALL));
99 100  
100 101 // todo 合计提现
101 102  
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/user/vo/BrokerageUserRespVO.java
... ... @@ -28,7 +28,7 @@ public class BrokerageUserRespVO extends BrokerageUserBaseVO {
28 28  
29 29 // ========== 推广信息 ==========
30 30  
31   - @Schema(description = "推广用户数量(一级)", example = "20019")
  31 + @Schema(description = "推广用户数量", example = "20019")
32 32 private Integer brokerageUserCount;
33 33 @Schema(description = "推广订单数量", example = "20019")
34 34 private Integer brokerageOrderCount;
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageRecordController.java
... ... @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
6 6 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.record.AppBrokerageProductPriceRespVO;
7 7 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.record.AppBrokerageRecordPageReqVO;
8 8 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.record.AppBrokerageRecordRespVO;
  9 +import cn.iocoder.yudao.module.trade.service.brokerage.user.BrokerageUserService;
9 10 import io.swagger.v3.oas.annotations.Operation;
10 11 import io.swagger.v3.oas.annotations.tags.Tag;
11 12 import lombok.extern.slf4j.Slf4j;
... ... @@ -15,10 +16,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
15 16 import org.springframework.web.bind.annotation.RequestParam;
16 17 import org.springframework.web.bind.annotation.RestController;
17 18  
  19 +import javax.annotation.Resource;
18 20 import javax.validation.Valid;
19 21 import java.time.LocalDateTime;
20 22  
21 23 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  24 +import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId;
22 25 import static java.util.Arrays.asList;
23 26  
24 27 @Tag(name = "用户 APP - 分销用户")
... ... @@ -27,6 +30,8 @@ import static java.util.Arrays.asList;
27 30 @Validated
28 31 @Slf4j
29 32 public class AppBrokerageRecordController {
  33 + @Resource
  34 + private BrokerageUserService brokerageUserService;
30 35  
31 36 // TODO 芋艿:临时 mock =>
32 37 @GetMapping("/page")
... ... @@ -46,7 +51,7 @@ public class AppBrokerageRecordController {
46 51 @Operation(summary = "获得商品的分销金额")
47 52 public CommonResult<AppBrokerageProductPriceRespVO> getProductBrokeragePrice(@RequestParam("spuId") Long spuId) {
48 53 AppBrokerageProductPriceRespVO respVO = new AppBrokerageProductPriceRespVO();
49   - respVO.setEnabled(true); // TODO @疯狂:需要开启分销 + 人允许分销
  54 + respVO.setEnabled(brokerageUserService.getUserBrokerageEnabled(getLoginUserId()));
50 55 respVO.setBrokerageMinPrice(1);
51 56 respVO.setBrokerageMaxPrice(2);
52 57 return success(respVO);
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/vo/user/AppBrokerageUserMySummaryRespVO.java
... ... @@ -19,7 +19,7 @@ public class AppBrokerageUserMySummaryRespVO {
19 19 @Schema(description = "冻结的佣金,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "234")
20 20 private Integer frozenPrice;
21 21  
22   - @Schema(description = "分销用户数量(一级)", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
  22 + @Schema(description = "分销用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
23 23 private Integer firstBrokerageUserCount;
24 24  
25 25 @Schema(description = "分销用户数量(二级)", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/brokerage/record/BrokerageRecordConvert.java
... ... @@ -33,7 +33,6 @@ public interface BrokerageRecordConvert {
33 33  
34 34 PageResult<BrokerageRecordRespVO> convertPage(PageResult<BrokerageRecordDO> page);
35 35  
36   - // TODO @疯狂:可能 title 不是很固化,会存在类似:沐晴成功购买《XXX JVM 实战》
37 36 default BrokerageRecordDO convert(BrokerageUserDO user, BrokerageRecordBizTypeEnum bizType, String bizId,
38 37 Integer brokerageFrozenDays, int brokeragePrice, LocalDateTime unfreezeTime,
39 38 String title, Long sourceUserId, Integer sourceUserType) {
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/brokerage/user/BrokerageUserConvert.java
... ... @@ -39,7 +39,7 @@ public interface BrokerageUserConvert {
39 39 // 用户信息
40 40 copyTo(userMap.get(vo.getId()), vo);
41 41  
42   - // 推广用户数量(一级)
  42 + // 推广用户数量
43 43 vo.setBrokerageUserCount(MapUtil.getInt(brokerageUserCountMap, vo.getId(), 0));
44 44 // 推广订单数量、推广订单金额
45 45 Optional<UserBrokerageSummaryBO> orderSummaryOptional = Optional.ofNullable(userOrderSummaryMap.get(vo.getId()));
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/order/TradeOrderConvert.java
... ... @@ -7,7 +7,6 @@ import cn.iocoder.yudao.framework.common.util.string.StrUtils;
7 7 import cn.iocoder.yudao.framework.dict.core.util.DictFrameworkUtils;
8 8 import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils;
9 9 import cn.iocoder.yudao.module.member.api.address.dto.AddressRespDTO;
10   -import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageAddReqBO;
11 10 import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
12 11 import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO;
13 12 import cn.iocoder.yudao.module.pay.enums.DictTypeConstants;
... ... @@ -28,9 +27,11 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.cart.CartDO;
28 27 import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO;
29 28 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
30 29 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
  30 +import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
31 31 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum;
32 32 import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackRespDTO;
33 33 import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties;
  34 +import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageAddReqBO;
34 35 import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;
35 36 import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;
36 37 import org.mapstruct.Mapper;
... ... @@ -282,6 +283,7 @@ public interface TradeOrderConvert {
282 283 .setSourceUserId(item.getUserId())
283 284 .setBasePrice(item.getPayPrice() * item.getCount())
284 285 .setFirstFixedPrice(sku.getSubCommissionFirstPrice())
285   - .setSecondFixedPrice(sku.getSubCommissionSecondPrice());
  286 + .setSecondFixedPrice(sku.getSubCommissionSecondPrice())
  287 + .setTitle(BrokerageRecordBizTypeEnum.ORDER.getTitle());
286 288 }
287 289 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/record/BrokerageRecordMapper.java
... ... @@ -48,13 +48,13 @@ public interface BrokerageRecordMapper extends BaseMapperX&lt;BrokerageRecordDO&gt; {
48 48 .eq(BrokerageRecordDO::getStatus, status));
49 49 }
50 50  
51   - default BrokerageRecordDO selectByBizTypeAndBizId(Integer bizType, String bizId) {
  51 + default BrokerageRecordDO selectByBizTypeAndBizIdAndUserId(Integer bizType, String bizId, Long userId) {
52 52 return selectOne(BrokerageRecordDO::getBizType, bizType,
53   - BrokerageRecordDO::getBizId, bizId);
  53 + BrokerageRecordDO::getBizId, bizId,
  54 + BrokerageRecordDO::getUserId, userId);
54 55 }
55 56  
56   - // TODO @疯狂:mysql 关键字,大写哈;这样看起来清晰点;例如说 SELECT COUNT(1)
57   - @Select("select count(1), sum(price) from trade_brokerage_record where user_id = #{userId} and biz_type = #{bizType} and status = #{status}")
  57 + @Select("SELECT COUNT(1), SUM(price) FROM trade_brokerage_record WHERE user_id = #{userId} AND biz_type = #{bizType} AND status = #{status}")
58 58 UserBrokerageSummaryBO selectCountAndSumPriceByUserIdAndBizTypeAndStatus(@Param("userId") Long userId,
59 59 @Param("bizType") Integer bizType,
60 60 @Param("status") Integer status);
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/user/BrokerageUserMapper.java
... ... @@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageUserTypeEnum;
11 11 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
12 12 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
13 13 import org.apache.ibatis.annotations.Mapper;
  14 +import org.apache.ibatis.annotations.Select;
14 15  
15 16 /**
16 17 * 分销用户 Mapper
... ... @@ -135,4 +136,10 @@ public interface BrokerageUserMapper extends BaseMapperX&lt;BrokerageUserDO&gt; {
135 136 .set(BrokerageUserDO::getBrokerageEnabled, false).set(BrokerageUserDO::getBrokerageTime, null));
136 137 }
137 138  
  139 + default Long selectCountByBindUserId(Long bindUserId) {
  140 + return selectCount(BrokerageUserDO::getBindUserId, bindUserId);
  141 + }
  142 +
  143 + @Select("SELECT COUNT(1) from trade_brokerage_user WHERE bind_user_id IN (SELECT id FROM trade_brokerage_user WHERE bind_user_id = #{bindUserId})")
  144 + Long selectCountByBindUserIdInBindUserId(Long bindUserId);
138 145 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/bo/BrokerageAddReqBO.java
... ... @@ -40,4 +40,9 @@ public class BrokerageAddReqBO {
40 40 * 来源用户编号
41 41 */
42 42 private Long sourceUserId;
  43 +
  44 + /**
  45 + * 佣金记录标题
  46 + */
  47 + private String title;
43 48 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/record/BrokerageRecordServiceImpl.java
... ... @@ -91,9 +91,8 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService {
91 91 @Override
92 92 @Transactional(rollbackFor = Exception.class)
93 93 public void cancelBrokerage(Long userId, BrokerageRecordBizTypeEnum bizType, String bizId) {
94   - // TODO @疯狂:userId 加进去查询,会不会更好一点?万一穿错参数;
95   - BrokerageRecordDO record = brokerageRecordMapper.selectByBizTypeAndBizId(bizType.getType(), bizId);
96   - if (record == null || ObjectUtil.notEqual(record.getUserId(), userId)) {
  94 + BrokerageRecordDO record = brokerageRecordMapper.selectByBizTypeAndBizIdAndUserId(bizType.getType(), bizId, userId);
  95 + if (record == null) {
97 96 log.error("[cancelBrokerage][userId({})][bizId({}) 更新为已失效失败:记录不存在]", userId, bizId);
98 97 return;
99 98 }
... ... @@ -167,7 +166,7 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService {
167 166 continue;
168 167 }
169 168 records.add(BrokerageRecordConvert.INSTANCE.convert(user, bizType, item.getBizId(),
170   - brokerageFrozenDays, brokeragePerItem, unfreezeTime, bizType.getTitle(),
  169 + brokerageFrozenDays, brokeragePerItem, unfreezeTime, item.getTitle(),
171 170 item.getSourceUserId(), sourceUserType.getType()));
172 171 totalBrokerage += brokeragePerItem;
173 172 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/user/BrokerageUserService.java
... ... @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.trade.service.brokerage.user;
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.module.trade.controller.admin.brokerage.user.vo.BrokerageUserPageReqVO;
5 5 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.user.BrokerageUserDO;
  6 +import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageUserTypeEnum;
6 7  
7 8 import java.util.Collection;
8 9 import java.util.List;
... ... @@ -86,14 +87,14 @@ public interface BrokerageUserService {
86 87 */
87 88 void updateFrozenPriceDecrAndPriceIncr(Long id, Integer frozenPrice);
88 89  
89   - // TODO @疯狂:这个后面可能要支持下,二级
90 90 /**
91   - * 获得推广用户数量(一级)
  91 + * 获得推广用户数量
92 92 *
93 93 * @param bindUserId 绑定的推广员编号
  94 + * @param userType 用户类型
94 95 * @return 推广用户数量
95 96 */
96   - Long getBrokerageUserCountByBindUserId(Long bindUserId);
  97 + Long getBrokerageUserCountByBindUserId(Long bindUserId, BrokerageUserTypeEnum userType);
97 98  
98 99 /**
99 100 * 【会员】绑定推广员
... ... @@ -105,4 +106,11 @@ public interface BrokerageUserService {
105 106 */
106 107 boolean bindBrokerageUser(Long userId, Long bindUserId, Boolean isNewUser);
107 108  
  109 + /**
  110 + * 获取用户是否有分销资格
  111 + *
  112 + * @param userId 用户编号
  113 + * @return 是否有分销资格
  114 + */
  115 + Boolean getUserBrokerageEnabled(Long userId);
108 116 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/user/BrokerageUserServiceImpl.java
... ... @@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO;
9 9 import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.user.BrokerageUserMapper;
10 10 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageBindModeEnum;
11 11 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageEnabledConditionEnum;
  12 +import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageUserTypeEnum;
12 13 import cn.iocoder.yudao.module.trade.service.config.TradeConfigService;
13 14 import org.springframework.stereotype.Service;
14 15 import org.springframework.validation.annotation.Validated;
... ... @@ -131,19 +132,23 @@ public class BrokerageUserServiceImpl implements BrokerageUserService {
131 132 }
132 133  
133 134 @Override
134   - public Long getBrokerageUserCountByBindUserId(Long bindUserId) {
135   - // TODO @疯狂:mapper 封装下哈;不直接在 service 调用这种基础 mapper 的基础方法
136   - return brokerageUserMapper.selectCount(BrokerageUserDO::getBindUserId, bindUserId);
  135 + public Long getBrokerageUserCountByBindUserId(Long bindUserId, BrokerageUserTypeEnum userType) {
  136 + switch (userType) {
  137 + case ALL:
  138 + Long firstCount = brokerageUserMapper.selectCountByBindUserId(bindUserId);
  139 + Long secondCount = brokerageUserMapper.selectCountByBindUserIdInBindUserId(bindUserId);
  140 + return firstCount + secondCount;
  141 + case FIRST:
  142 + return brokerageUserMapper.selectCountByBindUserId(bindUserId);
  143 + case SECOND:
  144 + return brokerageUserMapper.selectCountByBindUserIdInBindUserId(bindUserId);
  145 + default:
  146 + return 0L;
  147 + }
137 148 }
138 149  
139   - // TODO @疯狂:因为现在 user 会存在使用验证码直接注册,所以 isNewUser 不太好传递;我们是不是可以约定绑定的时间,createTime 在 30 秒内,就认为新用户;
140 150 @Override
141 151 public boolean bindBrokerageUser(Long userId, Long bindUserId, Boolean isNewUser) {
142   - // TODO @疯狂:userId 为空,搞到参数校验里哇;
143   - if (userId == null) {
144   - throw exception(0);
145   - }
146   -
147 152 // 1. 获得分销用户
148 153 boolean isNewBrokerageUser = false;
149 154 BrokerageUserDO brokerageUser = brokerageUserMapper.selectById(userId);
... ... @@ -153,7 +158,7 @@ public class BrokerageUserServiceImpl implements BrokerageUserService {
153 158 }
154 159  
155 160 // 2.1 校验是否能绑定用户
156   - boolean validated = isUserCanBind(brokerageUser, bindUserId, isNewUser);
  161 + boolean validated = isUserCanBind(brokerageUser, isNewUser);
157 162 if (!validated) {
158 163 return false;
159 164 }
... ... @@ -163,10 +168,9 @@ public class BrokerageUserServiceImpl implements BrokerageUserService {
163 168 if (isNewBrokerageUser) {
164 169 Integer enabledCondition = tradeConfigService.getTradeConfig().getBrokerageEnabledCondition();
165 170 if (BrokerageEnabledConditionEnum.ALL.getCondition().equals(enabledCondition)) { // 人人分销:用户默认就有分销资格
166   - // TODO @疯狂:应该设置下 brokerageTime,而不是 bindUserTime
167   - brokerageUser.setBrokerageEnabled(true).setBindUserTime(LocalDateTime.now());
  171 + brokerageUser.setBrokerageEnabled(true).setBrokerageTime(LocalDateTime.now());
168 172 }
169   - // TODO @疯狂:这里是不是要设置 bindUserId、bindUserTime 字段哈;
  173 + brokerageUser.setBindUserId(bindUserId).setBindUserTime(LocalDateTime.now());
170 174 brokerageUserMapper.insert(brokerageUser);
171 175 } else {
172 176 brokerageUserMapper.updateById(new BrokerageUserDO().setId(userId)
... ... @@ -175,7 +179,21 @@ public class BrokerageUserServiceImpl implements BrokerageUserService {
175 179 return true;
176 180 }
177 181  
178   - private boolean isUserCanBind(BrokerageUserDO user, Long bindUserId, Boolean isNewUser) {
  182 + @Override
  183 + public Boolean getUserBrokerageEnabled(Long userId) {
  184 + // 全局分销功能是否开启
  185 + TradeConfigDO tradeConfig = tradeConfigService.getTradeConfig();
  186 + if (tradeConfig == null || !BooleanUtil.isTrue(tradeConfig.getBrokerageEnabled())) {
  187 + return false;
  188 + }
  189 +
  190 + // 用户是否有分销资格
  191 + return Optional.ofNullable(getBrokerageUser(userId))
  192 + .map(BrokerageUserDO::getBrokerageEnabled)
  193 + .orElse(false);
  194 + }
  195 +
  196 + private boolean isUserCanBind(BrokerageUserDO user, Boolean isNewUser) {
179 197 // 校验分销功能是否启用
180 198 TradeConfigDO tradeConfig = tradeConfigService.getTradeConfig();
181 199 if (tradeConfig == null || !BooleanUtil.isTrue(tradeConfig.getBrokerageEnabled())) {
... ...