|
|
|
@ -102,58 +102,56 @@ public class RewardApplicationService extends BaseApplicationService { |
|
|
|
initiatorMatchmaker = matchmakerQueryService.queryByUserId(dto.getInitiatorUserId()); |
|
|
|
//邀请红娘在有效期内才能拿到佣金+积分奖励 |
|
|
|
if (Objects.nonNull(initiatorMatchmaker) && initiatorMatchmaker.checkEnable()) { |
|
|
|
//奖励百分比 |
|
|
|
BigDecimal recommendRewardPct = rewardConfigQueryService.queryRecommendRewardPct(dto.getInitiatorLevel(), dto.getReceiveLevel()); |
|
|
|
if (recommendRewardPct.compareTo(BigDecimal.ZERO) > 0) { |
|
|
|
//收益信息 |
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getInitiatorUserId()); |
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
revenueReward = RevenueReward.initUser(dto.getInitiatorUserId()); |
|
|
|
} |
|
|
|
//营收额 |
|
|
|
BigDecimal revenue = RewardConfig.calculatePct(rewardAmount, recommendRewardPct); |
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, TradeSceneEnum.ONLINE, |
|
|
|
revenue, recommendRewardPct, BigDecimal.ZERO, revenue, associateOrder.getSettlementAmount()); |
|
|
|
revenueRewardRecord.handleContent(Collections.singletonList(StrUtil.isNotBlank(dto.getReceiveUserName()) ? dto.getReceiveUserName() : "")); |
|
|
|
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); |
|
|
|
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); |
|
|
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|
|
|
|
|
|
|
//钱包信息 |
|
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByType(dto.getInitiatorUserId(), IdentityTypeEnum.INDIVIDUAL); |
|
|
|
BigDecimal originalBalance = walletAccount.getTotalBalance(); |
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue)); |
|
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
|
WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, revenue, true, originalBalance, walletAccount.getTotalBalance()); |
|
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
|
|
|
|
|
//发送红娘收益事件 |
|
|
|
if (MatchmakerAuditBehaviorEnum.REGISTER.equals(dto.getBehavior())) { |
|
|
|
MatchmakerFranchiseFeeRewardEvent rewardEvent = new MatchmakerFranchiseFeeRewardEvent(); |
|
|
|
rewardEvent.setMatchmakerId(initiatorMatchmaker.getId()); |
|
|
|
rewardEvent.setFranchiseFee(rewardAmount); |
|
|
|
rewardEvent.setStayFranchiseFee(rewardAmount.subtract(revenue)); |
|
|
|
rewardEvent.setReceiveUserName(dto.getReceiveUserName()); |
|
|
|
rewardEvent.setInitiatorLevel(dto.getInitiatorLevel()); |
|
|
|
rewardEvent.setReceiveLevel(dto.getReceiveLevel()); |
|
|
|
rewardEvent.setAssociateId(dto.getAssociateOrderId()); |
|
|
|
rewardEvent.setMaxReward(revenue); |
|
|
|
this.sendEvent(rewardEvent); |
|
|
|
} |
|
|
|
|
|
|
|
//积分奖励 |
|
|
|
PointRewardCreatedMQ mq = new PointRewardCreatedMQ(); |
|
|
|
mq.setOwnId(dto.getInitiatorUserId()); |
|
|
|
mq.setIdentityType(IdentityTypeEnum.INDIVIDUAL); |
|
|
|
mq.setPointType(PointRewardConfigTypeEnum.INVITE_MATCHMAKER); |
|
|
|
mq.setContent("邀请红娘:" + dto.getReceiveUserName()); |
|
|
|
mq.setIsIncome(true); |
|
|
|
mq.setAssociateId(dto.getAssociateOrderId()); |
|
|
|
mq.setAmount(rewardAmount); |
|
|
|
// 发送mq事件 |
|
|
|
amqpTemplate.convertAndSend(MqExchange.POINT_REWARD_CREATED, null, mq); |
|
|
|
//收益信息 |
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getInitiatorUserId()); |
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
revenueReward = RevenueReward.initUser(dto.getInitiatorUserId()); |
|
|
|
} |
|
|
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND); |
|
|
|
|
|
|
|
//营收额 |
|
|
|
BigDecimal revenue = rewardConfig.calculateReward(rewardAmount); |
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, TradeSceneEnum.ONLINE, |
|
|
|
revenue, new BigDecimal(rewardConfig.getValue()), BigDecimal.ZERO, revenue, associateOrder.getSettlementAmount()); |
|
|
|
revenueRewardRecord.handleContent(Collections.singletonList(StrUtil.isNotBlank(dto.getReceiveUserName()) ? dto.getReceiveUserName() : "")); |
|
|
|
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); |
|
|
|
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); |
|
|
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|
|
|
|
|
|
|
//钱包信息 |
|
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByType(dto.getInitiatorUserId(), IdentityTypeEnum.INDIVIDUAL); |
|
|
|
BigDecimal originalBalance = walletAccount.getTotalBalance(); |
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue)); |
|
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
|
WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, revenue, true, originalBalance, walletAccount.getTotalBalance()); |
|
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
|
|
|
|
|
//发送红娘收益事件 |
|
|
|
if (MatchmakerAuditBehaviorEnum.REGISTER.equals(dto.getBehavior())) { |
|
|
|
MatchmakerFranchiseFeeRewardEvent rewardEvent = new MatchmakerFranchiseFeeRewardEvent(); |
|
|
|
rewardEvent.setMatchmakerId(initiatorMatchmaker.getId()); |
|
|
|
rewardEvent.setFranchiseFee(rewardAmount); |
|
|
|
rewardEvent.setStayFranchiseFee(rewardAmount.subtract(revenue)); |
|
|
|
rewardEvent.setReceiveUserName(dto.getReceiveUserName()); |
|
|
|
rewardEvent.setInitiatorLevel(dto.getInitiatorLevel()); |
|
|
|
rewardEvent.setReceiveLevel(dto.getReceiveLevel()); |
|
|
|
rewardEvent.setAssociateId(dto.getAssociateOrderId()); |
|
|
|
rewardEvent.setMaxReward(revenue); |
|
|
|
this.sendEvent(rewardEvent); |
|
|
|
} |
|
|
|
|
|
|
|
//积分奖励 |
|
|
|
PointRewardCreatedMQ mq = new PointRewardCreatedMQ(); |
|
|
|
mq.setOwnId(dto.getInitiatorUserId()); |
|
|
|
mq.setIdentityType(IdentityTypeEnum.INDIVIDUAL); |
|
|
|
mq.setPointType(PointRewardConfigTypeEnum.INVITE_MATCHMAKER); |
|
|
|
mq.setContent("邀请红娘:" + dto.getReceiveUserName()); |
|
|
|
mq.setIsIncome(true); |
|
|
|
mq.setAssociateId(dto.getAssociateOrderId()); |
|
|
|
mq.setAmount(rewardAmount); |
|
|
|
// 发送mq事件 |
|
|
|
amqpTemplate.convertAndSend(MqExchange.POINT_REWARD_CREATED, null, mq); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|