|
|
@ -1,18 +1,33 @@ |
|
|
package com.qniao.dam.application.service.walletaccount; |
|
|
package com.qniao.dam.application.service.walletaccount; |
|
|
|
|
|
|
|
|
|
|
|
import com.qniao.dam.api.command.walletaccount.user.request.UserAcquireLinkMicCardRewardDto; |
|
|
import com.qniao.dam.api.command.walletaccount.user.request.UserAcquireRewardAmountDto; |
|
|
import com.qniao.dam.api.command.walletaccount.user.request.UserAcquireRewardAmountDto; |
|
|
|
|
|
import com.qniao.dam.domain.aggregate.order.entity.Order; |
|
|
|
|
|
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; |
|
|
|
|
|
import com.qniao.dam.domain.aggregate.revenuereward.entity.RevenueReward; |
|
|
|
|
|
import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardRecord; |
|
|
|
|
|
import com.qniao.dam.domain.aggregate.rewardconfig.entity.RewardConfig; |
|
|
|
|
|
import com.qniao.dam.domain.aggregate.virtualaccount.entity.VirtualAccount; |
|
|
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.WalletAccountRecord; |
|
|
import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord; |
|
|
|
|
|
import com.qniao.dam.domain.service.revenuereward.AcquireRevenueRewardDomainService; |
|
|
|
|
|
import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; |
|
|
|
|
|
import com.qniao.dam.domian.aggregate.virtualaccount.constant.VirtualAccountTradeTypeEnum; |
|
|
import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; |
|
|
import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; |
|
|
|
|
|
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeSceneEnum; |
|
|
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; |
|
|
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; |
|
|
import com.qniao.dam.infrastructure.persistent.dao.domain.WalletAccountDao; |
|
|
import com.qniao.dam.infrastructure.persistent.dao.domain.WalletAccountDao; |
|
|
|
|
|
import com.qniao.dam.query.revenuereward.RevenueRewardQueryService; |
|
|
|
|
|
import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; |
|
|
import com.qniao.dam.query.walletaccount.WalletAccountQueryService; |
|
|
import com.qniao.dam.query.walletaccount.WalletAccountQueryService; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
import javax.annotation.Resource; |
|
|
import java.math.BigDecimal; |
|
|
import java.math.BigDecimal; |
|
|
|
|
|
import java.math.RoundingMode; |
|
|
import java.util.Collections; |
|
|
import java.util.Collections; |
|
|
|
|
|
import java.util.Objects; |
|
|
|
|
|
|
|
|
@Service |
|
|
@Service |
|
|
public class WalletAccountApplicationService { |
|
|
public class WalletAccountApplicationService { |
|
|
@ -23,6 +38,12 @@ public class WalletAccountApplicationService { |
|
|
private WalletAccountAggregate walletAccountAggregate; |
|
|
private WalletAccountAggregate walletAccountAggregate; |
|
|
@Resource |
|
|
@Resource |
|
|
private WalletAccountQueryService walletAccountQueryService; |
|
|
private WalletAccountQueryService walletAccountQueryService; |
|
|
|
|
|
@Resource |
|
|
|
|
|
private RevenueRewardQueryService revenueRewardQueryService; |
|
|
|
|
|
@Resource |
|
|
|
|
|
private RewardConfigQueryService rewardConfigQueryService; |
|
|
|
|
|
@Resource |
|
|
|
|
|
private AcquireRevenueRewardDomainService acquireRevenueRewardDomainService; |
|
|
|
|
|
|
|
|
public void confirmWithdraw(Long walletAccountId, BigDecimal withdrawAmount, Long associateId) { |
|
|
public void confirmWithdraw(Long walletAccountId, BigDecimal withdrawAmount, Long associateId) { |
|
|
WalletAccount walletAccount = walletAccountDao.selectById(walletAccountId); |
|
|
WalletAccount walletAccount = walletAccountDao.selectById(walletAccountId); |
|
|
@ -53,4 +74,41 @@ public class WalletAccountApplicationService { |
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
walletAccount.setRecordList(Collections.singletonList(record)); |
|
|
walletAccountAggregate.save(walletAccount); |
|
|
walletAccountAggregate.save(walletAccount); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void acquireLinkMicCardReward(UserAcquireLinkMicCardRewardDto dto) { |
|
|
|
|
|
synchronized (dto.getAnchorUserId().toString().intern()) { |
|
|
|
|
|
RewardConfig worthRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.CHAT_PROFIT_BY_LINK_MIC_CARD); |
|
|
|
|
|
handleChannelConnectReward(dto.getAnchorUserId(), dto.getChannelCreatorTodayCrossMicCount(), new BigDecimal(worthRewardConfig.getValue())); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void handleChannelConnectReward(Long userId, |
|
|
|
|
|
Integer channelCreatorTodayCrossMicCount, |
|
|
|
|
|
BigDecimal worthReward) { |
|
|
|
|
|
//收益信息 |
|
|
|
|
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(userId); |
|
|
|
|
|
if (Objects.isNull(revenueReward)) { |
|
|
|
|
|
revenueReward = RevenueReward.initUser(userId); |
|
|
|
|
|
} |
|
|
|
|
|
//营收额 todo |
|
|
|
|
|
BigDecimal giftRewardPct = rewardConfigQueryService.queryMatchmakerChannelGiftPct(userId, channelCreatorTodayCrossMicCount); |
|
|
|
|
|
BigDecimal revenue = worthReward.multiply(giftRewardPct) |
|
|
|
|
|
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); |
|
|
|
|
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.LINK_MIC_REWARD, TradeSceneEnum.ONLINE, |
|
|
|
|
|
revenue, BigDecimal.valueOf(100), BigDecimal.ZERO, revenue, worthReward); |
|
|
|
|
|
//todo |
|
|
|
|
|
revenueRewardRecord.setContent("直播间连麦"); |
|
|
|
|
|
|
|
|
|
|
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|
|
|
|
|
//钱包 |
|
|
|
|
|
WalletAccount walletAccount = walletAccountQueryService.queryByType(userId, IdentityTypeEnum.INDIVIDUAL); |
|
|
|
|
|
BigDecimal originalBalance = walletAccount.getTotalBalance(); |
|
|
|
|
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue)); |
|
|
|
|
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|
|
|
|
|
WalletAccountRecord walletAccountRecord = WalletAccountRecord.build(TradeTypeEnum.LINK_MIC_REWARD, revenue, true, originalBalance, walletAccount.getTotalBalance()); |
|
|
|
|
|
walletAccount.setRecordList(Collections.singletonList(walletAccountRecord)); |
|
|
|
|
|
|
|
|
|
|
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|
|
|
|
|
} |
|
|
} |
|
|
} |