From 8f24cead6e6f0644d50d9b34d9a21e6573d0b40f Mon Sep 17 00:00:00 2001 From: Derran Date: Sat, 7 Dec 2024 16:24:09 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BC=98=E6=83=A0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/aggregate/order/entity/Order.java | 16 ++++++++++- .../aggregate/order/entity/OrderItem.java | 17 +++++++++++ .../order/OrderApplicationService.java | 28 ++++++++----------- .../odc/OrderDiscountConfigQueryService.java | 5 ++++ .../OrderDiscountConfigQueryServiceImpl.java | 28 +++++++++++++++++++ 5 files changed, 77 insertions(+), 17 deletions(-) diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/Order.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/Order.java index 6b9714a..83906a2 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/Order.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/Order.java @@ -1,5 +1,6 @@ package com.qniao.dam.domain.aggregate.order.entity; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.annotation.TableName; import com.qniao.dam.domian.aggregate.order.constant.OrderBelongingEnum; import com.qniao.dam.domian.aggregate.order.constant.OrderStatusEnum; @@ -13,6 +14,7 @@ import lombok.EqualsAndHashCode; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; +import java.util.Objects; @Data @EqualsAndHashCode(callSuper = true) @@ -38,7 +40,10 @@ public class Order extends Entity { private String orderCode; @ApiModelProperty("原始金额") - private BigDecimal originalAmount ; + private BigDecimal originalAmount; + + @ApiModelProperty("平台折扣金额") + private BigDecimal platformDiscountAmount; @ApiModelProperty("折扣金额") private BigDecimal discountAmount; @@ -79,4 +84,13 @@ public class Order extends Entity { order.setOrderType(orderType); return order; } + + public void calculate() { + if (CollUtil.isNotEmpty(orderItemList)) { + originalAmount = orderItemList.stream().map(OrderItem::getOriginalAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + platformDiscountAmount = orderItemList.stream().map(OrderItem::getPlatformDiscountAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + discountAmount = orderItemList.stream().map(OrderItem::getDiscountAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + settlementAmount = orderItemList.stream().map(OrderItem::getSettlementAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + } + } } diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/OrderItem.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/OrderItem.java index 8e702ce..890c4df 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/OrderItem.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/OrderItem.java @@ -10,6 +10,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.math.BigDecimal; +import java.util.Objects; @Data @EqualsAndHashCode(callSuper = true) @@ -52,6 +53,9 @@ public class OrderItem extends Entity { @ApiModelProperty("原始金额") private BigDecimal originalAmount; + @ApiModelProperty("平台折扣金额") + private BigDecimal platformDiscountAmount; + @ApiModelProperty("折扣金额") private BigDecimal discountAmount; @@ -79,4 +83,17 @@ public class OrderItem extends Entity { orderItem.setQuantity(quantity); return orderItem; } + + public void calculate() { + if (Objects.isNull(originalAmount)) { + originalAmount = BigDecimal.ZERO; + } + if (Objects.isNull(platformDiscountAmount)) { + platformDiscountAmount = BigDecimal.ZERO; + } + if (Objects.isNull(discountAmount)) { + discountAmount = BigDecimal.ZERO; + } + settlementAmount = originalAmount.subtract(platformDiscountAmount).subtract(discountAmount); + } } 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 627b189..3b87a03 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 @@ -41,6 +41,7 @@ import com.qniao.dam.infrastructure.utils.SnowFlakeUtil; import com.qniao.dam.query.marriagebounty.MarriageBountyOrderQueryService; import com.qniao.dam.query.matchmaker.MatchmakerQueryService; import com.qniao.dam.query.matchmakermarriage.MatchmakerMarriageInformationQueryService; +import com.qniao.dam.query.odc.OrderDiscountConfigQueryService; import com.qniao.dam.query.order.OrderQueryService; import com.qniao.dam.query.product.ProductQueryService; import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; @@ -111,6 +112,8 @@ public class OrderApplicationService extends BaseApplicationService { private OrderDao orderDao; @Resource private OrderAggregate orderAggregate; + @Resource + private OrderDiscountConfigQueryService orderDiscountConfigQueryService; @Value("${default_marriage_bounty_matchmaker_id}") private Long defaultMarriageBountyMatchmakerId; @@ -502,24 +505,21 @@ public class OrderApplicationService extends BaseApplicationService { private void countMatchMakerOrderAmount(Order order, MatchmakerOrderTypeEnum matchmakerOrderType) { if (CollUtil.isNotEmpty(order.getOrderItemList())) { - BigDecimal totalOriginalAmount = BigDecimal.ZERO; - BigDecimal totalDiscountAmount = BigDecimal.ZERO; - BigDecimal totalSettlementAmount = BigDecimal.ZERO; for (OrderItem orderItem : order.getOrderItemList()) { + //查询订单折扣配置 + orderItem.setPlatformDiscountAmount(orderDiscountConfigQueryService.queryBy(order.getUserId(), orderItem.getSubCategory())); if (MatchmakerOrderTypeEnum.JOIN.equals(matchmakerOrderType)) { - orderItem.setOriginalAmount(orderItem.getUnitOriginalPrice().multiply(BigDecimal.valueOf(orderItem.getQuantity()))); + orderItem.setOriginalAmount(orderItem.getUnitOriginalPrice()); orderItem.setDiscountAmount(BigDecimal.ZERO); - orderItem.setSettlementAmount(orderItem.getOriginalAmount()); - totalOriginalAmount = totalOriginalAmount.add(orderItem.getOriginalAmount()); - totalSettlementAmount = totalSettlementAmount.add(orderItem.getSettlementAmount()); - totalDiscountAmount = totalDiscountAmount.add(orderItem.getDiscountAmount()); + orderItem.calculate(); + orderItem.setUnitOriginalPrice(orderItem.getSettlementAmount()); } else if (MatchmakerOrderTypeEnum.UPGRADE.equals(matchmakerOrderType)) { //红娘升级 Matchmaker matchmaker = matchmakerQueryService.queryByUserId(order.getUserId()); if (Objects.isNull(matchmaker)) { throw new BizException("没有查询到红娘信息"); } else { - orderItem.setOriginalAmount(orderItem.getUnitOriginalPrice().multiply(BigDecimal.valueOf(orderItem.getQuantity()))); + orderItem.setOriginalAmount(orderItem.getUnitOriginalPrice()); BigDecimal discountAmount = BigDecimal.ZERO; //红娘升级补差价周期 RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_UPGRADE_PROTECTION_PERIOD); @@ -530,16 +530,12 @@ public class OrderApplicationService extends BaseApplicationService { } } orderItem.setDiscountAmount(discountAmount); - orderItem.setSettlementAmount(orderItem.getOriginalAmount().subtract(discountAmount)); - totalOriginalAmount = totalOriginalAmount.add(orderItem.getOriginalAmount()); - totalSettlementAmount = totalSettlementAmount.add(orderItem.getSettlementAmount()); - totalDiscountAmount = totalDiscountAmount.add(orderItem.getDiscountAmount()); + orderItem.calculate(); + orderItem.setUnitOriginalPrice(orderItem.getSettlementAmount()); } } } - order.setOriginalAmount(totalOriginalAmount); - order.setDiscountAmount(totalDiscountAmount); - order.setSettlementAmount(totalSettlementAmount); + order.calculate(); if (order.getSettlementAmount().compareTo(BigDecimal.ZERO) <= 0) { throw new BizException("订单金额应该大于0"); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/OrderDiscountConfigQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/OrderDiscountConfigQueryService.java index 14ff2e0..62afb7b 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/OrderDiscountConfigQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/OrderDiscountConfigQueryService.java @@ -3,9 +3,14 @@ package com.qniao.dam.query.odc; import com.baomidou.mybatisplus.core.metadata.IPage; import com.qniao.dam.api.query.odc.user.request.UserPageOrderDiscountConfigQueryParams; import com.qniao.dam.api.query.odc.user.response.UserPageOrderDiscountConfigVo; +import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; import com.qniao.framework.utils.PageUtil; +import java.math.BigDecimal; + public interface OrderDiscountConfigQueryService { IPage pageOrderDiscountConfig(UserPageOrderDiscountConfigQueryParams queryParams, PageUtil pageUtil); + + BigDecimal queryBy(Long userId, ProductSubCategoryEnum subCategory); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/impl/OrderDiscountConfigQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/impl/OrderDiscountConfigQueryServiceImpl.java index b2bcff2..74ee72f 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/impl/OrderDiscountConfigQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/impl/OrderDiscountConfigQueryServiceImpl.java @@ -1,24 +1,52 @@ package com.qniao.dam.query.odc.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.qniao.dam.api.query.odc.user.request.UserPageOrderDiscountConfigQueryParams; import com.qniao.dam.api.query.odc.user.response.UserPageOrderDiscountConfigVo; +import com.qniao.dam.domain.aggregate.odc.entity.OrderDiscountConfig; +import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; import com.qniao.dam.infrastructure.persistent.dao.odc.OrderDiscountConfigDao; +import com.qniao.dam.query.account.AccountQueryService; import com.qniao.dam.query.odc.OrderDiscountConfigQueryService; +import com.qniao.dau.domain.aggregate.account.entity.Account; +import com.qniao.dau.domian.aggregate.account.constant.AccountTypeEnum; import com.qniao.framework.utils.PageUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.Objects; @Service public class OrderDiscountConfigQueryServiceImpl implements OrderDiscountConfigQueryService { @Resource private OrderDiscountConfigDao orderDiscountConfigDao; + @Resource + private AccountQueryService accountQueryService; @Override public IPage pageOrderDiscountConfig(UserPageOrderDiscountConfigQueryParams queryParams, PageUtil pageUtil) { return orderDiscountConfigDao.page(pageUtil.toPageWithoutOrders(), queryParams); } + + @Override + public BigDecimal queryBy(Long userId, ProductSubCategoryEnum subCategory) { + BigDecimal discountAmount = BigDecimal.ZERO; + Account phoneAccount = accountQueryService.queryByUserIdAndType(userId, AccountTypeEnum.MOBILE); + if (Objects.nonNull(phoneAccount)) { + OrderDiscountConfig orderDiscountConfig = orderDiscountConfigDao.selectOne(new LambdaQueryWrapper() + .eq(OrderDiscountConfig::getPhone, phoneAccount.getTid()) + .eq(OrderDiscountConfig::getSubCategory, subCategory) + .eq(OrderDiscountConfig::getEnable, true) + .orderByDesc(OrderDiscountConfig::getCreateTime) + .last("limit 1")); + if (Objects.nonNull(orderDiscountConfig)) { + discountAmount = orderDiscountConfig.getDiscountAmount(); + } + } + return discountAmount; + } } \ No newline at end of file