diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/order/OrderEventHandler.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/order/OrderEventHandler.java index f5dec1a..007de73 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/order/OrderEventHandler.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/order/OrderEventHandler.java @@ -6,6 +6,7 @@ import com.google.common.eventbus.Subscribe; import com.qniao.dam.application.service.marriagebounty.MarriageBountyOrderApplicationService; import com.qniao.dam.application.service.order.OrderApplicationService; import com.qniao.dam.application.service.right.RightApplicationService; +import com.qniao.dam.application.service.virtualaccount.VirtualAccountApplicationService; import com.qniao.dam.domain.aggregate.activity.entity.Activity; import com.qniao.dam.domain.aggregate.activity.repository.ActivityRepository; import com.qniao.dam.domain.aggregate.externalorder.ExternalOrderRelAggregate; @@ -28,6 +29,7 @@ import com.qniao.dam.domian.aggregate.order.constant.OrderBelongingEnum; import com.qniao.dam.domian.aggregate.order.constant.OrderTypeEnum; import com.qniao.dam.domian.aggregate.order.event.ExternalOrderCompletedMQEvent; import com.qniao.dam.domian.aggregate.order.event.OrderCompletedEvent; +import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; import com.qniao.dam.domian.aggregate.product.constant.ProductTypeEnum; import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermNameEnum; import com.qniao.dam.infrastructure.constant.MqExchange; @@ -87,6 +89,8 @@ public class OrderEventHandler extends BaseApplicationService { @Resource private OrderApplicationService orderApplicationService; @Resource + private VirtualAccountApplicationService virtualAccountApplicationService; + @Resource private SnowFlakeUtil snowFlakeUtil; @Resource private AmqpTemplate amqpTemplate; @@ -111,6 +115,10 @@ public class OrderEventHandler extends BaseApplicationService { if (Objects.nonNull(right)) { rightList.add(right); } + if (ProductSubCategoryEnum.VIRTUAL_CURRENCY.equals(product.getSubCategory())) { + //玫瑰充值 + virtualAccountApplicationService.recharge(product,productSpec,order); + } } } batchCreate(rightList); 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 d76d038..57b91fe 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 @@ -9,6 +9,7 @@ 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; import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; +import com.qniao.dam.domain.aggregate.productspec.valueobj.ProductSpecTerm; import com.qniao.dam.domain.aggregate.revenuereward.entity.RevenueReward; import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardRecord; import com.qniao.dam.domain.aggregate.virtualaccount.VirtualAccountAggregate; @@ -20,6 +21,7 @@ import com.qniao.dam.domain.service.virtualaccount.CostGiftRewardDomainService; 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.OrderTypeEnum; +import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermNameEnum; 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; @@ -27,6 +29,7 @@ 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.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.virtualaccount.VirtualAccountQueryService; import com.qniao.dam.query.walletaccount.WalletAccountQueryService; @@ -61,6 +64,8 @@ public class VirtualAccountApplicationService { private ConsumeVirtualAccountDomainService consumeVirtualAccountDomainService; @Resource private CostGiftRewardDomainService costGiftRewardDomainService; + @Resource + private ProductQueryService productQueryService; public void create(VirtualAccount virtualAccount) { virtualAccountAggregate.create(virtualAccount); @@ -309,4 +314,21 @@ public class VirtualAccountApplicationService { vo.setSuccess(true); return vo; } + + /** + * 玫瑰充值 + */ + public void recharge(Product product, + ProductSpec productSpec, + Order order) { + synchronized (order.getUserId().toString().intern()) { + VirtualAccount virtualAccount = virtualAccountQueryService.queryOrInit(order.getUserId()); + + ProductSpecTerm specTerm = productQueryService.getTermByName(productSpec.getProductSpecTermList(), ProductSpecTermNameEnum.PURCHASE_TIME); + int quantity = Integer.parseInt(specTerm.getValue()); + + virtualAccountAggregate.handleRechargeData(virtualAccount, quantity, VirtualAccountTradeTypeEnum.RECHARGE); + virtualAccountAggregate.edit(virtualAccount); + } + } } \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/virtualaccount/VirtualAccountAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/virtualaccount/VirtualAccountAggregate.java index 122f813..63988a4 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/virtualaccount/VirtualAccountAggregate.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/virtualaccount/VirtualAccountAggregate.java @@ -44,4 +44,17 @@ public class VirtualAccountAggregate { record.setCurrentBalance(virtualAccount.getBalance()); virtualAccount.setRecordList(Collections.singletonList(record)); } + + public void handleRechargeData(VirtualAccount virtualAccount, + Integer tradeBalance, + VirtualAccountTradeTypeEnum tradeType) { + Integer originalBalance = virtualAccount.getBalance(); + virtualAccount.setBalance(originalBalance + tradeBalance); + VirtualAccountRecord record = new VirtualAccountRecord(); + record.setTradeType(tradeType); + record.setTradeBalance(tradeBalance); + record.setOriginalBalance(originalBalance); + record.setCurrentBalance(virtualAccount.getBalance()); + virtualAccount.setRecordList(Collections.singletonList(record)); + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/VirtualAccountQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/VirtualAccountQueryService.java index 7cb605b..1d27dcc 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/VirtualAccountQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/VirtualAccountQueryService.java @@ -14,4 +14,6 @@ public interface VirtualAccountQueryService { VirtualAccount queryBy(Long userId); IPage pageVirtualAccountRecord(UserPageVirtualAccountRecordQueryParams queryParams, PageUtil pageUtil); + + VirtualAccount queryOrInit(Long userId); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/impl/VirtualAccountQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/impl/VirtualAccountQueryServiceImpl.java index 51b46c0..9321c86 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/impl/VirtualAccountQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/impl/VirtualAccountQueryServiceImpl.java @@ -47,4 +47,15 @@ public class VirtualAccountQueryServiceImpl implements VirtualAccountQueryServic return virtualAccountRecordDao.page(pageUtil.toPageWithoutOrders(), queryParams); } + @Override + public VirtualAccount queryOrInit(Long userId) { + VirtualAccount virtualAccount = queryBy(userId); + if (Objects.isNull(virtualAccount)) { + virtualAccount = new VirtualAccount(); + virtualAccount.setUserId(userId); + virtualAccount.setBalance(0); + } + return virtualAccount; + } + } \ No newline at end of file