Browse Source

订单退款申请

master
张彭杰 1 year ago
parent
commit
920f7e9bdc
9 changed files with 131 additions and 49 deletions
  1. 2
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/marriagebount/constant/MarriageBountyOrderPaymentStatusEnum.java
  2. 2
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/marriagebount/constant/MarriageBountyOrderStatusEnum.java
  3. 38
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/marriagebount/constant/MarriageBountyOrderType.java
  4. 4
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/entity/MarriageBountyOrder.java
  5. 5
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/OrderUserCommandController.java
  6. 51
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/request/UserSubmitMarriageBountyOrderDto.java
  7. 59
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/marriagebounty/MarriageBountyOrderApplicationService.java
  8. 12
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java
  9. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/MarriageBountyOrderAggregate.java

2
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/marriagebount/constant/MarriageBountyOrderPaymentStatusEnum.java

@ -10,6 +10,8 @@ import lombok.Getter;
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum MarriageBountyOrderPaymentStatusEnum {
INIT(0,"初始化"),
PAID(1, "已支付"),
BEING_REFUNDED(2, "退款中"),

2
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/marriagebount/constant/MarriageBountyOrderStatusEnum.java

@ -10,6 +10,8 @@ import lombok.Getter;
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum MarriageBountyOrderStatusEnum {
INIT(0,"初始化"),
MATCHMAKING(1, "匹配中"),
MATCH_SUCCESS(2, "匹配成功"),

38
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/marriagebount/constant/MarriageBountyOrderType.java

@ -0,0 +1,38 @@
package com.qniao.dam.domian.aggregate.marriagebount.constant;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum MarriageBountyOrderType {
MEETING(1, "见面"),
DATING(2, "恋爱"),
MARRIAGE(3, "结婚");
@EnumValue
@JsonValue
private final Integer value;
private final String desc;
MarriageBountyOrderType(Integer value, String desc) {
this.value = value;
this.desc = desc;
}
@JsonCreator
public static MarriageBountyOrderType get(Object code) {
for (MarriageBountyOrderType e : MarriageBountyOrderType.values()) {
if (e.getValue().equals(code)) {
return e;
}
}
return null;
}
}

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

@ -5,6 +5,7 @@ import com.qniao.dam.domain.aggregate.marriagebounty.valueobj.MarriageBountyOrde
import com.qniao.dam.domain.aggregate.marriagebounty.valueobj.MarriageBountyOrderRel;
import com.qniao.dam.domian.aggregate.marriagebount.constant.MarriageBountyOrderPaymentStatusEnum;
import com.qniao.dam.domian.aggregate.marriagebount.constant.MarriageBountyOrderStatusEnum;
import com.qniao.dam.domian.aggregate.marriagebount.constant.MarriageBountyOrderType;
import com.qniao.domain.Entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -26,6 +27,9 @@ public class MarriageBountyOrder extends Entity<MarriageBountyOrder> {
@ApiModelProperty("征婚资料标识")
private Long miId;
@ApiModelProperty("悬赏招亲类型")
private MarriageBountyOrderType type;
@ApiModelProperty("奖励金额")
private BigDecimal rewardAmount;

5
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/OrderUserCommandController.java

@ -4,6 +4,7 @@ import com.qniao.dam.api.command.order.user.request.*;
import com.qniao.dam.api.command.order.user.response.UserCalculateOrderFeeVo;
import com.qniao.dam.api.command.order.user.response.UserSubmitOrderVo;
import com.qniao.dam.application.service.order.OrderApplicationService;
import com.qniao.dam.domain.aggregate.marriagebounty.entity.MarriageBountyOrder;
import com.qniao.dam.domain.aggregate.order.entity.Order;
import com.qniao.dam.domain.aggregate.product.entity.Product;
import io.swagger.annotations.Api;
@ -48,7 +49,9 @@ public class OrderUserCommandController {
order.setUserId(userId);
List<Product> productList = dto.trans2Product();
productList.forEach(product -> product.setUserId(userId));
return orderApplicationService.submitMarriageBountyOrder(order, productList);
MarriageBountyOrder marriageBountyOrder = dto.trans2MarriageBountyOrder();
marriageBountyOrder.setUserId(userId);
return orderApplicationService.submitMarriageBountyOrder(order, productList,marriageBountyOrder);
}
@ApiOperation("用户计算线下活动订单费用")

51
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/request/UserSubmitMarriageBountyOrderDto.java

@ -1,8 +1,10 @@
package com.qniao.dam.api.command.order.user.request;
import com.qniao.dam.domain.aggregate.marriagebounty.entity.MarriageBountyOrder;
import com.qniao.dam.domain.aggregate.order.entity.Order;
import com.qniao.dam.domain.aggregate.product.entity.Product;
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec;
import com.qniao.dam.domian.aggregate.marriagebount.constant.MarriageBountyOrderType;
import com.qniao.dam.domian.aggregate.product.constant.ProductMainCategoryEnum;
import com.qniao.dam.domian.aggregate.product.constant.ProductStatusEnum;
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum;
@ -12,11 +14,13 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
@Data
public class UserSubmitMarriageBountyOrderDto implements Trans2DomainAssembler<Order> {
@ -25,13 +29,21 @@ public class UserSubmitMarriageBountyOrderDto implements Trans2DomainAssembler<O
@NotNull(message = "征婚资料标识不能为空")
private Long miId;
@ApiModelProperty("悬赏招亲类型")
@NotNull(message = "悬赏招亲类型不能为空")
private MarriageBountyOrderType type;
@ApiModelProperty("见面费用")
@NotNull(message = "见面费用不能为空")
@DecimalMin(value = "1", message = "见面费用不等低于1元")
private BigDecimal meetingFee;
@ApiModelProperty("可见面费用次数")
@Max(value = 5, message = "可见面费用次数最多5次")
@Max(value = 1, message = "可见面费用次数最少1次")
private Integer meetingQuantity = 5;
@ApiModelProperty("结果礼金")
@NotNull(message = "结果礼金不能为空")
@DecimalMin(value = "0", message = "结果礼金不等低于0元")
private BigDecimal resultGift;
@ -42,6 +54,13 @@ public class UserSubmitMarriageBountyOrderDto implements Trans2DomainAssembler<O
return order;
}
public MarriageBountyOrder trans2MarriageBountyOrder() {
MarriageBountyOrder marriageBountyOrder = new MarriageBountyOrder();
marriageBountyOrder.setMiId(miId);
marriageBountyOrder.setType(type);
return marriageBountyOrder;
}
public List<Product> trans2Product() {
List<Product> list = new ArrayList<>();
//见面费用
@ -60,20 +79,22 @@ public class UserSubmitMarriageBountyOrderDto implements Trans2DomainAssembler<O
meetingFeeProduct.setProductSpecList(Collections.singletonList(meetingFeeProductSpec));
list.add(meetingFeeProduct);
//结果礼金
Product resultGiftProduct = new Product();
resultGiftProduct.setMiId(miId);
resultGiftProduct.setManageEnable(false);
resultGiftProduct.setProductType(ProductTypeEnum.CUSTOMER_VIRTUAL);
resultGiftProduct.setMainCategory(ProductMainCategoryEnum.MARRIAGE_BOUNTY);
resultGiftProduct.setSubCategory(ProductSubCategoryEnum.MARRIAGE_BOUNTY_RESULT_GIFT);
resultGiftProduct.setProductTitle(ProductSubCategoryEnum.MARRIAGE_BOUNTY_RESULT_GIFT.getDesc());
resultGiftProduct.setStatus(ProductStatusEnum.SOLD_OUTED);
ProductSpec resultGiftProductSpec = new ProductSpec();
resultGiftProductSpec.setUnitOriginalPrice(resultGift);
resultGiftProductSpec.setUnitSellingPrice(resultGift);
resultGiftProductSpec.setAvailableStockNumber(-1);
resultGiftProduct.setProductSpecList(Collections.singletonList(resultGiftProductSpec));
list.add(resultGiftProduct);
if (Objects.nonNull(resultGift)) {
Product resultGiftProduct = new Product();
resultGiftProduct.setMiId(miId);
resultGiftProduct.setManageEnable(false);
resultGiftProduct.setProductType(ProductTypeEnum.CUSTOMER_VIRTUAL);
resultGiftProduct.setMainCategory(ProductMainCategoryEnum.MARRIAGE_BOUNTY);
resultGiftProduct.setSubCategory(ProductSubCategoryEnum.MARRIAGE_BOUNTY_RESULT_GIFT);
resultGiftProduct.setProductTitle(ProductSubCategoryEnum.MARRIAGE_BOUNTY_RESULT_GIFT.getDesc());
resultGiftProduct.setStatus(ProductStatusEnum.SOLD_OUTED);
ProductSpec resultGiftProductSpec = new ProductSpec();
resultGiftProductSpec.setUnitOriginalPrice(resultGift);
resultGiftProductSpec.setUnitSellingPrice(resultGift);
resultGiftProductSpec.setAvailableStockNumber(-1);
resultGiftProduct.setProductSpecList(Collections.singletonList(resultGiftProductSpec));
list.add(resultGiftProduct);
}
return list;
}
}

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

@ -65,8 +65,9 @@ public class MarriageBountyOrderApplicationService extends BaseApplicationServic
public void save(Long orderId) {
Order order = orderRepository.load(orderId);
MarriageBountyOrder marriageBountyOrder = marriageBountyOrderQueryService.queryBy(order.getUserId(), order.getMiId(),
MarriageBountyOrderStatusEnum.MATCHMAKING, MarriageBountyOrderPaymentStatusEnum.PAID);
MarriageBountyOrder marriageBountyOrder;
marriageBountyOrder = marriageBountyOrderQueryService.queryBy(order.getUserId(), order.getMiId(),
MarriageBountyOrderStatusEnum.INIT, MarriageBountyOrderPaymentStatusEnum.INIT);
if (Objects.isNull(marriageBountyOrder)) {
//新的悬赏招亲
marriageBountyOrder = MarriageBountyOrder.build(order.getUserId(), order.getMiId());
@ -95,32 +96,36 @@ public class MarriageBountyOrderApplicationService extends BaseApplicationServic
BaseDomainEvent event = marriageBountyOrderAggregate.create(marriageBountyOrder);
this.sendEvent(event);
} else {
//修改悬赏招亲订单
Map<Integer, BigDecimal> rewardCategoryPriceMap = new HashMap<>();
//订单关系
MarriageBountyOrderRel orderRel = MarriageBountyOrderRel.build(orderId, order.getSettlementAmount());
marriageBountyOrder.setOrderRelList(Collections.singletonList(orderRel));
//悬赏招亲订单产品记录
MarriageBountyOrderProductRecord productRecord = new MarriageBountyOrderProductRecord();
order.getOrderItemList().forEach(orderItem -> {
ProductSpec productSpec = productSpecDao.selectById(orderItem.getProductSpecId());
productRecord.getProductSpecRecordList().add(MarriageBountyOrderProductSpecRecord.build(
orderItem.getSubCategory(), productSpec.getUnitOriginalPrice(), productSpec.getUnitOriginalPrice()));
rewardCategoryPriceMap.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));
marriageBountyOrder.getUpdateOrderRewardList().add(orderReward);
marriageBountyOrder = marriageBountyOrderQueryService.queryBy(order.getUserId(), order.getMiId(),
MarriageBountyOrderStatusEnum.MATCHMAKING, MarriageBountyOrderPaymentStatusEnum.PAID);
if (Objects.nonNull(marriageBountyOrder)) {
//修改悬赏招亲订单
Map<Integer, BigDecimal> rewardCategoryPriceMap = new HashMap<>();
//订单关系
MarriageBountyOrderRel orderRel = MarriageBountyOrderRel.build(orderId, order.getSettlementAmount());
marriageBountyOrder.setOrderRelList(Collections.singletonList(orderRel));
//悬赏招亲订单产品记录
MarriageBountyOrderProductRecord productRecord = new MarriageBountyOrderProductRecord();
order.getOrderItemList().forEach(orderItem -> {
ProductSpec productSpec = productSpecDao.selectById(orderItem.getProductSpecId());
productRecord.getProductSpecRecordList().add(MarriageBountyOrderProductSpecRecord.build(
orderItem.getSubCategory(), productSpec.getUnitOriginalPrice(), productSpec.getUnitOriginalPrice()));
rewardCategoryPriceMap.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));
marriageBountyOrder.getUpdateOrderRewardList().add(orderReward);
}
}
marriageBountyOrder.calculateRewardAmount();
productRecord.setRewardAmount(marriageBountyOrder.getRewardAmount());
marriageBountyOrder.setProductRecordList(Collections.singletonList(productRecord));
marriageBountyOrderAggregate.update(marriageBountyOrder);
}
marriageBountyOrder.calculateRewardAmount();
productRecord.setRewardAmount(marriageBountyOrder.getRewardAmount());
marriageBountyOrder.setProductRecordList(Collections.singletonList(productRecord));
marriageBountyOrderAggregate.update(marriageBountyOrder);
}
}
@ -324,7 +329,7 @@ public class MarriageBountyOrderApplicationService extends BaseApplicationServic
marriageBountyOrder.setUpdateOrderRewardList(Collections.singletonList(marriageBountyOrderReward));
//相关订单金额
BigDecimal totalAssociateOrderAmount = existMarriageBountyOrder.getOrderRelList().stream().map(MarriageBountyOrderRel::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BaseDomainEvent event = marriageBountyOrderAggregate.confirmMatch(marriageBountyOrder, existMarriageBountyOrder.getOrderRelList(),totalAssociateOrderAmount);
BaseDomainEvent event = marriageBountyOrderAggregate.confirmMatch(marriageBountyOrder, existMarriageBountyOrder.getOrderRelList(), totalAssociateOrderAmount);
this.sendEvent(event);
}
}

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

@ -7,9 +7,8 @@ import com.qniao.dam.api.command.order.user.request.UserSubmitSiteActivityOrderD
import com.qniao.dam.api.command.order.user.response.UserCalculateOrderFeeVo;
import com.qniao.dam.api.command.order.user.response.UserSubmitOrderVo;
import com.qniao.dam.application.service.product.ProductApplicationService;
import com.qniao.dam.domain.aggregate.activity.entity.Activity;
import com.qniao.dam.domain.aggregate.activity.entity.ActivityProduct;
import com.qniao.dam.domain.aggregate.activity.repository.ActivityRepository;
import com.qniao.dam.domain.aggregate.marriagebounty.MarriageBountyOrderAggregate;
import com.qniao.dam.domain.aggregate.marriagebounty.entity.MarriageBountyOrder;
import com.qniao.dam.domain.aggregate.marriagebounty.entity.MarriageBountyOrderReward;
import com.qniao.dam.domain.aggregate.order.entity.Order;
@ -40,8 +39,6 @@ import com.qniao.das.application.DatingAgencyServiceApplicationService;
import com.qniao.das.application.request.CalculateSiteActivityFeeDto;
import com.qniao.das.application.response.CalculateSiteActivityFeeVo;
import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation;
import com.qniao.das.domian.aggregate.marriageinformation.constant.GenderEnum;
import com.qniao.das.domian.aggregate.siteactivity.SiteActivity;
import com.qniao.das.domian.aggregate.vip.VIPEnum;
import com.qniao.dau.domain.aggregate.matchmaker.entity.Matchmaker;
import com.qniao.domain.BaseApplicationService;
@ -86,7 +83,7 @@ public class OrderApplicationService extends BaseApplicationService {
@Resource
private MarriageBountyOrderQueryService marriageBountyOrderQueryService;
@Resource
private SiteActivityDao siteActivityDao;
private MarriageBountyOrderAggregate marriageBountyOrderAggregate;
@Resource
private RightQueryService rightQueryService;
@Resource
@ -183,7 +180,9 @@ public class OrderApplicationService extends BaseApplicationService {
/**
* 提交悬赏招亲订单
*/
public UserSubmitOrderVo submitMarriageBountyOrder(Order order, List<Product> productList) {
public UserSubmitOrderVo submitMarriageBountyOrder(Order order,
List<Product> productList,
MarriageBountyOrder marriageBountyOrder) {
//1. 提交产品信息
productList.forEach(product -> handleProduct(product, product.getProductSpecList()));
//2. 填充订单信息
@ -195,6 +194,7 @@ public class OrderApplicationService extends BaseApplicationService {
//5. 组装付款单信息
PaymentOrder paymentOrder = makePaymentOrder(order);
submitOrderDomainService.handle(order, paymentOrder);
marriageBountyOrderAggregate.init(marriageBountyOrder);
return new UserSubmitOrderVo(order.getId(), paymentOrder.getId(), false);
}

7
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/MarriageBountyOrderAggregate.java

@ -24,6 +24,12 @@ public class MarriageBountyOrderAggregate {
@Resource
private MarriageBountyOrderRepository marriageBountyOrderRepository;
public void init(MarriageBountyOrder marriageBountyOrder) {
marriageBountyOrder.setStatus(MarriageBountyOrderStatusEnum.INIT);
marriageBountyOrder.setPaymentStatus(MarriageBountyOrderPaymentStatusEnum.INIT);
marriageBountyOrderRepository.save(marriageBountyOrder);
}
public BaseDomainEvent create(MarriageBountyOrder marriageBountyOrder) {
marriageBountyOrder.setStatus(MarriageBountyOrderStatusEnum.MATCHMAKING);
marriageBountyOrder.setPaymentStatus(MarriageBountyOrderPaymentStatusEnum.PAID);
@ -78,4 +84,5 @@ public class MarriageBountyOrderAggregate {
event.setOrderIdRelList(orderRelList.stream().map(MarriageBountyOrderRel::getOrderId).collect(Collectors.toList()));
return event;
}
}
Loading…
Cancel
Save