|
|
@ -48,10 +48,6 @@ public class RewardApplicationService { |
|
|
@Resource |
|
|
@Resource |
|
|
private WalletAccountQueryService walletAccountQueryService; |
|
|
private WalletAccountQueryService walletAccountQueryService; |
|
|
@Resource |
|
|
@Resource |
|
|
private WalletAccountAggregate walletAccountAggregate; |
|
|
|
|
|
@Resource |
|
|
|
|
|
private OrderQueryService orderQueryService; |
|
|
|
|
|
@Resource |
|
|
|
|
|
private MarriageInformationDao marriageInformationDao; |
|
|
private MarriageInformationDao marriageInformationDao; |
|
|
@Resource |
|
|
@Resource |
|
|
private OrderDao orderDao; |
|
|
private OrderDao orderDao; |
|
|
@ -78,43 +74,47 @@ public class RewardApplicationService { |
|
|
//推荐的红娘 |
|
|
//推荐的红娘 |
|
|
if (Objects.nonNull(dto.getInitiatorUserId())) { |
|
|
if (Objects.nonNull(dto.getInitiatorUserId())) { |
|
|
synchronized (dto.getInitiatorUserId().toString().intern()) { |
|
|
synchronized (dto.getInitiatorUserId().toString().intern()) { |
|
|
//奖励百分比 |
|
|
|
|
|
BigDecimal recommendRewardPct = rewardConfigQueryService.queryRecommendRewardPct(dto.getInitiatorLevel(), dto.getReceiveLevel()); |
|
|
|
|
|
if (recommendRewardPct.compareTo(BigDecimal.ZERO) > 0) { |
|
|
|
|
|
//收益信息 |
|
|
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getInitiatorUserId()); |
|
|
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
|
|
revenueReward = RevenueReward.initUser(dto.getInitiatorUserId()); |
|
|
|
|
|
} |
|
|
|
|
|
//营收额 |
|
|
|
|
|
BigDecimal revenue = RewardConfig.calculatePct(rewardAmount, recommendRewardPct); |
|
|
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, |
|
|
|
|
|
revenue, recommendRewardPct, BigDecimal.ZERO, revenue, associateOrder.getSettlementAmount()); |
|
|
|
|
|
revenueRewardRecord.handleContent(Collections.singletonList(StrUtil.isNotBlank(dto.getReceiveUserName()) ? dto.getReceiveUserName() : "")); |
|
|
|
|
|
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); |
|
|
|
|
|
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); |
|
|
|
|
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|
|
|
|
|
|
|
|
Matchmaker initiatorMatchmaker = matchmakerQueryService.queryByUserId(dto.getInitiatorUserId()); |
|
|
|
|
|
//邀请红娘在有效期内才能拿到佣金+积分奖励 |
|
|
|
|
|
if (Objects.nonNull(initiatorMatchmaker) && initiatorMatchmaker.checkEnable()) { |
|
|
|
|
|
//奖励百分比 |
|
|
|
|
|
BigDecimal recommendRewardPct = rewardConfigQueryService.queryRecommendRewardPct(dto.getInitiatorLevel(), dto.getReceiveLevel()); |
|
|
|
|
|
if (recommendRewardPct.compareTo(BigDecimal.ZERO) > 0) { |
|
|
|
|
|
//收益信息 |
|
|
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getInitiatorUserId()); |
|
|
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
|
|
revenueReward = RevenueReward.initUser(dto.getInitiatorUserId()); |
|
|
|
|
|
} |
|
|
|
|
|
//营收额 |
|
|
|
|
|
BigDecimal revenue = RewardConfig.calculatePct(rewardAmount, recommendRewardPct); |
|
|
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, |
|
|
|
|
|
revenue, recommendRewardPct, BigDecimal.ZERO, revenue, associateOrder.getSettlementAmount()); |
|
|
|
|
|
revenueRewardRecord.handleContent(Collections.singletonList(StrUtil.isNotBlank(dto.getReceiveUserName()) ? dto.getReceiveUserName() : "")); |
|
|
|
|
|
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); |
|
|
|
|
|
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); |
|
|
|
|
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|
|
|
|
|
|
|
|
//钱包信息 |
|
|
|
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByType(dto.getInitiatorUserId(), 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_JOIN_RECOMMEND_FEE, revenue, true, originalBalance, walletAccount.getTotalBalance()); |
|
|
|
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
|
|
|
|
|
|
//钱包信息 |
|
|
|
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByType(dto.getInitiatorUserId(), 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_JOIN_RECOMMEND_FEE, revenue, true, originalBalance, walletAccount.getTotalBalance()); |
|
|
|
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
|
|
|
|
|
|
//积分奖励 |
|
|
|
|
|
PointRewardCreatedMQ mq = new PointRewardCreatedMQ(); |
|
|
|
|
|
mq.setOwnId(dto.getInitiatorUserId()); |
|
|
|
|
|
mq.setIdentityType(IdentityTypeEnum.INDIVIDUAL); |
|
|
|
|
|
mq.setPointType(PointRewardConfigTypeEnum.INVITE_MATCHMAKER); |
|
|
|
|
|
mq.setContent("邀请红娘:" + dto.getReceiveUserName()); |
|
|
|
|
|
mq.setIsIncome(true); |
|
|
|
|
|
mq.setAssociateId(dto.getAssociateOrderId()); |
|
|
|
|
|
mq.setAmount(rewardAmount); |
|
|
|
|
|
// 发送mq事件 |
|
|
|
|
|
amqpTemplate.convertAndSend(MqExchange.POINT_REWARD_CREATED, null, mq); |
|
|
|
|
|
|
|
|
//积分奖励 |
|
|
|
|
|
PointRewardCreatedMQ mq = new PointRewardCreatedMQ(); |
|
|
|
|
|
mq.setOwnId(dto.getInitiatorUserId()); |
|
|
|
|
|
mq.setIdentityType(IdentityTypeEnum.INDIVIDUAL); |
|
|
|
|
|
mq.setPointType(PointRewardConfigTypeEnum.INVITE_MATCHMAKER); |
|
|
|
|
|
mq.setContent("邀请红娘:" + dto.getReceiveUserName()); |
|
|
|
|
|
mq.setIsIncome(true); |
|
|
|
|
|
mq.setAssociateId(dto.getAssociateOrderId()); |
|
|
|
|
|
mq.setAmount(rewardAmount); |
|
|
|
|
|
// 发送mq事件 |
|
|
|
|
|
amqpTemplate.convertAndSend(MqExchange.POINT_REWARD_CREATED, null, mq); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
@ -181,60 +181,63 @@ public class RewardApplicationService { |
|
|
BigDecimal serviceFee = BigDecimal.ZERO; |
|
|
BigDecimal serviceFee = BigDecimal.ZERO; |
|
|
TradeTypeEnum tradeType = transform(dto.getRewardType()); |
|
|
TradeTypeEnum tradeType = transform(dto.getRewardType()); |
|
|
MarriageInformation meetingMi = marriageInformationDao.selectById(dto.getAssociatedMiId()); |
|
|
MarriageInformation meetingMi = marriageInformationDao.selectById(dto.getAssociatedMiId()); |
|
|
synchronized (dto.getReceiver().toString().intern()) { |
|
|
|
|
|
RewardConfig serviceFeeRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.PLATFORM_SERVICE_FEE); |
|
|
|
|
|
if (Objects.nonNull(serviceFeeRewardConfig)) { |
|
|
|
|
|
//收益信息 |
|
|
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getReceiver()); |
|
|
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
|
|
revenueReward = RevenueReward.initUser(dto.getReceiver()); |
|
|
|
|
|
} |
|
|
|
|
|
//营收额 |
|
|
|
|
|
BigDecimal revenue = dto.getReceivedAmount(); |
|
|
|
|
|
//服务费用 |
|
|
|
|
|
serviceFee = serviceFeeRewardConfig.calculateReward(revenue); |
|
|
|
|
|
BigDecimal earnings = revenue.subtract(serviceFee); |
|
|
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(tradeType, |
|
|
|
|
|
revenue, BigDecimal.valueOf(100), new BigDecimal(serviceFeeRewardConfig.getValue()), earnings, dto.getTotalAssociateOrderAmount()); |
|
|
|
|
|
revenueRewardRecord.handleContent(Collections.singletonList(meetingMi.getNickName())); |
|
|
|
|
|
if (CollUtil.isNotEmpty(dto.getOrderIdRelList())) { |
|
|
|
|
|
List<RevenueRewardAssociateOrderRecord> associateOrderRecordList = new ArrayList<>(); |
|
|
|
|
|
for (Long associateOrderId : dto.getOrderIdRelList()) { |
|
|
|
|
|
Order associateOrder = orderDao.selectById(associateOrderId); |
|
|
|
|
|
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); |
|
|
|
|
|
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); |
|
|
|
|
|
associateOrderRecordList.add(associateOrderRecord); |
|
|
|
|
|
|
|
|
Matchmaker matchmaker = matchmakerQueryService.queryByUserId(dto.getReceiver()); |
|
|
|
|
|
//邀请红娘在有效期内才能拿到佣金+积分奖励 |
|
|
|
|
|
if (Objects.nonNull(matchmaker) && matchmaker.checkEnable()) { |
|
|
|
|
|
synchronized (dto.getReceiver().toString().intern()) { |
|
|
|
|
|
RewardConfig serviceFeeRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.PLATFORM_SERVICE_FEE); |
|
|
|
|
|
if (Objects.nonNull(serviceFeeRewardConfig)) { |
|
|
|
|
|
//收益信息 |
|
|
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getReceiver()); |
|
|
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
|
|
revenueReward = RevenueReward.initUser(dto.getReceiver()); |
|
|
} |
|
|
} |
|
|
revenueRewardRecord.setAssociateOrderRecordList(associateOrderRecordList); |
|
|
|
|
|
|
|
|
//营收额 |
|
|
|
|
|
BigDecimal revenue = dto.getReceivedAmount(); |
|
|
|
|
|
//服务费用 |
|
|
|
|
|
serviceFee = serviceFeeRewardConfig.calculateReward(revenue); |
|
|
|
|
|
BigDecimal earnings = revenue.subtract(serviceFee); |
|
|
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(tradeType, |
|
|
|
|
|
revenue, BigDecimal.valueOf(100), new BigDecimal(serviceFeeRewardConfig.getValue()), earnings, dto.getTotalAssociateOrderAmount()); |
|
|
|
|
|
revenueRewardRecord.handleContent(Collections.singletonList(meetingMi.getNickName())); |
|
|
|
|
|
if (CollUtil.isNotEmpty(dto.getOrderIdRelList())) { |
|
|
|
|
|
List<RevenueRewardAssociateOrderRecord> associateOrderRecordList = new ArrayList<>(); |
|
|
|
|
|
for (Long associateOrderId : dto.getOrderIdRelList()) { |
|
|
|
|
|
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(dto.getReceiver(), IdentityTypeEnum.INDIVIDUAL); |
|
|
|
|
|
BigDecimal originalBalance = walletAccount.getTotalBalance(); |
|
|
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings)); |
|
|
|
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
|
|
|
WalletAccountRecord walletAccountRecord = WalletAccountRecord.build(tradeType, earnings, true, originalBalance, walletAccount.getTotalBalance()); |
|
|
|
|
|
walletAccount.setRecordList(Collections.singletonList(walletAccountRecord)); |
|
|
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
} |
|
|
} |
|
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|
|
|
|
|
//钱包 |
|
|
|
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByType(dto.getReceiver(), IdentityTypeEnum.INDIVIDUAL); |
|
|
|
|
|
BigDecimal originalBalance = walletAccount.getTotalBalance(); |
|
|
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings)); |
|
|
|
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
|
|
|
WalletAccountRecord walletAccountRecord = WalletAccountRecord.build(tradeType, earnings, true, originalBalance, walletAccount.getTotalBalance()); |
|
|
|
|
|
walletAccount.setRecordList(Collections.singletonList(walletAccountRecord)); |
|
|
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Matchmaker matchmaker = matchmakerQueryService.queryByUserId(dto.getReceiver()); |
|
|
|
|
|
if (Objects.nonNull(matchmaker) && Objects.nonNull(matchmaker.getStoreId())) { |
|
|
|
|
|
//门店收益 |
|
|
|
|
|
Store store = storeQueryService.queryById(matchmaker.getStoreId()); |
|
|
|
|
|
handleAcquireReward(store.getOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_STORE_REWARD, serviceFee, meetingMi, |
|
|
|
|
|
dto.getTotalAssociateOrderAmount(), dto.getOrderIdRelList(), tradeType); |
|
|
|
|
|
//门店升级收益 |
|
|
|
|
|
if (Objects.nonNull(store.getParentStoreId())) { |
|
|
|
|
|
Store parentStore = storeQueryService.queryById(store.getParentStoreId()); |
|
|
|
|
|
handleAcquireReward(parentStore.getOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_STORE_UPGRADE_REWARD, serviceFee, meetingMi, |
|
|
|
|
|
dto.getTotalAssociateOrderAmount(), dto.getOrderIdRelList(), tradeType); |
|
|
|
|
|
} |
|
|
|
|
|
//运营中心 |
|
|
|
|
|
if (Objects.nonNull(store.getOperationCenterOrgId())) { |
|
|
|
|
|
handleAcquireReward(store.getOperationCenterOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_OPERATION_CENTER_REWARD, serviceFee, meetingMi, |
|
|
|
|
|
|
|
|
if (Objects.nonNull(matchmaker.getStoreId())) { |
|
|
|
|
|
//门店收益 |
|
|
|
|
|
Store store = storeQueryService.queryById(matchmaker.getStoreId()); |
|
|
|
|
|
handleAcquireReward(store.getOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_STORE_REWARD, serviceFee, meetingMi, |
|
|
dto.getTotalAssociateOrderAmount(), dto.getOrderIdRelList(), tradeType); |
|
|
dto.getTotalAssociateOrderAmount(), dto.getOrderIdRelList(), tradeType); |
|
|
|
|
|
//门店升级收益 |
|
|
|
|
|
if (Objects.nonNull(store.getParentStoreId())) { |
|
|
|
|
|
Store parentStore = storeQueryService.queryById(store.getParentStoreId()); |
|
|
|
|
|
handleAcquireReward(parentStore.getOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_STORE_UPGRADE_REWARD, serviceFee, meetingMi, |
|
|
|
|
|
dto.getTotalAssociateOrderAmount(), dto.getOrderIdRelList(), tradeType); |
|
|
|
|
|
} |
|
|
|
|
|
//运营中心 |
|
|
|
|
|
if (Objects.nonNull(store.getOperationCenterOrgId())) { |
|
|
|
|
|
handleAcquireReward(store.getOperationCenterOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_OPERATION_CENTER_REWARD, serviceFee, meetingMi, |
|
|
|
|
|
dto.getTotalAssociateOrderAmount(), dto.getOrderIdRelList(), tradeType); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
@ -289,57 +292,60 @@ public class RewardApplicationService { |
|
|
BigDecimal serviceFee = BigDecimal.ZERO; |
|
|
BigDecimal serviceFee = BigDecimal.ZERO; |
|
|
MarriageInformation associatedMi = marriageInformationDao.selectById(dto.getAssociatedMiId()); |
|
|
MarriageInformation associatedMi = marriageInformationDao.selectById(dto.getAssociatedMiId()); |
|
|
TradeTypeEnum tradeType = transform(dto.getRewardType()); |
|
|
TradeTypeEnum tradeType = transform(dto.getRewardType()); |
|
|
synchronized (dto.getReceiver().toString().intern()) { |
|
|
|
|
|
RewardConfig serviceFeeRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.PLATFORM_SERVICE_FEE); |
|
|
|
|
|
if (Objects.nonNull(serviceFeeRewardConfig)) { |
|
|
|
|
|
//收益信息 |
|
|
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByType(dto.getReceiver(), IdentityTypeEnum.INDIVIDUAL); |
|
|
|
|
|
//营收额 |
|
|
|
|
|
BigDecimal revenue = dto.getReceivedAmount(); |
|
|
|
|
|
//服务费用 |
|
|
|
|
|
serviceFee = serviceFeeRewardConfig.calculateReward(revenue); |
|
|
|
|
|
BigDecimal earnings = revenue.subtract(serviceFee); |
|
|
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(tradeType, revenue, dto.getRevenuePct(), |
|
|
|
|
|
new BigDecimal(serviceFeeRewardConfig.getValue()), earnings, dto.getTotalAssociateOrderAmount()); |
|
|
|
|
|
revenueRewardRecord.handleContent(Collections.singletonList(associatedMi.getNickName())); |
|
|
|
|
|
if (CollUtil.isNotEmpty(dto.getOrderIdRelList())) { |
|
|
|
|
|
List<RevenueRewardAssociateOrderRecord> associateOrderRecordList = new ArrayList<>(); |
|
|
|
|
|
for (Long associateOrderId : dto.getOrderIdRelList()) { |
|
|
|
|
|
Order associateOrder = orderDao.selectById(associateOrderId); |
|
|
|
|
|
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); |
|
|
|
|
|
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); |
|
|
|
|
|
associateOrderRecordList.add(associateOrderRecord); |
|
|
|
|
|
|
|
|
Matchmaker matchmaker = matchmakerQueryService.queryByUserId(dto.getReceiver()); |
|
|
|
|
|
//邀请红娘在有效期内才能拿到佣金+积分奖励 |
|
|
|
|
|
if (Objects.nonNull(matchmaker) && matchmaker.checkEnable()) { |
|
|
|
|
|
synchronized (dto.getReceiver().toString().intern()) { |
|
|
|
|
|
RewardConfig serviceFeeRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.PLATFORM_SERVICE_FEE); |
|
|
|
|
|
if (Objects.nonNull(serviceFeeRewardConfig)) { |
|
|
|
|
|
//收益信息 |
|
|
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByType(dto.getReceiver(), IdentityTypeEnum.INDIVIDUAL); |
|
|
|
|
|
//营收额 |
|
|
|
|
|
BigDecimal revenue = dto.getReceivedAmount(); |
|
|
|
|
|
//服务费用 |
|
|
|
|
|
serviceFee = serviceFeeRewardConfig.calculateReward(revenue); |
|
|
|
|
|
BigDecimal earnings = revenue.subtract(serviceFee); |
|
|
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(tradeType, revenue, dto.getRevenuePct(), |
|
|
|
|
|
new BigDecimal(serviceFeeRewardConfig.getValue()), earnings, dto.getTotalAssociateOrderAmount()); |
|
|
|
|
|
revenueRewardRecord.handleContent(Collections.singletonList(associatedMi.getNickName())); |
|
|
|
|
|
if (CollUtil.isNotEmpty(dto.getOrderIdRelList())) { |
|
|
|
|
|
List<RevenueRewardAssociateOrderRecord> associateOrderRecordList = new ArrayList<>(); |
|
|
|
|
|
for (Long associateOrderId : dto.getOrderIdRelList()) { |
|
|
|
|
|
Order associateOrder = orderDao.selectById(associateOrderId); |
|
|
|
|
|
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); |
|
|
|
|
|
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); |
|
|
|
|
|
associateOrderRecordList.add(associateOrderRecord); |
|
|
|
|
|
} |
|
|
|
|
|
revenueRewardRecord.setAssociateOrderRecordList(associateOrderRecordList); |
|
|
} |
|
|
} |
|
|
revenueRewardRecord.setAssociateOrderRecordList(associateOrderRecordList); |
|
|
|
|
|
} |
|
|
|
|
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|
|
|
|
|
|
|
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|
|
|
|
|
|
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByType(dto.getReceiver(), IdentityTypeEnum.INDIVIDUAL); |
|
|
|
|
|
BigDecimal originalBalance = walletAccount.getTotalBalance(); |
|
|
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings)); |
|
|
|
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
|
|
|
WalletAccountRecord record = WalletAccountRecord.build(tradeType, earnings, true, originalBalance, walletAccount.getTotalBalance()); |
|
|
|
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
|
|
|
|
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByType(dto.getReceiver(), IdentityTypeEnum.INDIVIDUAL); |
|
|
|
|
|
BigDecimal originalBalance = walletAccount.getTotalBalance(); |
|
|
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings)); |
|
|
|
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
|
|
|
WalletAccountRecord record = WalletAccountRecord.build(tradeType, earnings, true, originalBalance, walletAccount.getTotalBalance()); |
|
|
|
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Matchmaker matchmaker = matchmakerQueryService.queryByUserId(dto.getReceiver()); |
|
|
|
|
|
if (Objects.nonNull(matchmaker) && Objects.nonNull(matchmaker.getStoreId())) { |
|
|
|
|
|
//门店收益 |
|
|
|
|
|
Store store = storeQueryService.queryById(matchmaker.getStoreId()); |
|
|
|
|
|
handleAcquireReward(store.getOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_STORE_REWARD, serviceFee, associatedMi, |
|
|
|
|
|
dto.getTotalAssociateOrderAmount(), dto.getOrderIdRelList(), tradeType); |
|
|
|
|
|
//门店升级收益 |
|
|
|
|
|
if (Objects.nonNull(store.getParentStoreId())) { |
|
|
|
|
|
Store parentStore = storeQueryService.queryById(store.getParentStoreId()); |
|
|
|
|
|
handleAcquireReward(parentStore.getOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_STORE_UPGRADE_REWARD, serviceFee, associatedMi, |
|
|
|
|
|
dto.getTotalAssociateOrderAmount(), dto.getOrderIdRelList(), tradeType); |
|
|
|
|
|
} |
|
|
|
|
|
//运营中心 |
|
|
|
|
|
if (Objects.nonNull(store.getOperationCenterOrgId())) { |
|
|
|
|
|
handleAcquireReward(store.getOperationCenterOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_OPERATION_CENTER_REWARD, serviceFee, associatedMi, |
|
|
|
|
|
|
|
|
if (Objects.nonNull(matchmaker.getStoreId())) { |
|
|
|
|
|
//门店收益 |
|
|
|
|
|
Store store = storeQueryService.queryById(matchmaker.getStoreId()); |
|
|
|
|
|
handleAcquireReward(store.getOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_STORE_REWARD, serviceFee, associatedMi, |
|
|
dto.getTotalAssociateOrderAmount(), dto.getOrderIdRelList(), tradeType); |
|
|
dto.getTotalAssociateOrderAmount(), dto.getOrderIdRelList(), tradeType); |
|
|
|
|
|
//门店升级收益 |
|
|
|
|
|
if (Objects.nonNull(store.getParentStoreId())) { |
|
|
|
|
|
Store parentStore = storeQueryService.queryById(store.getParentStoreId()); |
|
|
|
|
|
handleAcquireReward(parentStore.getOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_STORE_UPGRADE_REWARD, serviceFee, associatedMi, |
|
|
|
|
|
dto.getTotalAssociateOrderAmount(), dto.getOrderIdRelList(), tradeType); |
|
|
|
|
|
} |
|
|
|
|
|
//运营中心 |
|
|
|
|
|
if (Objects.nonNull(store.getOperationCenterOrgId())) { |
|
|
|
|
|
handleAcquireReward(store.getOperationCenterOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_OPERATION_CENTER_REWARD, serviceFee, associatedMi, |
|
|
|
|
|
dto.getTotalAssociateOrderAmount(), dto.getOrderIdRelList(), tradeType); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|