Browse Source

悬赏招亲

master
张彭杰 1 year ago
parent
commit
00615f47ec
8 changed files with 161 additions and 81 deletions
  1. 13
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java
  2. 4
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rewardconfig/entity/RewardConfig.java
  3. 5
      dating-agency-mall-sdk/pom.xml
  4. 3
      dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireMatchmakerJoinRecommendRewardDto.java
  5. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/request/UserAcquireMatchmakerJoinRecommendRewardDto.java
  6. 164
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java
  7. 6
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/RewardConfigQueryService.java
  8. 40
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/impl/RewardConfigQueryServiceImpl.java

13
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java

@ -38,6 +38,19 @@ public enum RewardTypeEnum {
MATCHMAKER_JOIN_RECOMMEND_BY_ONLINE(114, "红娘入驻推荐红娘奖励"),
/**
* 红娘入驻推荐奖励
*/
MATCHMAKER_JOIN_RECOMMEND_EQUAL_LEVEL(121, "红娘入驻推荐奖励--平级推荐"),
MATCHMAKER_JOIN_RECOMMEND_DOWN_LEVEL(122,"红娘入驻推荐奖励--向下推荐奖励差"),
MATCHMAKER_JOIN_RECOMMEND_DOWN_MAX(123,"红娘入驻向下推荐最大奖励"),
MATCHMAKER_JOIN_RECOMMEND_UP_LEVEL(124,"红娘入驻推荐奖励--向上推荐奖励差"),
MATCHMAKER_JOIN_RECOMMEND_UP_MIN(125,"红娘入驻向上推荐最小奖励"),
// 2** 服务费
PLATFORM_SERVICE_FEE(201, "平台服务费"),

4
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rewardconfig/entity/RewardConfig.java

@ -45,6 +45,10 @@ public class RewardConfig extends Entity<RewardConfig> {
}
}
public static BigDecimal calculatePct(BigDecimal amount, BigDecimal pct) {
return amount.multiply(pct).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
}
public BigDecimal calculatePrice(BigDecimal price) {
if (RewardAmountUnitEnum.NUM.equals(rewardAmountUnit)) {
return new BigDecimal(value);

5
dating-agency-mall-sdk/pom.xml

@ -31,5 +31,10 @@
<artifactId>dating-agency-mall-constant</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.qniao</groupId>
<artifactId>dating-agency-uec-constant</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

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

@ -1,6 +1,7 @@
package com.qniao.dam.application.request;
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum;
import com.qniao.dau.domian.aggregate.matchmaker.constant.MatchmakerLevelEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -14,4 +15,6 @@ public class UserAcquireMatchmakerJoinRecommendRewardDto {
private Long storeOrgId;
private Long operationCenterOrgId;
private ProductSubCategoryEnum type;
private MatchmakerLevelEnum initiatorLevel;
private MatchmakerLevelEnum receiveLevel;
}

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

@ -1,6 +1,7 @@
package com.qniao.dam.api.command.reward.user.request;
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum;
import com.qniao.dau.domian.aggregate.matchmaker.constant.MatchmakerLevelEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -24,4 +25,10 @@ public class UserAcquireMatchmakerJoinRecommendRewardDto {
@ApiModelProperty("红娘类型")
private ProductSubCategoryEnum type;
@ApiModelProperty("发起红娘级别")
private MatchmakerLevelEnum initiatorLevel;
@ApiModelProperty("入驻红娘级别")
private MatchmakerLevelEnum receiveLevel;
}

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

@ -9,6 +9,7 @@ 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.domian.aggregate.product.constant.ProductSubCategoryEnum;
import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum;
import com.qniao.dam.infrastructure.persistent.dao.domain.MarriageInformationDao;
import com.qniao.dam.infrastructure.persistent.dao.domain.OrderDao;
@ -65,90 +66,91 @@ public class RewardApplicationService {
public void acquireMatchmakerJoinRecommendReward(UserAcquireMatchmakerJoinRecommendRewardDto dto) {
//红娘加盟订单
Order associateOrder = orderQueryService.queryBySubCategory(dto.getReceiveUserId(), dto.getType());
BigDecimal rewardAmount = associateOrder.getSettlementAmount();
//推荐的红娘
if (Objects.nonNull(dto.getInitiatorUserId())) {
synchronized (dto.getInitiatorUserId().toString().intern()) {
//区分红娘类型
RewardTypeEnum rewardType = RewardConfig.getRecommendRewardType(dto.getType());
RewardConfig recommendRewardConfig = rewardConfigQueryService.queryByRewardType(rewardType);
if (Objects.nonNull(recommendRewardConfig)) {
//收益信息
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getInitiatorUserId());
if (Objects.isNull(revenueReward)) {
revenueReward = RevenueReward.initUser(dto.getInitiatorUserId());
}
//营收额
BigDecimal revenue = recommendRewardConfig.calculateReward(rewardAmount);
rewardAmount = rewardAmount.subtract(revenue);
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE,
revenue, revenue, associateOrder.getOriginalAmount());
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.queryByType(dto.getInitiatorUserId(), IdentityTypeEnum.INDIVIDUAL);
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);
}
}
}
//门店提成
if (Objects.nonNull(dto.getStoreOrgId())) {
synchronized (dto.getStoreOrgId().toString().intern()) {
RewardConfig recommendRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_STORE);
if (Objects.nonNull(recommendRewardConfig)) {
//收益信息
RevenueReward revenueReward = revenueRewardQueryService.queryByOrgId(dto.getStoreOrgId());
//营收额
BigDecimal revenue = recommendRewardConfig.calculateReward(rewardAmount);
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE,
revenue, revenue, associateOrder.getOriginalAmount());
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.queryByType(dto.getStoreOrgId(), IdentityTypeEnum.ORGANIZATION);
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);
}
}
}
//运营中心提成
if (Objects.nonNull(dto.getOperationCenterOrgId())) {
synchronized (dto.getOperationCenterOrgId().toString().intern()) {
RewardConfig recommendRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_OPERATION_CENTER);
if (Objects.nonNull(recommendRewardConfig)) {
//收益信息
RevenueReward revenueReward = revenueRewardQueryService.queryByOrgId(dto.getOperationCenterOrgId());
//营收额
BigDecimal revenue = recommendRewardConfig.calculateReward(rewardAmount);
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE,
revenue, revenue, associateOrder.getOriginalAmount());
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));
if (Objects.nonNull(associateOrder)) {
BigDecimal rewardAmount = associateOrder.getSettlementAmount();
//推荐的红娘
if (Objects.nonNull(dto.getInitiatorUserId())) {
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);
rewardAmount = rewardAmount.subtract(revenue);
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE,
revenue, revenue, associateOrder.getOriginalAmount());
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.queryByType(dto.getOperationCenterOrgId(), IdentityTypeEnum.ORGANIZATION);
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 walletAccount = walletAccountQueryService.queryByType(dto.getInitiatorUserId(), IdentityTypeEnum.INDIVIDUAL);
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);
}
}
}
// //门店提成
// if (Objects.nonNull(dto.getStoreOrgId())) {
// synchronized (dto.getStoreOrgId().toString().intern()) {
// RewardConfig recommendRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_STORE);
// if (Objects.nonNull(recommendRewardConfig)) {
// //收益信息
// RevenueReward revenueReward = revenueRewardQueryService.queryByOrgId(dto.getStoreOrgId());
// //营收额
// BigDecimal revenue = recommendRewardConfig.calculateReward(rewardAmount);
// RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE,
// revenue, revenue, associateOrder.getOriginalAmount());
// 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.queryByType(dto.getStoreOrgId(), IdentityTypeEnum.ORGANIZATION);
// 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);
// }
// }
// }
// //运营中心提成
// if (Objects.nonNull(dto.getOperationCenterOrgId())) {
// synchronized (dto.getOperationCenterOrgId().toString().intern()) {
// RewardConfig recommendRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_OPERATION_CENTER);
// if (Objects.nonNull(recommendRewardConfig)) {
// //收益信息
// RevenueReward revenueReward = revenueRewardQueryService.queryByOrgId(dto.getOperationCenterOrgId());
// //营收额
// BigDecimal revenue = recommendRewardConfig.calculateReward(rewardAmount);
// RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE,
// revenue, revenue, associateOrder.getOriginalAmount());
// 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.queryByType(dto.getOperationCenterOrgId(), IdentityTypeEnum.ORGANIZATION);
// 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);
// }
// }
// }
}
}

6
dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/RewardConfigQueryService.java

@ -4,9 +4,12 @@ import com.qniao.dam.api.query.rewardconfig.user.request.UserGetRewardConfigDeta
import com.qniao.dam.api.query.rewardconfig.user.response.RewardConfigVo;
import com.qniao.dam.api.query.rewardconfig.user.response.UserGetRewardConfigDetailVo;
import com.qniao.dam.domain.aggregate.rewardconfig.entity.RewardConfig;
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum;
import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum;
import com.qniao.dau.domain.aggregate.matchmaker.entity.Matchmaker;
import com.qniao.dau.domian.aggregate.matchmaker.constant.MatchmakerLevelEnum;
import java.math.BigDecimal;
import java.util.List;
public interface RewardConfigQueryService {
@ -21,4 +24,7 @@ public interface RewardConfigQueryService {
RewardConfig queryPublishMarriageBountyReward(Matchmaker matchmaker);
RewardConfig queryMatchMarriageBountyReward(Matchmaker matchmaker);
BigDecimal queryRecommendRewardPct(MatchmakerLevelEnum initiatorLevel, MatchmakerLevelEnum receiveLevel);
}

40
dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/impl/RewardConfigQueryServiceImpl.java

@ -12,10 +12,12 @@ import com.qniao.dam.infrastructure.persistent.dao.view.RewardConfigViewDao;
import com.qniao.dam.query.matchmaker.MatchmakerQueryService;
import com.qniao.dam.query.rewardconfig.RewardConfigQueryService;
import com.qniao.dau.domain.aggregate.matchmaker.entity.Matchmaker;
import com.qniao.dau.domian.aggregate.matchmaker.constant.MatchmakerLevelEnum;
import com.qniao.framework.utils.TypeConvertUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@ -101,4 +103,42 @@ public class RewardConfigQueryServiceImpl implements RewardConfigQueryService {
}
return null;
}
@Override
public BigDecimal queryRecommendRewardPct(MatchmakerLevelEnum initiatorLevel,
MatchmakerLevelEnum receiveLevel) {
BigDecimal pct = BigDecimal.ZERO;
if (Objects.nonNull(initiatorLevel) && Objects.nonNull(receiveLevel)) {
int diffValue = initiatorLevel.getLevel() - receiveLevel.getValue();
RewardConfig equalLevelConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_EQUAL_LEVEL);
if (Objects.nonNull(equalLevelConfig)) {
//平级推荐
if (diffValue == 0) {
pct = new BigDecimal(equalLevelConfig.getValue());
}
//向下推荐
if (diffValue > 0) {
RewardConfig downLevelConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_DOWN_LEVEL);
RewardConfig downMaxConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_DOWN_MAX);
if (Objects.nonNull(downLevelConfig) && Objects.nonNull(downMaxConfig)) {
pct = new BigDecimal(equalLevelConfig.getValue()).add(new BigDecimal(downLevelConfig.getValue()));
BigDecimal downMaxPct = new BigDecimal(downLevelConfig.getValue());
pct = pct.compareTo(downMaxPct) < 0 ? pct : downMaxPct;
}
}
//向上推荐
if (diffValue < 0) {
RewardConfig upLevelConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_UP_LEVEL);
RewardConfig upMinConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_UP_MIN);
if (Objects.nonNull(upLevelConfig) && Objects.nonNull(upMinConfig)) {
pct = new BigDecimal(equalLevelConfig.getValue()).add(new BigDecimal(upLevelConfig.getValue()));
BigDecimal upMinPct = new BigDecimal(upMinConfig.getValue());
pct = pct.compareTo(upMinPct) > 0 ? pct : upMinPct;
}
}
}
}
return pct;
}
}
Loading…
Cancel
Save