|
@@ -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;
|
|
|
}
|