Browse Source

订单优惠配置

master
张彭杰 1 year ago
parent
commit
8f24cead6e
5 changed files with 77 additions and 17 deletions
  1. 16
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/Order.java
  2. 17
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/OrderItem.java
  3. 28
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java
  4. 5
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/OrderDiscountConfigQueryService.java
  5. 28
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/odc/impl/OrderDiscountConfigQueryServiceImpl.java

16
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<Order> {
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> {
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);
}
}
}

17
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<OrderItem> {
@ApiModelProperty("原始金额")
private BigDecimal originalAmount;
@ApiModelProperty("平台折扣金额")
private BigDecimal platformDiscountAmount;
@ApiModelProperty("折扣金额")
private BigDecimal discountAmount;
@ -79,4 +83,17 @@ public class OrderItem extends Entity<OrderItem> {
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);
}
}

28
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");
}

5
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<UserPageOrderDiscountConfigVo> pageOrderDiscountConfig(UserPageOrderDiscountConfigQueryParams queryParams, PageUtil pageUtil);
BigDecimal queryBy(Long userId, ProductSubCategoryEnum subCategory);
}

28
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<UserPageOrderDiscountConfigVo> 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<OrderDiscountConfig>()
.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;
}
}
Loading…
Cancel
Save