From f20b9a43d5f06f9d273895d0e82997967e84bc5e Mon Sep 17 00:00:00 2001 From: Derran Date: Tue, 19 Mar 2024 18:03:02 +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 | 20 +++++++-- .../right/RightApplicationService.java | 2 +- .../dam/query/order/OrderQueryService.java | 5 +++ .../order/impl/OrderQueryServiceImpl.java | 41 +++++++++++++++++-- .../dam/query/right/RightQueryService.java | 2 +- 5 files changed, 61 insertions(+), 9 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 d52deed..604f938 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 @@ -10,7 +10,10 @@ 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.repository.ProductSpecRepository; import com.qniao.dam.domain.service.order.SubmitOrderDomainService; +import com.qniao.dam.domian.aggregate.product.constant.ProductTypeEnum; import com.qniao.dam.infrastructure.utils.SnowFlakeUtil; +import com.qniao.dam.query.order.OrderQueryService; +import com.qniao.framework.exception.BizException; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -27,6 +30,8 @@ public class OrderApplicationService { private ProductRepository productRepository; @Resource private SnowFlakeUtil snowFlakeUtil; + @Resource + private OrderQueryService orderQueryService; /** @@ -36,7 +41,7 @@ public class OrderApplicationService { * @return */ public UserSubmitOrderVo submit(Order order) { - //1. 填充订单信息 + //1. 填充订单信息 + 同类型权益,不同规格,限制购买和提醒 fillOrderInfo(order); //2. 订单金额计算 countOrderAmount(order); @@ -44,7 +49,7 @@ public class OrderApplicationService { order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode()); //4. 组织付款单信息 PaymentOrder paymentOrder = makePaymentOrder(order); - submitOrderDomainService.handle(order,paymentOrder); + submitOrderDomainService.handle(order, paymentOrder); return new UserSubmitOrderVo(order.getId(), paymentOrder.getId()); } @@ -69,7 +74,7 @@ public class OrderApplicationService { private void fillOrderInfo(Order order) { if (CollUtil.isNotEmpty(order.getOrderItemList())) { - order.getOrderItemList().forEach(orderItem -> { + for (OrderItem orderItem : order.getOrderItemList()) { ProductSpec productSpec = productSpecRepository.load(orderItem.getProductSpecId()); Product product = productRepository.load(productSpec.getProductId()); orderItem.setProductId(product.getId()); @@ -79,7 +84,14 @@ public class OrderApplicationService { orderItem.setProductTitle(product.getProductTitle()); orderItem.setProductDesc(product.getProductDesc()); orderItem.setUnitSettlementPrice(productSpec.getUnitSellingPrice()); - }); + //1.1. 同类型权益,不同规格,限制购买和提醒 + if (ProductTypeEnum.VIRTUAL.equals(product.getProductType())) { + boolean diffFlag = orderQueryService.checkDiffSpecRight(order, orderItem, productSpec); + if (diffFlag) { + throw new BizException("您已经拥有相同类型的权益"); + } + } + } } } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/right/RightApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/right/RightApplicationService.java index 0361708..1fe2884 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/right/RightApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/right/RightApplicationService.java @@ -126,7 +126,7 @@ public class RightApplicationService { /** * 权益类型枚举转换 */ - private RightTypeEnum transformRightType(ProductSubCategoryEnum subCategory) { + public RightTypeEnum transformRightType(ProductSubCategoryEnum subCategory) { switch (subCategory) { case EDUCATION_CERTIFICATION: return RightTypeEnum.EDUCATION_CERTIFICATION; diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/OrderQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/OrderQueryService.java index f052a87..dd11d01 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/OrderQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/OrderQueryService.java @@ -4,10 +4,15 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.qniao.dam.api.query.order.user.request.UserPageOrderByOperatorQueryParam; import com.qniao.dam.api.query.order.user.response.GetOrderStatisticsByOperatorVo; import com.qniao.dam.api.query.order.user.response.UserPageOrderByOperatorVo; +import com.qniao.dam.domain.aggregate.order.entity.Order; +import com.qniao.dam.domain.aggregate.order.entity.OrderItem; +import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; import com.qniao.framework.utils.PageUtil; public interface OrderQueryService { IPage pageOrderByOperator(PageUtil pageUtil, UserPageOrderByOperatorQueryParam queryParam); GetOrderStatisticsByOperatorVo getOrderStatisticsByOperator(UserPageOrderByOperatorQueryParam queryParam); + + boolean checkDiffSpecRight(Order order, OrderItem orderItem, ProductSpec productSpec); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/impl/OrderQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/impl/OrderQueryServiceImpl.java index 00121f5..9120359 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/impl/OrderQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/impl/OrderQueryServiceImpl.java @@ -5,14 +5,28 @@ import com.qniao.dam.api.query.order.user.request.UserPageOrderByOperatorQueryPa import com.qniao.dam.api.query.order.user.response.GetOrderStatisticsByOperatorVo; import com.qniao.dam.api.query.order.user.response.UserPageOrderByOperatorVo; import com.qniao.dam.api.query.order.user.response.UserPageOrderItemByOperatorVo; +import com.qniao.dam.application.service.right.RightApplicationService; +import com.qniao.dam.domain.aggregate.order.entity.Order; +import com.qniao.dam.domain.aggregate.order.entity.OrderItem; +import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; +import com.qniao.dam.domain.aggregate.productspec.repository.ProductSpecRepository; +import com.qniao.dam.domain.aggregate.productspec.valueobj.ProductSpecTerm; +import com.qniao.dam.domain.aggregate.right.entity.Right; +import com.qniao.dam.domain.aggregate.right.entity.RightTerm; +import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermNameEnum; +import com.qniao.dam.domian.aggregate.right.constant.RightNameEnum; +import com.qniao.dam.domian.aggregate.right.constant.RightTypeEnum; import com.qniao.dam.infrastructure.persistent.dao.view.OrderViewDao; import com.qniao.dam.query.order.OrderQueryService; +import com.qniao.dam.query.product.ProductQueryService; +import com.qniao.dam.query.right.RightQueryService; import com.qniao.framework.utils.PageUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; @Service @@ -20,6 +34,14 @@ public class OrderQueryServiceImpl implements OrderQueryService { @Resource private OrderViewDao orderViewDao; + @Resource + private RightQueryService rightQueryService; + @Resource + private RightApplicationService rightApplicationService; + @Resource + private ProductSpecRepository productSpecRepository; + @Resource + private ProductQueryService productQueryService; @Override public IPage pageOrderByOperator(PageUtil pageUtil, UserPageOrderByOperatorQueryParam queryParam) { @@ -28,9 +50,7 @@ public class OrderQueryServiceImpl implements OrderQueryService { List orderIdList = page.getRecords().stream().map(UserPageOrderByOperatorVo::getOrderId).collect(Collectors.toList()); List allOrderItemList = orderViewDao.listOrderItemByOperatorByOrderIds(orderIdList); Map> allOrderItemMap = allOrderItemList.stream().collect(Collectors.groupingBy(UserPageOrderItemByOperatorVo::getOrderId)); - page.getRecords().forEach(record -> { - record.setOrderItemList(allOrderItemMap.get(record.getOrderId())); - }); + page.getRecords().forEach(record -> record.setOrderItemList(allOrderItemMap.get(record.getOrderId()))); } return page; } @@ -39,4 +59,19 @@ public class OrderQueryServiceImpl implements OrderQueryService { public GetOrderStatisticsByOperatorVo getOrderStatisticsByOperator(UserPageOrderByOperatorQueryParam queryParam) { return orderViewDao.getOrderStatisticsByOperator(queryParam); } + + @Override + public boolean checkDiffSpecRight(Order order, OrderItem orderItem, ProductSpec productSpec) { + boolean flag = false; + ProductSpecTerm productSpecTerm = productQueryService.getTermByName(productSpec.getProductSpecTermList(), ProductSpecTermNameEnum.SPEC); + RightTypeEnum rightType = rightApplicationService.transformRightType(orderItem.getSubCategory()); + if (Objects.nonNull(rightType) && Objects.nonNull(productSpecTerm)) { + Right right = rightQueryService.getEnableSpecPeriodRight(order.getUserId(), order.getMiId(), rightType); + if (Objects.nonNull(right)) { + RightTerm rightTerm = rightQueryService.getRightTermByName(right, RightNameEnum.SPEC); + flag = !rightTerm.getUnit().getValue().equals(productSpecTerm.getUnit().getValue()); + } + } + return flag; + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/right/RightQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/right/RightQueryService.java index d8fd7c0..30b8d3b 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/right/RightQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/right/RightQueryService.java @@ -14,5 +14,5 @@ public interface RightQueryService { Right getEnableSpecPeriodRight(Long userId, Long miId, RightTypeEnum type); - RightTerm getRightTermByName(Right oldSpecPeriodRight, RightNameEnum name); + RightTerm getRightTermByName(Right right, RightNameEnum name); }