|
|
|
@ -71,11 +71,97 @@ public class RewardApplicationService extends BaseApplicationService { |
|
|
|
@Resource |
|
|
|
private RevenueRewardDao revenueRewardDao; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 获得红娘推荐奖励 |
|
|
|
* 获得红娘推荐奖励 新政策 |
|
|
|
*/ |
|
|
|
public void acquireMatchmakerJoinRecommendReward(UserAcquireMatchmakerJoinRecommendRewardDto dto) { |
|
|
|
//红娘加盟订单 |
|
|
|
Order associateOrder = orderDao.selectById(dto.getAssociateOrderId()); |
|
|
|
if (Objects.nonNull(associateOrder)) { |
|
|
|
BigDecimal rewardAmount = associateOrder.getSettlementAmount(); |
|
|
|
//推荐的红娘 |
|
|
|
if (Objects.nonNull(dto.getInitiatorUserId())) { |
|
|
|
synchronized (dto.getInitiatorUserId().toString().intern()) { |
|
|
|
Matchmaker 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); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//门店提成 |
|
|
|
Store store = storeQueryService.queryByOrg(dto.getStoreOrgId()); |
|
|
|
if (dto.getInitiatorUserId().equals(store.getAdministratorId())) { |
|
|
|
//门店直推的话 |
|
|
|
//门店回本前 拿100% 20%推荐费+50%门店费用(30%直接拿+20%新手任务完成)+ 30%回本补贴 |
|
|
|
//门店回本后 拿70% 20%推荐费+50%门店费用(30%直接拿+20%新手任务完成) |
|
|
|
|
|
|
|
}else{ |
|
|
|
//红娘推荐的话 |
|
|
|
//门店回本前+红娘没有完成新手任务: 红娘直接拿20%+30%回本补贴+对照新手任务奖励 |
|
|
|
//门店回本后: 红娘直接拿20%+30%回本补贴+对照新手任务奖励 |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 获得红娘推荐奖励 老政策 |
|
|
|
*/ |
|
|
|
public void acquireMatchmakerJoinRecommendRewardOld(UserAcquireMatchmakerJoinRecommendRewardDto dto) { |
|
|
|
//红娘加盟订单 |
|
|
|
Order associateOrder = orderDao.selectById(dto.getAssociateOrderId()); |
|
|
|
if (Objects.nonNull(associateOrder)) { |
|
|
|
|