|
|
|
@ -15,12 +15,17 @@ import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; |
|
|
|
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeSceneEnum; |
|
|
|
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; |
|
|
|
import com.qniao.dam.infrastructure.persistent.dao.domain.MatchmakerDao; |
|
|
|
import com.qniao.dam.query.livematchmaker.LiveMatchmakerQueryService; |
|
|
|
import com.qniao.dam.query.matchmakermarriage.MatchmakerMarriageInformationQueryService; |
|
|
|
import com.qniao.dam.query.recommendationrelation.RecommendationRelationQueryService; |
|
|
|
import com.qniao.dam.query.revenuereward.RevenueRewardQueryService; |
|
|
|
import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; |
|
|
|
import com.qniao.dam.query.walletaccount.WalletAccountQueryService; |
|
|
|
import com.qniao.das.domian.aggregate.matchmakermarriage.MatchmakerMarriageInformation; |
|
|
|
import com.qniao.das.domian.aggregate.recommendationrelation.entity.RecommendationRelation; |
|
|
|
import com.qniao.dau.domain.aggregate.livematchmaker.entity.LiveMatchmaker; |
|
|
|
import com.qniao.dau.domain.aggregate.matchmaker.entity.Matchmaker; |
|
|
|
import com.qniao.dau.domian.aggregate.lmar.constant.LiveMatchmakerTypeEnum; |
|
|
|
import com.qniao.domain.BaseApplicationService; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.springframework.stereotype.Component; |
|
|
|
@ -47,55 +52,58 @@ public class VirtualAccountEventHandler extends BaseApplicationService { |
|
|
|
private WalletAccountQueryService walletAccountQueryService; |
|
|
|
@Resource |
|
|
|
private AcquireRevenueRewardDomainService acquireRevenueRewardDomainService; |
|
|
|
@Resource |
|
|
|
private LiveMatchmakerQueryService livematchmakerQueryService; |
|
|
|
@Resource |
|
|
|
private RecommendationRelationQueryService recommendationRelationQueryService; |
|
|
|
|
|
|
|
@Subscribe |
|
|
|
private void handle(VirtualAccountCostGiftEvent event) { |
|
|
|
try { |
|
|
|
MatchmakerMarriageInformation marriageInformation = matchmakerMarriageInformationQueryService.queryByRecommend(event.getUserId()); |
|
|
|
if (Objects.nonNull(marriageInformation)) { |
|
|
|
RecommendationRelation recommendationRelation = recommendationRelationQueryService.queryByRefereeId(event.getUserId()); |
|
|
|
if (Objects.nonNull(recommendationRelation)) { |
|
|
|
BigDecimal pct = null; |
|
|
|
Matchmaker matchmaker = matchmakerDao.selectById(marriageInformation.getMatchmakerId()); |
|
|
|
if (ProductSubCategoryEnum.MATCHMAKER_FRANCHISE_FEE.equals(matchmaker.getType())) { |
|
|
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_PARTNER_RECOMMEND_COST_PCT); |
|
|
|
pct = new BigDecimal(rewardConfig.getValue()); |
|
|
|
} else if (ProductSubCategoryEnum.MATCHMAKER_ONLINE_FEE.equals(matchmaker.getType())) { |
|
|
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_ONLINE_RECOMMEND_COST_PCT); |
|
|
|
pct = new BigDecimal(rewardConfig.getValue()); |
|
|
|
} else if (ProductSubCategoryEnum.MATCHMAKER_TRAINEE_FEE.equals(matchmaker.getType())) { |
|
|
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_TRAINEE_RECOMMEND_COST_PCT); |
|
|
|
pct = new BigDecimal(rewardConfig.getValue()); |
|
|
|
} else if (ProductSubCategoryEnum.MATCHMAKER_FREE_FEE.equals(matchmaker.getType())) { |
|
|
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_FREE_RECOMMEND_COST_PCT); |
|
|
|
pct = new BigDecimal(rewardConfig.getValue()); |
|
|
|
} |
|
|
|
if (Objects.nonNull(pct)) { |
|
|
|
RewardConfig worthRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.VIRTUAL_ACCOUNT_WORTH); |
|
|
|
//收益信息 |
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(matchmaker.getUserId()); |
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
revenueReward = RevenueReward.initUser(matchmaker.getUserId()); |
|
|
|
LiveMatchmaker liveMatchmaker = livematchmakerQueryService.queryByUserId(recommendationRelation.getReferrerId()); |
|
|
|
if (Objects.nonNull(liveMatchmaker)) { |
|
|
|
if (LiveMatchmakerTypeEnum.CONTRACT_MATCHMAKER.equals(liveMatchmaker.getType())) { |
|
|
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.CONTRACT_MATCHMAKER_RECOMMEND_COST_PCT); |
|
|
|
pct = new BigDecimal(rewardConfig.getValue()); |
|
|
|
} else if (LiveMatchmakerTypeEnum.ONLINE_MATCHMAKER.equals(liveMatchmaker.getType())) { |
|
|
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.ONLINE_MATCHMAKER_RECOMMEND_COST_PCT); |
|
|
|
pct = new BigDecimal(rewardConfig.getValue()); |
|
|
|
} else if (LiveMatchmakerTypeEnum.TRAINEE_MATCHMAKER.equals(liveMatchmaker.getType())) { |
|
|
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.TRAINEE_MATCHMAKER_RECOMMEND_COST_PCT); |
|
|
|
pct = new BigDecimal(rewardConfig.getValue()); |
|
|
|
} |
|
|
|
//营收额 |
|
|
|
BigDecimal revenue = new BigDecimal(worthRewardConfig.getValue()).multiply(BigDecimal.valueOf(event.getCostBalance())) |
|
|
|
.multiply(pct).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); |
|
|
|
if (Objects.nonNull(pct)) { |
|
|
|
RewardConfig worthRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.VIRTUAL_ACCOUNT_WORTH); |
|
|
|
//收益信息 |
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(liveMatchmaker.getUserId()); |
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
revenueReward = RevenueReward.initUser(liveMatchmaker.getUserId()); |
|
|
|
} |
|
|
|
//营收额 |
|
|
|
BigDecimal revenue = new BigDecimal(worthRewardConfig.getValue()).multiply(BigDecimal.valueOf(event.getCostBalance())) |
|
|
|
.multiply(pct).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); |
|
|
|
|
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.RECOMMEND_GIFT_REWARD, TradeSceneEnum.ONLINE, |
|
|
|
revenue, BigDecimal.valueOf(100), BigDecimal.ZERO, revenue, BigDecimal.valueOf(event.getCostBalance())); |
|
|
|
//todo |
|
|
|
revenueRewardRecord.setContent("邀请分成"); |
|
|
|
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(event.getOrderId(), BigDecimal.valueOf(event.getCostBalance())); |
|
|
|
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); |
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.RECOMMEND_GIFT_REWARD, TradeSceneEnum.ONLINE, |
|
|
|
revenue, BigDecimal.valueOf(100), BigDecimal.ZERO, revenue, BigDecimal.valueOf(event.getCostBalance())); |
|
|
|
//todo |
|
|
|
revenueRewardRecord.setContent("邀请分成"); |
|
|
|
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(event.getOrderId(), BigDecimal.valueOf(event.getCostBalance())); |
|
|
|
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); |
|
|
|
|
|
|
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|
|
|
//钱包 |
|
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByType(matchmaker.getUserId(), IdentityTypeEnum.INDIVIDUAL); |
|
|
|
BigDecimal originalBalance = walletAccount.getTotalBalance(); |
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue)); |
|
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
|
WalletAccountRecord walletAccountRecord = WalletAccountRecord.build(TradeTypeEnum.RECOMMEND_GIFT_REWARD, revenue, true, originalBalance, walletAccount.getTotalBalance()); |
|
|
|
walletAccount.setRecordList(Collections.singletonList(walletAccountRecord)); |
|
|
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|
|
|
//钱包 |
|
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByType(liveMatchmaker.getUserId(), IdentityTypeEnum.INDIVIDUAL); |
|
|
|
BigDecimal originalBalance = walletAccount.getTotalBalance(); |
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue)); |
|
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
|
WalletAccountRecord walletAccountRecord = WalletAccountRecord.build(TradeTypeEnum.RECOMMEND_GIFT_REWARD, revenue, true, originalBalance, walletAccount.getTotalBalance()); |
|
|
|
walletAccount.setRecordList(Collections.singletonList(walletAccountRecord)); |
|
|
|
|
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
|