Browse Source

悬赏招亲

master
张彭杰 1 year ago
parent
commit
138d31aa4d
4 changed files with 61 additions and 38 deletions
  1. 21
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/entity/RevenueReward.java
  2. 3
      dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireMatchmakerJoinRecommendRewardDto.java
  3. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/request/UserAcquireMatchmakerJoinRecommendRewardDto.java
  4. 68
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java

21
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/entity/RevenueReward.java

@ -2,6 +2,7 @@ package com.qniao.dam.domain.aggregate.revenuereward.entity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardRecord; import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardRecord;
import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum;
import com.qniao.domain.Entity; import com.qniao.domain.Entity;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -18,12 +19,26 @@ public class RevenueReward extends Entity<RevenueReward> {
@ApiModelProperty("用户唯一标识") @ApiModelProperty("用户唯一标识")
private Long userId; private Long userId;
@ApiModelProperty("组织唯一标识")
private Long orgId;
@ApiModelProperty("身份类型(个人、组织)")
private IdentityTypeEnum buyerIdentityType;
@ApiModelProperty("收益记录") @ApiModelProperty("收益记录")
private transient List<RevenueRewardRecord> recordList; private transient List<RevenueRewardRecord> recordList;
public static RevenueReward init(Long initiatorUserId) {
public static RevenueReward initUser(Long userId) {
RevenueReward revenueReward = new RevenueReward();
revenueReward.setUserId(userId);
revenueReward.setBuyerIdentityType(IdentityTypeEnum.INDIVIDUAL);
return revenueReward;
}
public static RevenueReward initOrg(Long orgId) {
RevenueReward revenueReward = new RevenueReward(); RevenueReward revenueReward = new RevenueReward();
revenueReward.setUserId(initiatorUserId);
return revenueReward;
revenueReward.setOrgId(orgId);
revenueReward.setBuyerIdentityType(IdentityTypeEnum.ORGANIZATION);
return revenueReward;
} }
} }

3
dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireMatchmakerJoinRecommendRewardDto.java

@ -10,5 +10,6 @@ import lombok.NoArgsConstructor;
public class UserAcquireMatchmakerJoinRecommendRewardDto { public class UserAcquireMatchmakerJoinRecommendRewardDto {
private Long initiatorUserId; private Long initiatorUserId;
private Long receiveUserId; private Long receiveUserId;
private Long storeOrgId;
private Long operationCenterOrgId;
} }

7
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/request/UserAcquireMatchmakerJoinRecommendRewardDto.java

@ -9,12 +9,15 @@ import javax.validation.constraints.NotNull;
public class UserAcquireMatchmakerJoinRecommendRewardDto { public class UserAcquireMatchmakerJoinRecommendRewardDto {
@ApiModelProperty("发起用户") @ApiModelProperty("发起用户")
@NotNull
private Long initiatorUserId; private Long initiatorUserId;
@ApiModelProperty("接收用户") @ApiModelProperty("接收用户")
@NotNull
private Long receiveUserId; private Long receiveUserId;
@ApiModelProperty("门店组织标识")
private Long storeOrgId;
@ApiModelProperty("运营中心组织id")
private Long operationCenterOrgId;
} }

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

@ -52,42 +52,46 @@ public class RewardApplicationService {
/** /**
* 获得红娘推荐奖励 * 获得红娘推荐奖励
* 通过分佣模式分配给门店50%0.7运营中心50%*0.3和红娘50%没有红娘情况下门店70%运营中心30%,
*/ */
public void acquireMatchmakerJoinRecommendReward(UserAcquireMatchmakerJoinRecommendRewardDto dto) { public void acquireMatchmakerJoinRecommendReward(UserAcquireMatchmakerJoinRecommendRewardDto dto) {
synchronized (dto.getInitiatorUserId().toString().intern()) {
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);
//收益信息
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));
//红娘加盟订单
Order associateOrder = orderQueryService.queryBySubCategory(dto.getReceiveUserId(), ProductSubCategoryEnum.MATCHMAKER_FRANCHISE_FEE);
BigDecimal rewardAmount = associateOrder.getSettlementAmount();
//推荐的红娘
if (Objects.nonNull(dto.getInitiatorUserId())) {
synchronized (dto.getInitiatorUserId().toString().intern()) {
RewardConfig recommendRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND);
if (Objects.nonNull(recommendRewardConfig)) {
//收益信息
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getInitiatorUserId());
if (Objects.isNull(revenueReward)) {
revenueReward = RevenueReward.initUser(dto.getInitiatorUserId());
}
//营收额
BigDecimal revenue = recommendRewardConfig.calculate(rewardAmount);
rewardAmount = rewardAmount.subtract(revenue);
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE,
revenue, revenue, 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)) {
walletAccount = WalletAccount.init(dto.getInitiatorUserId());
//钱包信息
WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getInitiatorUserId());
if (Objects.isNull(walletAccount)) {
walletAccount = WalletAccount.init(dto.getInitiatorUserId());
}
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue));
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance()));
WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, revenue, true);
walletAccount.setRecordList(Collections.singletonList(record));
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount);
} }
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings));
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance()));
WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, earnings, true);
walletAccount.setRecordList(Collections.singletonList(record));
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount);
} }
} }
//运营中心 + 门店提成
} }
/** /**
@ -102,7 +106,7 @@ public class RewardApplicationService {
//收益信息 //收益信息
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getReceiver()); RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getReceiver());
if (Objects.isNull(revenueReward)) { if (Objects.isNull(revenueReward)) {
revenueReward = RevenueReward.init(dto.getReceiver());
revenueReward = RevenueReward.initUser(dto.getReceiver());
} }
//营收额 //营收额
BigDecimal revenue = dto.getReceivedAmount(); BigDecimal revenue = dto.getReceivedAmount();
@ -149,7 +153,7 @@ public class RewardApplicationService {
//收益信息 //收益信息
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getReceiver()); RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getReceiver());
if (Objects.isNull(revenueReward)) { if (Objects.isNull(revenueReward)) {
revenueReward = RevenueReward.init(dto.getReceiver());
revenueReward = RevenueReward.initUser(dto.getReceiver());
} }
//营收额 //营收额
BigDecimal revenue = dto.getReceivedAmount(); BigDecimal revenue = dto.getReceivedAmount();

Loading…
Cancel
Save