From 3ddd57a26b93e6d2cf7f7a328f5086b67afb6691 Mon Sep 17 00:00:00 2001 From: Derran Date: Tue, 4 Jun 2024 14:23:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dating-agency-mall-server/pom.xml | 5 + .../UserSubmitSiteActivityOrderDto.java | 3 - .../user/response/UserSubmitOrderVo.java | 3 + .../ExternalOrderEventHandler.java | 46 +++++---- .../handler/order/OrderEventHandler.java | 75 +++++++++++---- .../order/OrderApplicationService.java | 94 +++++++++++-------- .../SubmitSiteActivityOrderDomainService.java | 23 +++-- .../query/product/ProductQueryService.java | 2 + .../product/impl/ProductQueryServiceImpl.java | 11 ++- 9 files changed, 175 insertions(+), 87 deletions(-) diff --git a/dating-agency-mall-server/pom.xml b/dating-agency-mall-server/pom.xml index 1b92eb6..7d8d338 100644 --- a/dating-agency-mall-server/pom.xml +++ b/dating-agency-mall-server/pom.xml @@ -96,6 +96,11 @@ dating-agency-uec-sdk 0.0.1-SNAPSHOT + + com.qniao + dating-agency-service-sdk + 0.0.1-SNAPSHOT + diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/request/UserSubmitSiteActivityOrderDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/request/UserSubmitSiteActivityOrderDto.java index b3d4096..4f47658 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/request/UserSubmitSiteActivityOrderDto.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/request/UserSubmitSiteActivityOrderDto.java @@ -15,7 +15,4 @@ public class UserSubmitSiteActivityOrderDto { @ApiModelProperty("征婚资料标识") @NotNull private Long miId; - - @ApiModelProperty("是否开通会员") - private Boolean openVip = false; } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/response/UserSubmitOrderVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/response/UserSubmitOrderVo.java index 62899ad..8606775 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/response/UserSubmitOrderVo.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/response/UserSubmitOrderVo.java @@ -20,4 +20,7 @@ public class UserSubmitOrderVo { @JsonSerialize(using = ToStringSerializer.class) private Long paymentOrderId; + @ApiModelProperty("是否免费结算") + private Boolean freeSettlement = false; + } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/externalorder/ExternalOrderEventHandler.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/externalorder/ExternalOrderEventHandler.java index 8fdd076..cf90555 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/externalorder/ExternalOrderEventHandler.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/externalorder/ExternalOrderEventHandler.java @@ -12,8 +12,10 @@ import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentOrderStatusEn import com.qniao.dam.infrastructure.constant.MqExchange; import com.qniao.dam.infrastructure.constant.MqQueue; import com.qniao.dam.infrastructure.persistent.dao.domain.ExternalOrderRelDao; +import com.qniao.dam.infrastructure.persistent.dao.domain.SiteActivityDao; import com.qniao.dam.query.paymentchannelorder.PaymentChannelOrderQueryService; import com.qniao.dam.query.paymentorder.PaymentOrderQueryService; +import com.qniao.das.domian.aggregate.siteactivity.SiteActivity; import com.qniao.das.domian.aggregate.siteactivity.event.SiteActivityCancelEvent; import com.qniao.domain.BaseApplicationService; import lombok.extern.slf4j.Slf4j; @@ -44,6 +46,8 @@ public class ExternalOrderEventHandler extends BaseApplicationService { private PaymentOrderRefundApplicationService paymentOrderRefundApplicationService; @Resource private ExternalOrderRelAggregate externalOrderRelAggregate; + @Resource + private SiteActivityDao siteActivityDao; @RabbitListener(bindings = @QueueBinding(value = @Queue(MqQueue.CANCEL_SITE_ACTIVITY), exchange = @Exchange(value = MqExchange.CANCEL_SITE_ACTIVITY, @@ -51,26 +55,30 @@ public class ExternalOrderEventHandler extends BaseApplicationService { public void handleConfirmMeeting(SiteActivityCancelEvent event) { try { log.error("接收到线下活动订单取消事件:{}", event); - ExternalOrderRel externalOrderRel = externalOrderRelDao.queryCompletedBy(event.getExternalId(), event.getUserId(), ExternalOrderTypeEnum.SITE_ACTIVITY); - if (Objects.nonNull(externalOrderRel)) { - externalOrderRel.setStatus(ExternalOrderRelStatus.CANCELED); - externalOrderRelAggregate.save(externalOrderRel); - List paymentOrderRefundList = new ArrayList<>(); - List paymentOrderList = paymentOrderQueryService.listByOrderId(Collections.singletonList(externalOrderRel.getOrderId()), PaymentOrderStatusEnum.PAID); - for (PaymentOrder paymentOrder : paymentOrderList) { - PaymentOrderRefund paymentOrderRefund = new PaymentOrderRefund(); - PaymentChannelOrder paymentChannelOrder = paymentChannelOrderQueryService.queryByTxnOrderId(paymentOrder.getId()); - paymentOrderRefund.setTradeOrderId(paymentOrder.getOrderId()); - paymentOrderRefund.setPaymentOrderId(paymentOrder.getId()); - paymentOrderRefund.setPaymentChannelOrder(paymentChannelOrder.getId()); - paymentOrderRefund.setPaymentMethod(paymentOrder.getPaymentMethod()); - paymentOrderRefund.setTransactionId(paymentChannelOrder.getExtOrderNo()); - paymentOrderRefund.setOrderAmount(paymentChannelOrder.getAmount()); - paymentOrderRefund.setRefundAmount(paymentChannelOrder.getAmount()); - paymentOrderRefundList.add(paymentOrderRefund); + SiteActivity siteActivity = siteActivityDao.selectById(event.getExternalId()); + //社群活动允许退款 + if (Objects.nonNull(siteActivity.getActivityType()) && siteActivity.getActivityType() == 1) { + ExternalOrderRel externalOrderRel = externalOrderRelDao.queryCompletedBy(event.getExternalId(), event.getUserId(), ExternalOrderTypeEnum.SITE_ACTIVITY); + if (Objects.nonNull(externalOrderRel)) { + externalOrderRel.setStatus(ExternalOrderRelStatus.CANCELED); + externalOrderRelAggregate.save(externalOrderRel); + List paymentOrderRefundList = new ArrayList<>(); + List paymentOrderList = paymentOrderQueryService.listByOrderId(Collections.singletonList(externalOrderRel.getOrderId()), PaymentOrderStatusEnum.PAID); + for (PaymentOrder paymentOrder : paymentOrderList) { + PaymentOrderRefund paymentOrderRefund = new PaymentOrderRefund(); + PaymentChannelOrder paymentChannelOrder = paymentChannelOrderQueryService.queryByTxnOrderId(paymentOrder.getId()); + paymentOrderRefund.setTradeOrderId(paymentOrder.getOrderId()); + paymentOrderRefund.setPaymentOrderId(paymentOrder.getId()); + paymentOrderRefund.setPaymentChannelOrder(paymentChannelOrder.getId()); + paymentOrderRefund.setPaymentMethod(paymentOrder.getPaymentMethod()); + paymentOrderRefund.setTransactionId(paymentChannelOrder.getExtOrderNo()); + paymentOrderRefund.setOrderAmount(paymentChannelOrder.getAmount()); + paymentOrderRefund.setRefundAmount(paymentChannelOrder.getAmount()); + paymentOrderRefundList.add(paymentOrderRefund); + } + //发起微信退款 + paymentOrderRefundApplicationService.refund(paymentOrderRefundList); } - //发起微信退款 - paymentOrderRefundApplicationService.refund(paymentOrderRefundList); } } catch (Exception e) { log.error("接收到线下活动订单取消事件处理异常", e); 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 af734b4..807ad7b 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 @@ -4,7 +4,10 @@ import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.domain.aggregate.activity.entity.Activity; +import com.qniao.dam.domain.aggregate.activity.repository.ActivityRepository; import com.qniao.dam.domain.aggregate.externalorder.ExternalOrderRelAggregate; import com.qniao.dam.domain.aggregate.externalorder.entity.ExternalOrderRel; import com.qniao.dam.domain.aggregate.order.OrderAggregate; @@ -27,11 +30,14 @@ import com.qniao.dam.domian.aggregate.product.constant.ProductTypeEnum; import com.qniao.dam.infrastructure.constant.MqExchange; import com.qniao.dam.infrastructure.persistent.dao.domain.ExternalOrderRelDao; import com.qniao.dam.infrastructure.persistent.dao.domain.MarriageInformationDao; +import com.qniao.dam.infrastructure.persistent.dao.domain.SiteActivityDao; import com.qniao.dam.infrastructure.utils.SnowFlakeUtil; import com.qniao.dam.query.product.ProductQueryService; import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation; +import com.qniao.das.domian.aggregate.siteactivity.SiteActivity; import com.qniao.dau.application.UecServerApplicationService; import com.qniao.domain.BaseApplicationService; +import com.qniao.domain.BaseDomainEvent; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.AmqpTemplate; import org.springframework.stereotype.Component; @@ -73,6 +79,12 @@ public class OrderEventHandler extends BaseApplicationService { @Resource private OrderAggregate orderAggregate; @Resource + private SiteActivityDao siteActivityDao; + @Resource + private ActivityRepository activityRepository; + @Resource + private OrderApplicationService orderApplicationService; + @Resource private SnowFlakeUtil snowFlakeUtil; @Resource private AmqpTemplate amqpTemplate; @@ -115,10 +127,8 @@ public class OrderEventHandler extends BaseApplicationService { if (Objects.nonNull(externalOrderRel)) { externalOrderRel.setStatus(ExternalOrderRelStatus.COMPLETED); externalOrderRelAggregate.save(externalOrderRel); - if (ExternalOrderTypeEnum.VIP_PRODUCT.equals(externalOrderRel.getType())) { - //购买vip套餐赠送下线参与机会 + if (ExternalOrderTypeEnum.SITE_ACTIVITY.equals(externalOrderRel.getType())) { giftSiteActivityOrder(externalOrderRel.getExternalId(), order.getUserId(), order.getMiId()); - } else if (ExternalOrderTypeEnum.SITE_ACTIVITY.equals(externalOrderRel.getType())) { //发送订单完成事件 sendCompletedMQ(externalOrderRel, order); } @@ -129,21 +139,52 @@ public class OrderEventHandler extends BaseApplicationService { } private void giftSiteActivityOrder(Long externalId, Long userId, Long miId) { + SiteActivity siteActivity = siteActivityDao.selectById(externalId); MarriageInformation marriageInformation = marriageInformationDao.selectById(miId); - Product product = productQueryService.querySiteActivityBy(externalId, marriageInformation.getGenderCode()); - Order order = Order.build(userId, miId, OrderBelongingEnum.CUSTOMER, marriageInformation.getNickName(), OrderTypeEnum.NORMAL); - ProductSpec productSpec = product.getProductSpecList().get(0); - OrderItem orderItem = OrderItem.build(productSpec.getProductId(), productSpec.getId(), product.getProductType(), product.getMainCategory(), product.getSubCategory(), - product.getProductTitle(), BigDecimal.ZERO, 1); - orderItem.setSettlementAmount(BigDecimal.ZERO); - order.setSettlementAmount(BigDecimal.ZERO); - order.setOrderItemList(Collections.singletonList(orderItem)); - //设置订单号 - order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode()); - orderAggregate.complete(order); - ExternalOrderRel externalOrderRel = ExternalOrderRel.build(externalId, order.getId(), ExternalOrderTypeEnum.SITE_ACTIVITY, ExternalOrderRelStatus.COMPLETED); - externalOrderRelDao.insert(externalOrderRel); - sendCompletedMQ(externalOrderRel, order); + // 收费项 0 道具 1 收费活动 + if (Objects.nonNull(siteActivity.getChargeType())) { + if (siteActivity.getChargeType() == 0) { + // 道具 + Product product = productQueryService.queryById(siteActivity.getVipActivityId()); + Order order = Order.build(userId, miId, OrderBelongingEnum.CUSTOMER, marriageInformation.getNickName(), OrderTypeEnum.NORMAL); + ProductSpec productSpec = product.getProductSpecList().get(0); + OrderItem orderItem = OrderItem.build(productSpec.getProductId(), productSpec.getId(), product.getProductType(), product.getMainCategory(), product.getSubCategory(), + product.getProductTitle(), BigDecimal.ZERO, 1); + orderItem.setSettlementAmount(BigDecimal.ZERO); + order.setSettlementAmount(BigDecimal.ZERO); + order.setOrderItemList(Collections.singletonList(orderItem)); + //设置订单号 + order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode()); + BaseDomainEvent event = orderAggregate.complete(order); + this.sendEvent(event); + } else if (siteActivity.getChargeType() == 1) { + // 收费活动 + Order order = new Order(); + order.setUserId(userId); + order.setMiId(miId); + order.setActivityId(siteActivity.getVipActivityId()); + order.setGroupType(1); + Activity activity = activityRepository.load(siteActivity.getVipActivityId()); + List orderItemList = new ArrayList<>(); + activity.getActivityProductList().forEach(activityProduct -> { + OrderItem orderItem = new OrderItem(); + orderItem.setProductSpecId(activityProduct.getProductSpecId()); + orderItem.setQuantity(1); + orderItemList.add(orderItem); + }); + order.setOrderItemList(orderItemList); + //1. 填充订单信息 + 同类型权益,不同规格,限制购买和提醒 + orderApplicationService.fillOrderInfo(order); + order.getOrderItemList().forEach(orderItem -> { + orderItem.setSettlementAmount(BigDecimal.ZERO); + }); + order.setSettlementAmount(BigDecimal.ZERO); + //设置订单号 + order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode()); + BaseDomainEvent event = orderAggregate.complete(order); + this.sendEvent(event); + } + } } private void sendCompletedMQ(ExternalOrderRel externalOrderRel, Order order) { diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java index c0aa086..d7e7272 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java @@ -34,10 +34,16 @@ import com.qniao.dam.query.matchmaker.MatchmakerQueryService; import com.qniao.dam.query.order.OrderQueryService; import com.qniao.dam.query.product.ProductQueryService; import com.qniao.dam.query.right.RightQueryService; +import com.qniao.das.application.DatingAgencyServiceApplicationService; +import com.qniao.das.application.request.CalculateSiteActivityFeeDto; +import com.qniao.das.application.response.CalculateSiteActivityFeeVo; import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation; import com.qniao.das.domian.aggregate.marriageinformation.constant.GenderEnum; import com.qniao.das.domian.aggregate.siteactivity.SiteActivity; +import com.qniao.das.domian.aggregate.vip.VIPEnum; import com.qniao.dau.domain.aggregate.matchmaker.entity.Matchmaker; +import com.qniao.domain.BaseApplicationService; +import com.qniao.domain.BaseDomainEvent; import com.qniao.framework.exception.BizException; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -50,7 +56,7 @@ import java.util.List; import java.util.Objects; @Service -public class OrderApplicationService { +public class OrderApplicationService extends BaseApplicationService { @Resource private SubmitOrderDomainService submitOrderDomainService; @@ -79,9 +85,9 @@ public class OrderApplicationService { @Resource private SiteActivityDao siteActivityDao; @Resource - private ActivityRepository activityRepository; - @Resource private RightQueryService rightQueryService; + @Resource + private DatingAgencyServiceApplicationService datingAgencyServiceApplicationService; @Value("${marriage_bounty_meeting_quantity:5}") private Integer marriageBountyMeetingQuantity; @@ -96,13 +102,13 @@ public class OrderApplicationService { //1. 填充订单信息 + 同类型权益,不同规格,限制购买和提醒 fillOrderInfo(order); //2. 订单金额计算 - countOrderAmount(order); + countOrderAmount(order, false); //3. 设置订单号 order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode()); //4. 组织付款单信息 PaymentOrder paymentOrder = makePaymentOrder(order); submitOrderDomainService.handle(order, paymentOrder); - return new UserSubmitOrderVo(order.getId(), paymentOrder.getId()); + return new UserSubmitOrderVo(order.getId(), paymentOrder.getId(), false); } public PaymentOrder makePaymentOrder(Order order) { @@ -113,7 +119,7 @@ public class OrderApplicationService { return paymentOrder; } - public void countOrderAmount(Order order) { + public void countOrderAmount(Order order, Boolean allowFree) { if (CollUtil.isNotEmpty(order.getOrderItemList())) { BigDecimal totalSettlementAmount = BigDecimal.ZERO; for (OrderItem orderItem : order.getOrderItemList()) { @@ -121,13 +127,13 @@ public class OrderApplicationService { totalSettlementAmount = totalSettlementAmount.add(orderItem.getSettlementAmount()); } order.setSettlementAmount(totalSettlementAmount); - if (order.getSettlementAmount().compareTo(BigDecimal.ZERO) <= 0) { + if (!allowFree && order.getSettlementAmount().compareTo(BigDecimal.ZERO) <= 0) { throw new BizException("订单金额应该大于0"); } } } - private void fillOrderInfo(Order order) { + public void fillOrderInfo(Order order) { order.setOrderType(OrderTypeEnum.NORMAL); if (CollUtil.isNotEmpty(order.getOrderItemList())) { for (OrderItem orderItem : order.getOrderItemList()) { @@ -180,13 +186,13 @@ public class OrderApplicationService { //2. 填充订单信息 fillMarriageBountyOrderInfo(order, productList); //3. 订单金额计算 - countOrderAmount(order); + countOrderAmount(order, false); //4. 设置订单号 order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode()); //5. 组装付款单信息 PaymentOrder paymentOrder = makePaymentOrder(order); submitOrderDomainService.handle(order, paymentOrder); - return new UserSubmitOrderVo(order.getId(), paymentOrder.getId()); + return new UserSubmitOrderVo(order.getId(), paymentOrder.getId(), false); } private void handleProduct(Product product, @@ -270,41 +276,49 @@ public class OrderApplicationService { SiteActivity siteActivity = siteActivityDao.selectById(dto.getSiteActivityId()); Order order = null; PaymentOrder paymentOrder = null; - if (dto.getOpenVip()) { - //开通会员送活动 - order = new Order(); - order.setUserId(userId); - order.setMiId(dto.getMiId()); - order.setActivityId(siteActivity.getVipActivityId()); - order.setGroupType(1); - Activity activity = activityRepository.load(siteActivity.getVipActivityId()); - List orderItemList = new ArrayList<>(); - activity.getActivityProductList().forEach(activityProduct -> { - OrderItem orderItem = new OrderItem(); - orderItem.setProductSpecId(activityProduct.getProductSpecId()); - orderItem.setQuantity(1); - orderItemList.add(orderItem); - }); - order.setOrderItemList(orderItemList); - //1. 填充订单信息 + 同类型权益,不同规格,限制购买和提醒 - fillOrderInfo(order); - } else { - //是否vip - boolean vip = rightQueryService.checkUserVipRight(userId, dto.getMiId()).getVip(); - //报名参加活动 - order = Order.build(userId, dto.getMiId(), OrderBelongingEnum.CUSTOMER, marriageInformation.getNickName(), OrderTypeEnum.NORMAL); - ProductSpec productSpec = product.getProductSpecList().get(0); - OrderItem orderItem = OrderItem.build(productSpec.getProductId(), productSpec.getId(), product.getProductType(), product.getMainCategory(), product.getSubCategory(), - product.getProductTitle(), siteActivity.calculateFee(GenderEnum.get(marriageInformation.getGenderCode()), vip), 1); - order.setOrderItemList(Collections.singletonList(orderItem)); +// if (dto.getOpenVip()) { +// //开通会员送活动 +// order = new Order(); +// order.setUserId(userId); +// order.setMiId(dto.getMiId()); +// order.setActivityId(siteActivity.getVipActivityId()); +// order.setGroupType(1); +// Activity activity = activityRepository.load(siteActivity.getVipActivityId()); +// List orderItemList = new ArrayList<>(); +// activity.getActivityProductList().forEach(activityProduct -> { +// OrderItem orderItem = new OrderItem(); +// orderItem.setProductSpecId(activityProduct.getProductSpecId()); +// orderItem.setQuantity(1); +// orderItemList.add(orderItem); +// }); +// order.setOrderItemList(orderItemList); +// //1. 填充订单信息 + 同类型权益,不同规格,限制购买和提醒 +// fillOrderInfo(order); +// } else { + //是否vip + boolean vip = rightQueryService.checkUserVipRight(userId, dto.getMiId()).getVip(); + //报名参加活动 + order = Order.build(userId, dto.getMiId(), OrderBelongingEnum.CUSTOMER, marriageInformation.getNickName(), OrderTypeEnum.NORMAL); + ProductSpec productSpec = product.getProductSpecList().get(0); + //todo feign 获取活动应付金额 + CalculateSiteActivityFeeDto calculateDto = new CalculateSiteActivityFeeDto(dto.getSiteActivityId(), userId, + dto.getMiId(), vip ? VIPEnum.YES.getValue() : VIPEnum.NO.getValue()); + CalculateSiteActivityFeeVo calculateVo = datingAgencyServiceApplicationService.calculateSiteActivityFeeBySdk(calculateDto); + if (calculateVo.getUnitOriginalPrice().compareTo(BigDecimal.ZERO) <= 0) { + throw new BizException("下单异常"); } + OrderItem orderItem = OrderItem.build(productSpec.getProductId(), productSpec.getId(), product.getProductType(), product.getMainCategory(), product.getSubCategory(), + product.getProductTitle(), calculateVo.getUnitSettlementPrice(), 1); + order.setOrderItemList(Collections.singletonList(orderItem)); + // } //2. 订单金额计算 - countOrderAmount(order); + countOrderAmount(order, true); //3. 设置订单号 order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode()); //4. 组织付款单信息 paymentOrder = makePaymentOrder(order); - submitSiteActivityOrderDomainService.handle(order, paymentOrder, dto.getSiteActivityId(), dto.getOpenVip()); - return new UserSubmitOrderVo(order.getId(), paymentOrder.getId()); + List eventList = submitSiteActivityOrderDomainService.handle(order, paymentOrder, dto.getSiteActivityId()); + this.sendEvent(eventList); + return new UserSubmitOrderVo(order.getId(), paymentOrder.getId(), Objects.isNull(paymentOrder.getId())); } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitSiteActivityOrderDomainService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitSiteActivityOrderDomainService.java index 22ac8f1..274d061 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitSiteActivityOrderDomainService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitSiteActivityOrderDomainService.java @@ -8,10 +8,14 @@ import com.qniao.dam.domain.aggregate.paymentorder.PaymentOrderAggregate; import com.qniao.dam.domain.aggregate.paymentorder.entity.PaymentOrder; import com.qniao.dam.domian.aggregate.externalorder.constant.ExternalOrderRelStatus; import com.qniao.dam.domian.aggregate.externalorder.constant.ExternalOrderTypeEnum; +import com.qniao.domain.BaseDomainEvent; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; @Service public class SubmitSiteActivityOrderDomainService { @@ -24,12 +28,19 @@ public class SubmitSiteActivityOrderDomainService { private ExternalOrderRelAggregate externalOrderRelAggregate; @Transactional(rollbackFor = Exception.class) - public void handle(Order order, PaymentOrder paymentOrder, Long siteActivityId, Boolean openVip) { - orderAggregate.submit(order); - paymentOrder.setOrderId(order.getId()); - paymentOrderAggregate.create(paymentOrder); - ExternalOrderRel externalOrderRel = ExternalOrderRel.build(siteActivityId, order.getId(), - openVip ? ExternalOrderTypeEnum.VIP_PRODUCT : ExternalOrderTypeEnum.SITE_ACTIVITY, ExternalOrderRelStatus.INIT); + public List handle(Order order, PaymentOrder paymentOrder, Long siteActivityId) { + List eventList = new ArrayList<>(); + if (order.getSettlementAmount().compareTo(BigDecimal.ZERO) == 0) { + //免费 + eventList.add(orderAggregate.complete(order)); + } else { + //付费 + orderAggregate.submit(order); + paymentOrder.setOrderId(order.getId()); + paymentOrderAggregate.create(paymentOrder); + } + ExternalOrderRel externalOrderRel = ExternalOrderRel.build(siteActivityId, order.getId(), ExternalOrderTypeEnum.SITE_ACTIVITY, ExternalOrderRelStatus.INIT); externalOrderRelAggregate.save(externalOrderRel); + return eventList; } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java index efccff0..4ca9e45 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java @@ -37,4 +37,6 @@ public interface ProductQueryService { UserGetMatchmakerFranchiseInfoVo getMatchmakerFranchiseInfo(); Product querySiteActivityBy(Long siteActivityId, Integer genderCode); + + Product queryById(Long id); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java index 653673c..fc8d8c1 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java @@ -149,6 +149,13 @@ public class ProductQueryServiceImpl implements ProductQueryService { return siteActivityProduct; } + @Override + public Product queryById(Long id) { + Product product = productDao.selectById(id); + product.setProductSpecList(listProductSpecBy(product.getId())); + return product; + } + @Override public ProductSpecTerm getTermByName(List productSpecTermList, ProductSpecTermNameEnum name) { ProductSpecTerm productSpecTerm = null; @@ -187,8 +194,8 @@ public class ProductQueryServiceImpl implements ProductQueryService { @Override public UserPageProductByCustomerGroupVo getPageProductByCustomerDetails(Long id) { - List vos = getPageProductByCustomer(id); - if(!vos.isEmpty()){ + List vos = getPageProductByCustomer(id); + if (!vos.isEmpty()) { return vos.get(0); } return new UserPageProductByCustomerGroupVo();