|
|
@ -5,24 +5,25 @@ 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.AcquireMatchmakerConfirmMatchRewardDto; |
|
|
import com.qniao.dam.api.command.reward.user.request.AcquireMatchmakerConfirmMeetingRewardDto; |
|
|
import com.qniao.dam.api.command.reward.user.request.AcquireMatchmakerConfirmMeetingRewardDto; |
|
|
import com.qniao.dam.api.command.reward.user.request.UserAcquireMatchmakerJoinRecommendRewardDto; |
|
|
import com.qniao.dam.api.command.reward.user.request.UserAcquireMatchmakerJoinRecommendRewardDto; |
|
|
import com.qniao.dam.domian.aggregate.right.constant.RightTypeEnum; |
|
|
|
|
|
|
|
|
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.service.revenuereward.AcquireRevenueRewardDomainService; |
|
|
import com.qniao.dam.infrastructure.persistent.dao.domain.MarriageInformationDao; |
|
|
import com.qniao.dam.infrastructure.persistent.dao.domain.MarriageInformationDao; |
|
|
import com.qniao.dam.infrastructure.persistent.dao.domain.OrderDao; |
|
|
import com.qniao.dam.infrastructure.persistent.dao.domain.OrderDao; |
|
|
|
|
|
import com.qniao.dam.query.revenuereward.RevenueRewardQueryService; |
|
|
import com.qniao.dam.query.walletaccount.WalletAccountQueryService; |
|
|
import com.qniao.dam.query.walletaccount.WalletAccountQueryService; |
|
|
import com.qniao.dam.domain.aggregate.order.entity.Order; |
|
|
import com.qniao.dam.domain.aggregate.order.entity.Order; |
|
|
import com.qniao.dam.domain.aggregate.rewardconfig.entity.RewardConfig; |
|
|
import com.qniao.dam.domain.aggregate.rewardconfig.entity.RewardConfig; |
|
|
import com.qniao.dam.domain.aggregate.walletaccount.WalletAccountAggregate; |
|
|
import com.qniao.dam.domain.aggregate.walletaccount.WalletAccountAggregate; |
|
|
import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; |
|
|
import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; |
|
|
import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountAssociateOrderRecord; |
|
|
|
|
|
import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord; |
|
|
import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord; |
|
|
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; |
|
|
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; |
|
|
import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardAmountUnitEnum; |
|
|
|
|
|
import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; |
|
|
import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; |
|
|
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; |
|
|
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; |
|
|
import com.qniao.dam.query.order.OrderQueryService; |
|
|
import com.qniao.dam.query.order.OrderQueryService; |
|
|
import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; |
|
|
import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; |
|
|
import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation; |
|
|
import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation; |
|
|
import com.qniao.das.domian.aggregate.marriageinformation.constant.GenderEnum; |
|
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
import javax.annotation.Resource; |
|
|
@ -44,29 +45,47 @@ public class RewardApplicationService { |
|
|
private MarriageInformationDao marriageInformationDao; |
|
|
private MarriageInformationDao marriageInformationDao; |
|
|
@Resource |
|
|
@Resource |
|
|
private OrderDao orderDao; |
|
|
private OrderDao orderDao; |
|
|
|
|
|
@Resource |
|
|
|
|
|
private RevenueRewardQueryService revenueRewardQueryService; |
|
|
|
|
|
@Resource |
|
|
|
|
|
private AcquireRevenueRewardDomainService acquireRevenueRewardDomainService; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 获得红娘推荐奖励 |
|
|
* 获得红娘推荐奖励 |
|
|
*/ |
|
|
*/ |
|
|
public void acquireMatchmakerJoinRecommendReward(UserAcquireMatchmakerJoinRecommendRewardDto dto) { |
|
|
public void acquireMatchmakerJoinRecommendReward(UserAcquireMatchmakerJoinRecommendRewardDto dto) { |
|
|
synchronized (dto.getInitiatorUserId().toString().intern()) { |
|
|
synchronized (dto.getInitiatorUserId().toString().intern()) { |
|
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND); |
|
|
|
|
|
if (Objects.nonNull(rewardConfig)) { |
|
|
|
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getInitiatorUserId()); |
|
|
|
|
|
|
|
|
RewardConfig recommendRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND); |
|
|
|
|
|
RewardConfig serviceFeeRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.PLATFORM_SERVICE_FEE); |
|
|
|
|
|
if (Objects.nonNull(recommendRewardConfig) && Objects.nonNull(serviceFeeRewardConfig)) { |
|
|
Order associateOrder = orderQueryService.queryBySubCategory(dto.getReceiveUserId(), ProductSubCategoryEnum.MATCHMAKER_FRANCHISE_FEE); |
|
|
Order associateOrder = orderQueryService.queryBySubCategory(dto.getReceiveUserId(), ProductSubCategoryEnum.MATCHMAKER_FRANCHISE_FEE); |
|
|
|
|
|
//收益信息 |
|
|
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getInitiatorUserId()); |
|
|
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
|
|
revenueReward = RevenueReward.init(dto.getInitiatorUserId()); |
|
|
|
|
|
} |
|
|
|
|
|
//营收额 |
|
|
|
|
|
BigDecimal revenue = recommendRewardConfig.calculate(associateOrder.getSettlementAmount()); |
|
|
|
|
|
//服务费用 |
|
|
|
|
|
BigDecimal serviceFee = serviceFeeRewardConfig.calculate(revenue); |
|
|
|
|
|
BigDecimal earnings = revenue.subtract(serviceFee); |
|
|
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, |
|
|
|
|
|
revenue, earnings, associateOrder.getSettlementAmount()); |
|
|
|
|
|
revenueRewardRecord.handleContent(Collections.singletonList(StrUtil.isNotBlank(associateOrder.getOrderBelongName()) ? associateOrder.getOrderBelongName() : "")); |
|
|
|
|
|
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); |
|
|
|
|
|
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); |
|
|
|
|
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|
|
|
|
|
|
|
|
|
|
|
//钱包信息 |
|
|
|
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getInitiatorUserId()); |
|
|
if (Objects.isNull(walletAccount)) { |
|
|
if (Objects.isNull(walletAccount)) { |
|
|
walletAccount = WalletAccount.init(dto.getInitiatorUserId()); |
|
|
walletAccount = WalletAccount.init(dto.getInitiatorUserId()); |
|
|
} |
|
|
} |
|
|
BigDecimal rewardAmount = rewardConfig.calculate(associateOrder.getSettlementAmount()); |
|
|
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(rewardAmount)); |
|
|
|
|
|
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings)); |
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, |
|
|
|
|
|
rewardAmount, true, TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE.getDesc()); |
|
|
|
|
|
record.handleContent(Collections.singletonList(StrUtil.isNotBlank(associateOrder.getOrderBelongName()) ? associateOrder.getOrderBelongName() : "")); |
|
|
|
|
|
WalletAccountAssociateOrderRecord associateOrderRecord = WalletAccountAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); |
|
|
|
|
|
record.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); |
|
|
|
|
|
|
|
|
WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, earnings, true); |
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
walletAccountAggregate.save(walletAccount); |
|
|
|
|
|
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
@ -76,29 +95,44 @@ public class RewardApplicationService { |
|
|
*/ |
|
|
*/ |
|
|
public void acquireMatchmakerConfirmMeetingReward(AcquireMatchmakerConfirmMeetingRewardDto dto) { |
|
|
public void acquireMatchmakerConfirmMeetingReward(AcquireMatchmakerConfirmMeetingRewardDto dto) { |
|
|
synchronized (dto.getReceiver().toString().intern()) { |
|
|
synchronized (dto.getReceiver().toString().intern()) { |
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getReceiver()); |
|
|
|
|
|
if (Objects.isNull(walletAccount)) { |
|
|
|
|
|
walletAccount = WalletAccount.init(dto.getReceiver()); |
|
|
|
|
|
} |
|
|
|
|
|
BigDecimal rewardAmount = dto.getReceivedAmount(); |
|
|
|
|
|
MarriageInformation meetingMi = marriageInformationDao.selectById(dto.getAssociatedMiId()); |
|
|
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(rewardAmount)); |
|
|
|
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
|
|
|
WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MARRIAGE_BOUNTY_MEETING_FEE, |
|
|
|
|
|
rewardAmount, true, TradeTypeEnum.MARRIAGE_BOUNTY_MEETING_FEE.getDesc()); |
|
|
|
|
|
record.handleContent(Collections.singletonList(meetingMi.getNickName())); |
|
|
|
|
|
if (CollUtil.isNotEmpty(dto.getOrderIdRelList())) { |
|
|
|
|
|
List<WalletAccountAssociateOrderRecord> associateOrderRecordList = new ArrayList<>(); |
|
|
|
|
|
for (Long associateOrderId : dto.getOrderIdRelList()) { |
|
|
|
|
|
Order associateOrder = orderDao.selectById(associateOrderId); |
|
|
|
|
|
WalletAccountAssociateOrderRecord associateOrderRecord = WalletAccountAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); |
|
|
|
|
|
associateOrderRecordList.add(associateOrderRecord); |
|
|
|
|
|
|
|
|
RewardConfig serviceFeeRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.PLATFORM_SERVICE_FEE); |
|
|
|
|
|
if (Objects.nonNull(serviceFeeRewardConfig)) { |
|
|
|
|
|
MarriageInformation meetingMi = marriageInformationDao.selectById(dto.getAssociatedMiId()); |
|
|
|
|
|
//收益信息 |
|
|
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getReceiver()); |
|
|
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
|
|
revenueReward = RevenueReward.init(dto.getReceiver()); |
|
|
} |
|
|
} |
|
|
record.setAssociateOrderRecordList(associateOrderRecordList); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//营收额 |
|
|
|
|
|
BigDecimal revenue = dto.getReceivedAmount(); |
|
|
|
|
|
//服务费用 |
|
|
|
|
|
BigDecimal serviceFee = serviceFeeRewardConfig.calculate(revenue); |
|
|
|
|
|
BigDecimal earnings = revenue.subtract(serviceFee); |
|
|
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MARRIAGE_BOUNTY_MEETING_FEE, |
|
|
|
|
|
revenue, 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.queryByUserId(dto.getReceiver()); |
|
|
|
|
|
if (Objects.isNull(walletAccount)) { |
|
|
|
|
|
walletAccount = WalletAccount.init(dto.getReceiver()); |
|
|
|
|
|
} |
|
|
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings)); |
|
|
|
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
|
|
|
WalletAccountRecord walletAccountRecord = WalletAccountRecord.build(TradeTypeEnum.MARRIAGE_BOUNTY_MEETING_FEE, earnings, true); |
|
|
|
|
|
walletAccount.setRecordList(Collections.singletonList(walletAccountRecord)); |
|
|
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
} |
|
|
} |
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
|
|
|
walletAccountAggregate.save(walletAccount); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -107,30 +141,45 @@ public class RewardApplicationService { |
|
|
*/ |
|
|
*/ |
|
|
public void acquireMatchmakerConfirmMatchReward(AcquireMatchmakerConfirmMatchRewardDto dto) { |
|
|
public void acquireMatchmakerConfirmMatchReward(AcquireMatchmakerConfirmMatchRewardDto dto) { |
|
|
synchronized (dto.getReceiver().toString().intern()) { |
|
|
synchronized (dto.getReceiver().toString().intern()) { |
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getReceiver()); |
|
|
|
|
|
if (Objects.isNull(walletAccount)) { |
|
|
|
|
|
walletAccount = WalletAccount.init(dto.getReceiver()); |
|
|
|
|
|
} |
|
|
|
|
|
BigDecimal rewardAmount = dto.getReceivedAmount(); |
|
|
|
|
|
MarriageInformation associatedMi = marriageInformationDao.selectById(dto.getAssociatedMiId()); |
|
|
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(rewardAmount)); |
|
|
|
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
|
|
|
TradeTypeEnum tradeType = transform(dto.getRewardType()); |
|
|
|
|
|
WalletAccountRecord record = WalletAccountRecord.build(tradeType, |
|
|
|
|
|
rewardAmount, true, Objects.nonNull(tradeType) ? tradeType.getDesc() : null); |
|
|
|
|
|
record.handleContent(Collections.singletonList(associatedMi.getNickName())); |
|
|
|
|
|
if (CollUtil.isNotEmpty(dto.getOrderIdRelList())) { |
|
|
|
|
|
List<WalletAccountAssociateOrderRecord> associateOrderRecordList = new ArrayList<>(); |
|
|
|
|
|
for (Long associateOrderId : dto.getOrderIdRelList()) { |
|
|
|
|
|
Order associateOrder = orderDao.selectById(associateOrderId); |
|
|
|
|
|
WalletAccountAssociateOrderRecord associateOrderRecord = WalletAccountAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); |
|
|
|
|
|
associateOrderRecordList.add(associateOrderRecord); |
|
|
|
|
|
|
|
|
RewardConfig serviceFeeRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.PLATFORM_SERVICE_FEE); |
|
|
|
|
|
if (Objects.nonNull(serviceFeeRewardConfig)) { |
|
|
|
|
|
MarriageInformation associatedMi = marriageInformationDao.selectById(dto.getAssociatedMiId()); |
|
|
|
|
|
TradeTypeEnum tradeType = transform(dto.getRewardType()); |
|
|
|
|
|
//收益信息 |
|
|
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getReceiver()); |
|
|
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
|
|
revenueReward = RevenueReward.init(dto.getReceiver()); |
|
|
} |
|
|
} |
|
|
record.setAssociateOrderRecordList(associateOrderRecordList); |
|
|
|
|
|
|
|
|
//营收额 |
|
|
|
|
|
BigDecimal revenue = dto.getReceivedAmount(); |
|
|
|
|
|
//服务费用 |
|
|
|
|
|
BigDecimal serviceFee = serviceFeeRewardConfig.calculate(revenue); |
|
|
|
|
|
BigDecimal earnings = revenue.subtract(serviceFee); |
|
|
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(tradeType, revenue, 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); |
|
|
|
|
|
} |
|
|
|
|
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getReceiver()); |
|
|
|
|
|
if (Objects.isNull(walletAccount)) { |
|
|
|
|
|
walletAccount = WalletAccount.init(dto.getReceiver()); |
|
|
|
|
|
} |
|
|
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings)); |
|
|
|
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
|
|
|
WalletAccountRecord record = WalletAccountRecord.build(tradeType, earnings, true); |
|
|
|
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
} |
|
|
} |
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
|
|
|
walletAccountAggregate.save(walletAccount); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|