|
|
@ -1,10 +1,13 @@ |
|
|
package com.qniao.dam.application.handler.product; |
|
|
package com.qniao.dam.application.handler.product; |
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
import com.qniao.dam.application.service.product.ProductApplicationService; |
|
|
import com.qniao.dam.application.service.product.ProductApplicationService; |
|
|
import com.qniao.dam.domain.aggregate.externalproduct.valueobj.ExternalProductRel; |
|
|
import com.qniao.dam.domain.aggregate.externalproduct.valueobj.ExternalProductRel; |
|
|
import com.qniao.dam.domain.aggregate.product.entity.Product; |
|
|
import com.qniao.dam.domain.aggregate.product.entity.Product; |
|
|
|
|
|
import com.qniao.dam.domain.aggregate.product.repository.ProductRepository; |
|
|
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; |
|
|
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; |
|
|
|
|
|
import com.qniao.dam.domain.service.product.EditProductDomainService; |
|
|
import com.qniao.dam.domian.aggregate.product.constant.ProductMainCategoryEnum; |
|
|
import com.qniao.dam.domian.aggregate.product.constant.ProductMainCategoryEnum; |
|
|
import com.qniao.dam.domian.aggregate.product.constant.ProductStatusEnum; |
|
|
import com.qniao.dam.domian.aggregate.product.constant.ProductStatusEnum; |
|
|
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; |
|
|
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; |
|
|
@ -12,6 +15,8 @@ import com.qniao.dam.domian.aggregate.product.constant.ProductTypeEnum; |
|
|
import com.qniao.dam.infrastructure.constant.MqExchange; |
|
|
import com.qniao.dam.infrastructure.constant.MqExchange; |
|
|
import com.qniao.dam.infrastructure.constant.MqQueue; |
|
|
import com.qniao.dam.infrastructure.constant.MqQueue; |
|
|
import com.qniao.dam.infrastructure.persistent.dao.domain.ExternalProductRelDao; |
|
|
import com.qniao.dam.infrastructure.persistent.dao.domain.ExternalProductRelDao; |
|
|
|
|
|
import com.qniao.dam.infrastructure.persistent.dao.domain.ProductDao; |
|
|
|
|
|
import com.qniao.dam.query.product.ProductQueryService; |
|
|
import com.qniao.das.domian.aggregate.siteactivity.event.SiteActivityCreatedMQEvent; |
|
|
import com.qniao.das.domian.aggregate.siteactivity.event.SiteActivityCreatedMQEvent; |
|
|
import com.qniao.domain.BaseApplicationService; |
|
|
import com.qniao.domain.BaseApplicationService; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
@ -23,6 +28,7 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener; |
|
|
import org.springframework.stereotype.Component; |
|
|
import org.springframework.stereotype.Component; |
|
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
import javax.annotation.Resource; |
|
|
|
|
|
import java.math.BigDecimal; |
|
|
import java.util.ArrayList; |
|
|
import java.util.ArrayList; |
|
|
import java.util.Collections; |
|
|
import java.util.Collections; |
|
|
import java.util.List; |
|
|
import java.util.List; |
|
|
@ -35,48 +41,68 @@ public class ProductEventHandler extends BaseApplicationService { |
|
|
private ProductApplicationService productApplicationService; |
|
|
private ProductApplicationService productApplicationService; |
|
|
@Resource |
|
|
@Resource |
|
|
private ExternalProductRelDao externalProductRelDao; |
|
|
private ExternalProductRelDao externalProductRelDao; |
|
|
|
|
|
@Resource |
|
|
|
|
|
private ProductDao productDao; |
|
|
|
|
|
@Resource |
|
|
|
|
|
private ProductQueryService productQueryService; |
|
|
|
|
|
@Resource |
|
|
|
|
|
private EditProductDomainService editProductDomainService; |
|
|
|
|
|
|
|
|
@RabbitListener(bindings = @QueueBinding(value = @Queue(MqQueue.SITE_ACTIVITY_CREATED), |
|
|
@RabbitListener(bindings = @QueueBinding(value = @Queue(MqQueue.SITE_ACTIVITY_CREATED), |
|
|
exchange = @Exchange(value = MqExchange.SITE_ACTIVITY_CREATED, |
|
|
exchange = @Exchange(value = MqExchange.SITE_ACTIVITY_CREATED, |
|
|
type = ExchangeTypes.FANOUT))) |
|
|
type = ExchangeTypes.FANOUT))) |
|
|
public void handleConfirmMatch(SiteActivityCreatedMQEvent event) { |
|
|
public void handleConfirmMatch(SiteActivityCreatedMQEvent event) { |
|
|
try { |
|
|
try { |
|
|
List<Product> list = new ArrayList<>(); |
|
|
|
|
|
//男性线下活动产品 |
|
|
|
|
|
Product siteActivityManProduct = new Product(); |
|
|
|
|
|
siteActivityManProduct.setManageEnable(false); |
|
|
|
|
|
siteActivityManProduct.setProductType(ProductTypeEnum.CUSTOMER_VIRTUAL); |
|
|
|
|
|
siteActivityManProduct.setMainCategory(ProductMainCategoryEnum.SITE_ACTIVITY); |
|
|
|
|
|
siteActivityManProduct.setSubCategory(ProductSubCategoryEnum.SITE_ACTIVITY_MAN_FEE); |
|
|
|
|
|
siteActivityManProduct.setProductTitle(ProductSubCategoryEnum.SITE_ACTIVITY_MAN_FEE.getDesc()); |
|
|
|
|
|
siteActivityManProduct.setStatus(ProductStatusEnum.SOLD_OUTED); |
|
|
|
|
|
ProductSpec siteActivityManProductSpec = new ProductSpec(); |
|
|
|
|
|
siteActivityManProductSpec.setUnitOriginalPrice(event.getManEntryFee()); |
|
|
|
|
|
siteActivityManProductSpec.setUnitSellingPrice(event.getManEntryFee()); |
|
|
|
|
|
siteActivityManProductSpec.setAvailableStockNumber(-1); |
|
|
|
|
|
siteActivityManProduct.setStatus(ProductStatusEnum.SOLD_OUTED); |
|
|
|
|
|
siteActivityManProduct.setProductSpecList(Collections.singletonList(siteActivityManProductSpec)); |
|
|
|
|
|
list.add(siteActivityManProduct); |
|
|
|
|
|
//女性线下活动产品 |
|
|
|
|
|
Product siteActivityWomanProduct = new Product(); |
|
|
|
|
|
siteActivityWomanProduct.setManageEnable(false); |
|
|
|
|
|
siteActivityWomanProduct.setProductType(ProductTypeEnum.CUSTOMER_VIRTUAL); |
|
|
|
|
|
siteActivityWomanProduct.setMainCategory(ProductMainCategoryEnum.SITE_ACTIVITY); |
|
|
|
|
|
siteActivityWomanProduct.setSubCategory(ProductSubCategoryEnum.MARRIAGE_BOUNTY_WOMAN_FEE); |
|
|
|
|
|
siteActivityWomanProduct.setProductTitle(ProductSubCategoryEnum.MARRIAGE_BOUNTY_WOMAN_FEE.getDesc()); |
|
|
|
|
|
siteActivityWomanProduct.setStatus(ProductStatusEnum.SOLD_OUTED); |
|
|
|
|
|
ProductSpec siteActivityWomanProductSpec = new ProductSpec(); |
|
|
|
|
|
siteActivityWomanProductSpec.setUnitOriginalPrice(event.getWomanEntryFee()); |
|
|
|
|
|
siteActivityWomanProductSpec.setUnitSellingPrice(event.getWomanEntryFee()); |
|
|
|
|
|
siteActivityWomanProductSpec.setAvailableStockNumber(-1); |
|
|
|
|
|
siteActivityWomanProduct.setStatus(ProductStatusEnum.SOLD_OUTED); |
|
|
|
|
|
siteActivityWomanProduct.setProductSpecList(Collections.singletonList(siteActivityWomanProductSpec)); |
|
|
|
|
|
list.add(siteActivityWomanProduct); |
|
|
|
|
|
externalProductRelDao.delete(new LambdaQueryWrapper<ExternalProductRel>().eq(ExternalProductRel::getExternalId, event.getSiteActivityId())); |
|
|
|
|
|
for (Product product : list) { |
|
|
|
|
|
productApplicationService.create(product, product.getProductSpecList()); |
|
|
|
|
|
ExternalProductRel externalProductRel = ExternalProductRel.build(event.getSiteActivityId(), product.getId()); |
|
|
|
|
|
externalProductRelDao.insert(externalProductRel); |
|
|
|
|
|
|
|
|
List<ExternalProductRel> existExternalProductRelList = externalProductRelDao.selectList(new LambdaQueryWrapper<ExternalProductRel>() |
|
|
|
|
|
.eq(ExternalProductRel::getExternalId, event.getSiteActivityId())); |
|
|
|
|
|
if (CollUtil.isNotEmpty(existExternalProductRelList)) { |
|
|
|
|
|
for (ExternalProductRel externalProductRel : existExternalProductRelList) { |
|
|
|
|
|
Product product = productDao.selectById(externalProductRel.getProductId()); |
|
|
|
|
|
BigDecimal unitSellingPrice = ProductSubCategoryEnum.SITE_ACTIVITY_MAN_FEE.equals(product.getSubCategory())?event.getManEntryFee():event.getWomanEntryFee(); |
|
|
|
|
|
List<ProductSpec> productSpecList = productQueryService.listProductSpecBy(product.getId()); |
|
|
|
|
|
for (ProductSpec productSpec : productSpecList) { |
|
|
|
|
|
productSpec.setUnitOriginalPrice(unitSellingPrice); |
|
|
|
|
|
productSpec.setUnitSellingPrice(unitSellingPrice); |
|
|
|
|
|
} |
|
|
|
|
|
editProductDomainService.handle(product, productSpecList); |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
List<Product> list = new ArrayList<>(); |
|
|
|
|
|
//男性线下活动产品 |
|
|
|
|
|
Product siteActivityManProduct = new Product(); |
|
|
|
|
|
siteActivityManProduct.setManageEnable(false); |
|
|
|
|
|
siteActivityManProduct.setProductType(ProductTypeEnum.CUSTOMER_VIRTUAL); |
|
|
|
|
|
siteActivityManProduct.setMainCategory(ProductMainCategoryEnum.SITE_ACTIVITY); |
|
|
|
|
|
siteActivityManProduct.setSubCategory(ProductSubCategoryEnum.SITE_ACTIVITY_MAN_FEE); |
|
|
|
|
|
siteActivityManProduct.setProductTitle(ProductSubCategoryEnum.SITE_ACTIVITY_MAN_FEE.getDesc()); |
|
|
|
|
|
siteActivityManProduct.setStatus(ProductStatusEnum.SOLD_OUTED); |
|
|
|
|
|
ProductSpec siteActivityManProductSpec = new ProductSpec(); |
|
|
|
|
|
siteActivityManProductSpec.setUnitOriginalPrice(event.getManEntryFee()); |
|
|
|
|
|
siteActivityManProductSpec.setUnitSellingPrice(event.getManEntryFee()); |
|
|
|
|
|
siteActivityManProductSpec.setAvailableStockNumber(-1); |
|
|
|
|
|
siteActivityManProduct.setStatus(ProductStatusEnum.SOLD_OUTED); |
|
|
|
|
|
siteActivityManProduct.setProductSpecList(Collections.singletonList(siteActivityManProductSpec)); |
|
|
|
|
|
list.add(siteActivityManProduct); |
|
|
|
|
|
//女性线下活动产品 |
|
|
|
|
|
Product siteActivityWomanProduct = new Product(); |
|
|
|
|
|
siteActivityWomanProduct.setManageEnable(false); |
|
|
|
|
|
siteActivityWomanProduct.setProductType(ProductTypeEnum.CUSTOMER_VIRTUAL); |
|
|
|
|
|
siteActivityWomanProduct.setMainCategory(ProductMainCategoryEnum.SITE_ACTIVITY); |
|
|
|
|
|
siteActivityWomanProduct.setSubCategory(ProductSubCategoryEnum.MARRIAGE_BOUNTY_WOMAN_FEE); |
|
|
|
|
|
siteActivityWomanProduct.setProductTitle(ProductSubCategoryEnum.MARRIAGE_BOUNTY_WOMAN_FEE.getDesc()); |
|
|
|
|
|
siteActivityWomanProduct.setStatus(ProductStatusEnum.SOLD_OUTED); |
|
|
|
|
|
ProductSpec siteActivityWomanProductSpec = new ProductSpec(); |
|
|
|
|
|
siteActivityWomanProductSpec.setUnitOriginalPrice(event.getWomanEntryFee()); |
|
|
|
|
|
siteActivityWomanProductSpec.setUnitSellingPrice(event.getWomanEntryFee()); |
|
|
|
|
|
siteActivityWomanProductSpec.setAvailableStockNumber(-1); |
|
|
|
|
|
siteActivityWomanProduct.setStatus(ProductStatusEnum.SOLD_OUTED); |
|
|
|
|
|
siteActivityWomanProduct.setProductSpecList(Collections.singletonList(siteActivityWomanProductSpec)); |
|
|
|
|
|
list.add(siteActivityWomanProduct); |
|
|
|
|
|
for (Product product : list) { |
|
|
|
|
|
productApplicationService.create(product, product.getProductSpecList()); |
|
|
|
|
|
ExternalProductRel externalProductRel = ExternalProductRel.build(event.getSiteActivityId(), product.getId()); |
|
|
|
|
|
externalProductRelDao.insert(externalProductRel); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
|
log.error("线下活动事件已创建处理异常:", e); |
|
|
log.error("线下活动事件已创建处理异常:", e); |
|
|
|