|
|
|
@ -52,42 +52,46 @@ public class RewardApplicationService { |
|
|
|
|
|
|
|
/** |
|
|
|
* 获得红娘推荐奖励 |
|
|
|
* 通过分佣模式分配给门店(50%0.7)、运营中心(50%*0.3)和红娘(50%),没有红娘情况下门店(70%)、运营中心(30%), |
|
|
|
*/ |
|
|
|
public void acquireMatchmakerJoinRecommendReward(UserAcquireMatchmakerJoinRecommendRewardDto dto) { |
|
|
|
synchronized (dto.getInitiatorUserId().toString().intern()) { |
|
|
|
RewardConfig recommendRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND); |
|
|
|
RewardConfig serviceFeeRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.PLATFORM_SERVICE_FEE); |
|
|
|
if (Objects.nonNull(recommendRewardConfig) && Objects.nonNull(serviceFeeRewardConfig)) { |
|
|
|
Order associateOrder = orderQueryService.queryBySubCategory(dto.getReceiveUserId(), ProductSubCategoryEnum.MATCHMAKER_FRANCHISE_FEE); |
|
|
|
//收益信息 |
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getInitiatorUserId()); |
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
revenueReward = RevenueReward.init(dto.getInitiatorUserId()); |
|
|
|
} |
|
|
|
//营收额 |
|
|
|
BigDecimal revenue = recommendRewardConfig.calculate(associateOrder.getSettlementAmount()); |
|
|
|
//服务费用 |
|
|
|
BigDecimal serviceFee = serviceFeeRewardConfig.calculate(revenue); |
|
|
|
BigDecimal earnings = revenue.subtract(serviceFee); |
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, |
|
|
|
revenue, earnings, associateOrder.getSettlementAmount()); |
|
|
|
revenueRewardRecord.handleContent(Collections.singletonList(StrUtil.isNotBlank(associateOrder.getOrderBelongName()) ? associateOrder.getOrderBelongName() : "")); |
|
|
|
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); |
|
|
|
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); |
|
|
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|
|
|
//红娘加盟订单 |
|
|
|
Order associateOrder = orderQueryService.queryBySubCategory(dto.getReceiveUserId(), ProductSubCategoryEnum.MATCHMAKER_FRANCHISE_FEE); |
|
|
|
BigDecimal rewardAmount = associateOrder.getSettlementAmount(); |
|
|
|
//推荐的红娘 |
|
|
|
if (Objects.nonNull(dto.getInitiatorUserId())) { |
|
|
|
synchronized (dto.getInitiatorUserId().toString().intern()) { |
|
|
|
RewardConfig recommendRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND); |
|
|
|
if (Objects.nonNull(recommendRewardConfig)) { |
|
|
|
//收益信息 |
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getInitiatorUserId()); |
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
revenueReward = RevenueReward.initUser(dto.getInitiatorUserId()); |
|
|
|
} |
|
|
|
//营收额 |
|
|
|
BigDecimal revenue = recommendRewardConfig.calculate(rewardAmount); |
|
|
|
rewardAmount = rewardAmount.subtract(revenue); |
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, |
|
|
|
revenue, revenue, associateOrder.getSettlementAmount()); |
|
|
|
revenueRewardRecord.handleContent(Collections.singletonList(StrUtil.isNotBlank(associateOrder.getOrderBelongName()) ? associateOrder.getOrderBelongName() : "")); |
|
|
|
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); |
|
|
|
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); |
|
|
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|
|
|
|
|
|
|
//钱包信息 |
|
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getInitiatorUserId()); |
|
|
|
if (Objects.isNull(walletAccount)) { |
|
|
|
walletAccount = WalletAccount.init(dto.getInitiatorUserId()); |
|
|
|
//钱包信息 |
|
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getInitiatorUserId()); |
|
|
|
if (Objects.isNull(walletAccount)) { |
|
|
|
walletAccount = WalletAccount.init(dto.getInitiatorUserId()); |
|
|
|
} |
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue)); |
|
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
|
WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, revenue, true); |
|
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
|
} |
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings)); |
|
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
|
WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, earnings, true); |
|
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
|
} |
|
|
|
} |
|
|
|
//运营中心 + 门店提成 |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
@ -102,7 +106,7 @@ public class RewardApplicationService { |
|
|
|
//收益信息 |
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getReceiver()); |
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
revenueReward = RevenueReward.init(dto.getReceiver()); |
|
|
|
revenueReward = RevenueReward.initUser(dto.getReceiver()); |
|
|
|
} |
|
|
|
//营收额 |
|
|
|
BigDecimal revenue = dto.getReceivedAmount(); |
|
|
|
@ -149,7 +153,7 @@ public class RewardApplicationService { |
|
|
|
//收益信息 |
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getReceiver()); |
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
revenueReward = RevenueReward.init(dto.getReceiver()); |
|
|
|
revenueReward = RevenueReward.initUser(dto.getReceiver()); |
|
|
|
} |
|
|
|
//营收额 |
|
|
|
BigDecimal revenue = dto.getReceivedAmount(); |
|
|
|
|