|
|
|
@ -1,6 +1,7 @@ |
|
|
|
package com.qniao.dam.application.handler.order; |
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
|
import cn.hutool.core.util.StrUtil; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.google.common.eventbus.Subscribe; |
|
|
|
import com.qniao.dam.application.service.marriagebounty.MarriageBountyOrderApplicationService; |
|
|
|
@ -21,8 +22,15 @@ import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; |
|
|
|
import com.qniao.dam.domain.aggregate.productspec.repository.ProductSpecRepository; |
|
|
|
import com.qniao.dam.domain.aggregate.productspec.valueobj.ProductSpecTerm; |
|
|
|
import com.qniao.dam.domain.aggregate.purchaseproductrecord.vobj.PurchaseProductRecord; |
|
|
|
import com.qniao.dam.domain.aggregate.revenuereward.entity.RevenueReward; |
|
|
|
import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardAssociateOrderRecord; |
|
|
|
import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardRecord; |
|
|
|
import com.qniao.dam.domain.aggregate.rewardconfig.entity.RewardConfig; |
|
|
|
import com.qniao.dam.domain.aggregate.right.RightAggregate; |
|
|
|
import com.qniao.dam.domain.aggregate.right.entity.Right; |
|
|
|
import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; |
|
|
|
import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord; |
|
|
|
import com.qniao.dam.domain.service.revenuereward.AcquireRevenueRewardDomainService; |
|
|
|
import com.qniao.dam.domian.aggregate.externalorder.constant.ExternalOrderRelStatus; |
|
|
|
import com.qniao.dam.domian.aggregate.externalorder.constant.ExternalOrderTypeEnum; |
|
|
|
import com.qniao.dam.domian.aggregate.order.constant.MatchmakerOrderTypeEnum; |
|
|
|
@ -30,20 +38,29 @@ import com.qniao.dam.domian.aggregate.order.constant.OrderBelongingEnum; |
|
|
|
import com.qniao.dam.domian.aggregate.order.constant.OrderTypeEnum; |
|
|
|
import com.qniao.dam.domian.aggregate.order.event.ExternalOrderCompletedMQEvent; |
|
|
|
import com.qniao.dam.domian.aggregate.order.event.OrderCompletedEvent; |
|
|
|
import com.qniao.dam.domian.aggregate.product.constant.ProductMainCategoryEnum; |
|
|
|
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; |
|
|
|
import com.qniao.dam.domian.aggregate.product.constant.ProductTypeEnum; |
|
|
|
import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermNameEnum; |
|
|
|
import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; |
|
|
|
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.constant.MqExchange; |
|
|
|
import com.qniao.dam.infrastructure.persistent.dao.domain.ExternalOrderRelDao; |
|
|
|
import com.qniao.dam.infrastructure.persistent.dao.domain.MarriageInformationDao; |
|
|
|
import com.qniao.dam.infrastructure.persistent.dao.domain.SiteActivityDao; |
|
|
|
import com.qniao.dam.infrastructure.persistent.dao.domain.*; |
|
|
|
import com.qniao.dam.infrastructure.persistent.dao.purchaseproductrecord.PurchaseProductRecordDao; |
|
|
|
import com.qniao.dam.infrastructure.utils.SnowFlakeUtil; |
|
|
|
import com.qniao.dam.query.matchmakermarriage.MatchmakerMarriageInformationQueryService; |
|
|
|
import com.qniao.dam.query.product.ProductQueryService; |
|
|
|
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.marriageinformation.MarriageInformation; |
|
|
|
import com.qniao.das.domian.aggregate.matchmakermarriage.MatchmakerMarriageInformation; |
|
|
|
import com.qniao.das.domian.aggregate.siteactivity.SiteActivity; |
|
|
|
import com.qniao.dau.application.UecServerApplicationService; |
|
|
|
import com.qniao.dau.application.request.PaidMatchmakerFeeBySdkDto; |
|
|
|
import com.qniao.dau.domain.aggregate.matchmaker.entity.Matchmaker; |
|
|
|
import com.qniao.dau.domian.aggregate.matchmakingcorner.event.MatchmakingCornerPaidMQ; |
|
|
|
import com.qniao.domain.BaseApplicationService; |
|
|
|
import com.qniao.domain.BaseDomainEvent; |
|
|
|
@ -95,6 +112,18 @@ public class OrderEventHandler extends BaseApplicationService { |
|
|
|
@Resource |
|
|
|
private PurchaseProductRecordDao purchaseProductRecordDao; |
|
|
|
@Resource |
|
|
|
private MatchmakerMarriageInformationQueryService marriageInformationQueryService; |
|
|
|
@Resource |
|
|
|
private MatchmakerDao matchmakerDao; |
|
|
|
@Resource |
|
|
|
private RewardConfigQueryService rewardConfigQueryService; |
|
|
|
@Resource |
|
|
|
private RevenueRewardQueryService revenueRewardQueryService; |
|
|
|
@Resource |
|
|
|
private WalletAccountQueryService walletAccountQueryService; |
|
|
|
@Resource |
|
|
|
private AcquireRevenueRewardDomainService acquireRevenueRewardDomainService; |
|
|
|
@Resource |
|
|
|
private SnowFlakeUtil snowFlakeUtil; |
|
|
|
@Resource |
|
|
|
private AmqpTemplate amqpTemplate; |
|
|
|
@ -168,6 +197,63 @@ public class OrderEventHandler extends BaseApplicationService { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 订单分润处理 |
|
|
|
*/ |
|
|
|
@Subscribe |
|
|
|
public void handle2(OrderCompletedEvent event) { |
|
|
|
try { |
|
|
|
Order order = orderRepository.load(event.getId()); |
|
|
|
//权益处理 |
|
|
|
if (CollUtil.isNotEmpty(order.getOrderItemList())) { |
|
|
|
BigDecimal totalAmount = BigDecimal.ZERO; |
|
|
|
for (OrderItem orderItem : order.getOrderItemList()) { |
|
|
|
if (ProductMainCategoryEnum.CHAT_CARD.equals(orderItem.getMainCategory()) || |
|
|
|
ProductMainCategoryEnum.VIP.equals(orderItem.getMainCategory())) { |
|
|
|
totalAmount = totalAmount.add(orderItem.getSettlementAmount()); |
|
|
|
} |
|
|
|
} |
|
|
|
if (totalAmount.compareTo(BigDecimal.ZERO) > 0) { |
|
|
|
//推荐红娘分润 |
|
|
|
MatchmakerMarriageInformation matchmakerMarriageInformation = marriageInformationQueryService.queryByRecommend(order.getUserId()); |
|
|
|
if (Objects.nonNull(matchmakerMarriageInformation)) { |
|
|
|
Matchmaker matchmaker = matchmakerDao.selectById(matchmakerMarriageInformation.getMatchmakerId()); |
|
|
|
if (Objects.nonNull(matchmaker) && matchmaker.checkEnable()) { |
|
|
|
synchronized (matchmaker.getUserId().toString().intern()) { |
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(matchmaker.getUserId()); |
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
revenueReward = RevenueReward.initUser(matchmaker.getUserId()); |
|
|
|
} |
|
|
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_RECOMMEND_COST_PCT); |
|
|
|
|
|
|
|
//营收额 |
|
|
|
BigDecimal revenue = rewardConfig.calculateReward(totalAmount); |
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.QZQ_RECOMMEND_GIFT_REWARD, TradeSceneEnum.ONLINE, |
|
|
|
revenue, new BigDecimal(rewardConfig.getValue()), BigDecimal.ZERO, revenue, order.getSettlementAmount()); |
|
|
|
revenueRewardRecord.setContent(order.getOrderBelongName() + "消费分成"); |
|
|
|
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(order.getId(), order.getSettlementAmount()); |
|
|
|
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 record = WalletAccountRecord.build(TradeTypeEnum.QZQ_RECOMMEND_GIFT_REWARD, revenue, true, originalBalance, walletAccount.getTotalBalance()); |
|
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
log.error("订单已完成事件处理异常", e); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void giftSiteActivityOrder(Long externalId, Long userId, Long miId) { |
|
|
|
SiteActivity siteActivity = siteActivityDao.selectById(externalId); |
|
|
|
MarriageInformation marriageInformation = marriageInformationDao.selectById(miId); |
|
|
|
|