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 528fa68..70f76cc 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.right.RightApplicationService; import com.qniao.dam.domain.aggregate.externalorder.valueobj.ExternalOrderRel; +import com.qniao.dam.domain.aggregate.order.OrderAggregate; import com.qniao.dam.domain.aggregate.order.entity.Order; import com.qniao.dam.domain.aggregate.order.entity.OrderItem; import com.qniao.dam.domain.aggregate.order.repository.OrderRepository; @@ -15,6 +16,7 @@ import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; import com.qniao.dam.domain.aggregate.productspec.repository.ProductSpecRepository; import com.qniao.dam.domain.aggregate.right.RightAggregate; import com.qniao.dam.domain.aggregate.right.entity.Right; +import com.qniao.dam.domian.aggregate.externalorder.constant.ExternalOrderTypeEnum; 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; @@ -22,6 +24,10 @@ import com.qniao.dam.domian.aggregate.order.event.OrderCompletedEvent; 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.utils.SnowFlakeUtil; +import com.qniao.dam.query.product.ProductQueryService; +import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation; import com.qniao.dau.application.UecServerApplicationService; import com.qniao.domain.BaseApplicationService; import lombok.extern.slf4j.Slf4j; @@ -30,7 +36,9 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Objects; @@ -55,6 +63,14 @@ public class OrderEventHandler extends BaseApplicationService { @Resource private ExternalOrderRelDao externalOrderRelDao; @Resource + private MarriageInformationDao marriageInformationDao; + @Resource + private ProductQueryService productQueryService; + @Resource + private OrderAggregate orderAggregate; + @Resource + private SnowFlakeUtil snowFlakeUtil; + @Resource private AmqpTemplate amqpTemplate; /** @@ -93,18 +109,46 @@ public class OrderEventHandler extends BaseApplicationService { ExternalOrderRel externalOrderRel = externalOrderRelDao.selectOne(new LambdaQueryWrapper() .eq(ExternalOrderRel::getOrderId, order.getId())); if (Objects.nonNull(externalOrderRel)) { - ExternalOrderCompletedMQEvent completedMQEvent = new ExternalOrderCompletedMQEvent(); - completedMQEvent.setExternalId(externalOrderRel.getExternalId()); - completedMQEvent.setOrderId(externalOrderRel.getOrderId()); - completedMQEvent.setUserId(order.getUserId()); - completedMQEvent.setMiId(order.getMiId()); - amqpTemplate.convertAndSend(MqExchange.EXTERNAL_ORDER_COMPLETED, null, completedMQEvent); + if (ExternalOrderTypeEnum.VIP_PRODUCT.equals(externalOrderRel.getType())) { + //购买vip套餐赠送下线参与机会 + giftSiteActivityOrder(externalOrderRel.getExternalId(), order.getUserId(), order.getMiId()); + } else if (ExternalOrderTypeEnum.SITE_ACTIVITY.equals(externalOrderRel.getType())) { + //发送订单完成事件 + sendCompletedMQ(externalOrderRel, order); + } } } catch (Exception e) { log.error("订单已完成事件处理异常"); } } + private void giftSiteActivityOrder(Long externalId, Long userId, Long miId) { + 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); + externalOrderRelDao.insert(externalOrderRel); + sendCompletedMQ(externalOrderRel, order); + } + + private void sendCompletedMQ(ExternalOrderRel externalOrderRel, Order order) { + ExternalOrderCompletedMQEvent completedMQEvent = new ExternalOrderCompletedMQEvent(); + completedMQEvent.setExternalId(externalOrderRel.getExternalId()); + completedMQEvent.setOrderId(externalOrderRel.getOrderId()); + completedMQEvent.setUserId(order.getUserId()); + completedMQEvent.setMiId(order.getMiId()); + amqpTemplate.convertAndSend(MqExchange.EXTERNAL_ORDER_COMPLETED, null, completedMQEvent); + } + @Transactional(rollbackFor = Exception.class) public void batchCreate(List rightList) { if (CollUtil.isNotEmpty(rightList)) { 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 07c3eaa..7266206 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 @@ -105,7 +105,7 @@ public class OrderApplicationService { return new UserSubmitOrderVo(order.getId(), paymentOrder.getId()); } - private PaymentOrder makePaymentOrder(Order order) { + public PaymentOrder makePaymentOrder(Order order) { PaymentOrder paymentOrder = new PaymentOrder(); paymentOrder.setPayableAmount(order.getSettlementAmount()); paymentOrder.setUnpaidAmount(paymentOrder.getPayableAmount()); @@ -113,7 +113,7 @@ public class OrderApplicationService { return paymentOrder; } - private void countOrderAmount(Order order) { + public void countOrderAmount(Order order) { if (CollUtil.isNotEmpty(order.getOrderItemList())) { BigDecimal totalSettlementAmount = BigDecimal.ZERO; for (OrderItem orderItem : order.getOrderItemList()) { @@ -304,7 +304,6 @@ public class OrderApplicationService { order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode()); //4. 组织付款单信息 paymentOrder = makePaymentOrder(order); - submitOrderDomainService.handle(order, paymentOrder); submitSiteActivityOrderDomainService.handle(order, paymentOrder, dto.getSiteActivityId(), dto.getOpenVip()); return new UserSubmitOrderVo(order.getId(), paymentOrder.getId()); }