mirror of
https://gitee.com/hhyykk/ipms-sjy.git
synced 2025-08-16 03:01:53 +08:00
code review:订单分佣
This commit is contained in:
@@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@@ -21,7 +22,7 @@ public class TradeBrokerageRecordBaseVO {
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "业务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23353")
|
||||
@NotNull(message = "业务编号不能为空")
|
||||
@NotEmpty(message = "业务编号不能为空")
|
||||
private String bizId;
|
||||
|
||||
@Schema(description = "业务类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@@ -29,7 +30,7 @@ public class TradeBrokerageRecordBaseVO {
|
||||
private Integer bizType;
|
||||
|
||||
@Schema(description = "标题", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "标题不能为空")
|
||||
@NotEmpty(message = "标题不能为空")
|
||||
private String title;
|
||||
|
||||
@Schema(description = "金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "28731")
|
||||
|
@@ -15,6 +15,8 @@ public class TradeBrokerageUserUpdateBrokerageEnabledReqVO {
|
||||
@NotNull(message = "用户编号不能为空")
|
||||
private Long id;
|
||||
|
||||
// TODO @疯狂:是不是这个字段,可以改成 enabled
|
||||
|
||||
@Schema(description = "推广资格", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "推广资格不能为空")
|
||||
private Boolean brokerageEnabled;
|
||||
|
@@ -54,6 +54,7 @@ public class TradeConfigBaseVO {
|
||||
@PositiveOrZero(message = "用户提现最低金额不能是负数")
|
||||
private Integer brokerageWithdrawMinPrice;
|
||||
|
||||
// TODO @疯狂:要不要做成字典?按道理都可以体现对哇?感觉是全局的配置哈;
|
||||
@Schema(description = "提现银行", requiredMode = Schema.RequiredMode.REQUIRED, example = "[0, 1]")
|
||||
@NotEmpty(message = "提现银行不能为空")
|
||||
private List<Integer> brokerageBankNames;
|
||||
|
@@ -40,7 +40,7 @@ public interface TradeBrokerageRecordConvert {
|
||||
.setBizId(bizId)
|
||||
.setPrice(brokerage)
|
||||
.setTotalPrice(user.getBrokeragePrice())
|
||||
.setTitle(BrokerageRecordBizTypeEnum.ORDER.getTitle())
|
||||
.setTitle(BrokerageRecordBizTypeEnum.ORDER.getTitle()) // TODO @疯狂:可能 title 不是很固化,会存在类似:沐晴成功购买《XXX JVM 实战》
|
||||
.setDescription(StrUtil.format(BrokerageRecordBizTypeEnum.ORDER.getDescription(), String.valueOf(brokerage / 100.0)))
|
||||
.setStatus(status)
|
||||
.setFrozenDays(brokerageFrozenDays)
|
||||
|
@@ -41,13 +41,19 @@ public class TradeBrokerageRecordDO extends BaseDO {
|
||||
/**
|
||||
* 业务类型
|
||||
* <p>
|
||||
* 枚举 {@link BrokerageRecordBizTypeEnum 对应的类}
|
||||
* 枚举 {@link BrokerageRecordBizTypeEnum}
|
||||
*/
|
||||
private Integer bizType;
|
||||
|
||||
/**
|
||||
* 标题
|
||||
*/
|
||||
private String title;
|
||||
/**
|
||||
* 说明
|
||||
*/
|
||||
private String description;
|
||||
|
||||
/**
|
||||
* 金额
|
||||
*/
|
||||
@@ -56,16 +62,14 @@ public class TradeBrokerageRecordDO extends BaseDO {
|
||||
* 当前总佣金
|
||||
*/
|
||||
private Integer totalPrice;
|
||||
/**
|
||||
* 说明
|
||||
*/
|
||||
private String description;
|
||||
|
||||
/**
|
||||
* 状态
|
||||
* <p>
|
||||
* 枚举 {@link BrokerageRecordStatusEnum 对应的类}
|
||||
* 枚举 {@link BrokerageRecordStatusEnum}
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 冻结时间(天)
|
||||
*/
|
||||
|
@@ -8,6 +8,7 @@ import lombok.*;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
// TODO @疯狂:因为独立了表,是不是可以把字段的 brokerage 去掉了哈?
|
||||
/**
|
||||
* 分销用户 DO
|
||||
*
|
||||
@@ -28,14 +29,19 @@ public class TradeBrokerageUserDO extends BaseDO {
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
|
||||
// TODO @疯狂:貌似改成 bindUserId,更明确?
|
||||
/**
|
||||
* 推广员编号
|
||||
*
|
||||
* 关联 MemberUserDO 的 id 字段
|
||||
*/
|
||||
private Long brokerageUserId;
|
||||
/**
|
||||
* 推广员绑定时间
|
||||
*/
|
||||
private LocalDateTime brokerageBindTime;
|
||||
|
||||
/**
|
||||
* 推广资格
|
||||
*/
|
||||
@@ -44,6 +50,7 @@ public class TradeBrokerageUserDO extends BaseDO {
|
||||
* 成为分销员时间
|
||||
*/
|
||||
private LocalDateTime brokerageTime;
|
||||
|
||||
/**
|
||||
* 可用佣金
|
||||
*/
|
||||
|
@@ -40,8 +40,10 @@ public interface TradeBrokerageRecordMapper extends BaseMapperX<TradeBrokerageRe
|
||||
.eq(TradeBrokerageRecordDO::getStatus, status));
|
||||
}
|
||||
|
||||
// TODO @疯狂:userId???
|
||||
default TradeBrokerageRecordDO selectByUserIdAndBizTypeAndBizId(Integer bizType, String bizId) {
|
||||
return selectOne(TradeBrokerageRecordDO::getBizType, bizType,
|
||||
TradeBrokerageRecordDO::getBizId, bizId);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* 占位文件,无特殊用途
|
||||
*/
|
||||
package cn.iocoder.yudao.module.trade.job;
|
@@ -30,6 +30,7 @@ public interface TradeBrokerageRecordService {
|
||||
*/
|
||||
PageResult<TradeBrokerageRecordDO> getBrokerageRecordPage(TradeBrokerageRecordPageReqVO pageReqVO);
|
||||
|
||||
// TODO @疯狂:是不是 bizType 得加下?方便未来拓展哈;
|
||||
/**
|
||||
* 增加佣金
|
||||
*
|
||||
@@ -38,8 +39,10 @@ public interface TradeBrokerageRecordService {
|
||||
*/
|
||||
void addBrokerage(Long userId, List<BrokerageAddReqBO> list);
|
||||
|
||||
// TODO @疯狂:是不是 bizType 得加下?方便未来拓展哈;
|
||||
/**
|
||||
* 取消佣金:将佣金记录,状态修改为已失效
|
||||
*
|
||||
* @param userId 会员编号
|
||||
* @param bizId 业务编号
|
||||
*/
|
||||
@@ -51,4 +54,5 @@ public interface TradeBrokerageRecordService {
|
||||
* @return 解冻佣金的数量
|
||||
*/
|
||||
int unfreezeRecord();
|
||||
|
||||
}
|
||||
|
@@ -6,15 +6,15 @@ import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.extra.spring.SpringUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo.TradeBrokerageRecordPageReqVO;
|
||||
import cn.iocoder.yudao.module.trade.convert.brokerage.record.TradeBrokerageRecordConvert;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.record.TradeBrokerageRecordDO;
|
||||
import cn.iocoder.yudao.module.trade.service.brokerage.record.bo.BrokerageAddReqBO;
|
||||
import cn.iocoder.yudao.module.trade.controller.admin.brokerage.record.vo.TradeBrokerageRecordPageReqVO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.user.TradeBrokerageUserDO;
|
||||
import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO;
|
||||
import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.record.TradeBrokerageRecordMapper;
|
||||
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
|
||||
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum;
|
||||
import cn.iocoder.yudao.module.trade.service.brokerage.record.bo.BrokerageAddReqBO;
|
||||
import cn.iocoder.yudao.module.trade.service.brokerage.user.TradeBrokerageUserService;
|
||||
import cn.iocoder.yudao.module.trade.service.config.TradeConfigService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -56,11 +56,13 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
|
||||
return tradeBrokerageRecordMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
// TODO @疯狂:buyerId 要不要统一改成 userId 哈;
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void addBrokerage(Long buyerId, List<BrokerageAddReqBO> list) {
|
||||
TradeConfigDO memberConfig = tradeConfigService.getTradeConfig();
|
||||
// 0 未启用分销功能
|
||||
// TODO @疯狂:BooleanUtil.isFalse();逻辑里,尽量不做 !取反,这样要多思考一层;
|
||||
if (memberConfig == null || !BooleanUtil.isTrue(memberConfig.getBrokerageEnabled())) {
|
||||
log.warn("[addBrokerage][增加佣金失败:brokerageEnabled 未配置,buyerId({})", buyerId);
|
||||
return;
|
||||
@@ -72,11 +74,11 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
|
||||
return;
|
||||
}
|
||||
|
||||
// 1.2 计算一级分佣
|
||||
// 1.2 计算一级分佣 // TODO 疯狂:类似 1.1 和 1.2 的空行,可以去掉;一般在代码里的空行,是为了逻辑分块;但是分块如果太多,就会导致代码里都是空行哈;
|
||||
addBrokerage(firstUser, list, memberConfig.getBrokerageFrozenDays(), memberConfig.getBrokerageFirstPercent(), BrokerageAddReqBO::getSkuFirstBrokeragePrice);
|
||||
|
||||
|
||||
// 2.1 获得二级推广员
|
||||
// TODO @疯狂:这里可以加个 firstUser.getBrokerageUserId() 为空的判断 return
|
||||
TradeBrokerageUserDO secondUser = tradeBrokerageUserService.getBrokerageUser(firstUser.getBrokerageUserId());
|
||||
if (secondUser == null || !BooleanUtil.isTrue(secondUser.getBrokerageEnabled())) {
|
||||
return;
|
||||
@@ -95,6 +97,7 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
|
||||
return;
|
||||
}
|
||||
|
||||
// 1. 更新佣金记录为已失效
|
||||
TradeBrokerageRecordDO updateObj = new TradeBrokerageRecordDO().setStatus(BrokerageRecordStatusEnum.CANCEL.getStatus());
|
||||
int updateRows = tradeBrokerageRecordMapper.updateByIdAndStatus(record.getId(), record.getStatus(), updateObj);
|
||||
if (updateRows == 0) {
|
||||
@@ -102,6 +105,7 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. 更新用户的佣金
|
||||
if (BrokerageRecordStatusEnum.WAIT_SETTLEMENT.getStatus().equals(record.getStatus())) {
|
||||
tradeBrokerageUserService.updateUserFrozenBrokeragePrice(userId, -record.getPrice());
|
||||
} else if (BrokerageRecordStatusEnum.SETTLEMENT.getStatus().equals(record.getStatus())) {
|
||||
@@ -109,6 +113,7 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
|
||||
}
|
||||
}
|
||||
|
||||
// TODO @疯狂:是不是 calculateBrokeragePrice
|
||||
/**
|
||||
* 计算佣金
|
||||
*
|
||||
@@ -122,12 +127,11 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
|
||||
if (skuBrokeragePrice != null && skuBrokeragePrice > 0) {
|
||||
return ObjectUtil.defaultIfNull(skuBrokeragePrice, 0);
|
||||
}
|
||||
|
||||
// 2. 根据订单支付金额计算佣金
|
||||
// TODO @疯狂:要不要把 MoneyUtils 抽到 common 里,然后这里也使用这个类的方法;
|
||||
if (payPrice != null && payPrice > 0 && percent != null && percent > 0) {
|
||||
return NumberUtil.div(NumberUtil.mul(payPrice, percent), 100, 0, RoundingMode.DOWN).intValue();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -142,37 +146,35 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
|
||||
*/
|
||||
private void addBrokerage(TradeBrokerageUserDO user, List<BrokerageAddReqBO> list, Integer brokerageFrozenDays,
|
||||
Integer brokeragePercent, Function<BrokerageAddReqBO, Integer> skuBrokeragePriceFun) {
|
||||
// 处理冻结时间
|
||||
// 1.1 处理冻结时间
|
||||
// TODO @疯狂:是不是 brokerageFrozenDays != null && brokerageFrozenDays > 0 ?然后计算;更简洁一点;
|
||||
brokerageFrozenDays = ObjectUtil.defaultIfNull(brokerageFrozenDays, 0);
|
||||
LocalDateTime unfreezeTime = null;
|
||||
if (brokerageFrozenDays > 0) {
|
||||
unfreezeTime = LocalDateTime.now().plusDays(brokerageFrozenDays);
|
||||
}
|
||||
|
||||
// 计算分佣
|
||||
// 1.2 计算分佣
|
||||
int totalBrokerage = 0;
|
||||
List<TradeBrokerageRecordDO> records = new ArrayList<>();
|
||||
for (BrokerageAddReqBO dto : list) {
|
||||
int brokeragePerItem = calculateBrokerage(dto.getPayPrice(), brokeragePercent, skuBrokeragePriceFun.apply(dto));
|
||||
for (BrokerageAddReqBO item : list) {
|
||||
int brokeragePerItem = calculateBrokerage(item.getPayPrice(), brokeragePercent, skuBrokeragePriceFun.apply(item));
|
||||
// TODO @疯狂:其实可以 brokeragePerItem <= 0 ,continue;这样 { 层级更少;代码更简洁;}
|
||||
if (brokeragePerItem > 0) {
|
||||
int brokerage = brokeragePerItem * dto.getCount();
|
||||
records.add(TradeBrokerageRecordConvert.INSTANCE.convert(user, dto.getBizId(), brokerageFrozenDays, brokerage, unfreezeTime));
|
||||
int brokerage = brokeragePerItem * item.getCount();
|
||||
records.add(TradeBrokerageRecordConvert.INSTANCE.convert(user, item.getBizId(), brokerageFrozenDays, brokerage, unfreezeTime));
|
||||
totalBrokerage += brokerage;
|
||||
}
|
||||
}
|
||||
|
||||
if (records.isEmpty()) {
|
||||
if (CollUtil.isEmpty(records)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 保存佣金记录
|
||||
// 1.3 保存佣金记录
|
||||
tradeBrokerageRecordMapper.insertBatch(records);
|
||||
|
||||
if (brokerageFrozenDays > 0) {
|
||||
// 更新用户冻结佣金
|
||||
// 2. 更新用户佣金
|
||||
if (brokerageFrozenDays > 0) { // 更新用户冻结佣金
|
||||
tradeBrokerageUserService.updateUserFrozenBrokeragePrice(user.getId(), totalBrokerage);
|
||||
} else {
|
||||
// 更新用户可用佣金
|
||||
} else { // 更新用户可用佣金
|
||||
tradeBrokerageUserService.updateUserBrokeragePrice(user.getId(), totalBrokerage);
|
||||
}
|
||||
}
|
||||
@@ -190,8 +192,8 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
|
||||
int count = 0;
|
||||
for (TradeBrokerageRecordDO record : records) {
|
||||
try {
|
||||
boolean successful = getSelf().unfreezeRecord(record);
|
||||
if (successful) {
|
||||
boolean success = getSelf().unfreezeRecord(record);
|
||||
if (success) {
|
||||
count++;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
@@ -215,7 +217,6 @@ public class TradeBrokerageRecordServiceImpl implements TradeBrokerageRecordServ
|
||||
|
||||
// 更新用户冻结佣金
|
||||
tradeBrokerageUserService.updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(record.getUserId(), -record.getPrice());
|
||||
|
||||
log.info("[unfreezeRecord][record({}) 更新为已结算成功]", record.getId());
|
||||
return true;
|
||||
}
|
||||
|
@@ -4,22 +4,29 @@ import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
// TODO @疯狂:要不要 service 还是拍平;就是都放在 brokerage 包下,然后 bo 里面,稍微分分;
|
||||
/**
|
||||
* 佣金 增加 Request BO
|
||||
*
|
||||
* @author owen
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class BrokerageAddReqBO {
|
||||
|
||||
// TODO @疯狂:bo 的话,也可以考虑加下 @Validated 注解,校验下参数;防御性下哈,虽然不一定用的到
|
||||
|
||||
/**
|
||||
* 业务ID
|
||||
*/
|
||||
private String bizId;
|
||||
// TODO @疯狂:不需要 payPrice 和 count,计算成 price 就好啦;
|
||||
/**
|
||||
* 商品支付价格
|
||||
*/
|
||||
private Integer payPrice;
|
||||
// TODO @疯狂:可以去掉 sku 哈,更抽象一点;
|
||||
/**
|
||||
* SKU 一级佣金
|
||||
*/
|
||||
@@ -32,4 +39,5 @@ public class BrokerageAddReqBO {
|
||||
* 购买数量
|
||||
*/
|
||||
private Integer count;
|
||||
|
||||
}
|
||||
|
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.user.TradeBrokerag
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
// TODO @疯狂:要不去掉 Trade 前缀哈;交易这块,我准备除了 tradeorder 保持下,类似 aftersale,都要取消前缀了;tradeorder 保持的原因,是避免 payorder 和它重复
|
||||
/**
|
||||
* 分销用户 Service 接口
|
||||
*
|
||||
@@ -70,6 +71,7 @@ public interface TradeBrokerageUserService {
|
||||
*/
|
||||
void updateUserBrokeragePrice(Long id, int brokeragePrice);
|
||||
|
||||
// TODO @疯狂:int 类型一般不用哈;尽量都用封装类型;不差这点内存哈;
|
||||
/**
|
||||
* 更新用户冻结佣金
|
||||
*
|
||||
@@ -85,4 +87,5 @@ public interface TradeBrokerageUserService {
|
||||
* @param frozenBrokeragePrice 减少冻结佣金(负数)
|
||||
*/
|
||||
void updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(Long id, int frozenBrokeragePrice);
|
||||
|
||||
}
|
||||
|
@@ -30,12 +30,6 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService
|
||||
@Resource
|
||||
private TradeBrokerageUserMapper brokerageUserMapper;
|
||||
|
||||
private void validateBrokerageUserExists(Long id) {
|
||||
if (brokerageUserMapper.selectById(id) == null) {
|
||||
throw exception(BROKERAGE_USER_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public TradeBrokerageUserDO getBrokerageUser(Long id) {
|
||||
return brokerageUserMapper.selectById(id);
|
||||
@@ -55,15 +49,23 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService
|
||||
public void updateBrokerageUserId(Long id, Long brokerageUserId) {
|
||||
// 校验存在
|
||||
validateBrokerageUserExists(id);
|
||||
|
||||
// TODO @疯狂:貌似没实现完
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateBrokerageEnabled(Long id, Boolean brokerageEnabled) {
|
||||
// 校验存在
|
||||
validateBrokerageUserExists(id);
|
||||
// TODO @疯狂:貌似没实现完
|
||||
}
|
||||
|
||||
private void validateBrokerageUserExists(Long id) {
|
||||
if (brokerageUserMapper.selectById(id) == null) {
|
||||
throw exception(BROKERAGE_USER_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO @疯狂:getBindBrokerageUser 会不会好点,因为统一使用 Bind 替代了 Invite
|
||||
@Override
|
||||
public TradeBrokerageUserDO getInviteBrokerageUser(Long id) {
|
||||
return Optional.ofNullable(id)
|
||||
@@ -73,6 +75,7 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
// TODO @疯狂:单个更新,不用事务哈;
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateUserBrokeragePrice(Long id, int brokeragePrice) {
|
||||
@@ -83,6 +86,7 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService
|
||||
}
|
||||
}
|
||||
|
||||
// TODO @疯狂:单个更新,不用事务哈;
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateUserFrozenBrokeragePrice(Long id, int frozenBrokeragePrice) {
|
||||
@@ -93,12 +97,14 @@ public class TradeBrokerageUserServiceImpl implements TradeBrokerageUserService
|
||||
}
|
||||
}
|
||||
|
||||
// TODO @疯狂:单个更新,不用事务哈;
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(Long id, int frozenBrokeragePrice) {
|
||||
Assert.isTrue(frozenBrokeragePrice < 0);
|
||||
int updateRows = brokerageUserMapper.updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(id, frozenBrokeragePrice);
|
||||
if (updateRows == 0) {
|
||||
// TODO @疯狂:挪到 trade 这变的错误码哈;
|
||||
throw exception(MEMBER_FROZEN_BROKERAGE_PRICE_NOT_ENOUGH);
|
||||
}
|
||||
}
|
||||
|
@@ -12,7 +12,6 @@ import javax.validation.Valid;
|
||||
*/
|
||||
public interface TradeConfigService {
|
||||
|
||||
|
||||
/**
|
||||
* 更新交易中心配置
|
||||
*
|
||||
|
@@ -25,6 +25,7 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomIntege
|
||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
// TODO @芋艿:单测后续看看
|
||||
/**
|
||||
* {@link TradeBrokerageRecordServiceImpl} 的单元测试类
|
||||
*
|
||||
|
@@ -17,6 +17,7 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEq
|
||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
// TODO @芋艿:单测后续看看
|
||||
/**
|
||||
* {@link TradeBrokerageUserServiceImpl} 的单元测试类
|
||||
*
|
||||
|
Reference in New Issue
Block a user