From 369c1afaa5511827a3dd73db47daa177a2ad9731 Mon Sep 17 00:00:00 2001 From: Derran Date: Tue, 30 Apr 2024 14:20:39 +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 --- .../order/OrderApplicationService.java | 23 +++++++++- .../query/product/ProductQueryService.java | 7 +++ .../product/impl/ProductQueryServiceImpl.java | 43 ++++++++++++++----- 3 files changed, 62 insertions(+), 11 deletions(-) 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 e699675..2dd824d 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 @@ -1,6 +1,7 @@ package com.qniao.dam.application.service.order; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Tuple; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.qniao.dam.api.command.order.user.response.UserSubmitOrderVo; import com.qniao.dam.application.service.product.ProductApplicationService; @@ -19,9 +20,11 @@ import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; import com.qniao.dam.domian.aggregate.product.constant.ProductTypeEnum; import com.qniao.dam.infrastructure.persistent.dao.activity.ActivityProductDao; import com.qniao.dam.infrastructure.persistent.dao.domain.MarriageInformationDao; +import com.qniao.dam.infrastructure.utils.CompareEntityUtil; import com.qniao.dam.infrastructure.utils.SnowFlakeUtil; import com.qniao.dam.query.matchmaker.MatchmakerQueryService; import com.qniao.dam.query.order.OrderQueryService; +import com.qniao.dam.query.product.ProductQueryService; import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation; import com.qniao.dau.domain.aggregate.matchmaker.entity.Matchmaker; import com.qniao.framework.exception.BizException; @@ -33,6 +36,7 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; @Service public class OrderApplicationService { @@ -54,6 +58,8 @@ public class OrderApplicationService { @Resource private MatchmakerQueryService matchmakerQueryService; @Resource + private ProductQueryService productQueryService; + @Resource private ProductApplicationService productApplicationService; @Value("${marriage_bounty_meeting_quantity:5}") @@ -146,7 +152,7 @@ public class OrderApplicationService { */ public UserSubmitOrderVo submitMarriageBountyOrder(Order order, List productList) { //1. 提交产品信息 - productList.forEach(product -> productApplicationService.create(product, product.getProductSpecList())); + productList.forEach(product -> handleProduct(product, product.getProductSpecList())); //2. 填充订单信息 fillMarriageBountyOrderInfo(order, productList); //3. 订单金额计算 @@ -159,6 +165,21 @@ public class OrderApplicationService { return new UserSubmitOrderVo(order.getId(), paymentOrder.getId()); } + private void handleProduct(Product product, + List productSpecList) { + Product existProduct = productQueryService.queryBy(product.getUserId(), product.getMiId(), product.getSubCategory()); + if (Objects.isNull(existProduct)) { + productApplicationService.create(product, productSpecList); + } else { + product.setId(existProduct.getId()); + List existProductSpecList = productQueryService.listProductSpecBy(existProduct.getId()); + for (int i = 0; i < existProductSpecList.size() - 1; i++) { + productSpecList.get(i).setId(existProductSpecList.get(0).getId()); + } + productApplicationService.edit(product, productSpecList); + } + } + private void fillMarriageBountyOrderInfo(Order order, List productList) { order.setOrderBelonging(OrderBelongingEnum.CUSTOMER); MarriageInformation marriageInformation = marriageInformationDao.selectById(order.getMiId()); 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 f26f577..7c5c7cf 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 @@ -5,7 +5,10 @@ import com.qniao.dam.api.query.product.user.request.UserPageProductByCustomerQue import com.qniao.dam.api.query.product.user.request.UserPageProductByMatchmakerQueryParam; import com.qniao.dam.api.query.product.user.request.UserPageProductByOperatorQueryParam; import com.qniao.dam.api.query.product.user.response.*; +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.domian.aggregate.product.constant.ProductSubCategoryEnum; import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermNameEnum; import com.qniao.framework.utils.PageUtil; @@ -23,4 +26,8 @@ public interface ProductQueryService { List getPageProductByCustomer(); IPage pageProductByMatchmaker(PageUtil pageUtil, UserPageProductByMatchmakerQueryParam queryParam); + + Product queryBy(Long userId, Long miId, ProductSubCategoryEnum subCategory); + + List listProductSpecBy(Long productId); } 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 b7314bb..196b59a 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 @@ -10,6 +10,7 @@ import com.qniao.dam.api.query.product.user.response.*; 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.domian.aggregate.product.constant.ProductSubCategoryEnum; import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermNameEnum; import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermUnitEnum; import com.qniao.dam.infrastructure.persistent.dao.domain.ProductDao; @@ -78,7 +79,29 @@ public class ProductQueryServiceImpl implements ProductQueryService { @Override public IPage pageProductByMatchmaker(PageUtil pageUtil, UserPageProductByMatchmakerQueryParam queryParam) { - return productViewDao.pageProductByMatchmaker(pageUtil.toPageWithoutOrders(),queryParam); + return productViewDao.pageProductByMatchmaker(pageUtil.toPageWithoutOrders(), queryParam); + } + + @Override + public Product queryBy(Long userId, Long miId, ProductSubCategoryEnum subCategory) { + return productDao.selectOne(new LambdaQueryWrapper() + .eq(Product::getUserId, userId) + .eq(Product::getMiId, miId) + .eq(Product::getSubCategory, subCategory) + .last("limit 1")); + } + + @Override + public List listProductSpecBy(Long productId) { + List productSpecList = productSpecDao.selectList(new LambdaQueryWrapper() + .eq(ProductSpec::getProductId, productId)); + if (CollUtil.isNotEmpty(productSpecList)) { + productSpecList.forEach(productSpec -> { + productSpec.setProductSpecTermList(productSpecTermDao.selectList(new LambdaQueryWrapper() + .eq(ProductSpecTerm::getProductSpecId, productSpec.getId()))); + }); + } + return productSpecList; } @Override @@ -98,20 +121,20 @@ public class ProductQueryServiceImpl implements ProductQueryService { @Override public List getPageProductByCustomer() { List groupVoList = new ArrayList<>(); - List extendVos = productViewDao.selectProductByCustomerList(); - Map> extMap = extendVos.stream().collect(Collectors.groupingBy(UserPageProductByCustomerExtendVo::getId)); - extMap.forEach((k,v)->{ + List extendVos = productViewDao.selectProductByCustomerList(); + Map> extMap = extendVos.stream().collect(Collectors.groupingBy(UserPageProductByCustomerExtendVo::getId)); + extMap.forEach((k, v) -> { UserPageProductByCustomerExtendVo extendVo = v.get(0); - if(extendVo.getGroupType() == 0){ + if (extendVo.getGroupType() == 0) { extendVo.setProductName(extendVo.getProductTitle()); } - BigDecimal unitOriginalPrice = v.stream().map(UserPageProductByCustomerExtendVo::getUnitOriginalPrice).reduce(BigDecimal.ZERO,BigDecimal::add); - BigDecimal unitSellingPrice = v.stream().map(UserPageProductByCustomerExtendVo::getUnitSellingPrice).reduce(BigDecimal.ZERO,BigDecimal::add); - UserPageProductByCustomerGroupVo vo = TypeConvertUtils.convert(extendVo,UserPageProductByCustomerGroupVo.class); + BigDecimal unitOriginalPrice = v.stream().map(UserPageProductByCustomerExtendVo::getUnitOriginalPrice).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal unitSellingPrice = v.stream().map(UserPageProductByCustomerExtendVo::getUnitSellingPrice).reduce(BigDecimal.ZERO, BigDecimal::add); + UserPageProductByCustomerGroupVo vo = TypeConvertUtils.convert(extendVo, UserPageProductByCustomerGroupVo.class); vo.setActivityId(extendVo.getId()); vo.setUnitSellingPrice(unitSellingPrice); vo.setUnitOriginalPrice(unitOriginalPrice); - vo.setProductList(TypeConvertUtils.convert(v,UserPageProductByCustomerVo.class)); + vo.setProductList(TypeConvertUtils.convert(v, UserPageProductByCustomerVo.class)); groupVoList.add(vo); }); return groupVoList; @@ -152,7 +175,7 @@ public class ProductQueryServiceImpl implements ProductQueryService { return unitEnum; } - private ProductSpec queryProductSpecByProductId(Long productId) { + public ProductSpec queryProductSpecByProductId(Long productId) { ProductSpec productSpec = productSpecDao.selectOne(new LambdaQueryWrapper() .eq(ProductSpec::getProductId, productId) .last("limit 1"));