Commit 1cc2dfc963252e339b524b4a8078e217c86c4b9c
1 parent
166b1b31
trade: 分销Review代码修改
Showing
21 changed files
with
126 additions
and
141 deletions
sql/mysql/brokerage.sql
| ... | ... | @@ -3,8 +3,8 @@ create table trade_config |
| 3 | 3 | ( |
| 4 | 4 | id bigint auto_increment comment '憓蜓' primary key, |
| 5 | 5 | brokerage_enabled bit default 1 not null comment '膛', |
| 6 | - brokerage_enabled_condition tinyint default 0 not null comment '膛璅∪0-鈭箔犖 1-', | |
| 7 | - brokerage_bind_mode tinyint default 0 not null comment '蝟餌芋撘: 0-瘝⊥撟蹂犖嚗1-', | |
| 6 | + brokerage_enabled_condition tinyint default 0 not null comment '膛璅∪1-鈭箔犖 2-', | |
| 7 | + brokerage_bind_mode tinyint default 0 not null comment '蝟餌芋撘: 1-瘝⊥撟蹂犖嚗2-, 3-', | |
| 8 | 8 | brokerage_post_urls varchar(2000) default '' null comment '瘚瑟蝏', |
| 9 | 9 | brokerage_first_percent int default 0 not null comment '銝蝥扯膛瘥', |
| 10 | 10 | brokerage_second_percent int default 0 not null comment '鈭漣餈膛瘥', |
| ... | ... | @@ -104,14 +104,15 @@ create index idx_audit_status on trade_brokerage_withdraw (status) comment ' |
| 104 | 104 | insert into system_dict_type(type, name) |
| 105 | 105 | values ('brokerage_enabled_condition', '膛璅∪'); |
| 106 | 106 | insert into system_dict_data(dict_type, label, value, sort, remark) |
| 107 | -values ('brokerage_enabled_condition', '鈭箔犖', 0, 0, '隞亙'), | |
| 108 | - ('brokerage_enabled_condition', '', 1, 1, '隞霈曄蔭撟踹'); | |
| 107 | +values ('brokerage_enabled_condition', '鈭箔犖', 1, 1, '隞亙'), | |
| 108 | + ('brokerage_enabled_condition', '', 2, 2, '隞霈曄蔭撟踹'); | |
| 109 | 109 | |
| 110 | 110 | insert into system_dict_type(type, name) |
| 111 | 111 | values ('brokerage_bind_mode', '蝟餌芋撘'); |
| 112 | 112 | insert into system_dict_data(dict_type, label, value, sort, remark) |
| 113 | -values ('brokerage_bind_mode', '瘝⊥撟蹂犖', 0, 0, '閬瘝⊥撟蹂犖嚗隞亦撟踹蝟'), | |
| 114 | - ('brokerage_bind_mode', '', 1, 1, '隞瘜典蝏撟踹蝟'); | |
| 113 | +values ('brokerage_bind_mode', '瘝⊥撟蹂犖', 1, 1, '閬瘝⊥撟蹂犖嚗隞亦撟踹蝟'), | |
| 114 | + ('brokerage_bind_mode', '', 2, 2, '隞瘜典蝏撟踹蝟'), | |
| 115 | + ('brokerage_bind_mode', '', 3, 3, '憒撌脩撟蹂犖嚗撟蹂犖隡◤'); | |
| 115 | 116 | |
| 116 | 117 | insert into system_dict_type(type, name) |
| 117 | 118 | values ('brokerage_withdraw_type', '雿蝐餃'); |
| ... | ... | @@ -124,8 +125,8 @@ values ('brokerage_withdraw_type', '', 1, 1), |
| 124 | 125 | insert into system_dict_type(type, name) |
| 125 | 126 | values ('brokerage_record_biz_type', '雿扇敶蝐餃'); |
| 126 | 127 | insert into system_dict_data(dict_type, label, value, sort) |
| 127 | -values ('brokerage_record_biz_type', '霈W膛', 0, 0), | |
| 128 | - ('brokerage_record_biz_type', '霂瑟', 1, 1); | |
| 128 | +values ('brokerage_record_biz_type', '霈W膛', 1, 1), | |
| 129 | + ('brokerage_record_biz_type', '霂瑟', 2, 2); | |
| 129 | 130 | |
| 130 | 131 | insert into system_dict_type(type, name) |
| 131 | 132 | values ('brokerage_record_status', '雿扇敶'); | ... | ... |
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/ErrorCodeConstants.java
| ... | ... | @@ -77,5 +77,6 @@ public interface ErrorCodeConstants { |
| 77 | 77 | |
| 78 | 78 | // ========== 分销用户 模块 1011007000 ========== |
| 79 | 79 | ErrorCode BROKERAGE_USER_NOT_EXISTS = new ErrorCode(1011007000, "分销用户不存在"); |
| 80 | + ErrorCode USER_FROZEN_BROKERAGE_PRICE_NOT_ENOUGH = new ErrorCode(1011007001, "用户冻结佣金({})数量不足"); | |
| 80 | 81 | |
| 81 | 82 | } | ... | ... |
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/brokerage/BrokerageBindModeEnum.java
| ... | ... | @@ -15,16 +15,18 @@ import java.util.Arrays; |
| 15 | 15 | @Getter |
| 16 | 16 | public enum BrokerageBindModeEnum implements IntArrayValuable { |
| 17 | 17 | |
| 18 | - // TODO @疯狂:要不从 1 开始? | |
| 19 | 18 | /** |
| 20 | 19 | * 只要用户没有推广人,随时都可以绑定分销关系 |
| 21 | 20 | */ |
| 22 | - ANYTIME(0, "没有推广人"), | |
| 21 | + ANYTIME(1, "没有推广人"), | |
| 23 | 22 | /** |
| 24 | 23 | * 仅新用户注册时才能绑定推广关系 |
| 25 | 24 | */ |
| 26 | - REGISTER(1, "新用户"), | |
| 27 | - // TODO @疯狂:要加个 2,每次扫码都覆盖 | |
| 25 | + REGISTER(2, "新用户"), | |
| 26 | + /** | |
| 27 | + * 每次扫码都覆盖 | |
| 28 | + */ | |
| 29 | + OVERRIDE(3, "扫码覆盖"), | |
| 28 | 30 | ; |
| 29 | 31 | |
| 30 | 32 | 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,15 +15,14 @@ import java.util.Arrays; |
| 15 | 15 | @Getter |
| 16 | 16 | public enum BrokerageEnabledConditionEnum implements IntArrayValuable { |
| 17 | 17 | |
| 18 | - // TODO @疯狂:这个也从 1 开始哇 | |
| 19 | 18 | /** |
| 20 | 19 | * 所有用户都可以分销 |
| 21 | 20 | */ |
| 22 | - ALL(0, "人人分销"), | |
| 21 | + ALL(1, "人人分销"), | |
| 23 | 22 | /** |
| 24 | 23 | * 仅可后台手动设置推广员 |
| 25 | 24 | */ |
| 26 | - ADMIN(1, "指定分销"), | |
| 25 | + ADMIN(2, "指定分销"), | |
| 27 | 26 | ; |
| 28 | 27 | |
| 29 | 28 | public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BrokerageEnabledConditionEnum::getCondition).toArray(); | ... | ... |
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/brokerage/BrokerageRecordBizTypeEnum.java
| ... | ... | @@ -15,9 +15,8 @@ import java.util.Arrays; |
| 15 | 15 | @Getter |
| 16 | 16 | public enum BrokerageRecordBizTypeEnum implements IntArrayValuable { |
| 17 | 17 | |
| 18 | - // TODO @疯狂:这个也从 1 开始哇 | |
| 19 | - ORDER(0, "获得推广佣金", "获得推广佣金 {}", true), | |
| 20 | - WITHDRAW(1, "提现申请", "提现申请扣除佣金 {}", false), | |
| 18 | + ORDER(1, "获得推广佣金", "获得推广佣金 {}", true), | |
| 19 | + WITHDRAW(2, "提现申请", "提现申请扣除佣金 {}", false), | |
| 21 | 20 | ; |
| 22 | 21 | |
| 23 | 22 | public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BrokerageRecordBizTypeEnum::getType).toArray(); | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/user/TradeBrokerageUserController.java
| ... | ... | @@ -10,7 +10,7 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.user.TradeBrokerag |
| 10 | 10 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; |
| 11 | 11 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum; |
| 12 | 12 | import cn.iocoder.yudao.module.trade.service.brokerage.record.TradeBrokerageRecordService; |
| 13 | -import cn.iocoder.yudao.module.trade.service.brokerage.record.bo.UserBrokerageSummaryBO; | |
| 13 | +import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | |
| 14 | 14 | import cn.iocoder.yudao.module.trade.service.brokerage.user.TradeBrokerageUserService; |
| 15 | 15 | import io.swagger.v3.oas.annotations.Operation; |
| 16 | 16 | import io.swagger.v3.oas.annotations.Parameter; | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/config/vo/TradeConfigBaseVO.java
| ... | ... | @@ -54,7 +54,6 @@ public class TradeConfigBaseVO { |
| 54 | 54 | @PositiveOrZero(message = "用户提现最低金额不能是负数") |
| 55 | 55 | private Integer brokerageWithdrawMinPrice; |
| 56 | 56 | |
| 57 | - // TODO @疯狂:要不要做成字典?按道理都可以体现对哇?感觉是全局的配置哈; | |
| 58 | 57 | @Schema(description = "提现银行", requiredMode = Schema.RequiredMode.REQUIRED, example = "[0, 1]") |
| 59 | 58 | @NotEmpty(message = "提现银行不能为空") |
| 60 | 59 | private List<Integer> brokerageBankNames; | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/brokerage/record/TradeBrokerageRecordConvert.java
| 1 | 1 | package cn.iocoder.yudao.module.trade.convert.brokerage.record; |
| 2 | 2 | |
| 3 | +import cn.hutool.core.util.ObjectUtil; | |
| 3 | 4 | import cn.hutool.core.util.StrUtil; |
| 4 | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | 6 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo.TradeBrokerageRecordRespVO; |
| ... | ... | @@ -29,19 +30,22 @@ public interface TradeBrokerageRecordConvert { |
| 29 | 30 | |
| 30 | 31 | PageResult<TradeBrokerageRecordRespVO> convertPage(PageResult<TradeBrokerageRecordDO> page); |
| 31 | 32 | |
| 32 | - default TradeBrokerageRecordDO convert(TradeBrokerageUserDO user, String bizId, int brokerageFrozenDays, int brokerage, LocalDateTime unfreezeTime) { | |
| 33 | + default TradeBrokerageRecordDO convert(TradeBrokerageUserDO user, BrokerageRecordBizTypeEnum bizType, String bizId, | |
| 34 | + Integer brokerageFrozenDays, int brokerage, LocalDateTime unfreezeTime, | |
| 35 | + String title) { | |
| 36 | + brokerageFrozenDays = ObjectUtil.defaultIfNull(brokerageFrozenDays, 0); | |
| 33 | 37 | // 不冻结时,佣金直接就是结算状态 |
| 34 | 38 | Integer status = brokerageFrozenDays > 0 |
| 35 | 39 | ? BrokerageRecordStatusEnum.WAIT_SETTLEMENT.getStatus() |
| 36 | 40 | : BrokerageRecordStatusEnum.SETTLEMENT.getStatus(); |
| 37 | 41 | return new TradeBrokerageRecordDO() |
| 38 | 42 | .setUserId(user.getId()) |
| 39 | - .setBizType(BrokerageRecordBizTypeEnum.ORDER.getType()) | |
| 43 | + .setBizType(bizType.getType()) | |
| 40 | 44 | .setBizId(bizId) |
| 41 | 45 | .setPrice(brokerage) |
| 42 | 46 | .setTotalPrice(user.getBrokeragePrice()) |
| 43 | - .setTitle(BrokerageRecordBizTypeEnum.ORDER.getTitle()) // TODO @疯狂:可能 title 不是很固化,会存在类似:沐晴成功购买《XXX JVM 实战》 | |
| 44 | - .setDescription(StrUtil.format(BrokerageRecordBizTypeEnum.ORDER.getDescription(), String.valueOf(brokerage / 100.0))) | |
| 47 | + .setTitle(title) | |
| 48 | + .setDescription(StrUtil.format(bizType.getDescription(), String.valueOf(brokerage / 100.0))) | |
| 45 | 49 | .setStatus(status) |
| 46 | 50 | .setFrozenDays(brokerageFrozenDays) |
| 47 | 51 | .setUnfreezeTime(unfreezeTime); | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/brokerage/user/TradeBrokerageUserConvert.java
| ... | ... | @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | 5 | import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; |
| 6 | 6 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.user.vo.TradeBrokerageUserRespVO; |
| 7 | 7 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.user.TradeBrokerageUserDO; |
| 8 | -import cn.iocoder.yudao.module.trade.service.brokerage.record.bo.UserBrokerageSummaryBO; | |
| 8 | +import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | |
| 9 | 9 | import org.mapstruct.Mapper; |
| 10 | 10 | import org.mapstruct.factory.Mappers; |
| 11 | 11 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/order/TradeOrderConvert.java
| ... | ... | @@ -7,7 +7,7 @@ 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.record.bo.BrokerageAddReqBO; | |
| 10 | +import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageAddReqBO; | |
| 11 | 11 | import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; |
| 12 | 12 | import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO; |
| 13 | 13 | import cn.iocoder.yudao.module.pay.enums.DictTypeConstants; |
| ... | ... | @@ -277,8 +277,8 @@ public interface TradeOrderConvert { |
| 277 | 277 | |
| 278 | 278 | default BrokerageAddReqBO convert(TradeOrderItemDO item, ProductSkuRespDTO sku) { |
| 279 | 279 | return new BrokerageAddReqBO().setBizId(String.valueOf(item.getId())) |
| 280 | - .setPayPrice(item.getPayPrice()).setCount(item.getCount()) | |
| 281 | - .setSkuFirstBrokeragePrice(sku.getSubCommissionFirstPrice()) | |
| 282 | - .setSkuSecondBrokeragePrice(sku.getSubCommissionSecondPrice()); | |
| 280 | + .setBasePrice(item.getPayPrice() * item.getCount()) | |
| 281 | + .setFirstBrokeragePrice(sku.getSubCommissionFirstPrice()) | |
| 282 | + .setSecondBrokeragePrice(sku.getSubCommissionSecondPrice()); | |
| 283 | 283 | } |
| 284 | 284 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/record/TradeBrokerageRecordMapper.java
| ... | ... | @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 6 | 6 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo.TradeBrokerageRecordPageReqVO; |
| 7 | 7 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.record.TradeBrokerageRecordDO; |
| 8 | -import cn.iocoder.yudao.module.trade.service.brokerage.record.bo.UserBrokerageSummaryBO; | |
| 8 | +import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | |
| 9 | 9 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| 10 | 10 | import org.apache.ibatis.annotations.Mapper; |
| 11 | 11 | import org.apache.ibatis.annotations.Param; |
| ... | ... | @@ -43,8 +43,7 @@ public interface TradeBrokerageRecordMapper extends BaseMapperX<TradeBrokerageRe |
| 43 | 43 | .eq(TradeBrokerageRecordDO::getStatus, status)); |
| 44 | 44 | } |
| 45 | 45 | |
| 46 | - // TODO @疯狂:userId??? | |
| 47 | - default TradeBrokerageRecordDO selectByUserIdAndBizTypeAndBizId(Integer bizType, String bizId) { | |
| 46 | + default TradeBrokerageRecordDO selectByBizTypeAndBizId(Integer bizType, String bizId) { | |
| 48 | 47 | return selectOne(TradeBrokerageRecordDO::getBizType, bizType, |
| 49 | 48 | TradeBrokerageRecordDO::getBizId, bizId); |
| 50 | 49 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/user/TradeBrokerageUserMapper.java
| ... | ... | @@ -31,7 +31,7 @@ public interface TradeBrokerageUserMapper extends BaseMapperX<TradeBrokerageUser |
| 31 | 31 | * @param id 用户编号 |
| 32 | 32 | * @param incrCount 增加佣金(正数) |
| 33 | 33 | */ |
| 34 | - default void updateBrokeragePriceIncr(Long id, int incrCount) { | |
| 34 | + default void updateBrokeragePriceIncr(Long id, Integer incrCount) { | |
| 35 | 35 | Assert.isTrue(incrCount > 0); |
| 36 | 36 | LambdaUpdateWrapper<TradeBrokerageUserDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<TradeBrokerageUserDO>() |
| 37 | 37 | .setSql(" brokerage_price = brokerage_price + " + incrCount) |
| ... | ... | @@ -46,7 +46,7 @@ public interface TradeBrokerageUserMapper extends BaseMapperX<TradeBrokerageUser |
| 46 | 46 | * @param id 用户编号 |
| 47 | 47 | * @param incrCount 增加佣金(负数) |
| 48 | 48 | */ |
| 49 | - default void updateBrokeragePriceDecr(Long id, int incrCount) { | |
| 49 | + default void updateBrokeragePriceDecr(Long id, Integer incrCount) { | |
| 50 | 50 | Assert.isTrue(incrCount < 0); |
| 51 | 51 | LambdaUpdateWrapper<TradeBrokerageUserDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<TradeBrokerageUserDO>() |
| 52 | 52 | .setSql(" brokerage_price = brokerage_price + " + incrCount) // 负数,所以使用 + 号 |
| ... | ... | @@ -60,7 +60,7 @@ public interface TradeBrokerageUserMapper extends BaseMapperX<TradeBrokerageUser |
| 60 | 60 | * @param id 用户编号 |
| 61 | 61 | * @param incrCount 增加冻结佣金(正数) |
| 62 | 62 | */ |
| 63 | - default void updateFrozenBrokeragePriceIncr(Long id, int incrCount) { | |
| 63 | + default void updateFrozenBrokeragePriceIncr(Long id, Integer incrCount) { | |
| 64 | 64 | Assert.isTrue(incrCount > 0); |
| 65 | 65 | LambdaUpdateWrapper<TradeBrokerageUserDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<TradeBrokerageUserDO>() |
| 66 | 66 | .setSql(" frozen_brokerage_price = frozen_brokerage_price + " + incrCount) |
| ... | ... | @@ -75,7 +75,7 @@ public interface TradeBrokerageUserMapper extends BaseMapperX<TradeBrokerageUser |
| 75 | 75 | * @param id 用户编号 |
| 76 | 76 | * @param incrCount 减少冻结佣金(负数) |
| 77 | 77 | */ |
| 78 | - default void updateFrozenBrokeragePriceDecr(Long id, int incrCount) { | |
| 78 | + default void updateFrozenBrokeragePriceDecr(Long id, Integer incrCount) { | |
| 79 | 79 | Assert.isTrue(incrCount < 0); |
| 80 | 80 | LambdaUpdateWrapper<TradeBrokerageUserDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<TradeBrokerageUserDO>() |
| 81 | 81 | .setSql(" frozen_brokerage_price = frozen_brokerage_price + " + incrCount) // 负数,所以使用 + 号 |
| ... | ... | @@ -90,7 +90,7 @@ public interface TradeBrokerageUserMapper extends BaseMapperX<TradeBrokerageUser |
| 90 | 90 | * @param incrCount 减少冻结佣金(负数) |
| 91 | 91 | * @return 更新条数 |
| 92 | 92 | */ |
| 93 | - default int updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(Long id, int incrCount) { | |
| 93 | + default int updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(Long id, Integer incrCount) { | |
| 94 | 94 | Assert.isTrue(incrCount < 0); |
| 95 | 95 | LambdaUpdateWrapper<TradeBrokerageUserDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<TradeBrokerageUserDO>() |
| 96 | 96 | .setSql(" frozen_brokerage_price = frozen_brokerage_price + " + incrCount + // 负数,所以使用 + 号 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/record/bo/BrokerageAddReqBO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/bo/BrokerageAddReqBO.java
| 1 | -package cn.iocoder.yudao.module.trade.service.brokerage.record.bo; | |
| 1 | +package cn.iocoder.yudao.module.trade.service.brokerage.bo; | |
| 2 | 2 | |
| 3 | 3 | import lombok.AllArgsConstructor; |
| 4 | 4 | import lombok.Data; |
| 5 | 5 | import lombok.NoArgsConstructor; |
| 6 | 6 | |
| 7 | -// TODO @疯狂:要不要 service 还是拍平;就是都放在 brokerage 包下,然后 bo 里面,稍微分分; | |
| 8 | 7 | /** |
| 9 | 8 | * 佣金 增加 Request BO |
| 10 | 9 | * |
| ... | ... | @@ -21,23 +20,17 @@ public class BrokerageAddReqBO { |
| 21 | 20 | * 业务ID |
| 22 | 21 | */ |
| 23 | 22 | private String bizId; |
| 24 | - // TODO @疯狂:不需要 payPrice 和 count,计算成 price 就好啦; | |
| 25 | 23 | /** |
| 26 | - * 商品支付价格 | |
| 24 | + * 佣金基数 | |
| 27 | 25 | */ |
| 28 | - private Integer payPrice; | |
| 29 | - // TODO @疯狂:可以去掉 sku 哈,更抽象一点; | |
| 26 | + private Integer basePrice; | |
| 30 | 27 | /** |
| 31 | - * SKU 一级佣金 | |
| 28 | + * 一级佣金(固定) | |
| 32 | 29 | */ |
| 33 | - private Integer skuFirstBrokeragePrice; | |
| 30 | + private Integer firstBrokeragePrice; | |
| 34 | 31 | /** |
| 35 | - * SKU 二级佣金 | |
| 32 | + * 二级佣金(固定) | |
| 36 | 33 | */ |
| 37 | - private Integer skuSecondBrokeragePrice; | |
| 38 | - /** | |
| 39 | - * 购买数量 | |
| 40 | - */ | |
| 41 | - private Integer count; | |
| 34 | + private Integer secondBrokeragePrice; | |
| 42 | 35 | |
| 43 | 36 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/record/bo/UserBrokerageSummaryBO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/bo/UserBrokerageSummaryBO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/record/TradeBrokerageRecordService.java
| ... | ... | @@ -3,8 +3,9 @@ package cn.iocoder.yudao.module.trade.service.brokerage.record; |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | 4 | import cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo.TradeBrokerageRecordPageReqVO; |
| 5 | 5 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.record.TradeBrokerageRecordDO; |
| 6 | -import cn.iocoder.yudao.module.trade.service.brokerage.record.bo.BrokerageAddReqBO; | |
| 7 | -import cn.iocoder.yudao.module.trade.service.brokerage.record.bo.UserBrokerageSummaryBO; | |
| 6 | +import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; | |
| 7 | +import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageAddReqBO; | |
| 8 | +import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | |
| 8 | 9 | |
| 9 | 10 | import java.util.List; |
| 10 | 11 | |
| ... | ... | @@ -31,23 +32,23 @@ public interface TradeBrokerageRecordService { |
| 31 | 32 | */ |
| 32 | 33 | PageResult<TradeBrokerageRecordDO> getBrokerageRecordPage(TradeBrokerageRecordPageReqVO pageReqVO); |
| 33 | 34 | |
| 34 | - // TODO @疯狂:是不是 bizType 得加下?方便未来拓展哈; | |
| 35 | 35 | /** |
| 36 | 36 | * 增加佣金 |
| 37 | 37 | * |
| 38 | - * @param userId 会员编号 | |
| 39 | - * @param list 请求参数列表 | |
| 38 | + * @param userId 会员编号 | |
| 39 | + * @param bizType 业务类型 | |
| 40 | + * @param list 请求参数列表 | |
| 40 | 41 | */ |
| 41 | - void addBrokerage(Long userId, List<BrokerageAddReqBO> list); | |
| 42 | + void addBrokerage(Long userId, BrokerageRecordBizTypeEnum bizType, List<BrokerageAddReqBO> list); | |
| 42 | 43 | |
| 43 | - // TODO @疯狂:是不是 bizType 得加下?方便未来拓展哈; | |
| 44 | 44 | /** |
| 45 | 45 | * 取消佣金:将佣金记录,状态修改为已失效 |
| 46 | 46 | * |
| 47 | - * @param userId 会员编号 | |
| 48 | - * @param bizId 业务编号 | |
| 47 | + * @param userId 会员编号 | |
| 48 | + * @param bizType 业务类型 | |
| 49 | + * @param bizId 业务编号 | |
| 49 | 50 | */ |
| 50 | - void cancelBrokerage(Long userId, String bizId); | |
| 51 | + void cancelBrokerage(Long userId, BrokerageRecordBizTypeEnum bizType, String bizId); | |
| 51 | 52 | |
| 52 | 53 | /** |
| 53 | 54 | * 解冻佣金:将待结算的佣金记录,状态修改为已结算 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/record/TradeBrokerageRecordServiceImpl.java
| ... | ... | @@ -14,8 +14,8 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO; |
| 14 | 14 | import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.record.TradeBrokerageRecordMapper; |
| 15 | 15 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; |
| 16 | 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.record.bo.UserBrokerageSummaryBO; | |
| 17 | +import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageAddReqBO; | |
| 18 | +import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryBO; | |
| 19 | 19 | import cn.iocoder.yudao.module.trade.service.brokerage.user.TradeBrokerageUserService; |
| 20 | 20 | import cn.iocoder.yudao.module.trade.service.config.TradeConfigService; |
| 21 | 21 | import lombok.extern.slf4j.Slf4j; |
| ... | ... | @@ -57,42 +57,40 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ |
| 57 | 57 | return tradeBrokerageRecordMapper.selectPage(pageReqVO); |
| 58 | 58 | } |
| 59 | 59 | |
| 60 | - // TODO @疯狂:buyerId 要不要统一改成 userId 哈; | |
| 61 | 60 | @Override |
| 62 | 61 | @Transactional(rollbackFor = Exception.class) |
| 63 | - public void addBrokerage(Long buyerId, List<BrokerageAddReqBO> list) { | |
| 62 | + public void addBrokerage(Long userId, BrokerageRecordBizTypeEnum bizType, List<BrokerageAddReqBO> list) { | |
| 64 | 63 | TradeConfigDO memberConfig = tradeConfigService.getTradeConfig(); |
| 65 | 64 | // 0 未启用分销功能 |
| 66 | - // TODO @疯狂:BooleanUtil.isFalse();逻辑里,尽量不做 !取反,这样要多思考一层; | |
| 67 | 65 | if (memberConfig == null || !BooleanUtil.isTrue(memberConfig.getBrokerageEnabled())) { |
| 68 | - log.warn("[addBrokerage][增加佣金失败:brokerageEnabled 未配置,buyerId({})", buyerId); | |
| 66 | + log.warn("[addBrokerage][增加佣金失败:brokerageEnabled 未配置,userId({})", userId); | |
| 69 | 67 | return; |
| 70 | 68 | } |
| 71 | 69 | |
| 72 | 70 | // 1.1 获得一级推广人 |
| 73 | - TradeBrokerageUserDO firstUser = tradeBrokerageUserService.getInviteBrokerageUser(buyerId); | |
| 71 | + TradeBrokerageUserDO firstUser = tradeBrokerageUserService.getBindBrokerageUser(userId); | |
| 74 | 72 | if (firstUser == null || !BooleanUtil.isTrue(firstUser.getBrokerageEnabled())) { |
| 75 | 73 | return; |
| 76 | 74 | } |
| 77 | - | |
| 78 | - // 1.2 计算一级分佣 // TODO 疯狂:类似 1.1 和 1.2 的空行,可以去掉;一般在代码里的空行,是为了逻辑分块;但是分块如果太多,就会导致代码里都是空行哈; | |
| 79 | - addBrokerage(firstUser, list, memberConfig.getBrokerageFrozenDays(), memberConfig.getBrokerageFirstPercent(), BrokerageAddReqBO::getSkuFirstBrokeragePrice); | |
| 75 | + // 1.2 计算一级分佣 | |
| 76 | + addBrokerage(firstUser, list, memberConfig.getBrokerageFrozenDays(), memberConfig.getBrokerageFirstPercent(), BrokerageAddReqBO::getFirstBrokeragePrice, bizType); | |
| 80 | 77 | |
| 81 | 78 | // 2.1 获得二级推广员 |
| 82 | - // TODO @疯狂:这里可以加个 firstUser.getBrokerageUserId() 为空的判断 return | |
| 79 | + if (firstUser.getBrokerageUserId() == null) { | |
| 80 | + return; | |
| 81 | + } | |
| 83 | 82 | TradeBrokerageUserDO secondUser = tradeBrokerageUserService.getBrokerageUser(firstUser.getBrokerageUserId()); |
| 84 | 83 | if (secondUser == null || !BooleanUtil.isTrue(secondUser.getBrokerageEnabled())) { |
| 85 | 84 | return; |
| 86 | 85 | } |
| 87 | - | |
| 88 | 86 | // 2.2 计算二级分佣 |
| 89 | - addBrokerage(secondUser, list, memberConfig.getBrokerageFrozenDays(), memberConfig.getBrokerageSecondPercent(), BrokerageAddReqBO::getSkuSecondBrokeragePrice); | |
| 87 | + addBrokerage(secondUser, list, memberConfig.getBrokerageFrozenDays(), memberConfig.getBrokerageSecondPercent(), BrokerageAddReqBO::getSecondBrokeragePrice, bizType); | |
| 90 | 88 | } |
| 91 | 89 | |
| 92 | 90 | @Override |
| 93 | 91 | @Transactional(rollbackFor = Exception.class) |
| 94 | - public void cancelBrokerage(Long userId, String bizId) { | |
| 95 | - TradeBrokerageRecordDO record = tradeBrokerageRecordMapper.selectByUserIdAndBizTypeAndBizId(BrokerageRecordBizTypeEnum.ORDER.getType(), bizId); | |
| 92 | + public void cancelBrokerage(Long userId, BrokerageRecordBizTypeEnum bizType, String bizId) { | |
| 93 | + TradeBrokerageRecordDO record = tradeBrokerageRecordMapper.selectByBizTypeAndBizId(bizType.getType(), bizId); | |
| 96 | 94 | if (record == null || ObjectUtil.notEqual(record.getUserId(), userId)) { |
| 97 | 95 | log.error("[cancelBrokerage][userId({})][bizId({}) 更新为已失效失败:记录不存在]", userId, bizId); |
| 98 | 96 | return; |
| ... | ... | @@ -114,24 +112,23 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ |
| 114 | 112 | } |
| 115 | 113 | } |
| 116 | 114 | |
| 117 | - // TODO @疯狂:是不是 calculateBrokeragePrice | |
| 118 | 115 | /** |
| 119 | 116 | * 计算佣金 |
| 120 | 117 | * |
| 121 | - * @param payPrice 订单支付金额 | |
| 122 | - * @param percent 商品 SKU 设置的佣金 | |
| 123 | - * @param skuBrokeragePrice 商品的佣金 | |
| 118 | + * @param basePrice 佣金基数 | |
| 119 | + * @param percent 佣金比例 | |
| 120 | + * @param fixedBrokeragePrice 固定佣金 | |
| 124 | 121 | * @return 佣金 |
| 125 | 122 | */ |
| 126 | - int calculateBrokerage(Integer payPrice, Integer percent, Integer skuBrokeragePrice) { | |
| 127 | - // 1. 优先使用商品 SKU 设置的佣金 | |
| 128 | - if (skuBrokeragePrice != null && skuBrokeragePrice > 0) { | |
| 129 | - return ObjectUtil.defaultIfNull(skuBrokeragePrice, 0); | |
| 123 | + int calculateBrokeragePrice(Integer basePrice, Integer percent, Integer fixedBrokeragePrice) { | |
| 124 | + // 1. 优先使用固定佣金 | |
| 125 | + if (fixedBrokeragePrice != null && fixedBrokeragePrice > 0) { | |
| 126 | + return ObjectUtil.defaultIfNull(fixedBrokeragePrice, 0); | |
| 130 | 127 | } |
| 131 | - // 2. 根据订单支付金额计算佣金 | |
| 128 | + // 2. 根据比例计算佣金 | |
| 132 | 129 | // TODO @疯狂:要不要把 MoneyUtils 抽到 common 里,然后这里也使用这个类的方法; |
| 133 | - if (payPrice != null && payPrice > 0 && percent != null && percent > 0) { | |
| 134 | - return NumberUtil.div(NumberUtil.mul(payPrice, percent), 100, 0, RoundingMode.DOWN).intValue(); | |
| 130 | + if (basePrice != null && basePrice > 0 && percent != null && percent > 0) { | |
| 131 | + return NumberUtil.div(NumberUtil.mul(basePrice, percent), 100, 0, RoundingMode.DOWN).intValue(); | |
| 135 | 132 | } |
| 136 | 133 | return 0; |
| 137 | 134 | } |
| ... | ... | @@ -139,32 +136,32 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ |
| 139 | 136 | /** |
| 140 | 137 | * 增加用户佣金 |
| 141 | 138 | * |
| 142 | - * @param user 用户 | |
| 143 | - * @param list 佣金增加参数列表 | |
| 144 | - * @param brokerageFrozenDays 冻结天数 | |
| 145 | - * @param brokeragePercent 佣金比例 | |
| 146 | - * @param skuBrokeragePriceFun 商品 SKU 设置的佣金 | |
| 139 | + * @param user 用户 | |
| 140 | + * @param list 佣金增加参数列表 | |
| 141 | + * @param brokerageFrozenDays 冻结天数 | |
| 142 | + * @param brokeragePercent 佣金比例 | |
| 143 | + * @param FixedBrokeragePriceFun 固定佣金 | |
| 144 | + * @param bizType 业务类型 | |
| 147 | 145 | */ |
| 148 | 146 | private void addBrokerage(TradeBrokerageUserDO user, List<BrokerageAddReqBO> list, Integer brokerageFrozenDays, |
| 149 | - Integer brokeragePercent, Function<BrokerageAddReqBO, Integer> skuBrokeragePriceFun) { | |
| 147 | + Integer brokeragePercent, Function<BrokerageAddReqBO, Integer> FixedBrokeragePriceFun, | |
| 148 | + BrokerageRecordBizTypeEnum bizType) { | |
| 150 | 149 | // 1.1 处理冻结时间 |
| 151 | - // TODO @疯狂:是不是 brokerageFrozenDays != null && brokerageFrozenDays > 0 ?然后计算;更简洁一点; | |
| 152 | - brokerageFrozenDays = ObjectUtil.defaultIfNull(brokerageFrozenDays, 0); | |
| 153 | 150 | LocalDateTime unfreezeTime = null; |
| 154 | - if (brokerageFrozenDays > 0) { | |
| 151 | + if (brokerageFrozenDays != null && brokerageFrozenDays > 0) { | |
| 155 | 152 | unfreezeTime = LocalDateTime.now().plusDays(brokerageFrozenDays); |
| 156 | 153 | } |
| 157 | 154 | // 1.2 计算分佣 |
| 158 | 155 | int totalBrokerage = 0; |
| 159 | 156 | List<TradeBrokerageRecordDO> records = new ArrayList<>(); |
| 160 | 157 | for (BrokerageAddReqBO item : list) { |
| 161 | - int brokeragePerItem = calculateBrokerage(item.getPayPrice(), brokeragePercent, skuBrokeragePriceFun.apply(item)); | |
| 162 | - // TODO @疯狂:其实可以 brokeragePerItem <= 0 ,continue;这样 { 层级更少;代码更简洁;} | |
| 163 | - if (brokeragePerItem > 0) { | |
| 164 | - int brokerage = brokeragePerItem * item.getCount(); | |
| 165 | - records.add(TradeBrokerageRecordConvert.INSTANCE.convert(user, item.getBizId(), brokerageFrozenDays, brokerage, unfreezeTime)); | |
| 166 | - totalBrokerage += brokerage; | |
| 158 | + int brokeragePerItem = calculateBrokeragePrice(item.getBasePrice(), brokeragePercent, FixedBrokeragePriceFun.apply(item)); | |
| 159 | + if (brokeragePerItem <= 0) { | |
| 160 | + continue; | |
| 167 | 161 | } |
| 162 | + records.add(TradeBrokerageRecordConvert.INSTANCE.convert(user, bizType, item.getBizId(), | |
| 163 | + brokerageFrozenDays, brokeragePerItem, unfreezeTime, bizType.getTitle())); | |
| 164 | + totalBrokerage += brokeragePerItem; | |
| 168 | 165 | } |
| 169 | 166 | if (CollUtil.isEmpty(records)) { |
| 170 | 167 | return; |
| ... | ... | @@ -173,7 +170,7 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ |
| 173 | 170 | tradeBrokerageRecordMapper.insertBatch(records); |
| 174 | 171 | |
| 175 | 172 | // 2. 更新用户佣金 |
| 176 | - if (brokerageFrozenDays > 0) { // 更新用户冻结佣金 | |
| 173 | + if (brokerageFrozenDays != null && brokerageFrozenDays > 0) { // 更新用户冻结佣金 | |
| 177 | 174 | tradeBrokerageUserService.updateUserFrozenBrokeragePrice(user.getId(), totalBrokerage); |
| 178 | 175 | } else { // 更新用户可用佣金 |
| 179 | 176 | tradeBrokerageUserService.updateUserBrokeragePrice(user.getId(), totalBrokerage); | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/user/TradeBrokerageUserService.java
| ... | ... | @@ -61,7 +61,7 @@ public interface TradeBrokerageUserService { |
| 61 | 61 | * @param id 用户编号 |
| 62 | 62 | * @return 用户的推广人 |
| 63 | 63 | */ |
| 64 | - TradeBrokerageUserDO getInviteBrokerageUser(Long id); | |
| 64 | + TradeBrokerageUserDO getBindBrokerageUser(Long id); | |
| 65 | 65 | |
| 66 | 66 | /** |
| 67 | 67 | * 更新用户佣金 |
| ... | ... | @@ -69,16 +69,15 @@ public interface TradeBrokerageUserService { |
| 69 | 69 | * @param id 用户编号 |
| 70 | 70 | * @param brokeragePrice 用户可用佣金 |
| 71 | 71 | */ |
| 72 | - void updateUserBrokeragePrice(Long id, int brokeragePrice); | |
| 72 | + void updateUserBrokeragePrice(Long id, Integer brokeragePrice); | |
| 73 | 73 | |
| 74 | - // TODO @疯狂:int 类型一般不用哈;尽量都用封装类型;不差这点内存哈; | |
| 75 | 74 | /** |
| 76 | 75 | * 更新用户冻结佣金 |
| 77 | 76 | * |
| 78 | 77 | * @param id 用户编号 |
| 79 | 78 | * @param frozenBrokeragePrice 用户冻结佣金 |
| 80 | 79 | */ |
| 81 | - void updateUserFrozenBrokeragePrice(Long id, int frozenBrokeragePrice); | |
| 80 | + void updateUserFrozenBrokeragePrice(Long id, Integer frozenBrokeragePrice); | |
| 82 | 81 | |
| 83 | 82 | /** |
| 84 | 83 | * 更新用户冻结佣金(减少), 更新用户佣金(增加) |
| ... | ... | @@ -86,7 +85,7 @@ public interface TradeBrokerageUserService { |
| 86 | 85 | * @param id 用户编号 |
| 87 | 86 | * @param frozenBrokeragePrice 减少冻结佣金(负数) |
| 88 | 87 | */ |
| 89 | - void updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(Long id, int frozenBrokeragePrice); | |
| 88 | + void updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(Long id, Integer frozenBrokeragePrice); | |
| 90 | 89 | |
| 91 | 90 | /** |
| 92 | 91 | * 获得推广用户数量(一级) | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/user/TradeBrokerageUserServiceImpl.java
| ... | ... | @@ -6,7 +6,6 @@ import cn.iocoder.yudao.module.trade.controller.admin.brokerage.user.vo.TradeBro |
| 6 | 6 | import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.user.TradeBrokerageUserDO; |
| 7 | 7 | import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.user.TradeBrokerageUserMapper; |
| 8 | 8 | import org.springframework.stereotype.Service; |
| 9 | -import org.springframework.transaction.annotation.Transactional; | |
| 10 | 9 | import org.springframework.validation.annotation.Validated; |
| 11 | 10 | |
| 12 | 11 | import javax.annotation.Resource; |
| ... | ... | @@ -15,8 +14,8 @@ import java.util.List; |
| 15 | 14 | import java.util.Optional; |
| 16 | 15 | |
| 17 | 16 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 18 | -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.MEMBER_FROZEN_BROKERAGE_PRICE_NOT_ENOUGH; | |
| 19 | 17 | import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.BROKERAGE_USER_NOT_EXISTS; |
| 18 | +import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.USER_FROZEN_BROKERAGE_PRICE_NOT_ENOUGH; | |
| 20 | 19 | |
| 21 | 20 | /** |
| 22 | 21 | * 分销用户 Service 实现类 |
| ... | ... | @@ -65,9 +64,8 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService |
| 65 | 64 | } |
| 66 | 65 | } |
| 67 | 66 | |
| 68 | - // TODO @疯狂:getBindBrokerageUser 会不会好点,因为统一使用 Bind 替代了 Invite | |
| 69 | 67 | @Override |
| 70 | - public TradeBrokerageUserDO getInviteBrokerageUser(Long id) { | |
| 68 | + public TradeBrokerageUserDO getBindBrokerageUser(Long id) { | |
| 71 | 69 | return Optional.ofNullable(id) |
| 72 | 70 | .map(this::getBrokerageUser) |
| 73 | 71 | .map(TradeBrokerageUserDO::getBrokerageUserId) |
| ... | ... | @@ -75,10 +73,8 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService |
| 75 | 73 | .orElse(null); |
| 76 | 74 | } |
| 77 | 75 | |
| 78 | - // TODO @疯狂:单个更新,不用事务哈; | |
| 79 | 76 | @Override |
| 80 | - @Transactional(rollbackFor = Exception.class) | |
| 81 | - public void updateUserBrokeragePrice(Long id, int brokeragePrice) { | |
| 77 | + public void updateUserBrokeragePrice(Long id, Integer brokeragePrice) { | |
| 82 | 78 | if (brokeragePrice > 0) { |
| 83 | 79 | brokerageUserMapper.updateBrokeragePriceIncr(id, brokeragePrice); |
| 84 | 80 | } else if (brokeragePrice < 0) { |
| ... | ... | @@ -86,10 +82,8 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService |
| 86 | 82 | } |
| 87 | 83 | } |
| 88 | 84 | |
| 89 | - // TODO @疯狂:单个更新,不用事务哈; | |
| 90 | 85 | @Override |
| 91 | - @Transactional(rollbackFor = Exception.class) | |
| 92 | - public void updateUserFrozenBrokeragePrice(Long id, int frozenBrokeragePrice) { | |
| 86 | + public void updateUserFrozenBrokeragePrice(Long id, Integer frozenBrokeragePrice) { | |
| 93 | 87 | if (frozenBrokeragePrice > 0) { |
| 94 | 88 | brokerageUserMapper.updateFrozenBrokeragePriceIncr(id, frozenBrokeragePrice); |
| 95 | 89 | } else if (frozenBrokeragePrice < 0) { |
| ... | ... | @@ -97,15 +91,12 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService |
| 97 | 91 | } |
| 98 | 92 | } |
| 99 | 93 | |
| 100 | - // TODO @疯狂:单个更新,不用事务哈; | |
| 101 | 94 | @Override |
| 102 | - @Transactional(rollbackFor = Exception.class) | |
| 103 | - public void updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(Long id, int frozenBrokeragePrice) { | |
| 95 | + public void updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(Long id, Integer frozenBrokeragePrice) { | |
| 104 | 96 | Assert.isTrue(frozenBrokeragePrice < 0); |
| 105 | 97 | int updateRows = brokerageUserMapper.updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(id, frozenBrokeragePrice); |
| 106 | 98 | if (updateRows == 0) { |
| 107 | - // TODO @疯狂:挪到 trade 这变的错误码哈; | |
| 108 | - throw exception(MEMBER_FROZEN_BROKERAGE_PRICE_NOT_ENOUGH); | |
| 99 | + throw exception(USER_FROZEN_BROKERAGE_PRICE_NOT_ENOUGH); | |
| 109 | 100 | } |
| 110 | 101 | } |
| 111 | 102 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
| ... | ... | @@ -12,8 +12,6 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 12 | 12 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| 13 | 13 | import cn.iocoder.yudao.module.member.api.address.AddressApi; |
| 14 | 14 | import cn.iocoder.yudao.module.member.api.address.dto.AddressRespDTO; |
| 15 | -import cn.iocoder.yudao.module.trade.service.brokerage.record.TradeBrokerageRecordService; | |
| 16 | -import cn.iocoder.yudao.module.trade.service.brokerage.record.bo.BrokerageAddReqBO; | |
| 17 | 15 | import cn.iocoder.yudao.module.member.api.level.MemberLevelApi; |
| 18 | 16 | import cn.iocoder.yudao.module.member.api.point.MemberPointApi; |
| 19 | 17 | import cn.iocoder.yudao.module.member.api.user.MemberUserApi; |
| ... | ... | @@ -49,9 +47,12 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; |
| 49 | 47 | import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderItemMapper; |
| 50 | 48 | import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderMapper; |
| 51 | 49 | import cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants; |
| 50 | +import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; | |
| 52 | 51 | import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum; |
| 53 | 52 | import cn.iocoder.yudao.module.trade.enums.order.*; |
| 54 | 53 | import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; |
| 54 | +import cn.iocoder.yudao.module.trade.service.brokerage.record.TradeBrokerageRecordService; | |
| 55 | +import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageAddReqBO; | |
| 55 | 56 | import cn.iocoder.yudao.module.trade.service.cart.CartService; |
| 56 | 57 | import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService; |
| 57 | 58 | import cn.iocoder.yudao.module.trade.service.message.TradeMessageService; |
| ... | ... | @@ -370,7 +371,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { |
| 370 | 371 | // 增加用户经验 |
| 371 | 372 | getSelf().addUserExperienceAsync(order.getUserId(), order.getPayPrice(), order.getId()); |
| 372 | 373 | // 增加用户佣金 |
| 373 | - getSelf().addBrokerageAsync(order.getUserId(), order.getId()); | |
| 374 | + getSelf().addBrokerageAsync(order.getUserId(), BrokerageRecordBizTypeEnum.ORDER, order.getId()); | |
| 374 | 375 | } |
| 375 | 376 | |
| 376 | 377 | /** |
| ... | ... | @@ -640,7 +641,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { |
| 640 | 641 | // 扣减用户经验 |
| 641 | 642 | getSelf().reduceUserExperienceAsync(order.getUserId(), orderRefundPrice, afterSaleId); |
| 642 | 643 | // 更新分佣记录为已失效 |
| 643 | - getSelf().cancelBrokerageAsync(order.getUserId(), id); | |
| 644 | + getSelf().cancelBrokerageAsync(order.getUserId(), BrokerageRecordBizTypeEnum.ORDER, id); | |
| 644 | 645 | } |
| 645 | 646 | |
| 646 | 647 | @Override |
| ... | ... | @@ -750,16 +751,16 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { |
| 750 | 751 | |
| 751 | 752 | |
| 752 | 753 | @Async |
| 753 | - protected void addBrokerageAsync(Long userId, Long orderId) { | |
| 754 | + protected void addBrokerageAsync(Long userId, BrokerageRecordBizTypeEnum bizType, Long orderId) { | |
| 754 | 755 | List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(orderId); |
| 755 | 756 | List<BrokerageAddReqBO> list = convertList(orderItems, |
| 756 | 757 | item -> TradeOrderConvert.INSTANCE.convert(item, productSkuApi.getSku(item.getSkuId()))); |
| 757 | - tradeBrokerageRecordService.addBrokerage(userId, list); | |
| 758 | + tradeBrokerageRecordService.addBrokerage(userId, bizType, list); | |
| 758 | 759 | } |
| 759 | 760 | |
| 760 | 761 | @Async |
| 761 | - protected void cancelBrokerageAsync(Long userId, Long orderItemId) { | |
| 762 | - tradeBrokerageRecordService.cancelBrokerage(userId, String.valueOf(orderItemId)); | |
| 762 | + protected void cancelBrokerageAsync(Long userId, BrokerageRecordBizTypeEnum bizType, Long orderItemId) { | |
| 763 | + tradeBrokerageRecordService.cancelBrokerage(userId, bizType, String.valueOf(orderItemId)); | |
| 763 | 764 | } |
| 764 | 765 | |
| 765 | 766 | /** | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/record/TradeBrokerageRecordServiceImplTest.java
| ... | ... | @@ -79,38 +79,38 @@ public class TradeBrokerageRecordServiceImplTest extends BaseDbUnitTest { |
| 79 | 79 | } |
| 80 | 80 | |
| 81 | 81 | @Test |
| 82 | - public void testCalculateBrokerage_useSkuBrokeragePrice() { | |
| 82 | + public void testCalculateBrokeragePrice_useFixedBrokeragePrice() { | |
| 83 | 83 | // mock 数据 |
| 84 | 84 | Integer payPrice = randomInteger(); |
| 85 | 85 | Integer percent = randomInt(1, 101); |
| 86 | - Integer skuBrokeragePrice = randomInt(); | |
| 86 | + Integer fixedBrokeragePrice = randomInt(); | |
| 87 | 87 | // 调用 |
| 88 | - int brokerage = tradeBrokerageRecordService.calculateBrokerage(payPrice, percent, skuBrokeragePrice); | |
| 88 | + int brokerage = tradeBrokerageRecordService.calculateBrokeragePrice(payPrice, percent, fixedBrokeragePrice); | |
| 89 | 89 | // 断言 |
| 90 | - assertEquals(brokerage, skuBrokeragePrice); | |
| 90 | + assertEquals(brokerage, fixedBrokeragePrice); | |
| 91 | 91 | } |
| 92 | 92 | |
| 93 | 93 | @Test |
| 94 | - public void testCalculateBrokerage_usePercent() { | |
| 94 | + public void testCalculateBrokeragePrice_usePercent() { | |
| 95 | 95 | // mock 数据 |
| 96 | 96 | Integer payPrice = randomInteger(); |
| 97 | 97 | Integer percent = randomInt(1, 101); |
| 98 | 98 | Integer skuBrokeragePrice = randomEle(new Integer[]{0, null}); |
| 99 | 99 | System.out.println("skuBrokeragePrice=" + skuBrokeragePrice); |
| 100 | 100 | // 调用 |
| 101 | - int brokerage = tradeBrokerageRecordService.calculateBrokerage(payPrice, percent, skuBrokeragePrice); | |
| 101 | + int brokerage = tradeBrokerageRecordService.calculateBrokeragePrice(payPrice, percent, skuBrokeragePrice); | |
| 102 | 102 | // 断言 |
| 103 | 103 | assertEquals(brokerage, NumberUtil.div(NumberUtil.mul(payPrice, percent), 100, 0, RoundingMode.DOWN).intValue()); |
| 104 | 104 | } |
| 105 | 105 | |
| 106 | 106 | @Test |
| 107 | - public void testCalculateBrokerage_equalsZero() { | |
| 107 | + public void testCalculateBrokeragePrice_equalsZero() { | |
| 108 | 108 | // mock 数据 |
| 109 | 109 | Integer payPrice = null; |
| 110 | 110 | Integer percent = null; |
| 111 | 111 | Integer skuBrokeragePrice = null; |
| 112 | 112 | // 调用 |
| 113 | - int brokerage = tradeBrokerageRecordService.calculateBrokerage(payPrice, percent, skuBrokeragePrice); | |
| 113 | + int brokerage = tradeBrokerageRecordService.calculateBrokeragePrice(payPrice, percent, skuBrokeragePrice); | |
| 114 | 114 | // 断言 |
| 115 | 115 | assertEquals(brokerage, 0); |
| 116 | 116 | } | ... | ... |
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java
| ... | ... | @@ -13,7 +13,6 @@ public interface ErrorCodeConstants { |
| 13 | 13 | ErrorCode USER_NOT_EXISTS = new ErrorCode(1004001000, "用户不存在"); |
| 14 | 14 | ErrorCode USER_MOBILE_NOT_EXISTS = new ErrorCode(1004001001, "手机号未注册用户"); |
| 15 | 15 | ErrorCode USER_MOBILE_USED = new ErrorCode(1004001002, "修改手机失败,该手机号({})已经被使用"); |
| 16 | - ErrorCode MEMBER_FROZEN_BROKERAGE_PRICE_NOT_ENOUGH = new ErrorCode(1004001003, "用户冻结佣金({})数量不足"); | |
| 17 | 16 | |
| 18 | 17 | // ========== AUTH 模块 1004003000 ========== |
| 19 | 18 | ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1004003000, "登录失败,账号密码不正确"); | ... | ... |