Browse Source

红娘直播任务

master
张彭杰 1 month ago
parent
commit
ec9ba83254
7 changed files with 118 additions and 32 deletions
  1. 2
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java
  2. 4
      dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java
  3. 21
      dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireLinkMicCardRewardDto.java
  4. 9
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/WalletAccountUserCommandController.java
  5. 19
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/request/UserAcquireLinkMicCardRewardDto.java
  6. 37
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/virtualaccount/VirtualAccountApplicationService.java
  7. 58
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/walletaccount/WalletAccountApplicationService.java

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

@ -158,6 +158,8 @@ public enum RewardTypeEnum {
RTC_PROFIT_BY_ONE_ON_ONE(606, "一对一RTC收益"),
CHAT_PROFIT_BY_LINK_MIC_CARD(607, "连麦收益-连麦卡"),
//红娘礼物收益
CONTRACT_MATCHMAKER_GIFT_PCT(701, "签约红娘直播礼物收益百分比"),

4
dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java

@ -49,6 +49,10 @@ public interface MallServerApplicationService {
@IgnoreResponseAdvice
ConsumeVirtualAccountVo userConsumeVirtualAccountBySdk(@RequestBody UserConsumeVirtualAccountDto dto);
@PostMapping("/user/acquire/link-mic-card/reward/by/sdk")
@IgnoreResponseAdvice
void userAcquireLinkMicCardRewardBySdk(@RequestBody UserAcquireLinkMicCardRewardDto dto);
@PostMapping("/user/acquire/reward-amount")
@IgnoreResponseAdvice
void userAcquireRewardAmountBySdk(@RequestBody UserAcquireRewardAmountDto dto);

21
dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireLinkMicCardRewardDto.java

@ -0,0 +1,21 @@
package com.qniao.dam.application.request;
import com.qniao.dam.domian.aggregate.virtualaccount.constant.VirtualAccountTradeTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class UserAcquireLinkMicCardRewardDto {
private Long userId;
private Long anchorUserId;
private Integer channelCreatorTodayCrossMicCount;
private VirtualAccountTradeTypeEnum tradeType;
private String remark;
}

9
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/WalletAccountUserCommandController.java

@ -1,5 +1,6 @@
package com.qniao.dam.api.command.walletaccount.user;
import com.qniao.dam.api.command.walletaccount.user.request.UserAcquireLinkMicCardRewardDto;
import com.qniao.dam.api.command.walletaccount.user.request.UserAcquireRewardAmountDto;
import com.qniao.dam.application.service.walletaccount.WalletAccountApplicationService;
import com.qniao.framework.annotation.IgnoreResponseAdvice;
@ -25,4 +26,12 @@ public class WalletAccountUserCommandController {
walletAccountApplicationService.acquireRewardAmount(dto);
}
@PostMapping("/acquire/link-mic-card/reward/by/sdk")
@IgnoreResponseAdvice
void userAcquireLinkMicCardRewardBySdk(@RequestBody UserAcquireLinkMicCardRewardDto dto) {
walletAccountApplicationService.acquireLinkMicCardReward(dto);
}
}

19
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/request/UserAcquireLinkMicCardRewardDto.java

@ -0,0 +1,19 @@
package com.qniao.dam.api.command.walletaccount.user.request;
import com.qniao.dam.domian.aggregate.virtualaccount.constant.VirtualAccountTradeTypeEnum;
import lombok.Data;
@Data
public class UserAcquireLinkMicCardRewardDto {
private Long userId;
private Long anchorUserId;
private Integer channelCreatorTodayCrossMicCount;
private VirtualAccountTradeTypeEnum tradeType;
private String remark;
}

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

@ -7,6 +7,7 @@ import com.qniao.dam.api.command.virtualaccount.user.request.UserCostChannelGift
import com.qniao.dam.api.command.virtualaccount.user.request.UserCostIMGiftDto;
import com.qniao.dam.api.command.virtualaccount.user.response.*;
import com.qniao.dam.api.query.product.user.response.UserGetProductByCategoryVo;
import com.qniao.dam.application.service.walletaccount.WalletAccountApplicationService;
import com.qniao.dam.domain.aggregate.order.entity.Order;
import com.qniao.dam.domain.aggregate.order.entity.OrderItem;
import com.qniao.dam.domain.aggregate.product.entity.Product;
@ -92,7 +93,7 @@ public class VirtualAccountApplicationService extends BaseApplicationService {
@Resource
private SettleOneOnOneRtcDomainService settleOneOnOneRtcDomainService;
@Resource
private AcquireRevenueRewardDomainService acquireRevenueRewardDomainService;
private WalletAccountApplicationService walletAccountApplicationService;
public void create(VirtualAccount virtualAccount) {
virtualAccountAggregate.create(virtualAccount);
@ -123,7 +124,9 @@ public class VirtualAccountApplicationService extends BaseApplicationService {
vo.setOrderId(order.getId());
//相亲卡消费分润
if (VirtualAccountTradeTypeEnum.CONNECT_CHANNEL.equals(dto.getTradeType())) {
handleChannelConnectReward(dto.getAnchorUserId(), dto.getChannelCreatorTodayCrossMicCount(), productSpec.getUnitSellingPrice().intValue());
RewardConfig worthRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.VIRTUAL_ACCOUNT_WORTH);
BigDecimal worthReward = BigDecimal.valueOf(productSpec.getUnitSellingPrice().intValue()).multiply(new BigDecimal(worthRewardConfig.getValue()));
walletAccountApplicationService.handleChannelConnectReward(dto.getAnchorUserId(), dto.getChannelCreatorTodayCrossMicCount(),worthReward);
}
}
}
@ -365,36 +368,6 @@ public class VirtualAccountApplicationService extends BaseApplicationService {
return vo;
}
private void handleChannelConnectReward(Long userId,
Integer channelCreatorTodayCrossMicCount,
Integer costBalance) {
//收益信息
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(userId);
if (Objects.isNull(revenueReward)) {
revenueReward = RevenueReward.initUser(userId);
}
RewardConfig worthRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.VIRTUAL_ACCOUNT_WORTH);
//营收额 todo
BigDecimal giftRewardPct = rewardConfigQueryService.queryMatchmakerChannelGiftPct(userId, channelCreatorTodayCrossMicCount);
BigDecimal revenue = BigDecimal.valueOf(costBalance).multiply(new BigDecimal(worthRewardConfig.getValue())).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, BigDecimal.valueOf(costBalance));
//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);
}
/**
* 玫瑰充值
*/

58
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/walletaccount/WalletAccountApplicationService.java

@ -1,18 +1,33 @@
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.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.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.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.TradeSceneEnum;
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum;
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 org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Collections;
import java.util.Objects;
@Service
public class WalletAccountApplicationService {
@ -23,6 +38,12 @@ public class WalletAccountApplicationService {
private WalletAccountAggregate walletAccountAggregate;
@Resource
private WalletAccountQueryService walletAccountQueryService;
@Resource
private RevenueRewardQueryService revenueRewardQueryService;
@Resource
private RewardConfigQueryService rewardConfigQueryService;
@Resource
private AcquireRevenueRewardDomainService acquireRevenueRewardDomainService;
public void confirmWithdraw(Long walletAccountId, BigDecimal withdrawAmount, Long associateId) {
WalletAccount walletAccount = walletAccountDao.selectById(walletAccountId);
@ -53,4 +74,41 @@ public class WalletAccountApplicationService {
walletAccount.setRecordList(Collections.singletonList(record));
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);
}
}
Loading…
Cancel
Save