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; package com.qniao.dam.domain.aggregate.order.entity;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.qniao.dam.domian.aggregate.order.constant.OrderBelongingEnum; import com.qniao.dam.domian.aggregate.order.constant.OrderBelongingEnum;
import com.qniao.dam.domian.aggregate.order.constant.OrderStatusEnum; import com.qniao.dam.domian.aggregate.order.constant.OrderStatusEnum;
@ -13,6 +14,7 @@ import lombok.EqualsAndHashCode;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Objects;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ -38,7 +40,10 @@ public class Order extends Entity<Order> {
private String orderCode; private String orderCode;
@ApiModelProperty("原始金额") @ApiModelProperty("原始金额")
private BigDecimal originalAmount ;
private BigDecimal originalAmount;
@ApiModelProperty("平台折扣金额")
private BigDecimal platformDiscountAmount;
@ApiModelProperty("折扣金额") @ApiModelProperty("折扣金额")
private BigDecimal discountAmount; private BigDecimal discountAmount;
@ -79,4 +84,13 @@ public class Order extends Entity<Order> {
order.setOrderType(orderType); order.setOrderType(orderType);
return order; 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 lombok.EqualsAndHashCode;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Objects;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ -52,6 +53,9 @@ public class OrderItem extends Entity<OrderItem> {
@ApiModelProperty("原始金额") @ApiModelProperty("原始金额")
private BigDecimal originalAmount; private BigDecimal originalAmount;
@ApiModelProperty("平台折扣金额")
private BigDecimal platformDiscountAmount;
@ApiModelProperty("折扣金额") @ApiModelProperty("折扣金额")
private BigDecimal discountAmount; private BigDecimal discountAmount;
@ -79,4 +83,17 @@ public class OrderItem extends Entity<OrderItem> {
orderItem.setQuantity(quantity); orderItem.setQuantity(quantity);
return orderItem; 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.marriagebounty.MarriageBountyOrderQueryService;
import com.qniao.dam.query.matchmaker.MatchmakerQueryService; import com.qniao.dam.query.matchmaker.MatchmakerQueryService;
import com.qniao.dam.query.matchmakermarriage.MatchmakerMarriageInformationQueryService; 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.order.OrderQueryService;
import com.qniao.dam.query.product.ProductQueryService; import com.qniao.dam.query.product.ProductQueryService;
import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; import com.qniao.dam.query.rewardconfig.RewardConfigQueryService;
@ -111,6 +112,8 @@ public class OrderApplicationService extends BaseApplicationService {
private OrderDao orderDao; private OrderDao orderDao;
@Resource @Resource
private OrderAggregate orderAggregate; private OrderAggregate orderAggregate;
@Resource
private OrderDiscountConfigQueryService orderDiscountConfigQueryService;
@Value("${default_marriage_bounty_matchmaker_id}") @Value("${default_marriage_bounty_matchmaker_id}")
private Long defaultMarriageBountyMatchmakerId; private Long defaultMarriageBountyMatchmakerId;
@ -502,24 +505,21 @@ public class OrderApplicationService extends BaseApplicationService {
private void countMatchMakerOrderAmount(Order order, private void countMatchMakerOrderAmount(Order order,
MatchmakerOrderTypeEnum matchmakerOrderType) { MatchmakerOrderTypeEnum matchmakerOrderType) {
if (CollUtil.isNotEmpty(order.getOrderItemList())) { if (CollUtil.isNotEmpty(order.getOrderItemList())) {
BigDecimal totalOriginalAmount = BigDecimal.ZERO;
BigDecimal totalDiscountAmount = BigDecimal.ZERO;
BigDecimal totalSettlementAmount = BigDecimal.ZERO;
for (OrderItem orderItem : order.getOrderItemList()) { for (OrderItem orderItem : order.getOrderItemList()) {
//查询订单折扣配置
orderItem.setPlatformDiscountAmount(orderDiscountConfigQueryService.queryBy(order.getUserId(), orderItem.getSubCategory()));
if (MatchmakerOrderTypeEnum.JOIN.equals(matchmakerOrderType)) { if (MatchmakerOrderTypeEnum.JOIN.equals(matchmakerOrderType)) {
orderItem.setOriginalAmount(orderItem.getUnitOriginalPrice().multiply(BigDecimal.valueOf(orderItem.getQuantity())));
orderItem.setOriginalAmount(orderItem.getUnitOriginalPrice());
orderItem.setDiscountAmount(BigDecimal.ZERO); 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)) { } else if (MatchmakerOrderTypeEnum.UPGRADE.equals(matchmakerOrderType)) {
//红娘升级 //红娘升级
Matchmaker matchmaker = matchmakerQueryService.queryByUserId(order.getUserId()); Matchmaker matchmaker = matchmakerQueryService.queryByUserId(order.getUserId());
if (Objects.isNull(matchmaker)) { if (Objects.isNull(matchmaker)) {
throw new BizException("没有查询到红娘信息"); throw new BizException("没有查询到红娘信息");
} else { } else {
orderItem.setOriginalAmount(orderItem.getUnitOriginalPrice().multiply(BigDecimal.valueOf(orderItem.getQuantity())));
orderItem.setOriginalAmount(orderItem.getUnitOriginalPrice());
BigDecimal discountAmount = BigDecimal.ZERO; BigDecimal discountAmount = BigDecimal.ZERO;
//红娘升级补差价周期 //红娘升级补差价周期
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_UPGRADE_PROTECTION_PERIOD); RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_UPGRADE_PROTECTION_PERIOD);
@ -530,16 +530,12 @@ public class OrderApplicationService extends BaseApplicationService {
} }
} }
orderItem.setDiscountAmount(discountAmount); 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) { if (order.getSettlementAmount().compareTo(BigDecimal.ZERO) <= 0) {
throw new BizException("订单金额应该大于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.baomidou.mybatisplus.core.metadata.IPage;
import com.qniao.dam.api.query.odc.user.request.UserPageOrderDiscountConfigQueryParams; import com.qniao.dam.api.query.odc.user.request.UserPageOrderDiscountConfigQueryParams;
import com.qniao.dam.api.query.odc.user.response.UserPageOrderDiscountConfigVo; 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 com.qniao.framework.utils.PageUtil;
import java.math.BigDecimal;
public interface OrderDiscountConfigQueryService { public interface OrderDiscountConfigQueryService {
IPage<UserPageOrderDiscountConfigVo> pageOrderDiscountConfig(UserPageOrderDiscountConfigQueryParams queryParams, PageUtil pageUtil); 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; package com.qniao.dam.query.odc.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; 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.request.UserPageOrderDiscountConfigQueryParams;
import com.qniao.dam.api.query.odc.user.response.UserPageOrderDiscountConfigVo; 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.infrastructure.persistent.dao.odc.OrderDiscountConfigDao;
import com.qniao.dam.query.account.AccountQueryService;
import com.qniao.dam.query.odc.OrderDiscountConfigQueryService; 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 com.qniao.framework.utils.PageUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Objects;
@Service @Service
public class OrderDiscountConfigQueryServiceImpl implements OrderDiscountConfigQueryService { public class OrderDiscountConfigQueryServiceImpl implements OrderDiscountConfigQueryService {
@Resource @Resource
private OrderDiscountConfigDao orderDiscountConfigDao; private OrderDiscountConfigDao orderDiscountConfigDao;
@Resource
private AccountQueryService accountQueryService;
@Override @Override
public IPage<UserPageOrderDiscountConfigVo> pageOrderDiscountConfig(UserPageOrderDiscountConfigQueryParams queryParams, public IPage<UserPageOrderDiscountConfigVo> pageOrderDiscountConfig(UserPageOrderDiscountConfigQueryParams queryParams,
PageUtil pageUtil) { PageUtil pageUtil) {
return orderDiscountConfigDao.page(pageUtil.toPageWithoutOrders(), queryParams); 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