diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductMainCategoryEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductMainCategoryEnum.java index b74d552..e9bcb50 100644 --- a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductMainCategoryEnum.java +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductMainCategoryEnum.java @@ -23,6 +23,8 @@ public enum ProductMainCategoryEnum { SITE_ACTIVITY(8, "线下活动"), CUSTOMIZED_SERVICE(9, "定制服务"), + ENTRUST_SERVICE(12, "委托服务"), + VIRTUAL_CURRENCY(20, "虚拟货币"), CHAT_FEE(21, "聊天"), diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java index c05c46d..da8b492 100644 --- a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java @@ -55,6 +55,10 @@ public enum ProductSubCategoryEnum { CUSTOMIZED_SERVICE(1101, "定制服务"), + ENTRUST_SERVICE_CONTACT_INFO_EXCHANGE_FEE(1201, "委托服务交换联系方式费用"), + + ENTRUST_SERVICE_OFFLINE_MEETING_FEE(1202, "委托服务线下见面费用"), + VIRTUAL_CURRENCY(2001, "虚拟货币"), CHAT_FEE(2101, "聊天费用"), 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 d45abf4..7ce6a05 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 @@ -23,6 +23,7 @@ import com.qniao.dam.domain.aggregate.product.repository.ProductRepository; import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; import com.qniao.dam.domain.aggregate.productspec.repository.ProductSpecRepository; import com.qniao.dam.domain.aggregate.rewardconfig.entity.RewardConfig; +import com.qniao.dam.domain.service.order.SubmitEntrustServiceOrderDomainService; import com.qniao.dam.domain.service.order.SubmitOrderDomainService; import com.qniao.dam.domain.service.order.SubmitSiteActivityOrderDomainService; import com.qniao.dam.domian.aggregate.eso.constant.EntrustServiceTypeEnum; @@ -50,7 +51,6 @@ import com.qniao.dam.query.odc.OrderDiscountConfigQueryService; import com.qniao.dam.query.order.OrderQueryService; import com.qniao.dam.query.product.ProductQueryService; import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; -import com.qniao.dam.query.right.RightQueryService; import com.qniao.dam.query.usermanagement.UserManagementQueryService; import com.qniao.dam.query.usermarriageinformation.UserMarriageInformationQueryService; import com.qniao.das.application.DatingAgencyServiceApplicationService; @@ -60,14 +60,12 @@ import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation; import com.qniao.das.domian.aggregate.marriageinformation.UserMarriageInformation; import com.qniao.das.domian.aggregate.matchmakermarriage.MatchmakerMarriageInformation; 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.dau.domain.aggregate.matchmakeraudit.entity.MatchmakerAudit; import com.qniao.domain.BaseApplicationService; import com.qniao.domain.BaseDomainEvent; import com.qniao.framework.exception.BizException; import com.qniao.framework.utils.TypeConvertUtils; -import org.checkerframework.checker.units.qual.C; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -129,6 +127,8 @@ public class OrderApplicationService extends BaseApplicationService { private UserManagementQueryService userManagementQueryService; @Resource private EntrustServiceOrderQueryService entrustServiceOrderQueryService; + @Resource + private SubmitEntrustServiceOrderDomainService submitEntrustServiceOrderDomainService; @Value("${default_marriage_bounty_matchmaker_id}") private Long defaultMarriageBountyMatchmakerId; @@ -289,13 +289,60 @@ public class OrderApplicationService extends BaseApplicationService { public UserSubmitOrderVo submitEntrustServiceOrder(Order order, EntrustServiceOrder entrustServiceOrder) { - //1.查询是否存在委托服务 + //查询是否存在委托服务 entrustServiceOrderQueryService.checkEntrustServiceOrder(entrustServiceOrder); - //2.查询委托服务价格 + //查询委托服务价格 BigDecimal amount = queryEntrustServiceAmount(entrustServiceOrder); - //3.组装产品信息 + //组装产品信息 Product product = productApplicationService.handleEntrustServiceProduct(entrustServiceOrder, amount); - return null; + //提交产品信息 + handleProduct(product, product.getProductSpecList()); + //下单人信息 + UserMarriageInformation initiatorUserMarriageInformation = userMarriageInformationQueryService.queryByOwn(order.getUserId()); + order.setMiId(initiatorUserMarriageInformation.getMiId()); + //订单信息处理 + fillEntrustServiceOrderInfo(order, product); + //委托服务订单处理 + handleEntrustServiceOrder(entrustServiceOrder, initiatorUserMarriageInformation, amount); + //组装付款单信息 + PaymentOrder paymentOrder = makePaymentOrder(order); + submitEntrustServiceOrderDomainService.handle(order, paymentOrder, entrustServiceOrder); + return new UserSubmitOrderVo(order.getId(), paymentOrder.getId(), false); + } + + private void handleEntrustServiceOrder(EntrustServiceOrder entrustServiceOrder, + UserMarriageInformation initiatorUserMarriageInformation, + BigDecimal amount) { + entrustServiceOrder.setInitiatorMiId(initiatorUserMarriageInformation.getMiId()); + UserMarriageInformation targetUserMarriageInformation = userMarriageInformationQueryService.queryOwnByMiId(entrustServiceOrder.getTargetMiId()); + entrustServiceOrder.setTargetMiId(targetUserMarriageInformation.getMiId()); + entrustServiceOrder.setRewardAmount(amount); + } + + private void fillEntrustServiceOrderInfo(Order order, Product product) { + order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode()); + order.setOrderBelonging(OrderBelongingEnum.CUSTOMER); + MarriageInformation marriageInformation = marriageInformationDao.selectById(order.getMiId()); + order.setOrderBelongName(marriageInformation.getNickName()); + order.setOrderType(OrderTypeEnum.ENTRUST_SERVICE); + ProductSpec productSpec = product.getProductSpecList().get(0); + OrderItem orderItem = getOrderItem(product, productSpec); + order.setOrderItemList(Collections.singletonList(orderItem)); + } + + private OrderItem getOrderItem(Product product, ProductSpec productSpec) { + OrderItem orderItem = new OrderItem(); + orderItem.setProductId(product.getId()); + orderItem.setProductSpecId(productSpec.getId()); + orderItem.setProductType(product.getProductType()); + orderItem.setMainCategory(product.getMainCategory()); + orderItem.setSubCategory(product.getSubCategory()); + orderItem.setProductTitle(product.getProductTitle()); + orderItem.setProductDesc(product.getProductDesc()); + orderItem.setUnitOriginalPrice(productSpec.getUnitSellingPrice()); + orderItem.setUnitSettlementPrice(productSpec.getUnitSellingPrice()); + orderItem.setQuantity(1); + return orderItem; } /** diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/product/ProductApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/product/ProductApplicationService.java index e357063..ba85103 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/product/ProductApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/product/ProductApplicationService.java @@ -9,7 +9,10 @@ import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; import com.qniao.dam.domain.service.product.CreateProductDomainService; import com.qniao.dam.domain.service.product.EditProductDomainService; import com.qniao.dam.domian.aggregate.eso.constant.EntrustServiceTypeEnum; +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; +import com.qniao.dam.domian.aggregate.product.constant.ProductTypeEnum; import com.qniao.dam.infrastructure.persistent.dao.activity.ActivityDao; import com.qniao.dam.infrastructure.persistent.dao.domain.ProductDao; import com.qniao.framework.exception.BizException; @@ -17,6 +20,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; +import java.util.Collections; import java.util.List; @Service @@ -65,10 +69,29 @@ public class ProductApplicationService { */ public Product handleEntrustServiceProduct(EntrustServiceOrder entrustServiceOrder, BigDecimal amount) { - if(EntrustServiceTypeEnum.CONTACT_INFO_EXCHANGE.equals(entrustServiceOrder.getType())){ - - }else{ - + if (EntrustServiceTypeEnum.CONTACT_INFO_EXCHANGE.equals(entrustServiceOrder.getType())) { + return geteEntrustServiceProduct(entrustServiceOrder, ProductSubCategoryEnum.ENTRUST_SERVICE_CONTACT_INFO_EXCHANGE_FEE, amount); + } else { + return geteEntrustServiceProduct(entrustServiceOrder, ProductSubCategoryEnum.ENTRUST_SERVICE_OFFLINE_MEETING_FEE, amount); } } + + private Product geteEntrustServiceProduct(EntrustServiceOrder entrustServiceOrder, + ProductSubCategoryEnum entrustServiceContactInfoExchangeFee, + BigDecimal amount) { + Product product = new Product(); + product.setUserId(entrustServiceOrder.getInitiatorUserId()); + product.setManageEnable(false); + product.setProductType(ProductTypeEnum.CUSTOMER_VIRTUAL); + product.setMainCategory(ProductMainCategoryEnum.ENTRUST_SERVICE); + product.setSubCategory(entrustServiceContactInfoExchangeFee); + product.setProductTitle(entrustServiceContactInfoExchangeFee.getDesc()); + product.setStatus(ProductStatusEnum.SOLD_OUTED); + ProductSpec productSpec = new ProductSpec(); + productSpec.setUnitOriginalPrice(amount); + productSpec.setUnitSellingPrice(amount); + productSpec.setAvailableStockNumber(-1); + product.setProductSpecList(Collections.singletonList(productSpec)); + return product; + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/eso/EntrustServiceOrderAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/eso/EntrustServiceOrderAggregate.java index e3c2351..ea73f8c 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/eso/EntrustServiceOrderAggregate.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/eso/EntrustServiceOrderAggregate.java @@ -2,6 +2,8 @@ package com.qniao.dam.domain.aggregate.eso; import com.qniao.dam.domain.aggregate.eso.entity.EntrustServiceOrder; import com.qniao.dam.domain.aggregate.eso.repository.EntrustServiceOrderRepository; +import com.qniao.dam.domian.aggregate.eso.constant.EntrustServicePaymentStatusEnum; +import com.qniao.dam.domian.aggregate.eso.constant.EntrustServiceStatusEnum; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -28,4 +30,10 @@ public class EntrustServiceOrderAggregate { public void delete(Long id) { repository.delete(id); } + + public void init(EntrustServiceOrder entity) { + entity.setStatus(EntrustServiceStatusEnum.INIT); + entity.setPaymentStatus(EntrustServicePaymentStatusEnum.INIT); + repository.save(entity); + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitEntrustServiceOrderDomainService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitEntrustServiceOrderDomainService.java new file mode 100644 index 0000000..8669c6f --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitEntrustServiceOrderDomainService.java @@ -0,0 +1,37 @@ +package com.qniao.dam.domain.service.order; + +import com.qniao.dam.domain.aggregate.eso.EntrustServiceOrderAggregate; +import com.qniao.dam.domain.aggregate.eso.entity.EntrustServiceOrder; +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.domain.BaseDomainEvent; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; + +@Service +public class SubmitEntrustServiceOrderDomainService { + + @Resource + private OrderAggregate orderAggregate; + @Resource + private PaymentOrderAggregate paymentOrderAggregate; + @Resource + private EntrustServiceOrderAggregate entrustServiceOrderAggregate; + + @Transactional(rollbackFor = Exception.class) + public void handle(Order order, + PaymentOrder paymentOrder, + EntrustServiceOrder entrustServiceOrder) { + orderAggregate.submit(order); + paymentOrder.setOrderId(order.getId()); + paymentOrderAggregate.create(paymentOrder); + entrustServiceOrder.setAssociateOrderId(order.getId()); + entrustServiceOrderAggregate.init(entrustServiceOrder); + } +} +