|
|
|
@ -130,12 +130,16 @@ public class OrderApplicationService extends BaseApplicationService { |
|
|
|
|
|
|
|
public void countOrderAmount(Order order, Boolean allowFree) { |
|
|
|
if (CollUtil.isNotEmpty(order.getOrderItemList())) { |
|
|
|
BigDecimal totalSettlementAmount = BigDecimal.ZERO; |
|
|
|
BigDecimal totalOriginalAmount = BigDecimal.ZERO; |
|
|
|
for (OrderItem orderItem : order.getOrderItemList()) { |
|
|
|
orderItem.setSettlementAmount(orderItem.getUnitSettlementPrice().multiply(BigDecimal.valueOf(orderItem.getQuantity()))); |
|
|
|
totalSettlementAmount = totalSettlementAmount.add(orderItem.getSettlementAmount()); |
|
|
|
orderItem.setOriginalAmount(orderItem.getUnitSettlementPrice().multiply(BigDecimal.valueOf(orderItem.getQuantity()))); |
|
|
|
orderItem.setDiscountAmount(BigDecimal.ZERO); |
|
|
|
orderItem.setSettlementAmount(orderItem.getOriginalAmount()); |
|
|
|
totalOriginalAmount = totalOriginalAmount.add(orderItem.getOriginalAmount()); |
|
|
|
} |
|
|
|
order.setSettlementAmount(totalSettlementAmount); |
|
|
|
order.setOriginalAmount(totalOriginalAmount); |
|
|
|
order.setDiscountAmount(BigDecimal.ZERO); |
|
|
|
order.setSettlementAmount(order.getOriginalAmount()); |
|
|
|
if (!allowFree && order.getSettlementAmount().compareTo(BigDecimal.ZERO) <= 0) { |
|
|
|
throw new BizException("订单金额应该大于0"); |
|
|
|
} |
|
|
|
@ -198,7 +202,7 @@ public class OrderApplicationService extends BaseApplicationService { |
|
|
|
//2. 填充订单信息 |
|
|
|
fillMarriageBountyOrderInfo(order, productList, meetingQuantity); |
|
|
|
//3. 订单金额计算 |
|
|
|
countOrderAmount(order, false); |
|
|
|
countMarriageBountyOrderAmount(marriageBountyOrder.getPublishType(), order); |
|
|
|
//3.1. 低消确认 |
|
|
|
MarriageBountyOrder existMarriageBountyOrder = marriageBountyOrderQueryService.queryBy(order.getUserId(), order.getMiId(), |
|
|
|
MarriageBountyOrderStatusEnum.MATCHMAKING, MarriageBountyOrderPaymentStatusEnum.PAID); |
|
|
|
@ -225,6 +229,48 @@ public class OrderApplicationService extends BaseApplicationService { |
|
|
|
return new UserSubmitOrderVo(order.getId(), paymentOrder.getId(), false); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 计算招亲榜的订单金额 |
|
|
|
* |
|
|
|
* @param publishType |
|
|
|
* @param order |
|
|
|
*/ |
|
|
|
private void countMarriageBountyOrderAmount(PublishIdentityTypeEnum publishType, |
|
|
|
Order order) { |
|
|
|
if (PublishIdentityTypeEnum.MATCHMAKER.equals(publishType)) { |
|
|
|
//红娘发榜的话,则下单不需要给发布嘉宾邀请金额+发榜佣金 |
|
|
|
//获取红娘身份 |
|
|
|
RewardConfig guestCertificationReward = rewardConfigQueryService.queryGuestCertificationReward(order.getUserId()); |
|
|
|
RewardConfig publishMarriageBountyReward = rewardConfigQueryService.queryPublishMarriageBountyReward(order.getUserId()); |
|
|
|
if (CollUtil.isNotEmpty(order.getOrderItemList())) { |
|
|
|
BigDecimal totalOriginalAmount = BigDecimal.ZERO; |
|
|
|
BigDecimal totalDiscountAmount = BigDecimal.ZERO; |
|
|
|
for (OrderItem orderItem : order.getOrderItemList()) { |
|
|
|
orderItem.setOriginalAmount(orderItem.getUnitSettlementPrice().multiply(BigDecimal.valueOf(orderItem.getQuantity()))); |
|
|
|
BigDecimal discountAmount = BigDecimal.ZERO; |
|
|
|
if (Objects.nonNull(guestCertificationReward)) { |
|
|
|
discountAmount = discountAmount.add(guestCertificationReward.calculateReward(orderItem.getOriginalAmount())); |
|
|
|
} |
|
|
|
if (Objects.nonNull(publishMarriageBountyReward)) { |
|
|
|
discountAmount = discountAmount.add(publishMarriageBountyReward.calculateReward(orderItem.getOriginalAmount())); |
|
|
|
} |
|
|
|
orderItem.setDiscountAmount(discountAmount); |
|
|
|
orderItem.setSettlementAmount(orderItem.getOriginalAmount().subtract(discountAmount)); |
|
|
|
totalOriginalAmount = totalOriginalAmount.add(orderItem.getOriginalAmount()); |
|
|
|
totalDiscountAmount = totalDiscountAmount.add(discountAmount); |
|
|
|
} |
|
|
|
order.setOriginalAmount(totalOriginalAmount); |
|
|
|
order.setDiscountAmount(totalDiscountAmount); |
|
|
|
order.setSettlementAmount(order.getOriginalAmount().subtract(totalDiscountAmount)); |
|
|
|
if (order.getSettlementAmount().compareTo(BigDecimal.ZERO) <= 0) { |
|
|
|
throw new BizException("订单金额应该大于0"); |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
countOrderAmount(order, false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void checkMinAmount(MarriageBountyOrder marriageBountyOrder, Order order) { |
|
|
|
RewardTypeEnum rewardType = marriageBountyOrder.getMinAmountType(); |
|
|
|
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(rewardType); |
|
|
|
|