From ec9ba83254c50e3687e89b8107f25adf3c6bc32d Mon Sep 17 00:00:00 2001 From: Derran Date: Sat, 18 Apr 2026 11:04:23 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BA=A2=E5=A8=98=E7=9B=B4=E6=92=AD=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rewardconfig/constant/RewardTypeEnum.java | 2 + .../MallServerApplicationService.java | 4 ++ .../UserAcquireLinkMicCardRewardDto.java | 21 +++++++ .../WalletAccountUserCommandController.java | 9 +++ .../UserAcquireLinkMicCardRewardDto.java | 19 ++++++ .../VirtualAccountApplicationService.java | 37 ++---------- .../WalletAccountApplicationService.java | 58 +++++++++++++++++++ 7 files changed, 118 insertions(+), 32 deletions(-) create mode 100644 dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireLinkMicCardRewardDto.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/request/UserAcquireLinkMicCardRewardDto.java diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java index 9063f3f..c64b57c 100644 --- a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java +++ b/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, "签约红娘直播礼物收益百分比"), diff --git a/dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java b/dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java index 73b23a7..18e417a 100644 --- a/dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java +++ b/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); diff --git a/dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireLinkMicCardRewardDto.java b/dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireLinkMicCardRewardDto.java new file mode 100644 index 0000000..1bba6b6 --- /dev/null +++ b/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; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/WalletAccountUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/WalletAccountUserCommandController.java index b45f7bc..01951cc 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/WalletAccountUserCommandController.java +++ b/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); + } + + + } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/request/UserAcquireLinkMicCardRewardDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/request/UserAcquireLinkMicCardRewardDto.java new file mode 100644 index 0000000..b1e2de0 --- /dev/null +++ b/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; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/virtualaccount/VirtualAccountApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/virtualaccount/VirtualAccountApplicationService.java index bacd8c6..fae9614 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/virtualaccount/VirtualAccountApplicationService.java +++ b/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); - } - /** * 玫瑰充值 */ diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/walletaccount/WalletAccountApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/walletaccount/WalletAccountApplicationService.java index 46a85ea..c0f2065 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/walletaccount/WalletAccountApplicationService.java +++ b/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); + } }