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 fa38919..41d4b2a 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 @@ -28,6 +28,8 @@ public enum TradeTypeEnum { PIPELINE_REVENUE_FEE(109, "管道收益"), + MATCHMAKER_NOVICE_TASK_REWARD(110, "红娘新手任务奖励"), + PLATFORM_SERVICE_FEE(201, "平台服务费"), WITHDRAW(202, "提现"); diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/revenuereward/RevenueRewardEventHandler.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/revenuereward/RevenueRewardEventHandler.java index a67d5f1..0dfaf30 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/revenuereward/RevenueRewardEventHandler.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/revenuereward/RevenueRewardEventHandler.java @@ -1,6 +1,7 @@ package com.qniao.dam.application.handler.revenuereward; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.google.common.eventbus.Subscribe; import com.qniao.dam.application.service.revenuereward.RevenueRewardApplicationService; import com.qniao.dam.application.service.reward.RewardApplicationService; @@ -9,9 +10,14 @@ import com.qniao.dam.domain.aggregate.ffpm.entity.FranchiseFeeProfitManagement; import com.qniao.dam.domain.aggregate.order.entity.Order; import com.qniao.dam.domain.aggregate.revenuereward.RevenueRewardAggregate; 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.revenuereward.valueobj.RevenueRewardRecoveredRecord; import com.qniao.dam.domain.aggregate.rewardconfig.entity.RewardConfig; +import com.qniao.dam.domain.aggregate.walletaccount.WalletAccountAggregate; +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.ffpm.constant.FranchiseFeeProfitManagementTypeEnum; import com.qniao.dam.domian.aggregate.revenuereward.event.RevenueRewardRecoveryRequirementFilledEvent; import com.qniao.dam.domian.aggregate.revenuereward.event.RevenueRewardUpdatedEvent; @@ -31,6 +37,7 @@ import com.qniao.dam.query.operationcenter.OperationCenterQueryService; import com.qniao.dam.query.revenuereward.RevenueRewardQueryService; import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; import com.qniao.dam.query.store.StoreQueryService; +import com.qniao.dam.query.walletaccount.WalletAccountQueryService; import com.qniao.das.domian.aggregate.mntp.event.MatchmakerNoviceTaskProgressFinishedMQ; import com.qniao.dau.domain.aggregate.operationcenter.entity.OperationCenter; import com.qniao.dau.domain.aggregate.organization.entity.Organization; @@ -86,6 +93,12 @@ public class RevenueRewardEventHandler extends BaseApplicationService { private RewardApplicationService rewardApplicationService; @Resource private StoreDao storeDao; + @Resource + private WalletAccountQueryService walletAccountQueryService; + @Resource + private AcquireRevenueRewardDomainService acquireRevenueRewardDomainService; + @Resource + private WalletAccountAggregate walletAccountAggregate; @RabbitListener(bindings = @QueueBinding(value = @Queue(MqQueue.OPERATION_CENTER_CREATED), exchange = @Exchange(value = MqExchange.OPERATION_CENTER_CREATED, @@ -287,9 +300,45 @@ public class RevenueRewardEventHandler extends BaseApplicationService { //todo 推荐的红娘不在一个门店中,收益是否归门店 //todo 红娘的新手任务奖励 + handleStoreNoviceTaskReward(store.getOrgId(), mq.getMatchmakerExtraBonus(), mq.getMatchmakerName()); + handleMatchmakerNoviceTaskReward(mq.getMatchmakerUserId(), mq.getMatchmakerExtraBonus()); + } } catch (Exception e) { log.error("新手任务完成事件处理异常", e); } } + + private void handleStoreNoviceTaskReward(Long orgId, BigDecimal revenue, String matchmakerName) { + //钱包信息 + WalletAccount walletAccount = walletAccountQueryService.queryByType(orgId, IdentityTypeEnum.ORGANIZATION); + BigDecimal originalBalance = walletAccount.getTotalBalance(); + walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().subtract(revenue)); + walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); + WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_NOVICE_TASK_REWARD, revenue, false, originalBalance, walletAccount.getTotalBalance()); + record.setRemark(matchmakerName + TradeTypeEnum.MATCHMAKER_NOVICE_TASK_REWARD.getDesc()); + walletAccount.setRecordList(Collections.singletonList(record)); + walletAccountAggregate.save(walletAccount); + } + + private void handleMatchmakerNoviceTaskReward(Long matchmakerUserId, BigDecimal revenue) { + //收益信息 + RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(matchmakerUserId); + if (Objects.isNull(revenueReward)) { + revenueReward = RevenueReward.initUser(matchmakerUserId); + } + RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_NOVICE_TASK_REWARD, TradeSceneEnum.ONLINE, + revenue, BigDecimal.ZERO, BigDecimal.ZERO, revenue, BigDecimal.ZERO); + revenueRewardRecord.setContent(TradeTypeEnum.MATCHMAKER_NOVICE_TASK_REWARD.getDesc()); + revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); + + //钱包信息 + WalletAccount walletAccount = walletAccountQueryService.queryByType(matchmakerUserId, 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_NOVICE_TASK_REWARD, revenue, true, originalBalance, walletAccount.getTotalBalance()); + walletAccount.setRecordList(Collections.singletonList(record)); + acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); + } }