diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/externalorder/constant/ExternalOrderTypeEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/externalorder/constant/ExternalOrderTypeEnum.java new file mode 100644 index 0000000..9d34666 --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/externalorder/constant/ExternalOrderTypeEnum.java @@ -0,0 +1,36 @@ +package com.qniao.dam.domian.aggregate.externalorder.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 ExternalOrderTypeEnum { + + VIP_PRODUCT(1, "vip套餐"), + + SITE_ACTIVITY(2, "线下活动"); + + @EnumValue + @JsonValue + private final Integer value; + private final String desc; + + ExternalOrderTypeEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + @JsonCreator + public static ExternalOrderTypeEnum get(Object code) { + for (ExternalOrderTypeEnum e : ExternalOrderTypeEnum.values()) { + if (e.getValue().equals(code)) { + return e; + } + } + return null; + } +} \ No newline at end of file diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/externalorder/valueobj/ExternalOrderRel.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/externalorder/valueobj/ExternalOrderRel.java index d4c3eaf..125a3ee 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/externalorder/valueobj/ExternalOrderRel.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/externalorder/valueobj/ExternalOrderRel.java @@ -1,6 +1,7 @@ package com.qniao.dam.domain.aggregate.externalorder.valueobj; import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.dam.domian.aggregate.externalorder.constant.ExternalOrderTypeEnum; import com.qniao.domain.ValueObject; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -17,10 +18,14 @@ public class ExternalOrderRel extends ValueObject { @ApiModelProperty("订单标识") private Long orderId; - public static ExternalOrderRel build(Long externalId, Long orderId) { + @ApiModelProperty("类型") + private ExternalOrderTypeEnum type; + + public static ExternalOrderRel build(Long externalId, Long orderId, ExternalOrderTypeEnum type) { ExternalOrderRel rel = new ExternalOrderRel(); rel.setExternalId(externalId); rel.setOrderId(orderId); + rel.setType(type); return rel; } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java index 9ab9abd..07c3eaa 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java @@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.qniao.dam.api.command.order.user.request.UserSubmitSiteActivityOrderDto; 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.entity.MarriageBountyOrder; import com.qniao.dam.domain.aggregate.marriagebounty.entity.MarriageBountyOrderReward; import com.qniao.dam.domain.aggregate.order.entity.Order; @@ -77,6 +79,8 @@ public class OrderApplicationService { @Resource private SiteActivityDao siteActivityDao; @Resource + private ActivityRepository activityRepository; + @Resource private RightQueryService rightQueryService; @Value("${marriage_bounty_meeting_quantity:5}") @@ -264,27 +268,44 @@ public class OrderApplicationService { MarriageInformation marriageInformation = marriageInformationDao.selectById(dto.getMiId()); Product product = productQueryService.querySiteActivityBy(dto.getSiteActivityId(), marriageInformation.getGenderCode()); SiteActivity siteActivity = siteActivityDao.selectById(dto.getSiteActivityId()); - Order order = Order.build(userId, dto.getMiId(), OrderBelongingEnum.CUSTOMER, marriageInformation.getNickName(), OrderTypeEnum.NORMAL); + Order order = null; PaymentOrder paymentOrder = null; if (dto.getOpenVip()) { //开通会员送活动 - + order = new Order(); + order.setUserId(userId); + order.setMiId(dto.getMiId()); + order.setActivityId(siteActivity.getVpiActivityId()); + order.setGroupType(1); + Activity activity = activityRepository.load(siteActivity.getVpiActivityId()); + List orderItemList = new ArrayList<>(); + activity.getActivityProductList().forEach(activityProduct -> { + OrderItem orderItem = new OrderItem(); + orderItem.setProductSpecId(activityProduct.getProductSpecId()); + orderItem.setQuantity(1); + orderItemList.add(orderItem); + }); + order.setOrderItemList(orderItemList); + //1. 填充订单信息 + 同类型权益,不同规格,限制购买和提醒 + fillOrderInfo(order); } else { //是否vip boolean vip = rightQueryService.checkUserVipRight(userId, dto.getMiId()).getVip(); //报名参加活动 + order = Order.build(userId, dto.getMiId(), 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(), siteActivity.calculateFee(GenderEnum.get(marriageInformation.getGenderCode()), vip), 1); order.setOrderItemList(Collections.singletonList(orderItem)); - //2. 订单金额计算 - countOrderAmount(order); - //3. 设置订单号 - order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode()); - //4. 组织付款单信息 - paymentOrder = makePaymentOrder(order); - submitSiteActivityOrderDomainService.handle(order, paymentOrder, dto.getSiteActivityId()); } + //2. 订单金额计算 + countOrderAmount(order); + //3. 设置订单号 + order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode()); + //4. 组织付款单信息 + paymentOrder = makePaymentOrder(order); + submitOrderDomainService.handle(order, paymentOrder); + submitSiteActivityOrderDomainService.handle(order, paymentOrder, dto.getSiteActivityId(), dto.getOpenVip()); return new UserSubmitOrderVo(order.getId(), paymentOrder.getId()); } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitSiteActivityOrderDomainService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitSiteActivityOrderDomainService.java index 9b464b0..f8be5e2 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitSiteActivityOrderDomainService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitSiteActivityOrderDomainService.java @@ -5,6 +5,7 @@ import com.qniao.dam.domain.aggregate.order.OrderAggregate; import com.qniao.dam.domain.aggregate.order.entity.Order; import com.qniao.dam.domain.aggregate.paymentorder.PaymentOrderAggregate; import com.qniao.dam.domain.aggregate.paymentorder.entity.PaymentOrder; +import com.qniao.dam.domian.aggregate.externalorder.constant.ExternalOrderTypeEnum; import com.qniao.dam.infrastructure.persistent.dao.domain.ExternalOrderRelDao; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,11 +23,11 @@ public class SubmitSiteActivityOrderDomainService { private ExternalOrderRelDao externalOrderRelDao; @Transactional(rollbackFor = Exception.class) - public void handle(Order order, PaymentOrder paymentOrder, Long siteActivityId) { + public void handle(Order order, PaymentOrder paymentOrder, Long siteActivityId, Boolean openVip) { orderAggregate.submit(order); paymentOrder.setOrderId(order.getId()); paymentOrderAggregate.create(paymentOrder); - ExternalOrderRel externalOrderRel = ExternalOrderRel.build(siteActivityId, order.getId()); + ExternalOrderRel externalOrderRel = ExternalOrderRel.build(siteActivityId, order.getId(), openVip ? ExternalOrderTypeEnum.VIP_PRODUCT : ExternalOrderTypeEnum.SITE_ACTIVITY); externalOrderRelDao.insert(externalOrderRel); } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ActivityRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ActivityRepositoryImpl.java index 6b159ee..f737b60 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ActivityRepositoryImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ActivityRepositoryImpl.java @@ -1,5 +1,6 @@ package com.qniao.dam.infrastructure.persistent.repository.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.qniao.dam.domain.aggregate.activity.entity.Activity; import com.qniao.dam.domain.aggregate.activity.entity.ActivityProduct; @@ -11,6 +12,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.Objects; @Service @Slf4j @@ -28,25 +30,29 @@ public class ActivityRepositoryImpl implements ActivityRepository { @Override public Activity load(Long id) { Activity activity = activityDao.selectById(id); + if (Objects.nonNull(activity)) { + activity.setActivityProductList(activityProductDao.selectList(new LambdaQueryWrapper() + .eq(ActivityProduct::getActivityId,id))); + } return activity; } @Override public Long save(Activity entity) { - if(entity.getId() == null){ + if (entity.getId() == null) { entity.setId(snowFlake.nextId()); activityDao.insert(entity); - if(entity.getActivityProductList() != null){ - entity.getActivityProductList().forEach(e->{ + if (entity.getActivityProductList() != null) { + entity.getActivityProductList().forEach(e -> { e.setActivityId(entity.getId()); activityProductDao.insert(e); }); } - }else{ + } else { activityDao.updateById(entity); - activityProductDao.delete(Wrappers.lambdaUpdate(new ActivityProduct()).eq(ActivityProduct::getActivityId,entity.getId())); - if(entity.getActivityProductList() != null){ - entity.getActivityProductList().forEach(e->{ + activityProductDao.delete(Wrappers.lambdaUpdate(new ActivityProduct()).eq(ActivityProduct::getActivityId, entity.getId())); + if (entity.getActivityProductList() != null) { + entity.getActivityProductList().forEach(e -> { e.setActivityId(entity.getId()); activityProductDao.insert(e); });