diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java index 21a6b02..75f5316 100644 --- a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java @@ -29,6 +29,8 @@ public enum RewardTypeEnum { MATCHMAKER_RENEW_DISCOUNT(108, "红娘续费折扣"), + MATCHMAKER_RECOMMEND_COST_PCT(109, "红娘推荐消费收益百分比-趣招亲"), + /** * 线上红娘 */ diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java index 17743a0..3682ef9 100644 --- a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java @@ -46,6 +46,8 @@ public enum TradeTypeEnum { CHANNEL_GIFT_REWARD(118, "直播礼物收益"), + QZQ_RECOMMEND_GIFT_REWARD(119, "邀请分成"), + PLATFORM_SERVICE_FEE(201, "平台服务费"), WITHDRAW(202, "提现"); diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/order/OrderEventHandler.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/order/OrderEventHandler.java index 68b385d..095e545 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/order/OrderEventHandler.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/order/OrderEventHandler.java @@ -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);