Commit 557b09a15773733b7d3c1730059d222b37bfc508

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