Commit 5808f77ade3c0843c4119ea7e1744c2b638a6f81

Authored by YunaiV
1 parent b8a4d8ca

code review:订单分佣

Showing 26 changed files with 108 additions and 53 deletions
yudao-dependencies/pom.xml
@@ -27,7 +27,7 @@ @@ -27,7 +27,7 @@
27 <mybatis-plus.version>3.5.3.2</mybatis-plus.version> 27 <mybatis-plus.version>3.5.3.2</mybatis-plus.version>
28 <mybatis-plus-generator.version>3.5.3.2</mybatis-plus-generator.version> 28 <mybatis-plus-generator.version>3.5.3.2</mybatis-plus-generator.version>
29 <dynamic-datasource.version>3.6.1</dynamic-datasource.version> 29 <dynamic-datasource.version>3.6.1</dynamic-datasource.version>
30 - <mybatis-plus-join-boot-starter.version>1.4.5</mybatis-plus-join-boot-starter.version> 30 + <mybatis-plus-join.version>1.4.6</mybatis-plus-join.version>
31 <redisson.version>3.18.0</redisson.version> 31 <redisson.version>3.18.0</redisson.version>
32 <dm8.jdbc.version>8.1.2.141</dm8.jdbc.version> 32 <dm8.jdbc.version>8.1.2.141</dm8.jdbc.version>
33 <!-- 服务保障相关 --> 33 <!-- 服务保障相关 -->
@@ -220,7 +220,7 @@ @@ -220,7 +220,7 @@
220 <dependency> 220 <dependency>
221 <groupId>com.github.yulichang</groupId> 221 <groupId>com.github.yulichang</groupId>
222 <artifactId>mybatis-plus-join-boot-starter</artifactId> <!-- MyBatis 联表查询 --> 222 <artifactId>mybatis-plus-join-boot-starter</artifactId> <!-- MyBatis 联表查询 -->
223 - <version>${mybatis-plus-join-boot-starter.version}</version> 223 + <version>${mybatis-plus-join.version}</version>
224 </dependency> 224 </dependency>
225 225
226 <dependency> 226 <dependency>
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java
@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
11 import com.baomidou.mybatisplus.core.metadata.IPage; 11 import com.baomidou.mybatisplus.core.metadata.IPage;
12 import com.baomidou.mybatisplus.core.toolkit.support.SFunction; 12 import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
13 import com.baomidou.mybatisplus.extension.toolkit.Db; 13 import com.baomidou.mybatisplus.extension.toolkit.Db;
  14 +import com.github.yulichang.base.MPJBaseMapper;
14 import org.apache.ibatis.annotations.Param; 15 import org.apache.ibatis.annotations.Param;
15 16
16 import java.util.Collection; 17 import java.util.Collection;
@@ -18,8 +19,11 @@ import java.util.List; @@ -18,8 +19,11 @@ import java.util.List;
18 19
19 /** 20 /**
20 * 在 MyBatis Plus 的 BaseMapper 的基础上拓展,提供更多的能力 21 * 在 MyBatis Plus 的 BaseMapper 的基础上拓展,提供更多的能力
  22 + *
  23 + * 1. {@link BaseMapper} 为 MyBatis Plus 的基础接口,提供基础的 CRUD 能力
  24 + * 2. {@link MPJBaseMapper} 为 MyBatis Plus Join 的基础接口,提供连表 Join 能力
21 */ 25 */
22 -public interface BaseMapperX<T> extends BaseMapper<T> { 26 +public interface BaseMapperX<T> extends MPJBaseMapper<T> {
23 27
24 default PageResult<T> selectPage(PageParam pageParam, @Param("ew") Wrapper<T> queryWrapper) { 28 default PageResult<T> selectPage(PageParam pageParam, @Param("ew") Wrapper<T> queryWrapper) {
25 // MyBatis Plus 查询 29 // MyBatis Plus 查询
@@ -128,4 +132,4 @@ public interface BaseMapperX&lt;T&gt; extends BaseMapper&lt;T&gt; { @@ -128,4 +132,4 @@ public interface BaseMapperX&lt;T&gt; extends BaseMapper&lt;T&gt; {
128 Db.saveOrUpdateBatch(collection); 132 Db.saveOrUpdateBatch(collection);
129 } 133 }
130 134
131 -}  
132 \ No newline at end of file 135 \ No newline at end of file
  136 +}
yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/sku/dto/ProductSkuRespDTO.java
@@ -60,6 +60,7 @@ public class ProductSkuRespDTO { @@ -60,6 +60,7 @@ public class ProductSkuRespDTO {
60 */ 60 */
61 private Double volume; 61 private Double volume;
62 62
  63 + // TODO @puhui:这 2 字段,需要改下;firstBrokerageRecord、secondBrokerageRecord;和分佣保持一致;
63 /** 64 /**
64 * 一级分销的佣金,单位:分 65 * 一级分销的佣金,单位:分
65 */ 66 */
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/ErrorCodeConstants.java
@@ -11,7 +11,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode; @@ -11,7 +11,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
11 */ 11 */
12 public interface ErrorCodeConstants { 12 public interface ErrorCodeConstants {
13 13
14 - // ========== Order 模块 1011000000 ========== 14 + // ========== Order 模块 1011000000 ==========
15 ErrorCode ORDER_CREATE_SKU_NOT_FOUND = new ErrorCode(1011000001, "商品 SKU 不存在"); 15 ErrorCode ORDER_CREATE_SKU_NOT_FOUND = new ErrorCode(1011000001, "商品 SKU 不存在");
16 ErrorCode ORDER_CREATE_SPU_NOT_SALE = new ErrorCode(1011000002, "商品 SPU 不可售卖"); 16 ErrorCode ORDER_CREATE_SPU_NOT_SALE = new ErrorCode(1011000002, "商品 SPU 不可售卖");
17 ErrorCode ORDER_CREATE_SKU_STOCK_NOT_ENOUGH = new ErrorCode(1011000004, "商品 SKU 库存不足"); 17 ErrorCode ORDER_CREATE_SKU_STOCK_NOT_ENOUGH = new ErrorCode(1011000004, "商品 SKU 库存不足");
@@ -35,7 +35,7 @@ public interface ErrorCodeConstants { @@ -35,7 +35,7 @@ public interface ErrorCodeConstants {
35 ErrorCode ORDER_DELIVERY_FAIL_DELIVERY_TYPE_NOT_EXPRESS = new ErrorCode(1011000024, "交易订单发货失败,发货类型不是快递"); 35 ErrorCode ORDER_DELIVERY_FAIL_DELIVERY_TYPE_NOT_EXPRESS = new ErrorCode(1011000024, "交易订单发货失败,发货类型不是快递");
36 ErrorCode ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID = new ErrorCode(1011000025, "交易订单取消失败,订单不是【待支付】状态"); 36 ErrorCode ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID = new ErrorCode(1011000025, "交易订单取消失败,订单不是【待支付】状态");
37 37
38 - // ========== After Sale 模块 1011000100 ========== 38 + // ========== After Sale 模块 1011000100 ==========
39 ErrorCode AFTER_SALE_NOT_FOUND = new ErrorCode(1011000100, "售后单不存在"); 39 ErrorCode AFTER_SALE_NOT_FOUND = new ErrorCode(1011000100, "售后单不存在");
40 ErrorCode AFTER_SALE_CREATE_FAIL_REFUND_PRICE_ERROR = new ErrorCode(1011000101, "申请退款金额错误"); 40 ErrorCode AFTER_SALE_CREATE_FAIL_REFUND_PRICE_ERROR = new ErrorCode(1011000101, "申请退款金额错误");
41 ErrorCode AFTER_SALE_CREATE_FAIL_ORDER_STATUS_CANCELED = new ErrorCode(1011000102, "订单已关闭,无法申请售后"); 41 ErrorCode AFTER_SALE_CREATE_FAIL_ORDER_STATUS_CANCELED = new ErrorCode(1011000102, "订单已关闭,无法申请售后");
@@ -50,7 +50,7 @@ public interface ErrorCodeConstants { @@ -50,7 +50,7 @@ public interface ErrorCodeConstants {
50 ErrorCode AFTER_SALE_CANCEL_FAIL_STATUS_NOT_APPLY_OR_AGREE_OR_BUYER_DELIVERY = 50 ErrorCode AFTER_SALE_CANCEL_FAIL_STATUS_NOT_APPLY_OR_AGREE_OR_BUYER_DELIVERY =
51 new ErrorCode(1011000111, "取消售后单失败,售后单状态不是【待审核】或【卖家同意】或【商家待收货】"); 51 new ErrorCode(1011000111, "取消售后单失败,售后单状态不是【待审核】或【卖家同意】或【商家待收货】");
52 52
53 - // ========== Cart 模块 1011002000 ========== 53 + // ========== Cart 模块 1011002000 ==========
54 ErrorCode CARD_ITEM_NOT_FOUND = new ErrorCode(1011002000, "购物车项不存在"); 54 ErrorCode CARD_ITEM_NOT_FOUND = new ErrorCode(1011002000, "购物车项不存在");
55 55
56 // ========== Price 相关 1011003000 ============ 56 // ========== Price 相关 1011003000 ============
@@ -58,7 +58,7 @@ public interface ErrorCodeConstants { @@ -58,7 +58,7 @@ public interface ErrorCodeConstants {
58 ErrorCode PRICE_CALCULATE_DELIVERY_PRICE_USER_ADDR_IS_EMPTY = new ErrorCode(1011003001, "计算快递运费异常,收件人地址编号为空"); 58 ErrorCode PRICE_CALCULATE_DELIVERY_PRICE_USER_ADDR_IS_EMPTY = new ErrorCode(1011003001, "计算快递运费异常,收件人地址编号为空");
59 ErrorCode PRICE_CALCULATE_DELIVERY_PRICE_TEMPLATE_NOT_FOUND = new ErrorCode(1011003002, "计算快递运费异常,找不到对应的运费模板"); 59 ErrorCode PRICE_CALCULATE_DELIVERY_PRICE_TEMPLATE_NOT_FOUND = new ErrorCode(1011003002, "计算快递运费异常,找不到对应的运费模板");
60 60
61 - // ========== 物流 Express 模块 1011004000 ========== 61 + // ========== 物流 Express 模块 1011004000 ==========
62 ErrorCode EXPRESS_NOT_EXISTS = new ErrorCode(1011004000, "快递公司不存在"); 62 ErrorCode EXPRESS_NOT_EXISTS = new ErrorCode(1011004000, "快递公司不存在");
63 ErrorCode EXPRESS_CODE_DUPLICATE = new ErrorCode(1011004001, "已经存在该编码的快递公司"); 63 ErrorCode EXPRESS_CODE_DUPLICATE = new ErrorCode(1011004001, "已经存在该编码的快递公司");
64 ErrorCode EXPRESS_CLIENT_NOT_PROVIDE = new ErrorCode(1011004002, "需要接入快递服务商,比如【快递100】"); 64 ErrorCode EXPRESS_CLIENT_NOT_PROVIDE = new ErrorCode(1011004002, "需要接入快递服务商,比如【快递100】");
@@ -67,15 +67,15 @@ public interface ErrorCodeConstants { @@ -67,15 +67,15 @@ public interface ErrorCodeConstants {
67 ErrorCode EXPRESS_API_QUERY_ERROR = new ErrorCode(1011004101, "快递查询接口异常"); 67 ErrorCode EXPRESS_API_QUERY_ERROR = new ErrorCode(1011004101, "快递查询接口异常");
68 ErrorCode EXPRESS_API_QUERY_FAILED = new ErrorCode(1011004102, "快递查询返回失败,原因:{}"); 68 ErrorCode EXPRESS_API_QUERY_FAILED = new ErrorCode(1011004102, "快递查询返回失败,原因:{}");
69 69
70 - // ========== 物流 Template 模块 1011005000 ========== 70 + // ========== 物流 Template 模块 1011005000 ==========
71 ErrorCode EXPRESS_TEMPLATE_NAME_DUPLICATE = new ErrorCode(1011005000, "已经存在该运费模板名"); 71 ErrorCode EXPRESS_TEMPLATE_NAME_DUPLICATE = new ErrorCode(1011005000, "已经存在该运费模板名");
72 ErrorCode EXPRESS_TEMPLATE_NOT_EXISTS = new ErrorCode(1011005001, "运费模板不存在"); 72 ErrorCode EXPRESS_TEMPLATE_NOT_EXISTS = new ErrorCode(1011005001, "运费模板不存在");
73 73
74 - // ========== 物流 PICK_UP 模块 1011006000 ========== 74 + // ========== 物流 PICK_UP 模块 1011006000 ==========
75 ErrorCode PICK_UP_STORE_NOT_EXISTS = new ErrorCode(1011006000, "自提门店不存在"); 75 ErrorCode PICK_UP_STORE_NOT_EXISTS = new ErrorCode(1011006000, "自提门店不存在");
76 76
77 77
78 - // ========== 分销 分销用户 模块 1011007000 ========== 78 + // ========== 分销用户 模块 1011007000 ==========
79 ErrorCode BROKERAGE_USER_NOT_EXISTS = new ErrorCode(1011007000, "分销用户不存在"); 79 ErrorCode BROKERAGE_USER_NOT_EXISTS = new ErrorCode(1011007000, "分销用户不存在");
80 80
81 } 81 }
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/brokerage/BrokerageBindModeEnum.java
@@ -15,6 +15,7 @@ import java.util.Arrays; @@ -15,6 +15,7 @@ import java.util.Arrays;
15 @Getter 15 @Getter
16 public enum BrokerageBindModeEnum implements IntArrayValuable { 16 public enum BrokerageBindModeEnum implements IntArrayValuable {
17 17
  18 + // TODO @疯狂:要不从 1 开始?
18 /** 19 /**
19 * 只要用户没有推广人,随时都可以绑定分销关系 20 * 只要用户没有推广人,随时都可以绑定分销关系
20 */ 21 */
@@ -23,6 +24,7 @@ public enum BrokerageBindModeEnum implements IntArrayValuable { @@ -23,6 +24,7 @@ public enum BrokerageBindModeEnum implements IntArrayValuable {
23 * 仅新用户注册时才能绑定推广关系 24 * 仅新用户注册时才能绑定推广关系
24 */ 25 */
25 REGISTER(1, "新用户"), 26 REGISTER(1, "新用户"),
  27 + // TODO @疯狂:要加个 2,每次扫码都覆盖
26 ; 28 ;
27 29
28 public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BrokerageBindModeEnum::getMode).toArray(); 30 public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BrokerageBindModeEnum::getMode).toArray();
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/brokerage/BrokerageEnabledConditionEnum.java
@@ -15,6 +15,7 @@ import java.util.Arrays; @@ -15,6 +15,7 @@ import java.util.Arrays;
15 @Getter 15 @Getter
16 public enum BrokerageEnabledConditionEnum implements IntArrayValuable { 16 public enum BrokerageEnabledConditionEnum implements IntArrayValuable {
17 17
  18 + // TODO @疯狂:这个也从 1 开始哇
18 /** 19 /**
19 * 所有用户都可以分销 20 * 所有用户都可以分销
20 */ 21 */
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/brokerage/BrokerageRecordBizTypeEnum.java
@@ -15,6 +15,7 @@ import java.util.Arrays; @@ -15,6 +15,7 @@ import java.util.Arrays;
15 @Getter 15 @Getter
16 public enum BrokerageRecordBizTypeEnum implements IntArrayValuable { 16 public enum BrokerageRecordBizTypeEnum implements IntArrayValuable {
17 17
  18 + // TODO @疯狂:这个也从 1 开始哇
18 ORDER(0, "获得推广佣金", "获得推广佣金 {}", true), 19 ORDER(0, "获得推广佣金", "获得推广佣金 {}", true),
19 WITHDRAW(1, "提现申请", "提现申请扣除佣金 {}", false), 20 WITHDRAW(1, "提现申请", "提现申请扣除佣金 {}", false),
20 ; 21 ;
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/record/vo/TradeBrokerageRecordBaseVO.java
@@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema; @@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
4 import lombok.Data; 4 import lombok.Data;
5 import org.springframework.format.annotation.DateTimeFormat; 5 import org.springframework.format.annotation.DateTimeFormat;
6 6
  7 +import javax.validation.constraints.NotEmpty;
7 import javax.validation.constraints.NotNull; 8 import javax.validation.constraints.NotNull;
8 import java.time.LocalDateTime; 9 import java.time.LocalDateTime;
9 10
@@ -21,7 +22,7 @@ public class TradeBrokerageRecordBaseVO { @@ -21,7 +22,7 @@ public class TradeBrokerageRecordBaseVO {
21 private Long userId; 22 private Long userId;
22 23
23 @Schema(description = "业务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23353") 24 @Schema(description = "业务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23353")
24 - @NotNull(message = "业务编号不能为空") 25 + @NotEmpty(message = "业务编号不能为空")
25 private String bizId; 26 private String bizId;
26 27
27 @Schema(description = "业务类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") 28 @Schema(description = "业务类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@@ -29,7 +30,7 @@ public class TradeBrokerageRecordBaseVO { @@ -29,7 +30,7 @@ public class TradeBrokerageRecordBaseVO {
29 private Integer bizType; 30 private Integer bizType;
30 31
31 @Schema(description = "标题", requiredMode = Schema.RequiredMode.REQUIRED) 32 @Schema(description = "标题", requiredMode = Schema.RequiredMode.REQUIRED)
32 - @NotNull(message = "标题不能为空") 33 + @NotEmpty(message = "标题不能为空")
33 private String title; 34 private String title;
34 35
35 @Schema(description = "金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "28731") 36 @Schema(description = "金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "28731")
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/user/vo/TradeBrokerageUserUpdateBrokerageEnabledReqVO.java
@@ -15,6 +15,8 @@ public class TradeBrokerageUserUpdateBrokerageEnabledReqVO { @@ -15,6 +15,8 @@ public class TradeBrokerageUserUpdateBrokerageEnabledReqVO {
15 @NotNull(message = "用户编号不能为空") 15 @NotNull(message = "用户编号不能为空")
16 private Long id; 16 private Long id;
17 17
  18 + // TODO @疯狂:是不是这个字段,可以改成 enabled
  19 +
18 @Schema(description = "推广资格", requiredMode = Schema.RequiredMode.REQUIRED) 20 @Schema(description = "推广资格", requiredMode = Schema.RequiredMode.REQUIRED)
19 @NotNull(message = "推广资格不能为空") 21 @NotNull(message = "推广资格不能为空")
20 private Boolean brokerageEnabled; 22 private Boolean brokerageEnabled;
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/config/vo/TradeConfigBaseVO.java
@@ -54,6 +54,7 @@ public class TradeConfigBaseVO { @@ -54,6 +54,7 @@ public class TradeConfigBaseVO {
54 @PositiveOrZero(message = "用户提现最低金额不能是负数") 54 @PositiveOrZero(message = "用户提现最低金额不能是负数")
55 private Integer brokerageWithdrawMinPrice; 55 private Integer brokerageWithdrawMinPrice;
56 56
  57 + // TODO @疯狂:要不要做成字典?按道理都可以体现对哇?感觉是全局的配置哈;
57 @Schema(description = "提现银行", requiredMode = Schema.RequiredMode.REQUIRED, example = "[0, 1]") 58 @Schema(description = "提现银行", requiredMode = Schema.RequiredMode.REQUIRED, example = "[0, 1]")
58 @NotEmpty(message = "提现银行不能为空") 59 @NotEmpty(message = "提现银行不能为空")
59 private List<Integer> brokerageBankNames; 60 private List<Integer> brokerageBankNames;
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/brokerage/record/TradeBrokerageRecordConvert.java
@@ -40,7 +40,7 @@ public interface TradeBrokerageRecordConvert { @@ -40,7 +40,7 @@ public interface TradeBrokerageRecordConvert {
40 .setBizId(bizId) 40 .setBizId(bizId)
41 .setPrice(brokerage) 41 .setPrice(brokerage)
42 .setTotalPrice(user.getBrokeragePrice()) 42 .setTotalPrice(user.getBrokeragePrice())
43 - .setTitle(BrokerageRecordBizTypeEnum.ORDER.getTitle()) 43 + .setTitle(BrokerageRecordBizTypeEnum.ORDER.getTitle()) // TODO @疯狂:可能 title 不是很固化,会存在类似:沐晴成功购买《XXX JVM 实战》
44 .setDescription(StrUtil.format(BrokerageRecordBizTypeEnum.ORDER.getDescription(), String.valueOf(brokerage / 100.0))) 44 .setDescription(StrUtil.format(BrokerageRecordBizTypeEnum.ORDER.getDescription(), String.valueOf(brokerage / 100.0)))
45 .setStatus(status) 45 .setStatus(status)
46 .setFrozenDays(brokerageFrozenDays) 46 .setFrozenDays(brokerageFrozenDays)
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/brokerage/record/TradeBrokerageRecordDO.java
@@ -41,14 +41,20 @@ public class TradeBrokerageRecordDO extends BaseDO { @@ -41,14 +41,20 @@ public class TradeBrokerageRecordDO extends BaseDO {
41 /** 41 /**
42 * 业务类型 42 * 业务类型
43 * <p> 43 * <p>
44 - * 枚举 {@link BrokerageRecordBizTypeEnum 对应的类} 44 + * 枚举 {@link BrokerageRecordBizTypeEnum}
45 */ 45 */
46 private Integer bizType; 46 private Integer bizType;
  47 +
47 /** 48 /**
48 * 标题 49 * 标题
49 */ 50 */
50 private String title; 51 private String title;
51 /** 52 /**
  53 + * 说明
  54 + */
  55 + private String description;
  56 +
  57 + /**
52 * 金额 58 * 金额
53 */ 59 */
54 private Integer price; 60 private Integer price;
@@ -56,16 +62,14 @@ public class TradeBrokerageRecordDO extends BaseDO { @@ -56,16 +62,14 @@ public class TradeBrokerageRecordDO extends BaseDO {
56 * 当前总佣金 62 * 当前总佣金
57 */ 63 */
58 private Integer totalPrice; 64 private Integer totalPrice;
59 - /**  
60 - * 说明  
61 - */  
62 - private String description; 65 +
63 /** 66 /**
64 * 状态 67 * 状态
65 * <p> 68 * <p>
66 - * 枚举 {@link BrokerageRecordStatusEnum 对应的类} 69 + * 枚举 {@link BrokerageRecordStatusEnum}
67 */ 70 */
68 private Integer status; 71 private Integer status;
  72 +
69 /** 73 /**
70 * 冻结时间(天) 74 * 冻结时间(天)
71 */ 75 */
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/brokerage/user/TradeBrokerageUserDO.java
@@ -8,6 +8,7 @@ import lombok.*; @@ -8,6 +8,7 @@ import lombok.*;
8 8
9 import java.time.LocalDateTime; 9 import java.time.LocalDateTime;
10 10
  11 +// TODO @疯狂:因为独立了表,是不是可以把字段的 brokerage 去掉了哈?
11 /** 12 /**
12 * 分销用户 DO 13 * 分销用户 DO
13 * 14 *
@@ -28,14 +29,19 @@ public class TradeBrokerageUserDO extends BaseDO { @@ -28,14 +29,19 @@ public class TradeBrokerageUserDO extends BaseDO {
28 */ 29 */
29 @TableId 30 @TableId
30 private Long id; 31 private Long id;
  32 +
  33 + // TODO @疯狂:貌似改成 bindUserId,更明确?
31 /** 34 /**
32 * 推广员编号 35 * 推广员编号
  36 + *
  37 + * 关联 MemberUserDO 的 id 字段
33 */ 38 */
34 private Long brokerageUserId; 39 private Long brokerageUserId;
35 /** 40 /**
36 * 推广员绑定时间 41 * 推广员绑定时间
37 */ 42 */
38 private LocalDateTime brokerageBindTime; 43 private LocalDateTime brokerageBindTime;
  44 +
39 /** 45 /**
40 * 推广资格 46 * 推广资格
41 */ 47 */
@@ -44,6 +50,7 @@ public class TradeBrokerageUserDO extends BaseDO { @@ -44,6 +50,7 @@ public class TradeBrokerageUserDO extends BaseDO {
44 * 成为分销员时间 50 * 成为分销员时间
45 */ 51 */
46 private LocalDateTime brokerageTime; 52 private LocalDateTime brokerageTime;
  53 +
47 /** 54 /**
48 * 可用佣金 55 * 可用佣金
49 */ 56 */
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/record/TradeBrokerageRecordMapper.java
@@ -40,8 +40,10 @@ public interface TradeBrokerageRecordMapper extends BaseMapperX&lt;TradeBrokerageRe @@ -40,8 +40,10 @@ public interface TradeBrokerageRecordMapper extends BaseMapperX&lt;TradeBrokerageRe
40 .eq(TradeBrokerageRecordDO::getStatus, status)); 40 .eq(TradeBrokerageRecordDO::getStatus, status));
41 } 41 }
42 42
  43 + // TODO @疯狂:userId???
43 default TradeBrokerageRecordDO selectByUserIdAndBizTypeAndBizId(Integer bizType, String bizId) { 44 default TradeBrokerageRecordDO selectByUserIdAndBizTypeAndBizId(Integer bizType, String bizId) {
44 return selectOne(TradeBrokerageRecordDO::getBizType, bizType, 45 return selectOne(TradeBrokerageRecordDO::getBizType, bizType,
45 TradeBrokerageRecordDO::getBizId, bizId); 46 TradeBrokerageRecordDO::getBizId, bizId);
46 } 47 }
  48 +
47 } 49 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/job/package-info.java 0 → 100644
  1 +/**
  2 + * 占位文件,无特殊用途
  3 + */
  4 +package cn.iocoder.yudao.module.trade.job;
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/record/TradeBrokerageRecordService.java
@@ -30,6 +30,7 @@ public interface TradeBrokerageRecordService { @@ -30,6 +30,7 @@ public interface TradeBrokerageRecordService {
30 */ 30 */
31 PageResult<TradeBrokerageRecordDO> getBrokerageRecordPage(TradeBrokerageRecordPageReqVO pageReqVO); 31 PageResult<TradeBrokerageRecordDO> getBrokerageRecordPage(TradeBrokerageRecordPageReqVO pageReqVO);
32 32
  33 + // TODO @疯狂:是不是 bizType 得加下?方便未来拓展哈;
33 /** 34 /**
34 * 增加佣金 35 * 增加佣金
35 * 36 *
@@ -38,8 +39,10 @@ public interface TradeBrokerageRecordService { @@ -38,8 +39,10 @@ public interface TradeBrokerageRecordService {
38 */ 39 */
39 void addBrokerage(Long userId, List<BrokerageAddReqBO> list); 40 void addBrokerage(Long userId, List<BrokerageAddReqBO> list);
40 41
  42 + // TODO @疯狂:是不是 bizType 得加下?方便未来拓展哈;
41 /** 43 /**
42 * 取消佣金:将佣金记录,状态修改为已失效 44 * 取消佣金:将佣金记录,状态修改为已失效
  45 + *
43 * @param userId 会员编号 46 * @param userId 会员编号
44 * @param bizId 业务编号 47 * @param bizId 业务编号
45 */ 48 */
@@ -51,4 +54,5 @@ public interface TradeBrokerageRecordService { @@ -51,4 +54,5 @@ public interface TradeBrokerageRecordService {
51 * @return 解冻佣金的数量 54 * @return 解冻佣金的数量
52 */ 55 */
53 int unfreezeRecord(); 56 int unfreezeRecord();
  57 +
54 } 58 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/record/TradeBrokerageRecordServiceImpl.java
@@ -6,15 +6,15 @@ import cn.hutool.core.util.NumberUtil; @@ -6,15 +6,15 @@ import cn.hutool.core.util.NumberUtil;
6 import cn.hutool.core.util.ObjectUtil; 6 import cn.hutool.core.util.ObjectUtil;
7 import cn.hutool.extra.spring.SpringUtil; 7 import cn.hutool.extra.spring.SpringUtil;
8 import cn.iocoder.yudao.framework.common.pojo.PageResult; 8 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  9 +import cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo.TradeBrokerageRecordPageReqVO;
9 import cn.iocoder.yudao.module.trade.convert.brokerage.record.TradeBrokerageRecordConvert; 10 import cn.iocoder.yudao.module.trade.convert.brokerage.record.TradeBrokerageRecordConvert;
10 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.record.TradeBrokerageRecordDO; 11 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.record.TradeBrokerageRecordDO;
11 -import cn.iocoder.yudao.module.trade.service.brokerage.record.bo.BrokerageAddReqBO;  
12 -import cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo.TradeBrokerageRecordPageReqVO;  
13 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.user.TradeBrokerageUserDO; 12 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.user.TradeBrokerageUserDO;
14 import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO; 13 import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO;
15 import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.record.TradeBrokerageRecordMapper; 14 import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.record.TradeBrokerageRecordMapper;
16 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; 15 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
17 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum; 16 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum;
  17 +import cn.iocoder.yudao.module.trade.service.brokerage.record.bo.BrokerageAddReqBO;
18 import cn.iocoder.yudao.module.trade.service.brokerage.user.TradeBrokerageUserService; 18 import cn.iocoder.yudao.module.trade.service.brokerage.user.TradeBrokerageUserService;
19 import cn.iocoder.yudao.module.trade.service.config.TradeConfigService; 19 import cn.iocoder.yudao.module.trade.service.config.TradeConfigService;
20 import lombok.extern.slf4j.Slf4j; 20 import lombok.extern.slf4j.Slf4j;
@@ -56,11 +56,13 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ @@ -56,11 +56,13 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
56 return tradeBrokerageRecordMapper.selectPage(pageReqVO); 56 return tradeBrokerageRecordMapper.selectPage(pageReqVO);
57 } 57 }
58 58
  59 + // TODO @疯狂:buyerId 要不要统一改成 userId 哈;
59 @Override 60 @Override
60 @Transactional(rollbackFor = Exception.class) 61 @Transactional(rollbackFor = Exception.class)
61 public void addBrokerage(Long buyerId, List<BrokerageAddReqBO> list) { 62 public void addBrokerage(Long buyerId, List<BrokerageAddReqBO> list) {
62 TradeConfigDO memberConfig = tradeConfigService.getTradeConfig(); 63 TradeConfigDO memberConfig = tradeConfigService.getTradeConfig();
63 // 0 未启用分销功能 64 // 0 未启用分销功能
  65 + // TODO @疯狂:BooleanUtil.isFalse();逻辑里,尽量不做 !取反,这样要多思考一层;
64 if (memberConfig == null || !BooleanUtil.isTrue(memberConfig.getBrokerageEnabled())) { 66 if (memberConfig == null || !BooleanUtil.isTrue(memberConfig.getBrokerageEnabled())) {
65 log.warn("[addBrokerage][增加佣金失败:brokerageEnabled 未配置,buyerId({})", buyerId); 67 log.warn("[addBrokerage][增加佣金失败:brokerageEnabled 未配置,buyerId({})", buyerId);
66 return; 68 return;
@@ -72,11 +74,11 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ @@ -72,11 +74,11 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
72 return; 74 return;
73 } 75 }
74 76
75 - // 1.2 计算一级分佣 77 + // 1.2 计算一级分佣 // TODO 疯狂:类似 1.1 和 1.2 的空行,可以去掉;一般在代码里的空行,是为了逻辑分块;但是分块如果太多,就会导致代码里都是空行哈;
76 addBrokerage(firstUser, list, memberConfig.getBrokerageFrozenDays(), memberConfig.getBrokerageFirstPercent(), BrokerageAddReqBO::getSkuFirstBrokeragePrice); 78 addBrokerage(firstUser, list, memberConfig.getBrokerageFrozenDays(), memberConfig.getBrokerageFirstPercent(), BrokerageAddReqBO::getSkuFirstBrokeragePrice);
77 79
78 -  
79 // 2.1 获得二级推广员 80 // 2.1 获得二级推广员
  81 + // TODO @疯狂:这里可以加个 firstUser.getBrokerageUserId() 为空的判断 return
80 TradeBrokerageUserDO secondUser = tradeBrokerageUserService.getBrokerageUser(firstUser.getBrokerageUserId()); 82 TradeBrokerageUserDO secondUser = tradeBrokerageUserService.getBrokerageUser(firstUser.getBrokerageUserId());
81 if (secondUser == null || !BooleanUtil.isTrue(secondUser.getBrokerageEnabled())) { 83 if (secondUser == null || !BooleanUtil.isTrue(secondUser.getBrokerageEnabled())) {
82 return; 84 return;
@@ -95,6 +97,7 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ @@ -95,6 +97,7 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
95 return; 97 return;
96 } 98 }
97 99
  100 + // 1. 更新佣金记录为已失效
98 TradeBrokerageRecordDO updateObj = new TradeBrokerageRecordDO().setStatus(BrokerageRecordStatusEnum.CANCEL.getStatus()); 101 TradeBrokerageRecordDO updateObj = new TradeBrokerageRecordDO().setStatus(BrokerageRecordStatusEnum.CANCEL.getStatus());
99 int updateRows = tradeBrokerageRecordMapper.updateByIdAndStatus(record.getId(), record.getStatus(), updateObj); 102 int updateRows = tradeBrokerageRecordMapper.updateByIdAndStatus(record.getId(), record.getStatus(), updateObj);
100 if (updateRows == 0) { 103 if (updateRows == 0) {
@@ -102,6 +105,7 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ @@ -102,6 +105,7 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
102 return; 105 return;
103 } 106 }
104 107
  108 + // 2. 更新用户的佣金
105 if (BrokerageRecordStatusEnum.WAIT_SETTLEMENT.getStatus().equals(record.getStatus())) { 109 if (BrokerageRecordStatusEnum.WAIT_SETTLEMENT.getStatus().equals(record.getStatus())) {
106 tradeBrokerageUserService.updateUserFrozenBrokeragePrice(userId, -record.getPrice()); 110 tradeBrokerageUserService.updateUserFrozenBrokeragePrice(userId, -record.getPrice());
107 } else if (BrokerageRecordStatusEnum.SETTLEMENT.getStatus().equals(record.getStatus())) { 111 } else if (BrokerageRecordStatusEnum.SETTLEMENT.getStatus().equals(record.getStatus())) {
@@ -109,6 +113,7 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ @@ -109,6 +113,7 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
109 } 113 }
110 } 114 }
111 115
  116 + // TODO @疯狂:是不是 calculateBrokeragePrice
112 /** 117 /**
113 * 计算佣金 118 * 计算佣金
114 * 119 *
@@ -122,12 +127,11 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ @@ -122,12 +127,11 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
122 if (skuBrokeragePrice != null && skuBrokeragePrice > 0) { 127 if (skuBrokeragePrice != null && skuBrokeragePrice > 0) {
123 return ObjectUtil.defaultIfNull(skuBrokeragePrice, 0); 128 return ObjectUtil.defaultIfNull(skuBrokeragePrice, 0);
124 } 129 }
125 -  
126 // 2. 根据订单支付金额计算佣金 130 // 2. 根据订单支付金额计算佣金
  131 + // TODO @疯狂:要不要把 MoneyUtils 抽到 common 里,然后这里也使用这个类的方法;
127 if (payPrice != null && payPrice > 0 && percent != null && percent > 0) { 132 if (payPrice != null && payPrice > 0 && percent != null && percent > 0) {
128 return NumberUtil.div(NumberUtil.mul(payPrice, percent), 100, 0, RoundingMode.DOWN).intValue(); 133 return NumberUtil.div(NumberUtil.mul(payPrice, percent), 100, 0, RoundingMode.DOWN).intValue();
129 } 134 }
130 -  
131 return 0; 135 return 0;
132 } 136 }
133 137
@@ -142,37 +146,35 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ @@ -142,37 +146,35 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
142 */ 146 */
143 private void addBrokerage(TradeBrokerageUserDO user, List<BrokerageAddReqBO> list, Integer brokerageFrozenDays, 147 private void addBrokerage(TradeBrokerageUserDO user, List<BrokerageAddReqBO> list, Integer brokerageFrozenDays,
144 Integer brokeragePercent, Function<BrokerageAddReqBO, Integer> skuBrokeragePriceFun) { 148 Integer brokeragePercent, Function<BrokerageAddReqBO, Integer> skuBrokeragePriceFun) {
145 - // 处理冻结时间 149 + // 1.1 处理冻结时间
  150 + // TODO @疯狂:是不是 brokerageFrozenDays != null && brokerageFrozenDays > 0 ?然后计算;更简洁一点;
146 brokerageFrozenDays = ObjectUtil.defaultIfNull(brokerageFrozenDays, 0); 151 brokerageFrozenDays = ObjectUtil.defaultIfNull(brokerageFrozenDays, 0);
147 LocalDateTime unfreezeTime = null; 152 LocalDateTime unfreezeTime = null;
148 if (brokerageFrozenDays > 0) { 153 if (brokerageFrozenDays > 0) {
149 unfreezeTime = LocalDateTime.now().plusDays(brokerageFrozenDays); 154 unfreezeTime = LocalDateTime.now().plusDays(brokerageFrozenDays);
150 } 155 }
151 -  
152 - // 计算分佣 156 + // 1.2 计算分佣
153 int totalBrokerage = 0; 157 int totalBrokerage = 0;
154 List<TradeBrokerageRecordDO> records = new ArrayList<>(); 158 List<TradeBrokerageRecordDO> records = new ArrayList<>();
155 - for (BrokerageAddReqBO dto : list) {  
156 - int brokeragePerItem = calculateBrokerage(dto.getPayPrice(), brokeragePercent, skuBrokeragePriceFun.apply(dto)); 159 + for (BrokerageAddReqBO item : list) {
  160 + int brokeragePerItem = calculateBrokerage(item.getPayPrice(), brokeragePercent, skuBrokeragePriceFun.apply(item));
  161 + // TODO @疯狂:其实可以 brokeragePerItem <= 0 ,continue;这样 { 层级更少;代码更简洁;}
157 if (brokeragePerItem > 0) { 162 if (brokeragePerItem > 0) {
158 - int brokerage = brokeragePerItem * dto.getCount();  
159 - records.add(TradeBrokerageRecordConvert.INSTANCE.convert(user, dto.getBizId(), brokerageFrozenDays, brokerage, unfreezeTime)); 163 + int brokerage = brokeragePerItem * item.getCount();
  164 + records.add(TradeBrokerageRecordConvert.INSTANCE.convert(user, item.getBizId(), brokerageFrozenDays, brokerage, unfreezeTime));
160 totalBrokerage += brokerage; 165 totalBrokerage += brokerage;
161 } 166 }
162 } 167 }
163 -  
164 - if (records.isEmpty()) { 168 + if (CollUtil.isEmpty(records)) {
165 return; 169 return;
166 } 170 }
167 -  
168 - // 保存佣金记录 171 + // 1.3 保存佣金记录
169 tradeBrokerageRecordMapper.insertBatch(records); 172 tradeBrokerageRecordMapper.insertBatch(records);
170 173
171 - if (brokerageFrozenDays > 0) {  
172 - // 更新用户冻结佣金 174 + // 2. 更新用户佣金
  175 + if (brokerageFrozenDays > 0) { // 更新用户冻结佣金
173 tradeBrokerageUserService.updateUserFrozenBrokeragePrice(user.getId(), totalBrokerage); 176 tradeBrokerageUserService.updateUserFrozenBrokeragePrice(user.getId(), totalBrokerage);
174 - } else {  
175 - // 更新用户可用佣金 177 + } else { // 更新用户可用佣金
176 tradeBrokerageUserService.updateUserBrokeragePrice(user.getId(), totalBrokerage); 178 tradeBrokerageUserService.updateUserBrokeragePrice(user.getId(), totalBrokerage);
177 } 179 }
178 } 180 }
@@ -190,8 +192,8 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ @@ -190,8 +192,8 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
190 int count = 0; 192 int count = 0;
191 for (TradeBrokerageRecordDO record : records) { 193 for (TradeBrokerageRecordDO record : records) {
192 try { 194 try {
193 - boolean successful = getSelf().unfreezeRecord(record);  
194 - if (successful) { 195 + boolean success = getSelf().unfreezeRecord(record);
  196 + if (success) {
195 count++; 197 count++;
196 } 198 }
197 } catch (Exception e) { 199 } catch (Exception e) {
@@ -215,7 +217,6 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ @@ -215,7 +217,6 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
215 217
216 // 更新用户冻结佣金 218 // 更新用户冻结佣金
217 tradeBrokerageUserService.updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(record.getUserId(), -record.getPrice()); 219 tradeBrokerageUserService.updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(record.getUserId(), -record.getPrice());
218 -  
219 log.info("[unfreezeRecord][record({}) 更新为已结算成功]", record.getId()); 220 log.info("[unfreezeRecord][record({}) 更新为已结算成功]", record.getId());
220 return true; 221 return true;
221 } 222 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/record/bo/BrokerageAddReqBO.java
@@ -4,22 +4,29 @@ import lombok.AllArgsConstructor; @@ -4,22 +4,29 @@ import lombok.AllArgsConstructor;
4 import lombok.Data; 4 import lombok.Data;
5 import lombok.NoArgsConstructor; 5 import lombok.NoArgsConstructor;
6 6
  7 +// TODO @疯狂:要不要 service 还是拍平;就是都放在 brokerage 包下,然后 bo 里面,稍微分分;
7 /** 8 /**
8 * 佣金 增加 Request BO 9 * 佣金 增加 Request BO
  10 + *
9 * @author owen 11 * @author owen
10 */ 12 */
11 @Data 13 @Data
12 @NoArgsConstructor 14 @NoArgsConstructor
13 @AllArgsConstructor 15 @AllArgsConstructor
14 public class BrokerageAddReqBO { 16 public class BrokerageAddReqBO {
  17 +
  18 + // TODO @疯狂:bo 的话,也可以考虑加下 @Validated 注解,校验下参数;防御性下哈,虽然不一定用的到
  19 +
15 /** 20 /**
16 * 业务ID 21 * 业务ID
17 */ 22 */
18 private String bizId; 23 private String bizId;
  24 + // TODO @疯狂:不需要 payPrice 和 count,计算成 price 就好啦;
19 /** 25 /**
20 * 商品支付价格 26 * 商品支付价格
21 */ 27 */
22 private Integer payPrice; 28 private Integer payPrice;
  29 + // TODO @疯狂:可以去掉 sku 哈,更抽象一点;
23 /** 30 /**
24 * SKU 一级佣金 31 * SKU 一级佣金
25 */ 32 */
@@ -32,4 +39,5 @@ public class BrokerageAddReqBO { @@ -32,4 +39,5 @@ public class BrokerageAddReqBO {
32 * 购买数量 39 * 购买数量
33 */ 40 */
34 private Integer count; 41 private Integer count;
  42 +
35 } 43 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/user/TradeBrokerageUserService.java
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.user.TradeBrokerag @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.user.TradeBrokerag
7 import java.util.Collection; 7 import java.util.Collection;
8 import java.util.List; 8 import java.util.List;
9 9
  10 +// TODO @疯狂:要不去掉 Trade 前缀哈;交易这块,我准备除了 tradeorder 保持下,类似 aftersale,都要取消前缀了;tradeorder 保持的原因,是避免 payorder 和它重复
10 /** 11 /**
11 * 分销用户 Service 接口 12 * 分销用户 Service 接口
12 * 13 *
@@ -70,6 +71,7 @@ public interface TradeBrokerageUserService { @@ -70,6 +71,7 @@ public interface TradeBrokerageUserService {
70 */ 71 */
71 void updateUserBrokeragePrice(Long id, int brokeragePrice); 72 void updateUserBrokeragePrice(Long id, int brokeragePrice);
72 73
  74 + // TODO @疯狂:int 类型一般不用哈;尽量都用封装类型;不差这点内存哈;
73 /** 75 /**
74 * 更新用户冻结佣金 76 * 更新用户冻结佣金
75 * 77 *
@@ -85,4 +87,5 @@ public interface TradeBrokerageUserService { @@ -85,4 +87,5 @@ public interface TradeBrokerageUserService {
85 * @param frozenBrokeragePrice 减少冻结佣金(负数) 87 * @param frozenBrokeragePrice 减少冻结佣金(负数)
86 */ 88 */
87 void updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(Long id, int frozenBrokeragePrice); 89 void updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(Long id, int frozenBrokeragePrice);
  90 +
88 } 91 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/user/TradeBrokerageUserServiceImpl.java
@@ -30,12 +30,6 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService @@ -30,12 +30,6 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService
30 @Resource 30 @Resource
31 private TradeBrokerageUserMapper brokerageUserMapper; 31 private TradeBrokerageUserMapper brokerageUserMapper;
32 32
33 - private void validateBrokerageUserExists(Long id) {  
34 - if (brokerageUserMapper.selectById(id) == null) {  
35 - throw exception(BROKERAGE_USER_NOT_EXISTS);  
36 - }  
37 - }  
38 -  
39 @Override 33 @Override
40 public TradeBrokerageUserDO getBrokerageUser(Long id) { 34 public TradeBrokerageUserDO getBrokerageUser(Long id) {
41 return brokerageUserMapper.selectById(id); 35 return brokerageUserMapper.selectById(id);
@@ -55,15 +49,23 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService @@ -55,15 +49,23 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService
55 public void updateBrokerageUserId(Long id, Long brokerageUserId) { 49 public void updateBrokerageUserId(Long id, Long brokerageUserId) {
56 // 校验存在 50 // 校验存在
57 validateBrokerageUserExists(id); 51 validateBrokerageUserExists(id);
58 - 52 + // TODO @疯狂:貌似没实现完
59 } 53 }
60 54
61 @Override 55 @Override
62 public void updateBrokerageEnabled(Long id, Boolean brokerageEnabled) { 56 public void updateBrokerageEnabled(Long id, Boolean brokerageEnabled) {
63 // 校验存在 57 // 校验存在
64 validateBrokerageUserExists(id); 58 validateBrokerageUserExists(id);
  59 + // TODO @疯狂:貌似没实现完
  60 + }
  61 +
  62 + private void validateBrokerageUserExists(Long id) {
  63 + if (brokerageUserMapper.selectById(id) == null) {
  64 + throw exception(BROKERAGE_USER_NOT_EXISTS);
  65 + }
65 } 66 }
66 67
  68 + // TODO @疯狂:getBindBrokerageUser 会不会好点,因为统一使用 Bind 替代了 Invite
67 @Override 69 @Override
68 public TradeBrokerageUserDO getInviteBrokerageUser(Long id) { 70 public TradeBrokerageUserDO getInviteBrokerageUser(Long id) {
69 return Optional.ofNullable(id) 71 return Optional.ofNullable(id)
@@ -73,6 +75,7 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService @@ -73,6 +75,7 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService
73 .orElse(null); 75 .orElse(null);
74 } 76 }
75 77
  78 + // TODO @疯狂:单个更新,不用事务哈;
76 @Override 79 @Override
77 @Transactional(rollbackFor = Exception.class) 80 @Transactional(rollbackFor = Exception.class)
78 public void updateUserBrokeragePrice(Long id, int brokeragePrice) { 81 public void updateUserBrokeragePrice(Long id, int brokeragePrice) {
@@ -83,6 +86,7 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService @@ -83,6 +86,7 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService
83 } 86 }
84 } 87 }
85 88
  89 + // TODO @疯狂:单个更新,不用事务哈;
86 @Override 90 @Override
87 @Transactional(rollbackFor = Exception.class) 91 @Transactional(rollbackFor = Exception.class)
88 public void updateUserFrozenBrokeragePrice(Long id, int frozenBrokeragePrice) { 92 public void updateUserFrozenBrokeragePrice(Long id, int frozenBrokeragePrice) {
@@ -93,12 +97,14 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService @@ -93,12 +97,14 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService
93 } 97 }
94 } 98 }
95 99
  100 + // TODO @疯狂:单个更新,不用事务哈;
96 @Override 101 @Override
97 @Transactional(rollbackFor = Exception.class) 102 @Transactional(rollbackFor = Exception.class)
98 public void updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(Long id, int frozenBrokeragePrice) { 103 public void updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(Long id, int frozenBrokeragePrice) {
99 Assert.isTrue(frozenBrokeragePrice < 0); 104 Assert.isTrue(frozenBrokeragePrice < 0);
100 int updateRows = brokerageUserMapper.updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(id, frozenBrokeragePrice); 105 int updateRows = brokerageUserMapper.updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(id, frozenBrokeragePrice);
101 if (updateRows == 0) { 106 if (updateRows == 0) {
  107 + // TODO @疯狂:挪到 trade 这变的错误码哈;
102 throw exception(MEMBER_FROZEN_BROKERAGE_PRICE_NOT_ENOUGH); 108 throw exception(MEMBER_FROZEN_BROKERAGE_PRICE_NOT_ENOUGH);
103 } 109 }
104 } 110 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/config/TradeConfigService.java
@@ -12,7 +12,6 @@ import javax.validation.Valid; @@ -12,7 +12,6 @@ import javax.validation.Valid;
12 */ 12 */
13 public interface TradeConfigService { 13 public interface TradeConfigService {
14 14
15 -  
16 /** 15 /**
17 * 更新交易中心配置 16 * 更新交易中心配置
18 * 17 *
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/record/TradeBrokerageRecordServiceImplTest.java
@@ -25,6 +25,7 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomIntege @@ -25,6 +25,7 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomIntege
25 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; 25 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
26 import static org.junit.jupiter.api.Assertions.assertEquals; 26 import static org.junit.jupiter.api.Assertions.assertEquals;
27 27
  28 +// TODO @芋艿:单测后续看看
28 /** 29 /**
29 * {@link TradeBrokerageRecordServiceImpl} 的单元测试类 30 * {@link TradeBrokerageRecordServiceImpl} 的单元测试类
30 * 31 *
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/user/TradeBrokerageUserServiceImplTest.java
@@ -17,6 +17,7 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEq @@ -17,6 +17,7 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEq
17 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; 17 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
18 import static org.junit.jupiter.api.Assertions.assertEquals; 18 import static org.junit.jupiter.api.Assertions.assertEquals;
19 19
  20 +// TODO @芋艿:单测后续看看
20 /** 21 /**
21 * {@link TradeBrokerageUserServiceImpl} 的单元测试类 22 * {@link TradeBrokerageUserServiceImpl} 的单元测试类
22 * 23 *
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java
@@ -9,7 +9,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode; @@ -9,7 +9,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
9 */ 9 */
10 public interface ErrorCodeConstants { 10 public interface ErrorCodeConstants {
11 11
12 - // ========== 用户相关 1004001000============ 12 + // ========== 用户相关 1004001000============
13 ErrorCode USER_NOT_EXISTS = new ErrorCode(1004001000, "用户不存在"); 13 ErrorCode USER_NOT_EXISTS = new ErrorCode(1004001000, "用户不存在");
14 ErrorCode USER_MOBILE_NOT_EXISTS = new ErrorCode(1004001001, "手机号未注册用户"); 14 ErrorCode USER_MOBILE_NOT_EXISTS = new ErrorCode(1004001001, "手机号未注册用户");
15 ErrorCode USER_MOBILE_USED = new ErrorCode(1004001002, "修改手机失败,该手机号({})已经被使用"); 15 ErrorCode USER_MOBILE_USED = new ErrorCode(1004001002, "修改手机失败,该手机号({})已经被使用");
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java
@@ -136,6 +136,7 @@ public class MemberUserDO extends TenantBaseDO { @@ -136,6 +136,7 @@ public class MemberUserDO extends TenantBaseDO {
136 */ 136 */
137 private Long groupId; 137 private Long groupId;
138 138
  139 + // TODO @疯狂:看看要不要删除掉哈
139 // ========== 分销相关 ========== 140 // ========== 分销相关 ==========
140 141
141 /** 142 /**
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java
@@ -61,4 +61,5 @@ public interface MemberUserMapper extends BaseMapperX&lt;MemberUserDO&gt; { @@ -61,4 +61,5 @@ public interface MemberUserMapper extends BaseMapperX&lt;MemberUserDO&gt; {
61 return selectCount(new LambdaQueryWrapperX<MemberUserDO>() 61 return selectCount(new LambdaQueryWrapperX<MemberUserDO>()
62 .apply("FIND_IN_SET({0}, tag_ids)", tagId)); 62 .apply("FIND_IN_SET({0}, tag_ids)", tagId));
63 } 63 }
  64 +
64 } 65 }