|
|
|
@ -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<ExternalOrderRel>() |
|
|
|
.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<Right> rightList) { |
|
|
|
if (CollUtil.isNotEmpty(rightList)) { |
|
|
|
|