Browse Source

玫瑰

master
张彭杰 4 months ago
parent
commit
d93807df8b
7 changed files with 57 additions and 7 deletions
  1. 2
      dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserCostChannelGiftSdkDto.java
  2. 1
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/virtualaccount/user/request/UserCostChannelGiftDto.java
  3. 24
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/virtualaccount/VirtualAccountApplicationService.java
  4. 1
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/RevenueRewardQueryService.java
  5. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/impl/RevenueRewardQueryServiceImpl.java
  6. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/RewardConfigQueryService.java
  7. 32
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/impl/RewardConfigQueryServiceImpl.java

2
dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserCostChannelGiftSdkDto.java

@ -23,4 +23,6 @@ public class UserCostChannelGiftSdkDto {
private Integer quantity;
private Integer channelCreatorTodayCrossMicCount;
}

1
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/virtualaccount/user/request/UserCostChannelGiftDto.java

@ -19,4 +19,5 @@ public class UserCostChannelGiftDto {
private Integer quantity;
private Integer channelCreatorTodayCrossMicCount;
}

24
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/virtualaccount/VirtualAccountApplicationService.java

@ -31,6 +31,7 @@ import com.qniao.dam.infrastructure.persistent.dao.domain.ProductSpecDao;
import com.qniao.dam.infrastructure.utils.SnowFlakeUtil;
import com.qniao.dam.query.product.ProductQueryService;
import com.qniao.dam.query.revenuereward.RevenueRewardQueryService;
import com.qniao.dam.query.rewardconfig.RewardConfigQueryService;
import com.qniao.dam.query.virtualaccount.VirtualAccountQueryService;
import com.qniao.dam.query.walletaccount.WalletAccountQueryService;
import org.springframework.stereotype.Service;
@ -66,6 +67,8 @@ public class VirtualAccountApplicationService {
private CostGiftRewardDomainService costGiftRewardDomainService;
@Resource
private ProductQueryService productQueryService;
@Resource
private RewardConfigQueryService rewardConfigQueryService;
public void create(VirtualAccount virtualAccount) {
virtualAccountAggregate.create(virtualAccount);
@ -201,10 +204,10 @@ public class VirtualAccountApplicationService {
if (virtualAccount != null && virtualAccount.getBalance() >= costBalance) {
if (dto.getDirection() == 1) {
//直接送主播
vo = handleChannelAnchorGiftReward(virtualAccount, dto.getFromUserId(), dto.getChannelCreatorId(), productSpec, costBalance, dto.getQuantity());
vo = handleChannelAnchorGiftReward(virtualAccount, dto.getFromUserId(), dto.getChannelCreatorId(), productSpec, costBalance, dto.getQuantity(), dto.getChannelCreatorTodayCrossMicCount());
} else {
//直接送嘉宾
vo = handleChannelUserGiftReward(virtualAccount, dto.getFromUserId(), dto.getToUserId(), dto.getChannelCreatorId(), productSpec, costBalance, dto.getQuantity());
vo = handleChannelUserGiftReward(virtualAccount, dto.getFromUserId(), dto.getToUserId(), dto.getChannelCreatorId(), productSpec, costBalance, dto.getQuantity(), dto.getChannelCreatorTodayCrossMicCount());
}
}
return vo;
@ -220,7 +223,8 @@ public class VirtualAccountApplicationService {
Long anchorId,
ProductSpec productSpec,
Integer costBalance,
Integer quantity) {
Integer quantity,
Integer channelCreatorTodayCrossMicCount) {
CostGiftVo vo = new CostGiftVo();
//余额充足 创建消费订单+扣除余额
Order order = handleOrder(fromUserId, productSpec, quantity);
@ -252,8 +256,11 @@ public class VirtualAccountApplicationService {
if (Objects.isNull(anchorRevenueReward)) {
anchorRevenueReward = RevenueReward.initUser(anchorId);
}
//营收额 todo
BigDecimal anchorRevenue = BigDecimal.valueOf(costBalance).multiply(BigDecimal.valueOf(0.1428)).multiply(BigDecimal.valueOf(0.3)).setScale(2, RoundingMode.HALF_UP);
//营收额
BigDecimal giftRewardPct = rewardConfigQueryService.queryMatchmakerChannelGiftPct(toUserId, channelCreatorTodayCrossMicCount);
giftRewardPct = giftRewardPct.subtract(BigDecimal.valueOf(10));
BigDecimal anchorRevenue = BigDecimal.valueOf(costBalance).multiply(BigDecimal.valueOf(0.1428)).multiply(giftRewardPct)
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
RevenueRewardRecord anchorRevenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.GIFT_REWARD, TradeSceneEnum.ONLINE,
anchorRevenue, BigDecimal.valueOf(100), BigDecimal.ZERO, anchorRevenue, BigDecimal.valueOf(costBalance));
//todo
@ -281,7 +288,8 @@ public class VirtualAccountApplicationService {
Long toUserId,
ProductSpec productSpec,
Integer costBalance,
Integer quantity) {
Integer quantity,
Integer channelCreatorTodayCrossMicCount) {
CostGiftVo vo = new CostGiftVo();
//余额充足 创建消费订单+扣除余额
Order order = handleOrder(fromUserId, productSpec, quantity);
@ -294,7 +302,9 @@ public class VirtualAccountApplicationService {
revenueReward = RevenueReward.initUser(toUserId);
}
//营收额 todo
BigDecimal revenue = BigDecimal.valueOf(costBalance).multiply(BigDecimal.valueOf(0.1428)).multiply(BigDecimal.valueOf(0.4)).setScale(2, RoundingMode.HALF_UP);
BigDecimal giftRewardPct = rewardConfigQueryService.queryMatchmakerChannelGiftPct(toUserId, channelCreatorTodayCrossMicCount);
BigDecimal revenue = BigDecimal.valueOf(costBalance).multiply(BigDecimal.valueOf(0.1428)).multiply(giftRewardPct)
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.GIFT_REWARD, TradeSceneEnum.ONLINE,
revenue, BigDecimal.valueOf(100), BigDecimal.ZERO, revenue, BigDecimal.valueOf(costBalance));

1
dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/RevenueRewardQueryService.java

@ -12,6 +12,7 @@ import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeSceneEnum;
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum;
import com.qniao.framework.utils.PageUtil;
import java.math.BigDecimal;
import java.util.List;
public interface RevenueRewardQueryService {

2
dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/impl/RevenueRewardQueryServiceImpl.java

@ -9,6 +9,7 @@ import com.qniao.dam.api.query.revenuereward.user.response.*;
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.domian.aggregate.product.constant.ProductSubCategoryEnum;
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;
@ -33,6 +34,7 @@ import com.qniao.framework.utils.TypeConvertUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;

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

@ -29,4 +29,6 @@ public interface RewardConfigQueryService {
BigDecimal queryRecommendRewardPct(MatchmakerLevelEnum initiatorLevel, MatchmakerLevelEnum receiveLevel);
RewardConfig queryMatchmakerRenewValidityPeriod(Matchmaker matchmaker);
BigDecimal queryMatchmakerChannelGiftPct(Long userId, Integer todayCrossMicCount);
}

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

@ -135,6 +135,38 @@ public class RewardConfigQueryServiceImpl implements RewardConfigQueryService {
return null;
}
@Override
public BigDecimal queryMatchmakerChannelGiftPct(Long userId, Integer todayCrossMicCount) {
BigDecimal pct = BigDecimal.ZERO;
Matchmaker matchmaker = matchmakerQueryService.queryByUserId(userId);
if (ProductSubCategoryEnum.MATCHMAKER_FRANCHISE_FEE.equals(matchmaker.getType())) {
RewardConfig rewardConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_PARTNER_GIFT_PCT);
pct = new BigDecimal(rewardConfig.getValue());
} else if (ProductSubCategoryEnum.MATCHMAKER_ONLINE_FEE.equals(matchmaker.getType())) {
RewardConfig rewardConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_ONLINE_GIFT_PCT);
pct = new BigDecimal(rewardConfig.getValue());
} else if (ProductSubCategoryEnum.MATCHMAKER_TRAINEE_FEE.equals(matchmaker.getType())) {
RewardConfig minRewardConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_TRAINEE_GIFT_MIN_PCT);
BigDecimal minPct = new BigDecimal(minRewardConfig.getValue());
RewardConfig maxRewardConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_TRAINEE_GIFT_MAX_PCT);
BigDecimal maxPct = new BigDecimal(maxRewardConfig.getValue());
RewardConfig ladderRewardConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_GIFT_LADDER_PCT);
BigDecimal ladderPct = new BigDecimal(ladderRewardConfig.getValue());
pct = minPct.add(ladderPct.multiply(BigDecimal.valueOf(todayCrossMicCount / 5)));
pct = pct.compareTo(maxPct) > 0 ? maxPct : pct;
} else if (ProductSubCategoryEnum.MATCHMAKER_FREE_FEE.equals(matchmaker.getType())) {
RewardConfig minRewardConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_FREE_GIFT_MIN_PCT);
BigDecimal minPct = new BigDecimal(minRewardConfig.getValue());
RewardConfig maxRewardConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_FREE_GIFT_MAX_PCT);
BigDecimal maxPct = new BigDecimal(maxRewardConfig.getValue());
RewardConfig ladderRewardConfig = queryByRewardType(RewardTypeEnum.MATCHMAKER_GIFT_LADDER_PCT);
BigDecimal ladderPct = new BigDecimal(ladderRewardConfig.getValue());
pct = minPct.add(ladderPct.multiply(BigDecimal.valueOf(todayCrossMicCount / 5)));
pct = pct.compareTo(maxPct) > 0 ? maxPct : pct;
}
return pct;
}
@Override
public BigDecimal queryRecommendRewardPct(MatchmakerLevelEnum initiatorLevel,
MatchmakerLevelEnum receiveLevel) {

Loading…
Cancel
Save