Browse Source

悬赏招亲

master
张彭杰 1 year ago
parent
commit
d63803dc64
8 changed files with 58 additions and 22 deletions
  1. 6
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/entity/MarriageBountyOrderReward.java
  2. 7
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/OrderItem.java
  3. 8
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rewardconfig/entity/RewardConfig.java
  4. 3
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/marriagebounty/user/response/UserGetMarriageBountyOrderPreRefundInfoVo.java
  5. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/order/OrderEventHandler.java
  6. 21
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/marriagebounty/MarriageBountyOrderApplicationService.java
  7. 28
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java
  8. 5
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriagebounty/impl/MarriageBountyOrderQueryServiceImpl.java

6
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/entity/MarriageBountyOrderReward.java

@ -31,18 +31,22 @@ public class MarriageBountyOrderReward extends Entity<MarriageBountyOrderReward>
@ApiModelProperty("奖励金额")
private BigDecimal rewardAmount;
@ApiModelProperty("付款金额")
private BigDecimal paidAmount;
@ApiModelProperty("是否领取")
private Boolean isReceive;
@ApiModelProperty("悬赏招亲订单奖励领取记录")
private transient List<MarriageBountyOrderRewardReceiveRecord> rewardReceiveRecordList;
public static Collection<? extends MarriageBountyOrderReward> build(ProductSubCategoryEnum rewardCategory, BigDecimal rewardAmount, int quantity) {
public static Collection<? extends MarriageBountyOrderReward> build(ProductSubCategoryEnum rewardCategory, BigDecimal rewardAmount, BigDecimal paidAmount,int quantity) {
List<MarriageBountyOrderReward> orderRewardList = new ArrayList<>();
for (int i = 0; i < quantity; i++) {
MarriageBountyOrderReward orderReward = new MarriageBountyOrderReward();
orderReward.setRewardCategory(rewardCategory);
orderReward.setRewardAmount(rewardAmount);
orderReward.setPaidAmount(paidAmount);
orderReward.setIsReceive(false);
orderRewardList.add(orderReward);
}

7
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/order/entity/OrderItem.java

@ -40,6 +40,9 @@ public class OrderItem extends Entity<OrderItem> {
@ApiModelProperty("产品描述")
private String productDesc;
@ApiModelProperty("原始单价")
private BigDecimal unitOriginalPrice;
@ApiModelProperty("结算单价")
private BigDecimal unitSettlementPrice;
@ -47,7 +50,7 @@ public class OrderItem extends Entity<OrderItem> {
private Integer quantity;
@ApiModelProperty("原始金额")
private BigDecimal originalAmount ;
private BigDecimal originalAmount;
@ApiModelProperty("折扣金额")
private BigDecimal discountAmount;
@ -61,6 +64,7 @@ public class OrderItem extends Entity<OrderItem> {
ProductMainCategoryEnum mainCategory,
ProductSubCategoryEnum subCategory,
String productTitle,
BigDecimal unitOriginalPrice,
BigDecimal unitSettlementPrice,
Integer quantity) {
OrderItem orderItem = new OrderItem();
@ -70,6 +74,7 @@ public class OrderItem extends Entity<OrderItem> {
orderItem.setMainCategory(mainCategory);
orderItem.setSubCategory(subCategory);
orderItem.setProductTitle(productTitle);
orderItem.setOriginalAmount(unitOriginalPrice);
orderItem.setUnitSettlementPrice(unitSettlementPrice);
orderItem.setQuantity(quantity);
return orderItem;

8
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rewardconfig/entity/RewardConfig.java

@ -45,6 +45,14 @@ public class RewardConfig extends Entity<RewardConfig> {
}
}
public BigDecimal calculatePrice(BigDecimal price) {
if (RewardAmountUnitEnum.NUM.equals(rewardAmountUnit)) {
return new BigDecimal(value);
} else {
return price.multiply(new BigDecimal(value)).divide(BigDecimal.valueOf(100), 3, RoundingMode.HALF_UP);
}
}
public LocalDateTime getRefundableTime(LocalDateTime time) {
return time.plusMonths(Long.parseLong(value));
}

3
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/marriagebounty/user/response/UserGetMarriageBountyOrderPreRefundInfoVo.java

@ -17,6 +17,9 @@ public class UserGetMarriageBountyOrderPreRefundInfoVo {
@ApiModelProperty("奖励金额")
private BigDecimal rewardAmount;
@ApiModelProperty("付款金额")
private BigDecimal paidMount;
@ApiModelProperty("可退款见面费用")
private BigDecimal refundableMeetingFee = BigDecimal.ZERO;

2
dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/order/OrderEventHandler.java

@ -161,7 +161,7 @@ public class OrderEventHandler extends BaseApplicationService {
Order order = Order.build(userId, miId, OrderBelongingEnum.CUSTOMER, marriageInformation.getNickName(), OrderTypeEnum.NORMAL);
ProductSpec productSpec = product.getProductSpecList().get(0);
OrderItem orderItem = OrderItem.build(productSpec.getProductId(), productSpec.getId(), product.getProductType(), product.getMainCategory(), product.getSubCategory(),
product.getProductTitle(), BigDecimal.ZERO, 1);
product.getProductTitle(), BigDecimal.ZERO,BigDecimal.ZERO, 1);
orderItem.setSettlementAmount(BigDecimal.ZERO);
order.setSettlementAmount(BigDecimal.ZERO);
order.setOrderItemList(Collections.singletonList(orderItem));

21
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/marriagebounty/MarriageBountyOrderApplicationService.java

@ -78,7 +78,8 @@ public class MarriageBountyOrderApplicationService extends BaseApplicationServic
MarriageBountyOrderStatusEnum.MATCHMAKING, MarriageBountyOrderPaymentStatusEnum.PAID);
if (Objects.nonNull(marriageBountyOrder)) {
//修改悬赏招亲订单
Map<Integer, BigDecimal> rewardCategoryPriceMap = new HashMap<>();
Map<Integer, BigDecimal> rewardOriginalPriceMap = new HashMap<>();
Map<Integer, BigDecimal> rewardSettlementPriceMap = new HashMap<>();
//订单关系
MarriageBountyOrderRel orderRel = MarriageBountyOrderRel.build(orderId, order.getSettlementAmount());
marriageBountyOrder.setOrderRelList(Collections.singletonList(orderRel));
@ -88,14 +89,20 @@ public class MarriageBountyOrderApplicationService extends BaseApplicationServic
ProductSpec productSpec = productSpecDao.selectById(orderItem.getProductSpecId());
productRecord.getProductSpecRecordList().add(MarriageBountyOrderProductSpecRecord.build(
orderItem.getSubCategory(), productSpec.getUnitOriginalPrice(), productSpec.getUnitOriginalPrice()));
rewardCategoryPriceMap.put(orderItem.getSubCategory().getValue(), orderItem.getUnitSettlementPrice());
rewardOriginalPriceMap.put(orderItem.getSubCategory().getValue(), orderItem.getUnitOriginalPrice());
rewardSettlementPriceMap.put(orderItem.getSubCategory().getValue(), orderItem.getUnitSettlementPrice());
});
//悬赏招亲订单奖励
for (MarriageBountyOrderReward orderReward : marriageBountyOrder.getOrderRewardList()) {
if (!orderReward.getIsReceive()) {
BigDecimal addPrice = rewardCategoryPriceMap.get(orderReward.getRewardCategory().getValue());
addPrice = Objects.nonNull(addPrice) ? addPrice : BigDecimal.ZERO;
orderReward.setRewardAmount(orderReward.getRewardAmount().add(addPrice));
//奖励金额
BigDecimal addOriginalPrice = rewardOriginalPriceMap.get(orderReward.getRewardCategory().getValue());
addOriginalPrice = Objects.nonNull(addOriginalPrice) ? addOriginalPrice : BigDecimal.ZERO;
orderReward.setRewardAmount(orderReward.getRewardAmount().add(addOriginalPrice));
//付款金额
BigDecimal addPaidPrice = rewardSettlementPriceMap.get(orderReward.getRewardCategory().getValue());
addPaidPrice = Objects.nonNull(addPaidPrice) ? addPaidPrice : BigDecimal.ZERO;
orderReward.setPaidAmount(orderReward.getPaidAmount().add(addPaidPrice));
marriageBountyOrder.getUpdateOrderRewardList().add(orderReward);
}
}
@ -122,9 +129,9 @@ public class MarriageBountyOrderApplicationService extends BaseApplicationServic
productRecord.getProductSpecRecordList().add(MarriageBountyOrderProductSpecRecord.build(
orderItem.getSubCategory(), productSpec.getUnitOriginalPrice(), productSpec.getUnitOriginalPrice()));
if (ProductSubCategoryEnum.MARRIAGE_BOUNTY_MEETING_FEE.equals(orderItem.getSubCategory())) {
orderRewardList.addAll(MarriageBountyOrderReward.build(ProductSubCategoryEnum.MARRIAGE_BOUNTY_MEETING_FEE, orderItem.getUnitSettlementPrice(), orderItem.getQuantity()));
orderRewardList.addAll(MarriageBountyOrderReward.build(ProductSubCategoryEnum.MARRIAGE_BOUNTY_MEETING_FEE, orderItem.getUnitOriginalPrice(), orderItem.getUnitSettlementPrice(), orderItem.getQuantity()));
} else if (ProductSubCategoryEnum.MARRIAGE_BOUNTY_RESULT_GIFT.equals(orderItem.getSubCategory())) {
orderRewardList.addAll(MarriageBountyOrderReward.build(ProductSubCategoryEnum.MARRIAGE_BOUNTY_RESULT_GIFT, orderItem.getUnitSettlementPrice(), orderItem.getQuantity()));
orderRewardList.addAll(MarriageBountyOrderReward.build(ProductSubCategoryEnum.MARRIAGE_BOUNTY_RESULT_GIFT, orderItem.getUnitOriginalPrice(), orderItem.getUnitSettlementPrice(), orderItem.getQuantity()));
}
});
marriageBountyOrder.setOrderRewardList(orderRewardList);

28
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java

@ -55,6 +55,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -135,7 +136,7 @@ public class OrderApplicationService extends BaseApplicationService {
if (CollUtil.isNotEmpty(order.getOrderItemList())) {
BigDecimal totalOriginalAmount = BigDecimal.ZERO;
for (OrderItem orderItem : order.getOrderItemList()) {
orderItem.setOriginalAmount(orderItem.getUnitSettlementPrice().multiply(BigDecimal.valueOf(orderItem.getQuantity())));
orderItem.setOriginalAmount(orderItem.getOriginalAmount().multiply(BigDecimal.valueOf(orderItem.getQuantity())));
orderItem.setDiscountAmount(BigDecimal.ZERO);
orderItem.setSettlementAmount(orderItem.getOriginalAmount());
totalOriginalAmount = totalOriginalAmount.add(orderItem.getOriginalAmount());
@ -161,12 +162,14 @@ public class OrderApplicationService extends BaseApplicationService {
orderItem.setSubCategory(product.getSubCategory());
orderItem.setProductTitle(product.getProductTitle());
orderItem.setProductDesc(product.getProductDesc());
orderItem.setUnitOriginalPrice(productSpec.getUnitSellingPrice());
orderItem.setUnitSettlementPrice(productSpec.getUnitSellingPrice());
order.setOrderBelonging(order.transformBelonging(product.getProductType()));
if (order.getGroupType() != null && order.getGroupType() == 1) {
ActivityProduct activityProduct = activityProductDao.selectOne(Wrappers.lambdaQuery(new ActivityProduct())
.eq(ActivityProduct::getActivityId, order.getActivityId())
.eq(ActivityProduct::getProductSpecId, orderItem.getProductSpecId()));
orderItem.setUnitOriginalPrice(activityProduct.getActivityUnitSellingPrice());
orderItem.setUnitSettlementPrice(activityProduct.getActivityUnitSellingPrice());
}
//1.1. 同类型权益不同规格限制购买和提醒
@ -249,23 +252,26 @@ public class OrderApplicationService extends BaseApplicationService {
if (CollUtil.isNotEmpty(order.getOrderItemList())) {
BigDecimal totalOriginalAmount = BigDecimal.ZERO;
BigDecimal totalDiscountAmount = BigDecimal.ZERO;
BigDecimal totalSettlementAmount = BigDecimal.ZERO;
for (OrderItem orderItem : order.getOrderItemList()) {
orderItem.setOriginalAmount(orderItem.getUnitSettlementPrice().multiply(BigDecimal.valueOf(orderItem.getQuantity())));
BigDecimal discountAmount = BigDecimal.ZERO;
orderItem.setOriginalAmount(orderItem.getOriginalAmount().multiply(BigDecimal.valueOf(orderItem.getQuantity())));
BigDecimal discountPrice = BigDecimal.ZERO;
if (Objects.nonNull(guestCertificationReward)) {
discountAmount = discountAmount.add(guestCertificationReward.calculateReward(orderItem.getOriginalAmount()));
discountPrice = discountPrice.add(guestCertificationReward.calculateReward(orderItem.getUnitOriginalPrice()));
}
if (Objects.nonNull(publishMarriageBountyReward)) {
discountAmount = discountAmount.add(publishMarriageBountyReward.calculateReward(orderItem.getOriginalAmount()));
discountPrice = discountPrice.add(publishMarriageBountyReward.calculateReward(orderItem.getUnitOriginalPrice()));
}
orderItem.setDiscountAmount(discountAmount);
orderItem.setSettlementAmount(orderItem.getOriginalAmount().subtract(discountAmount));
orderItem.setUnitSettlementPrice(orderItem.getUnitOriginalPrice().subtract(discountPrice));
orderItem.setSettlementAmount(orderItem.getUnitSettlementPrice().multiply(BigDecimal.valueOf(orderItem.getQuantity())).setScale(2, RoundingMode.HALF_UP));
orderItem.setDiscountAmount(orderItem.getOriginalAmount().subtract(orderItem.getSettlementAmount()));
totalOriginalAmount = totalOriginalAmount.add(orderItem.getOriginalAmount());
totalDiscountAmount = totalDiscountAmount.add(discountAmount);
totalSettlementAmount = totalSettlementAmount.add(orderItem.getSettlementAmount());
totalDiscountAmount = totalDiscountAmount.add(orderItem.getDiscountAmount());
}
order.setOriginalAmount(totalOriginalAmount);
order.setDiscountAmount(totalDiscountAmount);
order.setSettlementAmount(order.getOriginalAmount().subtract(totalDiscountAmount));
order.setSettlementAmount(totalSettlementAmount);
if (order.getSettlementAmount().compareTo(BigDecimal.ZERO) <= 0) {
throw new BizException("订单金额应该大于0");
}
@ -317,6 +323,7 @@ public class OrderApplicationService extends BaseApplicationService {
orderItem.setSubCategory(product.getSubCategory());
orderItem.setProductTitle(product.getProductTitle());
orderItem.setProductDesc(product.getProductDesc());
orderItem.setOriginalAmount(productSpec.getUnitSellingPrice());
orderItem.setUnitSettlementPrice(productSpec.getUnitSellingPrice());
orderItem.setQuantity(1);
if (ProductSubCategoryEnum.MARRIAGE_BOUNTY_MEETING_FEE.equals(product.getSubCategory())) {
@ -353,6 +360,7 @@ public class OrderApplicationService extends BaseApplicationService {
orderItem.setSubCategory(product.getSubCategory());
orderItem.setProductTitle(product.getProductTitle());
orderItem.setProductDesc(product.getProductDesc());
orderItem.setOriginalAmount(unitSettlementPrice);
orderItem.setUnitSettlementPrice(unitSettlementPrice);
orderItem.setQuantity(quantity);
orderItemList.add(orderItem);
@ -399,7 +407,7 @@ public class OrderApplicationService extends BaseApplicationService {
throw new BizException("下单异常");
}
OrderItem orderItem = OrderItem.build(productSpec.getProductId(), productSpec.getId(), product.getProductType(), product.getMainCategory(), product.getSubCategory(),
product.getProductTitle(), calculateVo.getUnitSettlementPrice(), 1);
product.getProductTitle(), calculateVo.getUnitSettlementPrice(), calculateVo.getUnitSettlementPrice(), 1);
order.setOrderItemList(Collections.singletonList(orderItem));
// }
//2. 订单金额计算

5
dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriagebounty/impl/MarriageBountyOrderQueryServiceImpl.java

@ -63,16 +63,17 @@ public class MarriageBountyOrderQueryServiceImpl implements MarriageBountyOrderQ
if (Objects.nonNull(marriageBountyOrder) && MarriageBountyOrderPaymentStatusEnum.PAID.equals(marriageBountyOrder.getPaymentStatus())) {
refundInfoVo.setMarriageBountyOrderId(marriageBountyOrder.getId());
refundInfoVo.setRewardAmount(marriageBountyOrder.getRewardAmount());
refundInfoVo.setPaidMount(marriageBountyOrder.getPaidAmount());
BigDecimal refundableMeetingFee = BigDecimal.ZERO;
BigDecimal refundableResultGift = BigDecimal.ZERO;
int refundableMeetingQuantity = 0;
for (MarriageBountyOrderReward orderReward : marriageBountyOrder.getOrderRewardList()) {
if (!orderReward.getIsReceive()) {
if (ProductSubCategoryEnum.MARRIAGE_BOUNTY_MEETING_FEE.equals(orderReward.getRewardCategory())) {
refundableMeetingFee = refundableMeetingFee.add(orderReward.getRewardAmount());
refundableMeetingFee = refundableMeetingFee.add(orderReward.getPaidAmount());
refundableMeetingQuantity++;
} else if (ProductSubCategoryEnum.MARRIAGE_BOUNTY_RESULT_GIFT.equals(orderReward.getRewardCategory())) {
refundableResultGift = refundableResultGift.add(orderReward.getRewardAmount());
refundableResultGift = refundableResultGift.add(orderReward.getPaidAmount());
}
}
}

Loading…
Cancel
Save