|
|
|
@ -5,20 +5,29 @@ import cn.hutool.core.util.StrUtil; |
|
|
|
import com.qniao.dam.api.command.reward.user.request.AcquireMatchmakerConfirmMatchRewardDto; |
|
|
|
import com.qniao.dam.api.command.reward.user.request.AcquireMatchmakerConfirmMeetingRewardDto; |
|
|
|
import com.qniao.dam.api.command.reward.user.request.UserAcquireMatchmakerJoinRecommendRewardDto; |
|
|
|
import com.qniao.dam.application.handler.revenuereward.RevenueRewardEventHandler; |
|
|
|
import com.qniao.dam.application.service.revenuereward.RevenueRewardApplicationService; |
|
|
|
import com.qniao.dam.domain.aggregate.ffpm.FranchiseFeeProfitManagementAggregate; |
|
|
|
import com.qniao.dam.domain.aggregate.ffpm.entity.FranchiseFeeProfitManagement; |
|
|
|
import com.qniao.dam.domain.aggregate.marriagebounty.entity.MarriageBountyOrder; |
|
|
|
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.service.revenuereward.AcquireRevenueRewardDomainService; |
|
|
|
import com.qniao.dam.domian.aggregate.ffpm.constant.FranchiseFeeProfitManagementTypeEnum; |
|
|
|
import com.qniao.dam.domian.aggregate.matchmaker.event.MatchmakerFranchiseFeeRewardEvent; |
|
|
|
import com.qniao.dam.domian.aggregate.pointaccount.event.PointRewardCreatedMQ; |
|
|
|
import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum; |
|
|
|
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; |
|
|
|
import com.qniao.dam.domian.aggregate.revenuereward.event.RevenueRewardUpdatedEvent; |
|
|
|
import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; |
|
|
|
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeSceneEnum; |
|
|
|
import com.qniao.dam.infrastructure.constant.MqExchange; |
|
|
|
import com.qniao.dam.infrastructure.persistent.dao.domain.*; |
|
|
|
import com.qniao.dam.query.matchmaker.MatchmakerQueryService; |
|
|
|
import com.qniao.dam.query.mntp.MatchmakerNoviceTaskProgressQueryService; |
|
|
|
import com.qniao.dam.query.operationcenter.OperationCenterQueryService; |
|
|
|
import com.qniao.dam.query.revenuereward.RevenueRewardQueryService; |
|
|
|
import com.qniao.dam.query.store.StoreQueryService; |
|
|
|
@ -33,9 +42,11 @@ import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; |
|
|
|
import com.qniao.dam.query.order.OrderQueryService; |
|
|
|
import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; |
|
|
|
import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation; |
|
|
|
import com.qniao.das.domian.aggregate.mntp.entity.MatchmakerNoviceTaskProgress; |
|
|
|
import com.qniao.dau.domain.aggregate.matchmaker.entity.Matchmaker; |
|
|
|
import com.qniao.dau.domain.aggregate.operationcenter.entity.OperationCenter; |
|
|
|
import com.qniao.dau.domain.aggregate.store.entity.Store; |
|
|
|
import com.qniao.dau.domian.aggregate.matchmaker.event.MatchmakerInvitedMQ; |
|
|
|
import com.qniao.dau.domian.aggregate.matchmakeraudit.constant.MatchmakerAuditBehaviorEnum; |
|
|
|
import com.qniao.domain.BaseApplicationService; |
|
|
|
import org.springframework.amqp.core.AmqpTemplate; |
|
|
|
@ -70,6 +81,16 @@ public class RewardApplicationService extends BaseApplicationService { |
|
|
|
private AmqpTemplate amqpTemplate; |
|
|
|
@Resource |
|
|
|
private RevenueRewardDao revenueRewardDao; |
|
|
|
@Resource |
|
|
|
private RevenueRewardAggregate revenueRewardAggregate; |
|
|
|
@Resource |
|
|
|
private RevenueRewardRecoveredRecordDao revenueRewardRecoveredRecordDao; |
|
|
|
@Resource |
|
|
|
private RevenueRewardApplicationService revenueRewardApplicationService; |
|
|
|
@Resource |
|
|
|
private MatchmakerNoviceTaskProgressQueryService matchmakerNoviceTaskProgressQueryService; |
|
|
|
@Resource |
|
|
|
private FranchiseFeeProfitManagementAggregate franchiseFeeProfitManagementAggregate; |
|
|
|
|
|
|
|
/** |
|
|
|
* 获得红娘推荐奖励 新政策 |
|
|
|
@ -78,11 +99,12 @@ public class RewardApplicationService extends BaseApplicationService { |
|
|
|
//红娘加盟订单 |
|
|
|
Order associateOrder = orderDao.selectById(dto.getAssociateOrderId()); |
|
|
|
if (Objects.nonNull(associateOrder)) { |
|
|
|
Matchmaker initiatorMatchmaker = null; |
|
|
|
BigDecimal rewardAmount = associateOrder.getSettlementAmount(); |
|
|
|
//推荐的红娘 |
|
|
|
if (Objects.nonNull(dto.getInitiatorUserId())) { |
|
|
|
synchronized (dto.getInitiatorUserId().toString().intern()) { |
|
|
|
Matchmaker initiatorMatchmaker = matchmakerQueryService.queryByUserId(dto.getInitiatorUserId()); |
|
|
|
initiatorMatchmaker = matchmakerQueryService.queryByUserId(dto.getInitiatorUserId()); |
|
|
|
//邀请红娘在有效期内才能拿到佣金+积分奖励 |
|
|
|
if (Objects.nonNull(initiatorMatchmaker) && initiatorMatchmaker.checkEnable()) { |
|
|
|
//奖励百分比 |
|
|
|
@ -148,20 +170,84 @@ public class RewardApplicationService extends BaseApplicationService { |
|
|
|
//门店回本前 拿100% 20%推荐费+50%门店费用(30%直接拿+20%新手任务完成)+ 30%回本补贴 |
|
|
|
//门店回本后 拿70% 20%推荐费+50%门店费用(30%直接拿+20%新手任务完成) |
|
|
|
RevenueReward storeRevenueReward = revenueRewardQueryService.queryByOrgId(dto.getStoreOrgId()); |
|
|
|
if (!storeRevenueReward.getAllRecoveryRequirement()){ |
|
|
|
//未回本 拿100% 20%推荐费+50%门店费用(30%直接拿+20%新手任务完成)+ 30%回本补贴 |
|
|
|
|
|
|
|
if (!storeRevenueReward.getAllRecoveryRequirement()) { |
|
|
|
//未回本 拿100% 20%推荐费+50%门店费用+ 30%回本补贴 |
|
|
|
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.OPERATING_RECOMMEND_50); |
|
|
|
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.PAYBACK_SUBSIDY_30); |
|
|
|
} else { |
|
|
|
//回本后 拿70% 20%推荐费+50%门店费用 |
|
|
|
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.OPERATING_RECOMMEND_50); |
|
|
|
//区域分润 |
|
|
|
handleStoreRecommendMatchmakerFee(store.getOperationCenterOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.SERVICE_PROVIDER_MANAGEMENT_FEE); |
|
|
|
} |
|
|
|
}else{ |
|
|
|
} else { |
|
|
|
//红娘推荐的话 |
|
|
|
//门店回本前+红娘没有完成新手任务: 红娘直接拿20%+30%回本补贴+对照新手任务奖励 |
|
|
|
//门店回本后: 红娘直接拿20%+30%回本补贴+对照新手任务奖励 |
|
|
|
|
|
|
|
if (Objects.nonNull(initiatorMatchmaker)) { |
|
|
|
MatchmakerNoviceTaskProgress matchmakerNoviceTaskProgress = matchmakerNoviceTaskProgressQueryService.queryByMatchmakerId(initiatorMatchmaker.getId()); |
|
|
|
if (Objects.nonNull(matchmakerNoviceTaskProgress)) { |
|
|
|
if (matchmakerNoviceTaskProgress.getIsFinish()) { |
|
|
|
// 红娘已完成新手任务 门店拿50%, 没回本再拿30%回本补贴 |
|
|
|
RevenueReward storeRevenueReward = revenueRewardQueryService.queryByOrgId(dto.getStoreOrgId()); |
|
|
|
if (!storeRevenueReward.getAllRecoveryRequirement()) { |
|
|
|
//未回本 门店拿50% + 30%回本补贴 |
|
|
|
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.OPERATING_RECOMMEND_50); |
|
|
|
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.PAYBACK_SUBSIDY_30); |
|
|
|
} else { |
|
|
|
//已回本 门店拿50% |
|
|
|
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.OPERATING_RECOMMEND_50); |
|
|
|
//区域分润 |
|
|
|
handleStoreRecommendMatchmakerFee(store.getOperationCenterOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.SERVICE_PROVIDER_MANAGEMENT_FEE); |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 红娘未完成 记录到 入驻费分佣管理中 |
|
|
|
FranchiseFeeProfitManagement franchiseFeeProfitManagement = FranchiseFeeProfitManagement.initUser(dto.getInitiatorUserId(), dto.getReceiveUserId(), |
|
|
|
FranchiseFeeProfitManagementTypeEnum.MATCHMAKER_RECOMMEND_MATCHMAKER, |
|
|
|
dto.getAssociateOrderId()); |
|
|
|
franchiseFeeProfitManagementAggregate.create(franchiseFeeProfitManagement); |
|
|
|
|
|
|
|
MatchmakerInvitedMQ matchmakerInvitedMQ = new MatchmakerInvitedMQ(); |
|
|
|
matchmakerInvitedMQ.setInitiatorMatchmakerUserId(dto.getInitiatorUserId()); |
|
|
|
matchmakerInvitedMQ.setReceiveMatchmakerType(dto.getMatchmakerType()); |
|
|
|
matchmakerInvitedMQ.setAssociateOrderId(dto.getAssociateOrderId()); |
|
|
|
amqpTemplate.convertAndSend(MqExchange.MATCHMAKER_INVITED, null, matchmakerInvitedMQ); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void handleStoreRecommendMatchmakerFee(Long orgId, |
|
|
|
String serviceProviderName, |
|
|
|
BigDecimal franchiseFee, |
|
|
|
RewardTypeEnum rewardType) { |
|
|
|
//服务商管理费 |
|
|
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(rewardType); |
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByOrgId(orgId); |
|
|
|
BigDecimal revenue = RewardConfig.calculatePct(franchiseFee, new BigDecimal(rewardConfig.getValue())); |
|
|
|
//线下收益 |
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, TradeSceneEnum.ONLINE, |
|
|
|
revenue, new BigDecimal(rewardConfig.getValue()), BigDecimal.ZERO, revenue, franchiseFee); |
|
|
|
revenueRewardRecord.handleContent(Collections.singletonList(serviceProviderName)); |
|
|
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|
|
|
//计算本次回本金额 |
|
|
|
revenueReward.handleRevenueReward(revenue); |
|
|
|
revenueRewardAggregate.save(revenueReward); |
|
|
|
//配置回本数据 |
|
|
|
RevenueRewardRecoveredRecord recoveredRecord = RevenueRewardRecoveredRecord.build(revenueReward.getId(), revenueRewardRecord.getId()); |
|
|
|
revenueRewardRecoveredRecordDao.insert(recoveredRecord); |
|
|
|
//补充管道收益 PIPELINE_REVENUE 全回本后才有管道收益 |
|
|
|
if (revenueReward.getAllRecoveryRequirement()) { |
|
|
|
revenueRewardApplicationService.pipeLineRevenue(orgId, revenueRewardRecord, TradeSceneEnum.OFFLINE); |
|
|
|
} |
|
|
|
//发送事件 检查是否满足回本要求 |
|
|
|
RevenueRewardUpdatedEvent reEvent = new RevenueRewardUpdatedEvent(revenueReward.getId()); |
|
|
|
this.sendEvent(reEvent); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 获得红娘推荐奖励 老政策 |
|
|
|
*/ |
|
|
|
|