17 changed files with 260 additions and 9 deletions
Unified View
Diff Options
-
2dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractStatusEnum.java
-
4dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractTermNameEnum.java
-
4dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/order/constant/OrderBelongingEnum.java
-
3dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/paymentorder/constant/PaymentMethodEnum.java
-
1dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductMainCategoryEnum.java
-
2dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java
-
11dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/contract/entity/Contract.java
-
11dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/contract/valobj/ContractTerm.java
-
4dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/entity/PaymentOrder.java
-
20dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/valobj/PaymentOrderVoucherImage.java
-
5dating-agency-mall-server/pom.xml
-
175dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/contract/ContractEventHandler.java
-
4dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/PaymentOrderAggregate.java
-
2dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java
-
2dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java
-
7dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/PaymentOrderVoucherImageDao.java
-
12dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/PaymentOrderRepositoryImpl.java
@ -0,0 +1,20 @@ |
|||||
|
package com.qniao.dam.domain.aggregate.paymentorder.valobj; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.qniao.domain.ValueObject; |
||||
|
import io.swagger.annotations.ApiModelProperty; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
@Data |
||||
|
@EqualsAndHashCode(callSuper = true) |
||||
|
@TableName("da_payment_order_voucher_image") |
||||
|
public class PaymentOrderVoucherImage extends ValueObject<PaymentOrderVoucherImage> { |
||||
|
|
||||
|
@ApiModelProperty("付款单标识") |
||||
|
private Long paymentOrderId; |
||||
|
|
||||
|
@ApiModelProperty("URL") |
||||
|
private String url; |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,175 @@ |
|||||
|
package com.qniao.dam.application.handler.contract; |
||||
|
|
||||
|
import cn.hutool.core.collection.CollUtil; |
||||
|
import com.qniao.dam.domain.aggregate.contract.ContractAggregate; |
||||
|
import com.qniao.dam.domain.aggregate.contract.entity.Contract; |
||||
|
import com.qniao.dam.domain.aggregate.contract.valobj.ContractImage; |
||||
|
import com.qniao.dam.domain.aggregate.contract.valobj.ContractTerm; |
||||
|
import com.qniao.dam.domain.aggregate.order.OrderAggregate; |
||||
|
import com.qniao.dam.domain.aggregate.order.entity.Order; |
||||
|
import com.qniao.dam.domain.aggregate.order.entity.OrderItem; |
||||
|
import com.qniao.dam.domain.aggregate.paymentorder.PaymentOrderAggregate; |
||||
|
import com.qniao.dam.domain.aggregate.paymentorder.entity.PaymentOrder; |
||||
|
import com.qniao.dam.domain.aggregate.paymentorder.valobj.PaymentOrderVoucherImage; |
||||
|
import com.qniao.dam.domian.aggregate.contract.constant.ContractStatusEnum; |
||||
|
import com.qniao.dam.domian.aggregate.contract.constant.ContractTermNameEnum; |
||||
|
import com.qniao.dam.domian.aggregate.order.constant.OrderBelongingEnum; |
||||
|
import com.qniao.dam.domian.aggregate.order.constant.OrderStatusEnum; |
||||
|
import com.qniao.dam.domian.aggregate.order.constant.OrderTypeEnum; |
||||
|
import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentMethodEnum; |
||||
|
import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentOrderStatusEnum; |
||||
|
import com.qniao.dam.domian.aggregate.product.constant.ProductMainCategoryEnum; |
||||
|
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; |
||||
|
import com.qniao.dam.domian.aggregate.product.constant.ProductTypeEnum; |
||||
|
import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; |
||||
|
import com.qniao.dam.infrastructure.constant.MqExchange; |
||||
|
import com.qniao.dam.infrastructure.constant.MqQueue; |
||||
|
import com.qniao.dam.infrastructure.utils.SnowFlakeUtil; |
||||
|
import com.qniao.dcs.domain.dsc.event.DatingStoreCustomerSignedMQ; |
||||
|
import com.qniao.domain.BaseApplicationService; |
||||
|
import com.qniao.framework.utils.TypeConvertUtils; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.springframework.amqp.core.ExchangeTypes; |
||||
|
import org.springframework.amqp.rabbit.annotation.Exchange; |
||||
|
import org.springframework.amqp.rabbit.annotation.Queue; |
||||
|
import org.springframework.amqp.rabbit.annotation.QueueBinding; |
||||
|
import org.springframework.amqp.rabbit.annotation.RabbitListener; |
||||
|
import org.springframework.beans.factory.annotation.Value; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
import java.math.BigDecimal; |
||||
|
import java.time.LocalDate; |
||||
|
import java.time.LocalDateTime; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collections; |
||||
|
import java.util.List; |
||||
|
|
||||
|
@Component |
||||
|
@Slf4j |
||||
|
public class ContractEventHandler extends BaseApplicationService { |
||||
|
|
||||
|
@Resource |
||||
|
private SnowFlakeUtil snowFlakeUtil; |
||||
|
@Resource |
||||
|
private ContractAggregate contractAggregate; |
||||
|
@Resource |
||||
|
private OrderAggregate orderAggregate; |
||||
|
@Resource |
||||
|
private PaymentOrderAggregate paymentOrderAggregate; |
||||
|
|
||||
|
@Value("${platform-org-id}") |
||||
|
private Long platformOrgId; |
||||
|
@Value("${platform-org-name}") |
||||
|
private String platformOrgName; |
||||
|
@Value("${platform-org-identity-no}") |
||||
|
private String platformOrgIdentityNo; |
||||
|
|
||||
|
@RabbitListener(bindings = @QueueBinding(value = @Queue(MqQueue.DATING_STORE_CUSTOMER_SIGNED), |
||||
|
exchange = @Exchange(value = MqExchange.DATING_STORE_CUSTOMER_SIGNED, |
||||
|
type = ExchangeTypes.FANOUT))) |
||||
|
public void handle(DatingStoreCustomerSignedMQ mq) { |
||||
|
try { |
||||
|
//合同 |
||||
|
Contract contract = handleContract(mq); |
||||
|
contractAggregate.create(contract); |
||||
|
//订单 |
||||
|
Order order = handleOrder(mq); |
||||
|
orderAggregate.complete(order); |
||||
|
//付款单 |
||||
|
PaymentOrder paymentOrder = handlePaymentOrder(mq, order); |
||||
|
paymentOrderAggregate.save(paymentOrder); |
||||
|
} catch (Exception e) { |
||||
|
log.error("线下门店客户已签约事件处理异常", e); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private PaymentOrder handlePaymentOrder(DatingStoreCustomerSignedMQ mq, Order order) { |
||||
|
PaymentOrder paymentOrder = new PaymentOrder(); |
||||
|
paymentOrder.setOrderId(order.getId()); |
||||
|
paymentOrder.setPayableAmount(mq.getAmount()); |
||||
|
paymentOrder.setUnpaidAmount(BigDecimal.ZERO); |
||||
|
paymentOrder.setPaidAmount(mq.getAmount()); |
||||
|
paymentOrder.setPaidTime(order.getPaidTime()); |
||||
|
paymentOrder.setPaymentMethod(PaymentMethodEnum.OFFLINE); |
||||
|
paymentOrder.setStatus(PaymentOrderStatusEnum.PAID); |
||||
|
//付款凭证 |
||||
|
if (CollUtil.isNotEmpty(mq.getPaymentVoucherImageList())) { |
||||
|
List<PaymentOrderVoucherImage> paymentOrderVoucherImageList = new ArrayList<>(); |
||||
|
for (String url : mq.getPaymentVoucherImageList()) { |
||||
|
PaymentOrderVoucherImage voucherImage = new PaymentOrderVoucherImage(); |
||||
|
voucherImage.setUrl(url); |
||||
|
paymentOrderVoucherImageList.add(voucherImage); |
||||
|
} |
||||
|
paymentOrder.setVoucherImageList(paymentOrderVoucherImageList); |
||||
|
} |
||||
|
return paymentOrder; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 订单处理 |
||||
|
*/ |
||||
|
private Order handleOrder(DatingStoreCustomerSignedMQ mq) { |
||||
|
Order order = new Order(); |
||||
|
order.setUserId(mq.getDatingStoreCustomerId()); |
||||
|
order.setOrderBelonging(OrderBelongingEnum.CUSTOMIZED_SERVICE); |
||||
|
order.setName("定制服务"); |
||||
|
order.setOrderBelongName(mq.getName()); |
||||
|
order.setOrderType(OrderTypeEnum.NORMAL); |
||||
|
order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode()); |
||||
|
order.setOriginalAmount(mq.getAmount()); |
||||
|
order.setDiscountAmount(BigDecimal.ZERO); |
||||
|
order.setPlatformDiscountAmount(BigDecimal.ZERO); |
||||
|
order.setDiscountAmount(mq.getAmount()); |
||||
|
order.setPaidTime(LocalDateTime.now()); |
||||
|
order.setStatus(OrderStatusEnum.COMPLETED); |
||||
|
|
||||
|
OrderItem orderItem = new OrderItem(); |
||||
|
orderItem.setProductType(ProductTypeEnum.CUSTOMER_VIRTUAL); |
||||
|
orderItem.setMainCategory(ProductMainCategoryEnum.CUSTOMIZED_SERVICE); |
||||
|
orderItem.setSubCategory(ProductSubCategoryEnum.CUSTOMIZED_SERVICE); |
||||
|
orderItem.setProductTitle("定制服务"); |
||||
|
orderItem.setProductDesc("定制服务"); |
||||
|
orderItem.setUnitOriginalPrice(mq.getAmount()); |
||||
|
orderItem.setUnitSettlementPrice(mq.getAmount()); |
||||
|
orderItem.setQuantity(1); |
||||
|
orderItem.setOriginalAmount(mq.getAmount()); |
||||
|
orderItem.setPlatformDiscountAmount(BigDecimal.ZERO); |
||||
|
orderItem.setDiscountAmount(BigDecimal.ZERO); |
||||
|
orderItem.setSettlementAmount(mq.getAmount()); |
||||
|
order.setOrderItemList(Collections.singletonList(orderItem)); |
||||
|
return order; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 合同处理 |
||||
|
*/ |
||||
|
private Contract handleContract(DatingStoreCustomerSignedMQ mq) { |
||||
|
Contract contract = new Contract(); |
||||
|
//甲方 |
||||
|
contract.setFirstPartyIdentityType(IdentityTypeEnum.INDIVIDUAL); |
||||
|
contract.setFirstPartyId(mq.getDatingStoreCustomerId()); |
||||
|
contract.setFirstPartyName(mq.getName()); |
||||
|
contract.setFirstPartyIdentityNo(mq.getIdentityCard()); |
||||
|
//乙方 广州聚星河创意文化发展有限公司 |
||||
|
contract.setSecondPartyIdentityType(IdentityTypeEnum.ORGANIZATION); |
||||
|
contract.setSecondPartyId(platformOrgId); |
||||
|
contract.setSecondPartyName(platformOrgName); |
||||
|
contract.setSecondPartyIdentityNo(platformOrgIdentityNo); |
||||
|
|
||||
|
contract.setAmount(mq.getAmount()); |
||||
|
contract.setSignDate(LocalDate.now()); |
||||
|
contract.setStartDate(contract.getSignDate()); |
||||
|
contract.setEndDate(mq.getServiceEndDate()); |
||||
|
contract.setStatus(ContractStatusEnum.IN_EFFECT); |
||||
|
|
||||
|
//合同条款 |
||||
|
ContractTerm contractTerm = ContractTerm.build(ContractTermNameEnum.NUMBER_OF_SERVICES, ContractTermNameEnum.NUMBER_OF_SERVICES.getDesc(), |
||||
|
null, mq.getNumberOfServices().toString()); |
||||
|
contract.setContractTermList(Collections.singletonList(contractTerm)); |
||||
|
|
||||
|
//合同影像 |
||||
|
contract.setContractImageList(TypeConvertUtils.convert(mq.getContractImageList(), ContractImage.class)); |
||||
|
return contract; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,7 @@ |
|||||
|
package com.qniao.dam.infrastructure.persistent.dao.domain; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import com.qniao.dam.domain.aggregate.paymentorder.valobj.PaymentOrderVoucherImage; |
||||
|
|
||||
|
public interface PaymentOrderVoucherImageDao extends BaseMapper<PaymentOrderVoucherImage> { |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save