Browse Source

玫瑰

master
张彭杰 2 months ago
parent
commit
1c5a907954
14 changed files with 217 additions and 6 deletions
  1. 6
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/virtualaccount/constant/VirtualAccountTradeTypeEnum.java
  2. 4
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java
  3. 4
      dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java
  4. 20
      dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/SettleOneOnOneRtcBySdkDto.java
  5. 10
      dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/response/SettleOneOnOneRtcBySdkVo.java
  6. 5
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/virtualaccount/user/VirtualAccountUserCommandController.java
  7. 19
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/virtualaccount/user/request/SettleOneOnOneRtcDto.java
  8. 10
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/virtualaccount/user/response/SettleOneOnOneRtcVo.java
  9. 45
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/virtualaccount/VirtualAccountApplicationService.java
  10. 25
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/virtualaccount/VirtualAccountAggregate.java
  11. 15
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/WalletAccountAggregate.java
  12. 26
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/virtualaccount/SettleOneOnOneRtcDomainService.java
  13. 9
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriageinformation/MarriageInformationQueryService.java
  14. 25
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriageinformation/impl/MarriageInformationQueryServiceImpl.java

6
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/virtualaccount/constant/VirtualAccountTradeTypeEnum.java

@ -17,7 +17,11 @@ public enum VirtualAccountTradeTypeEnum {
GIFT(202, "礼物"), GIFT(202, "礼物"),
CONNECT_CHANNEL(203, "连麦");
CONNECT_CHANNEL(203, "连麦"),
ONE_ON_ONE_VOICE(204, "1V1语音"),
ONE_ON_ONE_VIDEO(205, "1V1视频");
@EnumValue @EnumValue
@JsonValue @JsonValue

4
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java

@ -36,6 +36,10 @@ public enum TradeTypeEnum {
RECOMMEND_GIFT_REWARD(113, "邀请分成"), RECOMMEND_GIFT_REWARD(113, "邀请分成"),
ONE_ON_ONE_VOICE(114, "1V1语音"),
ONE_ON_ONE_VIDEO(115, "1V1视频"),
PLATFORM_SERVICE_FEE(201, "平台服务费"), PLATFORM_SERVICE_FEE(201, "平台服务费"),
WITHDRAW(202, "提现"); WITHDRAW(202, "提现");

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

@ -73,5 +73,7 @@ public interface MallServerApplicationService {
@IgnoreResponseAdvice @IgnoreResponseAdvice
QueryOneOnOneRtcConsumeBySdkVo queryOneOnOneRtcConsumeBySdk(@RequestBody QueryOneOnOneRtcConsumeBySdkDto dto); QueryOneOnOneRtcConsumeBySdkVo queryOneOnOneRtcConsumeBySdk(@RequestBody QueryOneOnOneRtcConsumeBySdkDto dto);
@PostMapping("/user/settle/one-on-one-rtc/by/sdk")
@IgnoreResponseAdvice
SettleOneOnOneRtcBySdkVo settleOneOnOneRtcBySdk(@RequestBody SettleOneOnOneRtcBySdkDto dto);
} }

20
dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/SettleOneOnOneRtcBySdkDto.java

@ -0,0 +1,20 @@
package com.qniao.dam.application.request;
import com.qniao.daca.domian.aggregate.rtcchannel.constant.RtcChannelTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class SettleOneOnOneRtcBySdkDto {
private RtcChannelTypeEnum rtcChannelType;
private Long payerUserId;
private Long profitUserId;
private Integer consumeBalance;
private Integer consumeCount;
}

10
dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/response/SettleOneOnOneRtcBySdkVo.java

@ -0,0 +1,10 @@
package com.qniao.dam.application.response;
import lombok.Data;
@Data
public class SettleOneOnOneRtcBySdkVo {
private Boolean flag;
}

5
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/virtualaccount/user/VirtualAccountUserCommandController.java

@ -56,4 +56,9 @@ public class VirtualAccountUserCommandController {
return virtualAccountApplicationService.queryOneOnOneRtcConsume(dto.getUserId(), dto.getRtcChannelType()); return virtualAccountApplicationService.queryOneOnOneRtcConsume(dto.getUserId(), dto.getRtcChannelType());
} }
@PostMapping("/settle/one-on-one-rtc/by/sdk")
@IgnoreResponseAdvice
public SettleOneOnOneRtcVo settleOneOnOneRtcBySdk(@RequestBody SettleOneOnOneRtcDto dto) {
return virtualAccountApplicationService.settleOneOnOneRtc(dto);
}
} }

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

@ -0,0 +1,19 @@
package com.qniao.dam.api.command.virtualaccount.user.request;
import com.qniao.daca.domian.aggregate.rtcchannel.constant.RtcChannelTypeEnum;
import lombok.Data;
@Data
public class SettleOneOnOneRtcDto {
private RtcChannelTypeEnum rtcChannelType;
private Long payerUserId;
private Long profitUserId;
private Integer consumeBalance;
private Integer consumeCount;
}

10
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/virtualaccount/user/response/SettleOneOnOneRtcVo.java

@ -0,0 +1,10 @@
package com.qniao.dam.api.command.virtualaccount.user.response;
import lombok.Data;
@Data
public class SettleOneOnOneRtcVo {
private Boolean flag = false;
}

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

@ -1,6 +1,7 @@
package com.qniao.dam.application.service.virtualaccount; package com.qniao.dam.application.service.virtualaccount;
import com.qniao.daca.domian.aggregate.rtcchannel.constant.RtcChannelTypeEnum; import com.qniao.daca.domian.aggregate.rtcchannel.constant.RtcChannelTypeEnum;
import com.qniao.dam.api.command.virtualaccount.user.request.SettleOneOnOneRtcDto;
import com.qniao.dam.api.command.virtualaccount.user.request.UserConsumeVirtualAccountDto; import com.qniao.dam.api.command.virtualaccount.user.request.UserConsumeVirtualAccountDto;
import com.qniao.dam.api.command.virtualaccount.user.request.UserCostChannelGiftDto; import com.qniao.dam.api.command.virtualaccount.user.request.UserCostChannelGiftDto;
import com.qniao.dam.api.command.virtualaccount.user.request.UserCostIMGiftDto; import com.qniao.dam.api.command.virtualaccount.user.request.UserCostIMGiftDto;
@ -15,10 +16,12 @@ import com.qniao.dam.domain.aggregate.revenuereward.entity.RevenueReward;
import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardRecord; import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardRecord;
import com.qniao.dam.domain.aggregate.virtualaccount.VirtualAccountAggregate; import com.qniao.dam.domain.aggregate.virtualaccount.VirtualAccountAggregate;
import com.qniao.dam.domain.aggregate.virtualaccount.entity.VirtualAccount; 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.entity.WalletAccount;
import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord; import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord;
import com.qniao.dam.domain.service.virtualaccount.ConsumeVirtualAccountDomainService; import com.qniao.dam.domain.service.virtualaccount.ConsumeVirtualAccountDomainService;
import com.qniao.dam.domain.service.virtualaccount.CostGiftRewardDomainService; import com.qniao.dam.domain.service.virtualaccount.CostGiftRewardDomainService;
import com.qniao.dam.domain.service.virtualaccount.SettleOneOnOneRtcDomainService;
import com.qniao.dam.domian.aggregate.order.constant.OrderBelongingEnum; import com.qniao.dam.domian.aggregate.order.constant.OrderBelongingEnum;
import com.qniao.dam.domian.aggregate.order.constant.OrderStatusEnum; import com.qniao.dam.domian.aggregate.order.constant.OrderStatusEnum;
import com.qniao.dam.domian.aggregate.order.constant.OrderTypeEnum; import com.qniao.dam.domian.aggregate.order.constant.OrderTypeEnum;
@ -31,11 +34,14 @@ import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum;
import com.qniao.dam.infrastructure.persistent.dao.domain.ProductDao; import com.qniao.dam.infrastructure.persistent.dao.domain.ProductDao;
import com.qniao.dam.infrastructure.persistent.dao.domain.ProductSpecDao; import com.qniao.dam.infrastructure.persistent.dao.domain.ProductSpecDao;
import com.qniao.dam.infrastructure.utils.SnowFlakeUtil; import com.qniao.dam.infrastructure.utils.SnowFlakeUtil;
import com.qniao.dam.query.marriageinformation.MarriageInformationQueryService;
import com.qniao.dam.query.product.ProductQueryService; import com.qniao.dam.query.product.ProductQueryService;
import com.qniao.dam.query.revenuereward.RevenueRewardQueryService; import com.qniao.dam.query.revenuereward.RevenueRewardQueryService;
import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; import com.qniao.dam.query.rewardconfig.RewardConfigQueryService;
import com.qniao.dam.query.usermarriageinformation.UserMarriageInformationQueryService;
import com.qniao.dam.query.virtualaccount.VirtualAccountQueryService; import com.qniao.dam.query.virtualaccount.VirtualAccountQueryService;
import com.qniao.dam.query.walletaccount.WalletAccountQueryService; import com.qniao.dam.query.walletaccount.WalletAccountQueryService;
import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation;
import com.qniao.domain.BaseApplicationService; import com.qniao.domain.BaseApplicationService;
import com.qniao.domain.BaseDomainEvent; import com.qniao.domain.BaseDomainEvent;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -59,6 +65,8 @@ public class VirtualAccountApplicationService extends BaseApplicationService {
@Resource @Resource
private WalletAccountQueryService walletAccountQueryService; private WalletAccountQueryService walletAccountQueryService;
@Resource @Resource
private WalletAccountAggregate walletAccountAggregate;
@Resource
private RevenueRewardQueryService revenueRewardQueryService; private RevenueRewardQueryService revenueRewardQueryService;
@Resource @Resource
private ProductDao productDao; private ProductDao productDao;
@ -74,6 +82,10 @@ public class VirtualAccountApplicationService extends BaseApplicationService {
private ProductQueryService productQueryService; private ProductQueryService productQueryService;
@Resource @Resource
private RewardConfigQueryService rewardConfigQueryService; private RewardConfigQueryService rewardConfigQueryService;
@Resource
private MarriageInformationQueryService marriageInformationQueryService;
@Resource
private SettleOneOnOneRtcDomainService settleOneOnOneRtcDomainService;
public void create(VirtualAccount virtualAccount) { public void create(VirtualAccount virtualAccount) {
virtualAccountAggregate.create(virtualAccount); virtualAccountAggregate.create(virtualAccount);
@ -415,4 +427,37 @@ public class VirtualAccountApplicationService extends BaseApplicationService {
} }
return vo; return vo;
} }
/**
* 结算 1V1 语音视频费用
*
* @param dto
* @return
*/
public SettleOneOnOneRtcVo settleOneOnOneRtc(SettleOneOnOneRtcDto dto) {
SettleOneOnOneRtcVo vo = new SettleOneOnOneRtcVo();
synchronized (dto.getPayerUserId().toString().intern()) {
VirtualAccount virtualAccount = virtualAccountQueryService.queryBy(dto.getPayerUserId());
if (Objects.nonNull(virtualAccount) && virtualAccount.getFrozenBalance() >= dto.getConsumeBalance()) {
MarriageInformation payerMarriageInformation = marriageInformationQueryService.queryByUserId(dto.getPayerUserId());
MarriageInformation profitMarriageInformation = marriageInformationQueryService.queryByUserId(dto.getProfitUserId());
if (RtcChannelTypeEnum.ONE_ON_ONE_VOICE.equals(dto.getRtcChannelType())) {
virtualAccountAggregate.handleFrozenData(virtualAccount, dto.getConsumeBalance(), VirtualAccountTradeTypeEnum.ONE_ON_ONE_VOICE, "与" + profitMarriageInformation.getNickName() + "1V1语音");
} else {
virtualAccountAggregate.handleFrozenData(virtualAccount, dto.getConsumeBalance(), VirtualAccountTradeTypeEnum.ONE_ON_ONE_VIDEO, "与" + profitMarriageInformation.getNickName() + "1V1视频");
}
WalletAccount walletAccount = walletAccountQueryService.queryByType(dto.getProfitUserId(), IdentityTypeEnum.INDIVIDUAL);
BigDecimal income = BigDecimal.valueOf(1.5).multiply(BigDecimal.valueOf(dto.getConsumeCount()));
if (RtcChannelTypeEnum.ONE_ON_ONE_VOICE.equals(dto.getRtcChannelType())) {
walletAccountAggregate.handleIncomeData(walletAccount, income, TradeTypeEnum.ONE_ON_ONE_VOICE, "与" + payerMarriageInformation.getNickName() + "1V1语音");
} else {
walletAccountAggregate.handleIncomeData(walletAccount, income, TradeTypeEnum.ONE_ON_ONE_VIDEO, "与" + payerMarriageInformation.getNickName() + "1V1视频");
}
settleOneOnOneRtcDomainService.handle(virtualAccount, walletAccount);
vo.setFlag(true);
}
}
return vo;
}
} }

25
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/virtualaccount/VirtualAccountAggregate.java

@ -43,14 +43,14 @@ public class VirtualAccountAggregate {
Integer tradeBalance, Integer tradeBalance,
VirtualAccountTradeTypeEnum tradeType, VirtualAccountTradeTypeEnum tradeType,
String remark) { String remark) {
Integer originalBalance = virtualAccount.getBalance();
Integer originalBalance = virtualAccount.getTotalBalance();
virtualAccount.setTotalBalance(virtualAccount.getTotalBalance() - tradeBalance); virtualAccount.setTotalBalance(virtualAccount.getTotalBalance() - tradeBalance);
virtualAccount.setBalance(originalBalance - tradeBalance); virtualAccount.setBalance(originalBalance - tradeBalance);
VirtualAccountRecord record = new VirtualAccountRecord(); VirtualAccountRecord record = new VirtualAccountRecord();
record.setTradeType(tradeType); record.setTradeType(tradeType);
record.setTradeBalance(-tradeBalance); record.setTradeBalance(-tradeBalance);
record.setOriginalBalance(originalBalance); record.setOriginalBalance(originalBalance);
record.setCurrentBalance(virtualAccount.getBalance());
record.setCurrentBalance(virtualAccount.getTotalBalance());
record.setRemark(remark); record.setRemark(remark);
virtualAccount.setRecordList(Collections.singletonList(record)); virtualAccount.setRecordList(Collections.singletonList(record));
} }
@ -58,14 +58,31 @@ public class VirtualAccountAggregate {
public void handleRechargeData(VirtualAccount virtualAccount, public void handleRechargeData(VirtualAccount virtualAccount,
Integer tradeBalance, Integer tradeBalance,
VirtualAccountTradeTypeEnum tradeType) { VirtualAccountTradeTypeEnum tradeType) {
Integer originalBalance = virtualAccount.getBalance();
Integer originalBalance = virtualAccount.getTotalBalance();
virtualAccount.setTotalBalance(virtualAccount.getTotalBalance() + tradeBalance); virtualAccount.setTotalBalance(virtualAccount.getTotalBalance() + tradeBalance);
virtualAccount.setBalance(originalBalance + tradeBalance); virtualAccount.setBalance(originalBalance + tradeBalance);
VirtualAccountRecord record = new VirtualAccountRecord(); VirtualAccountRecord record = new VirtualAccountRecord();
record.setTradeType(tradeType); record.setTradeType(tradeType);
record.setTradeBalance(tradeBalance); record.setTradeBalance(tradeBalance);
record.setOriginalBalance(originalBalance); record.setOriginalBalance(originalBalance);
record.setCurrentBalance(virtualAccount.getBalance());
record.setCurrentBalance(virtualAccount.getTotalBalance());
virtualAccount.setRecordList(Collections.singletonList(record)); virtualAccount.setRecordList(Collections.singletonList(record));
} }
public void handleFrozenData(VirtualAccount virtualAccount,
Integer tradeBalance,
VirtualAccountTradeTypeEnum tradeType,
String remark) {
Integer originalBalance = virtualAccount.getTotalBalance();
virtualAccount.setTotalBalance(virtualAccount.getTotalBalance() - tradeBalance);
virtualAccount.setFrozenBalance(virtualAccount.getFrozenBalance() - tradeBalance);
VirtualAccountRecord record = new VirtualAccountRecord();
record.setTradeType(tradeType);
record.setTradeBalance(-tradeBalance);
record.setOriginalBalance(originalBalance);
record.setCurrentBalance(virtualAccount.getTotalBalance());
record.setRemark(remark);
virtualAccount.setRecordList(Collections.singletonList(record));
}
} }

15
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/WalletAccountAggregate.java

@ -2,9 +2,13 @@ package com.qniao.dam.domain.aggregate.walletaccount;
import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount;
import com.qniao.dam.domain.aggregate.walletaccount.repository.WalletAccountRepository; import com.qniao.dam.domain.aggregate.walletaccount.repository.WalletAccountRepository;
import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord;
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Collections;
@Service @Service
public class WalletAccountAggregate { public class WalletAccountAggregate {
@ -15,4 +19,15 @@ public class WalletAccountAggregate {
public void save(WalletAccount walletAccount) { public void save(WalletAccount walletAccount) {
walletAccountRepository.save(walletAccount); walletAccountRepository.save(walletAccount);
} }
public void handleIncomeData(WalletAccount walletAccount,
BigDecimal income,
TradeTypeEnum tradeType,
String remark) {
BigDecimal originalBalance = walletAccount.getTotalBalance();
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(income));
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance()));
WalletAccountRecord record = WalletAccountRecord.build(tradeType, income, true, originalBalance, walletAccount.getTotalBalance());
walletAccount.setRecordList(Collections.singletonList(record));
}
} }

26
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/virtualaccount/SettleOneOnOneRtcDomainService.java

@ -0,0 +1,26 @@
package com.qniao.dam.domain.service.virtualaccount;
import com.qniao.dam.domain.aggregate.virtualaccount.VirtualAccountAggregate;
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 org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@Service
public class SettleOneOnOneRtcDomainService {
@Resource
private VirtualAccountAggregate virtualAccountAggregate;
@Resource
private WalletAccountAggregate walletAccountAggregate;
@Transactional(rollbackFor = Exception.class)
public void handle(VirtualAccount virtualAccount,
WalletAccount walletAccount) {
virtualAccountAggregate.edit(virtualAccount);
walletAccountAggregate.save(walletAccount);
}
}

9
dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriageinformation/MarriageInformationQueryService.java

@ -0,0 +1,9 @@
package com.qniao.dam.query.marriageinformation;
import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation;
public interface MarriageInformationQueryService {
MarriageInformation queryByUserId(Long userId);
}

25
dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriageinformation/impl/MarriageInformationQueryServiceImpl.java

@ -0,0 +1,25 @@
package com.qniao.dam.query.marriageinformation.impl;
import com.qniao.dam.infrastructure.persistent.dao.domain.MarriageInformationDao;
import com.qniao.dam.query.marriageinformation.MarriageInformationQueryService;
import com.qniao.dam.query.usermarriageinformation.UserMarriageInformationQueryService;
import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation;
import com.qniao.das.domian.aggregate.marriageinformation.UserMarriageInformation;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class MarriageInformationQueryServiceImpl implements MarriageInformationQueryService {
@Resource
private UserMarriageInformationQueryService userMarriageInformationQueryService;
@Resource
private MarriageInformationDao marriageInformationDao;
@Override
public MarriageInformation queryByUserId(Long userId) {
UserMarriageInformation userMarriageInformation = userMarriageInformationQueryService.queryByOwn(userId);
return marriageInformationDao.selectById(userMarriageInformation.getMiId());
}
}
Loading…
Cancel
Save