10 changed files with 197 additions and 24 deletions
Unified View
Diff Options
-
9dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java
-
2dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java
-
20dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/virtualaccount/event/VirtualAccountCostGiftEvent.java
-
2dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/WalletAccountUserCommandController.java
-
106dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/virtualaccount/VirtualAccountEventHandler.java
-
3dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/withdrawaudit/WithdrawAuditEventHandler.java
-
13dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/virtualaccount/VirtualAccountApplicationService.java
-
2dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/walletaccount/WalletAccountApplicationService.java
-
7dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/virtualaccount/VirtualAccountAggregate.java
-
57dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/virtualaccount/CostGiftRewardDomainService.java
@ -0,0 +1,20 @@ |
|||||
|
package com.qniao.dam.domian.aggregate.virtualaccount.event; |
||||
|
|
||||
|
import com.qniao.domain.BaseDomainEvent; |
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
@Data |
||||
|
@AllArgsConstructor |
||||
|
@NoArgsConstructor |
||||
|
public class VirtualAccountCostGiftEvent extends BaseDomainEvent { |
||||
|
|
||||
|
private Long id; |
||||
|
|
||||
|
private Long userId; |
||||
|
|
||||
|
private Integer costBalance; |
||||
|
|
||||
|
private Long orderId; |
||||
|
} |
||||
@ -0,0 +1,106 @@ |
|||||
|
package com.qniao.dam.application.handler.virtualaccount; |
||||
|
|
||||
|
import com.google.common.eventbus.Subscribe; |
||||
|
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.rewardconfig.entity.RewardConfig; |
||||
|
import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; |
||||
|
import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord; |
||||
|
import com.qniao.dam.domain.service.revenuereward.AcquireRevenueRewardDomainService; |
||||
|
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; |
||||
|
import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; |
||||
|
import com.qniao.dam.domian.aggregate.virtualaccount.event.VirtualAccountCostGiftEvent; |
||||
|
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.infrastructure.persistent.dao.domain.MatchmakerDao; |
||||
|
import com.qniao.dam.query.matchmakermarriage.MatchmakerMarriageInformationQueryService; |
||||
|
import com.qniao.dam.query.revenuereward.RevenueRewardQueryService; |
||||
|
import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; |
||||
|
import com.qniao.dam.query.walletaccount.WalletAccountQueryService; |
||||
|
import com.qniao.das.domian.aggregate.matchmakermarriage.MatchmakerMarriageInformation; |
||||
|
import com.qniao.dau.domain.aggregate.matchmaker.entity.Matchmaker; |
||||
|
import com.qniao.domain.BaseApplicationService; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
import java.math.BigDecimal; |
||||
|
import java.math.RoundingMode; |
||||
|
import java.util.Collections; |
||||
|
import java.util.Objects; |
||||
|
|
||||
|
@Component |
||||
|
@Slf4j |
||||
|
public class VirtualAccountEventHandler extends BaseApplicationService { |
||||
|
|
||||
|
@Resource |
||||
|
private MatchmakerMarriageInformationQueryService matchmakerMarriageInformationQueryService; |
||||
|
@Resource |
||||
|
private MatchmakerDao matchmakerDao; |
||||
|
@Resource |
||||
|
private RewardConfigQueryService rewardConfigQueryService; |
||||
|
@Resource |
||||
|
private RevenueRewardQueryService revenueRewardQueryService; |
||||
|
@Resource |
||||
|
private WalletAccountQueryService walletAccountQueryService; |
||||
|
@Resource |
||||
|
private AcquireRevenueRewardDomainService acquireRevenueRewardDomainService; |
||||
|
|
||||
|
@Subscribe |
||||
|
private void handle(VirtualAccountCostGiftEvent event) { |
||||
|
try { |
||||
|
MatchmakerMarriageInformation marriageInformation = matchmakerMarriageInformationQueryService.queryByRecommend(event.getUserId()); |
||||
|
if (Objects.nonNull(marriageInformation)) { |
||||
|
BigDecimal pct = null; |
||||
|
Matchmaker matchmaker = matchmakerDao.selectById(marriageInformation.getMatchmakerId()); |
||||
|
if (ProductSubCategoryEnum.MATCHMAKER_FRANCHISE_FEE.equals(matchmaker.getType())) { |
||||
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_PARTNER_RECOMMEND_COST_PCT); |
||||
|
pct = new BigDecimal(rewardConfig.getValue()); |
||||
|
} else if (ProductSubCategoryEnum.MATCHMAKER_ONLINE_FEE.equals(matchmaker.getType())) { |
||||
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_ONLINE_RECOMMEND_COST_PCT); |
||||
|
pct = new BigDecimal(rewardConfig.getValue()); |
||||
|
} else if (ProductSubCategoryEnum.MATCHMAKER_TRAINEE_FEE.equals(matchmaker.getType())) { |
||||
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_TRAINEE_RECOMMEND_COST_PCT); |
||||
|
pct = new BigDecimal(rewardConfig.getValue()); |
||||
|
} else if (ProductSubCategoryEnum.MATCHMAKER_FREE_FEE.equals(matchmaker.getType())) { |
||||
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_FREE_RECOMMEND_COST_PCT); |
||||
|
pct = new BigDecimal(rewardConfig.getValue()); |
||||
|
} |
||||
|
if (Objects.nonNull(pct)) { |
||||
|
RewardConfig worthRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.VIRTUAL_ACCOUNT_WORTH); |
||||
|
//收益信息 |
||||
|
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(matchmaker.getUserId()); |
||||
|
if (Objects.isNull(revenueReward)) { |
||||
|
revenueReward = RevenueReward.initUser(matchmaker.getUserId()); |
||||
|
} |
||||
|
//营收额 |
||||
|
BigDecimal revenue = new BigDecimal(worthRewardConfig.getValue()).multiply(BigDecimal.valueOf(event.getCostBalance())) |
||||
|
.multiply(pct).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); |
||||
|
|
||||
|
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.RECOMMEND_GIFT_REWARD, TradeSceneEnum.ONLINE, |
||||
|
revenue, BigDecimal.valueOf(100), BigDecimal.ZERO, revenue, BigDecimal.valueOf(event.getCostBalance())); |
||||
|
//todo |
||||
|
revenueRewardRecord.setContent("邀请分成"); |
||||
|
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(event.getOrderId(), BigDecimal.valueOf(event.getCostBalance())); |
||||
|
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); |
||||
|
|
||||
|
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
||||
|
//钱包 |
||||
|
WalletAccount walletAccount = walletAccountQueryService.queryByType(matchmaker.getUserId(), IdentityTypeEnum.INDIVIDUAL); |
||||
|
BigDecimal originalBalance = walletAccount.getTotalBalance(); |
||||
|
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue)); |
||||
|
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
||||
|
WalletAccountRecord walletAccountRecord = WalletAccountRecord.build(TradeTypeEnum.RECOMMEND_GIFT_REWARD, revenue, true, originalBalance, walletAccount.getTotalBalance()); |
||||
|
walletAccount.setRecordList(Collections.singletonList(walletAccountRecord)); |
||||
|
|
||||
|
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
||||
|
} |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
log.error("花费送礼事件处理异常", e); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -1,4 +1,4 @@ |
|||||
package com.qniao.dam.application.handler.walletaccount; |
|
||||
|
package com.qniao.dam.application.service.walletaccount; |
||||
|
|
||||
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.walletaccount.WalletAccountAggregate; |
import com.qniao.dam.domain.aggregate.walletaccount.WalletAccountAggregate; |
||||
Write
Preview
Loading…
Cancel
Save