Browse Source

用户使用联系卡

master
张彭杰 1 month ago
parent
commit
d30d19b5db
4 changed files with 93 additions and 21 deletions
  1. 2
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardRecord.java
  2. 76
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/order/OrderEventHandler.java
  3. 10
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/revenuereward/RevenueRewardEventHandler.java
  4. 26
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java

2
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardRecord.java

@ -85,6 +85,8 @@ public class RevenueRewardRecord extends ValueObject<RevenueRewardRecord> {
content = StrUtil.format("推荐{}参与{}", elements.toArray());
} else if (TradeTypeEnum.SERVICE_PROVIDER_RECOMMEND_FEE.equals(tradeType)) {
content = StrUtil.format("推荐服务商{}入驻平台", elements.toArray());
} else if (TradeTypeEnum.QZQ_RECOMMEND_GIFT_REWARD.equals(tradeType)) {
content = StrUtil.format("{}消费分成", elements.toArray());
}
}
}

76
dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/order/OrderEventHandler.java

@ -6,12 +6,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.google.common.eventbus.Subscribe;
import com.qniao.dam.application.service.marriagebounty.MarriageBountyOrderApplicationService;
import com.qniao.dam.application.service.order.OrderApplicationService;
import com.qniao.dam.application.service.reward.RewardApplicationService;
import com.qniao.dam.application.service.right.RightApplicationService;
import com.qniao.dam.application.service.virtualaccount.VirtualAccountApplicationService;
import com.qniao.dam.domain.aggregate.activity.entity.Activity;
import com.qniao.dam.domain.aggregate.activity.repository.ActivityRepository;
import com.qniao.dam.domain.aggregate.externalorder.ExternalOrderRelAggregate;
import com.qniao.dam.domain.aggregate.externalorder.entity.ExternalOrderRel;
import com.qniao.dam.domain.aggregate.ffpm.entity.FranchiseFeeProfitManagement;
import com.qniao.dam.domain.aggregate.order.OrderAggregate;
import com.qniao.dam.domain.aggregate.order.entity.Order;
import com.qniao.dam.domain.aggregate.order.entity.OrderItem;
@ -42,6 +44,7 @@ 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.revenuereward.event.RevenueRewardUpdatedEvent;
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;
@ -54,6 +57,7 @@ import com.qniao.dam.query.matchmakermarriage.MatchmakerMarriageInformationQuery
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.store.StoreQueryService;
import com.qniao.dam.query.walletaccount.WalletAccountQueryService;
import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation;
import com.qniao.das.domian.aggregate.matchmakermarriage.MatchmakerMarriageInformation;
@ -61,6 +65,7 @@ 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.domain.aggregate.store.entity.Store;
import com.qniao.dau.domian.aggregate.matchmakingcorner.event.MatchmakingCornerPaidMQ;
import com.qniao.domain.BaseApplicationService;
import com.qniao.domain.BaseDomainEvent;
@ -124,6 +129,10 @@ public class OrderEventHandler extends BaseApplicationService {
@Resource
private AcquireRevenueRewardDomainService acquireRevenueRewardDomainService;
@Resource
private StoreQueryService storeQueryService;
@Resource
private OrderDao orderDao;
@Resource
private SnowFlakeUtil snowFlakeUtil;
@Resource
private AmqpTemplate amqpTemplate;
@ -231,9 +240,9 @@ public class OrderEventHandler extends BaseApplicationService {
BigDecimal revenue = rewardConfig.calculateReward(totalAmount);
if (revenue.compareTo(BigDecimal.ZERO) > 0) {
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());
revenue, new BigDecimal(rewardConfig.getValue()), BigDecimal.ZERO, revenue, totalAmount);
revenueRewardRecord.handleContent(Collections.singletonList(order.getOrderBelongName()));
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(order.getId(), totalAmount);
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord));
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord));
@ -247,15 +256,74 @@ public class OrderEventHandler extends BaseApplicationService {
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount);
}
}
//门店区域分润
//站点分佣金
if (Objects.nonNull(matchmaker.getStoreId())) {
TradeTypeEnum tradeType = TradeTypeEnum.QZQ_RECOMMEND_GIFT_REWARD;
//门店收益
Store store = storeQueryService.queryById(matchmaker.getStoreId());
handleAcquireReward(store.getOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_STORE_REWARD, totalAmount, order.getOrderBelongName(),
order.getSettlementAmount(), Collections.singletonList(order.getId()), tradeType);
//运营中心
if (Objects.nonNull(store.getOperationCenterOrgId())) {
handleAcquireReward(store.getOperationCenterOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_OPERATION_CENTER_REWARD, totalAmount, order.getOrderBelongName(),
order.getSettlementAmount(), Collections.singletonList(order.getId()), tradeType);
}
}
}
}
}
}
} catch (Exception e) {
} catch (
Exception e) {
log.error("订单已完成事件处理异常", e);
}
}
private void handleAcquireReward(Long identityId,
IdentityTypeEnum identityType,
RewardTypeEnum rewardType,
BigDecimal amount,
String orderBelongName,
BigDecimal totalAssociateOrderAmount,
List<Long> orderIdRekList,
TradeTypeEnum tradeType) {
if (Objects.nonNull(identityId)) {
synchronized (identityId.toString().intern()) {
RewardConfig recommendRewardConfig = rewardConfigQueryService.queryByRewardType(rewardType);
if (Objects.nonNull(recommendRewardConfig)) {
//收益信息
RevenueReward revenueReward = revenueRewardQueryService.queryByType(identityId, identityType);
//营收额
BigDecimal revenue = recommendRewardConfig.calculateReward(amount);
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(tradeType, TradeSceneEnum.ONLINE,
revenue, new BigDecimal(recommendRewardConfig.getValue()), BigDecimal.ZERO, revenue, totalAssociateOrderAmount);
revenueRewardRecord.handleContent(Collections.singletonList(orderBelongName));
if (CollUtil.isNotEmpty(orderIdRekList)) {
List<RevenueRewardAssociateOrderRecord> associateOrderRecordList = new ArrayList<>();
for (Long associateOrderId : orderIdRekList) {
Order associateOrder = orderDao.selectById(associateOrderId);
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount());
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord));
associateOrderRecordList.add(associateOrderRecord);
}
revenueRewardRecord.setAssociateOrderRecordList(associateOrderRecordList);
}
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord));
//钱包信息
WalletAccount walletAccount = walletAccountQueryService.queryByType(identityId, identityType);
BigDecimal originalBalance = walletAccount.getTotalBalance();
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue));
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance()));
WalletAccountRecord record = WalletAccountRecord.build(tradeType, revenue, true, originalBalance, walletAccount.getTotalBalance());
walletAccount.setRecordList(Collections.singletonList(record));
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount);
}
}
}
}
private void giftSiteActivityOrder(Long externalId, Long userId, Long miId) {
SiteActivity siteActivity = siteActivityDao.selectById(externalId);
MarriageInformation marriageInformation = marriageInformationDao.selectById(miId);

10
dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/revenuereward/RevenueRewardEventHandler.java

@ -297,8 +297,8 @@ public class RevenueRewardEventHandler extends BaseApplicationService {
RevenueReward storeRevenueReward = revenueRewardQueryService.queryByOrgId(store.getOrgId());
if (!storeRevenueReward.getAllRecoveryRequirement()) {
//未回本 拿100% 20%推荐费+50%门店费用+ 30%回本补贴
rewardApplicationService.handleStoreRecommendMatchmakerFee(store.getOrgId(), associateOrder.getOrderBelongName(), associateOrder.getSettlementAmount(), RewardTypeEnum.OPERATING_RECOMMEND_50, associateOrder);
rewardApplicationService.handleStoreRecommendMatchmakerFee(store.getOrgId(), associateOrder.getOrderBelongName(), associateOrder.getSettlementAmount(), RewardTypeEnum.PAYBACK_SUBSIDY_30, associateOrder);
rewardApplicationService.handleStoreRecommendMatchmakerFee(store.getOrgId(), associateOrder.getOrderBelongName(), associateOrder.getSettlementAmount(), RewardTypeEnum.OPERATING_RECOMMEND_50, associateOrder,TradeTypeEnum.MATCHMAKER_NOVICE_TASK_REWARD);
rewardApplicationService.handleStoreRecommendMatchmakerFee(store.getOrgId(), associateOrder.getOrderBelongName(), associateOrder.getSettlementAmount(), RewardTypeEnum.PAYBACK_SUBSIDY_30, associateOrder,TradeTypeEnum.MATCHMAKER_NOVICE_TASK_REWARD);
//发送事件 检查是否满足回本要求
RevenueReward stRevenueReward = revenueRewardQueryService.queryByOrgId(store.getOrgId());
@ -306,8 +306,8 @@ public class RevenueRewardEventHandler extends BaseApplicationService {
handle(storeReEvent);
} else {
//回本后 拿70% 20%推荐费+50%门店费用
rewardApplicationService.handleStoreRecommendMatchmakerFee(store.getOrgId(), associateOrder.getOrderBelongName(), associateOrder.getSettlementAmount(), RewardTypeEnum.OPERATING_RECOMMEND_50, associateOrder);
rewardApplicationService.handleStoreRecommendMatchmakerFee(store.getOrgId(), associateOrder.getOrderBelongName(), associateOrder.getSettlementAmount(), RewardTypeEnum.SERVICE_PROVIDER_MANAGEMENT_FEE, associateOrder);
rewardApplicationService.handleStoreRecommendMatchmakerFee(store.getOrgId(), associateOrder.getOrderBelongName(), associateOrder.getSettlementAmount(), RewardTypeEnum.OPERATING_RECOMMEND_50, associateOrder,TradeTypeEnum.MATCHMAKER_NOVICE_TASK_REWARD);
rewardApplicationService.handleStoreRecommendMatchmakerFee(store.getOrgId(), associateOrder.getOrderBelongName(), associateOrder.getSettlementAmount(), RewardTypeEnum.SERVICE_PROVIDER_MANAGEMENT_FEE, associateOrder,TradeTypeEnum.MATCHMAKER_NOVICE_TASK_REWARD);
//发送事件 检查是否满足回本要求
RevenueReward stRevenueReward = revenueRewardQueryService.queryByOrgId(store.getOrgId());
@ -315,7 +315,7 @@ public class RevenueRewardEventHandler extends BaseApplicationService {
handle(storeReEvent);
//区域分润
rewardApplicationService.handleStoreRecommendMatchmakerFee(store.getOperationCenterOrgId(), associateOrder.getOrderBelongName(), associateOrder.getSettlementAmount(), RewardTypeEnum.SERVICE_PROVIDER_MANAGEMENT_FEE, associateOrder);
rewardApplicationService.handleStoreRecommendMatchmakerFee(store.getOperationCenterOrgId(), associateOrder.getOrderBelongName(), associateOrder.getSettlementAmount(), RewardTypeEnum.SERVICE_PROVIDER_MANAGEMENT_FEE, associateOrder,TradeTypeEnum.MATCHMAKER_NOVICE_TASK_REWARD);
//发送事件 检查是否满足回本要求
RevenueReward operationCenterRevenueReward = revenueRewardQueryService.queryByOrgId(store.getOperationCenterOrgId());
RevenueRewardUpdatedEvent operationCenterReEvent = new RevenueRewardUpdatedEvent(operationCenterRevenueReward.getId());

26
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java

@ -167,8 +167,8 @@ public class RewardApplicationService extends BaseApplicationService {
RevenueReward storeRevenueReward = revenueRewardQueryService.queryByOrgId(dto.getStoreOrgId());
if (Objects.nonNull(store.getFranchiseFee()) && store.getFranchiseFee().compareTo(BigDecimal.ZERO) > 0 && !storeRevenueReward.getAllRecoveryRequirement()) {
//未回本 拿100% 20%推荐费+50%门店费用+ 30%回本补贴
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.OPERATING_RECOMMEND_50, associateOrder);
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.PAYBACK_SUBSIDY_30, associateOrder);
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.OPERATING_RECOMMEND_50, associateOrder,TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE);
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.PAYBACK_SUBSIDY_30, associateOrder,TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE);
//发送事件 检查是否满足回本要求
RevenueReward stRevenueReward = revenueRewardQueryService.queryByOrgId(dto.getStoreOrgId());
@ -176,14 +176,14 @@ public class RewardApplicationService extends BaseApplicationService {
this.sendEvent(storeReEvent);
} else {
//回本后 拿70% 20%推荐费+50%门店费用
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.OPERATING_RECOMMEND_50, associateOrder);
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.OPERATING_RECOMMEND_50, associateOrder,TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE);
//发送事件 检查是否满足回本要求
RevenueReward stRevenueReward = revenueRewardQueryService.queryByOrgId(dto.getStoreOrgId());
RevenueRewardUpdatedEvent storeReEvent = new RevenueRewardUpdatedEvent(stRevenueReward.getId());
this.sendEvent(storeReEvent);
//区域分润
handleStoreRecommendMatchmakerFee(store.getOperationCenterOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.SERVICE_PROVIDER_MANAGEMENT_FEE, associateOrder);
handleStoreRecommendMatchmakerFee(store.getOperationCenterOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.SERVICE_PROVIDER_MANAGEMENT_FEE, associateOrder,TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE);
//发送事件 检查是否满足回本要求
RevenueReward operationCenterRevenueReward = revenueRewardQueryService.queryByOrgId(store.getOperationCenterOrgId());
RevenueRewardUpdatedEvent operationCenterReEvent = new RevenueRewardUpdatedEvent(operationCenterRevenueReward.getId());
@ -231,23 +231,24 @@ public class RewardApplicationService extends BaseApplicationService {
RevenueReward storeRevenueReward = revenueRewardQueryService.queryByOrgId(dto.getStoreOrgId());
if (!storeRevenueReward.getAllRecoveryRequirement()) {
//未回本 门店拿50% + 30%回本补贴
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.OPERATING_RECOMMEND_50, associateOrder);
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.PAYBACK_SUBSIDY_30, associateOrder);
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.OPERATING_RECOMMEND_50, associateOrder,TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE);
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.PAYBACK_SUBSIDY_30, associateOrder,TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE);
//发送事件 检查是否满足回本要求.
RevenueReward stRevenueReward = revenueRewardQueryService.queryByOrgId(dto.getStoreOrgId());
RevenueRewardUpdatedEvent storeReEvent = new RevenueRewardUpdatedEvent(stRevenueReward.getId());
this.sendEvent(storeReEvent);
} else {
//已回本 门店拿50%
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.OPERATING_RECOMMEND_50, associateOrder);
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.SERVICE_PROVIDER_MANAGEMENT_FEE, associateOrder);
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.OPERATING_RECOMMEND_50, associateOrder,TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE);
handleStoreRecommendMatchmakerFee(store.getOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.SERVICE_PROVIDER_MANAGEMENT_FEE, associateOrder,TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE);
//发送事件 检查是否满足回本要求
RevenueReward stRevenueReward = revenueRewardQueryService.queryByOrgId(dto.getStoreOrgId());
RevenueRewardUpdatedEvent storeReEvent = new RevenueRewardUpdatedEvent(stRevenueReward.getId());
this.sendEvent(storeReEvent);
//区域分润
handleStoreRecommendMatchmakerFee(store.getOperationCenterOrgId(), dto.getReceiveUserName(), rewardAmount, RewardTypeEnum.SERVICE_PROVIDER_MANAGEMENT_FEE, associateOrder);
handleStoreRecommendMatchmakerFee(store.getOperationCenterOrgId(), dto.getReceiveUserName(), rewardAmount,
RewardTypeEnum.SERVICE_PROVIDER_MANAGEMENT_FEE, associateOrder,TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE);
//发送事件 检查是否满足回本要求
RevenueReward operationCenterRevenueReward = revenueRewardQueryService.queryByOrgId(store.getOperationCenterOrgId());
RevenueRewardUpdatedEvent operationCenterReEvent = new RevenueRewardUpdatedEvent(operationCenterRevenueReward.getId());
@ -259,13 +260,14 @@ public class RewardApplicationService extends BaseApplicationService {
String name,
BigDecimal franchiseFee,
RewardTypeEnum rewardType,
Order associateOrder) {
Order associateOrder,
TradeTypeEnum tradeType) {
//服务商管理费
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,
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(tradeType, TradeSceneEnum.ONLINE,
revenue, new BigDecimal(rewardConfig.getValue()), BigDecimal.ZERO, revenue, franchiseFee);
revenueRewardRecord.handleContent(Collections.singletonList(name));
if (RewardTypeEnum.PAYBACK_SUBSIDY_30.equals(rewardType)) {
@ -282,7 +284,7 @@ public class RewardApplicationService extends BaseApplicationService {
BigDecimal originalBalance = walletAccount.getTotalBalance();
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue));
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance()));
WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, revenue, true, originalBalance, walletAccount.getTotalBalance());
WalletAccountRecord record = WalletAccountRecord.build(tradeType, revenue, true, originalBalance, walletAccount.getTotalBalance());
walletAccount.setRecordList(Collections.singletonList(record));
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount);

Loading…
Cancel
Save