Browse Source

红娘订单

master
张彭杰 1 year ago
parent
commit
3224454384
7 changed files with 167 additions and 4 deletions
  1. 36
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/order/constant/MatchmakerOrderTypeEnum.java
  2. 11
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java
  3. 3
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rewardconfig/entity/RewardConfig.java
  4. 9
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/OrderUserCommandController.java
  5. 40
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/request/UserSubmitMatchMakerOrderDto.java
  6. 70
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java
  7. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriagebounty/impl/MarriageBountyOrderQueryServiceImpl.java

36
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/order/constant/MatchmakerOrderTypeEnum.java

@ -0,0 +1,36 @@
package com.qniao.dam.domian.aggregate.order.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 MatchmakerOrderTypeEnum {
JOIN(1, "红娘加盟"),
UPGRADE(2, "红娘升级");
@EnumValue
@JsonValue
private final Integer value;
private final String desc;
MatchmakerOrderTypeEnum(Integer value, String desc) {
this.value = value;
this.desc = desc;
}
@JsonCreator
public static MatchmakerOrderTypeEnum get(Object code) {
for (MatchmakerOrderTypeEnum e : MatchmakerOrderTypeEnum.values()) {
if (e.getValue().equals(code)) {
return e;
}
}
return null;
}
}

11
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java

@ -76,7 +76,16 @@ public enum RewardTypeEnum {
MARRIAGE_BOUNTY_DATING_VALIDITY_PERIOD(305,"招亲榜-牵手服务有效期"),
MARRIAGE_BOUNTY_MARRIAGE_VALIDITY_PERIOD(306,"招亲榜-结婚服务有效期");
MARRIAGE_BOUNTY_MARRIAGE_VALIDITY_PERIOD(306,"招亲榜-结婚服务有效期"),
//周期保护 红娘升级补差价周期 红娘推荐奖励周期 用户发榜红娘奖励周期 用户升级红娘邀请奖励周期
MATCHMAKER_UPGRADE_PROTECTION_PERIOD(401,"红娘升级保护周期"),
MATCHMAKER_RECOMMEND_PROTECTION_PERIOD(402,"红娘推荐奖励保护周期"),
MARRIAGE_BOUNTY_MATCHMAKER_PROTECTION_PERIOD(403,"发榜红娘奖励保护周期"),
GUEST_JOIN_MATCHMAKER_RECOMMEND_PROTECTION_PERIOD(404,"嘉宾成为红娘邀请奖励保护周期");
@EnumValue
@JsonValue

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

@ -12,7 +12,6 @@ import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.time.chrono.ChronoLocalDateTime;
@Data
@EqualsAndHashCode(callSuper = true)
@ -57,7 +56,7 @@ public class RewardConfig extends Entity<RewardConfig> {
}
}
public LocalDateTime getRefundableTime(LocalDateTime time) {
public LocalDateTime getPeriodTime(LocalDateTime time) {
return time.plusMonths(Long.parseLong(value));
}
}

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

@ -70,4 +70,13 @@ public class OrderUserCommandController {
@RequestParam("userId") Long userId) {
return orderApplicationService.submitSiteActivityOrder(dto, userId);
}
@ApiOperation("用户提交红娘订单")
@PostMapping("submit/matchmaker-order")
public UserSubmitOrderVo userSubmitMatchMakerOrder(@RequestBody @Valid UserSubmitMatchMakerOrderDto dto,
@RequestParam("userId") Long userId) {
Order order = dto.trans2Domain();
order.setUserId(userId);
return orderApplicationService.submitMatchMakerOrder(order, dto.getMatchmakerOrderType());
}
}

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

@ -0,0 +1,40 @@
package com.qniao.dam.api.command.order.user.request;
import com.qniao.dam.domain.aggregate.order.entity.Order;
import com.qniao.dam.domain.aggregate.order.entity.OrderItem;
import com.qniao.dam.domian.aggregate.order.constant.MatchmakerOrderTypeEnum;
import com.qniao.domain.Trans2DomainAssembler;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
@Data
public class UserSubmitMatchMakerOrderDto implements Trans2DomainAssembler<Order> {
@ApiModelProperty("征婚资料标识")
private Long miId;
@ApiModelProperty("产品规格标识")
@NotNull(message = "产品规格标识不能为空")
private Long productSpecId;
@ApiModelProperty("红娘订单类型")
@NotNull(message = "红娘订单类型不能为空")
private MatchmakerOrderTypeEnum matchmakerOrderType;
@Override
public Order trans2Domain() {
Order order = new Order();
order.setMiId(miId);
List<OrderItem> orderItemList = new ArrayList<>();
OrderItem orderItem = new OrderItem();
orderItem.setProductSpecId(productSpecId);
orderItem.setQuantity(1);
orderItemList.add(orderItem);
order.setOrderItemList(orderItemList);
return order;
}
}

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

@ -25,6 +25,7 @@ import com.qniao.dam.domian.aggregate.marriagebount.constant.MarriageBountyOrder
import com.qniao.dam.domian.aggregate.marriagebount.constant.MarriageBountyOrderStatusEnum;
import com.qniao.dam.domian.aggregate.marriagebount.constant.MarriageBountyOrderVersion;
import com.qniao.dam.domian.aggregate.marriagebount.constant.PublishIdentityTypeEnum;
import com.qniao.dam.domian.aggregate.order.constant.MatchmakerOrderTypeEnum;
import com.qniao.dam.domian.aggregate.order.constant.OrderBelongingEnum;
import com.qniao.dam.domian.aggregate.order.constant.OrderTypeEnum;
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum;
@ -56,6 +57,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -438,4 +440,72 @@ public class OrderApplicationService extends BaseApplicationService {
}
});
}
/**
* 红娘订单
*
* @param order
* @param matchmakerOrderType
* @return
*/
public UserSubmitOrderVo submitMatchMakerOrder(Order order,
MatchmakerOrderTypeEnum matchmakerOrderType) {
//1. 填充订单信息 + 同类型权益不同规格限制购买和提醒
fillOrderInfo(order);
//2. 订单金额计算
countMatchMakerOrderAmount(order, matchmakerOrderType);
//3. 设置订单号
order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode());
//4. 组织付款单信息
PaymentOrder paymentOrder = makePaymentOrder(order);
submitOrderDomainService.handle(order, paymentOrder);
return new UserSubmitOrderVo(order.getId(), paymentOrder.getId(), false);
}
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()) {
if (MatchmakerOrderTypeEnum.JOIN.equals(matchmakerOrderType)) {
orderItem.setOriginalAmount(orderItem.getUnitOriginalPrice().multiply(BigDecimal.valueOf(orderItem.getQuantity())));
orderItem.setDiscountAmount(BigDecimal.ZERO);
orderItem.setSettlementAmount(orderItem.getOriginalAmount());
totalOriginalAmount = totalOriginalAmount.add(orderItem.getOriginalAmount());
totalSettlementAmount = totalSettlementAmount.add(orderItem.getSettlementAmount());
totalDiscountAmount = totalDiscountAmount.add(orderItem.getDiscountAmount());
} 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())));
BigDecimal discountAmount = BigDecimal.ZERO;
//红娘升级补差价周期
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_UPGRADE_PROTECTION_PERIOD);
if (Objects.nonNull(rewardConfig)) {
//仍在保护期内则红娘升级补充差价
if (LocalDateTime.now().isBefore(rewardConfig.getPeriodTime(matchmaker.getCreateTime()))) {
discountAmount = matchmaker.getFranchiseFee();
}
}
orderItem.setDiscountAmount(discountAmount);
orderItem.setSettlementAmount(orderItem.getOriginalAmount().subtract(discountAmount));
totalOriginalAmount = totalOriginalAmount.add(orderItem.getOriginalAmount());
totalSettlementAmount = totalSettlementAmount.add(orderItem.getSettlementAmount());
totalDiscountAmount = totalDiscountAmount.add(orderItem.getDiscountAmount());
}
}
}
order.setOriginalAmount(totalOriginalAmount);
order.setDiscountAmount(totalDiscountAmount);
order.setSettlementAmount(totalSettlementAmount);
if (order.getSettlementAmount().compareTo(BigDecimal.ZERO) <= 0) {
throw new BizException("订单金额应该大于0");
}
}
}
}

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

@ -85,7 +85,7 @@ public class MarriageBountyOrderQueryServiceImpl implements MarriageBountyOrderQ
if (!management) {
RewardTypeEnum rewardType = marriageBountyOrder.getValidityPeriodType();
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(rewardType);
if (Objects.nonNull(rewardConfig) && LocalDateTime.now().isBefore(rewardConfig.getRefundableTime(marriageBountyOrder.getCreateTime()))) {
if (Objects.nonNull(rewardConfig) && LocalDateTime.now().isBefore(rewardConfig.getPeriodTime(marriageBountyOrder.getCreateTime()))) {
refundInfoVo.setRefundable(false);
//补充因有效期原因无法撤销原因 悬赏-包牵手6月正在服务中无法撤销如有疑问或特殊情况请联系客服处理;
refundInfoVo.setNonRefundableReason(marriageBountyOrder.getType().getDesc() + "(" + rewardConfig.getValue() + "月)"

Loading…
Cancel
Save