diff --git a/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/contract/event/ContractCreatedEvent.java b/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/contract/event/ContractCreatedEvent.java new file mode 100644 index 0000000..812a7c3 --- /dev/null +++ b/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/contract/event/ContractCreatedEvent.java @@ -0,0 +1,15 @@ +package com.qniao.dam.domian.aggregate.contract.event; + +import com.qniao.domain.BaseDomainEvent; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +public class ContractCreatedEvent extends BaseDomainEvent { + + private Long id; + +} diff --git a/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/contract/event/CustomizedServiceContractCreatedMQ.java b/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/contract/event/CustomizedServiceContractCreatedMQ.java new file mode 100644 index 0000000..e82d110 --- /dev/null +++ b/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/contract/event/CustomizedServiceContractCreatedMQ.java @@ -0,0 +1,20 @@ +package com.qniao.dam.domian.aggregate.contract.event; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class CustomizedServiceContractCreatedMQ implements Serializable { + + @ApiModelProperty("合同标识") + private Long contractId; + + @ApiModelProperty("线下门店客户标识") + private Long datingStoreCustomerId; + + @ApiModelProperty("服务次数") + private Integer numberOfServices; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/contract/ContractEventHandler.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/contract/ContractEventHandler.java index 1ee4c73..c8dbd34 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/contract/ContractEventHandler.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/contract/ContractEventHandler.java @@ -1,8 +1,10 @@ package com.qniao.dam.application.handler.contract; import cn.hutool.core.collection.CollUtil; +import com.google.common.eventbus.Subscribe; import com.qniao.dam.domain.aggregate.contract.ContractAggregate; import com.qniao.dam.domain.aggregate.contract.entity.Contract; +import com.qniao.dam.domain.aggregate.contract.repository.ContractRepository; 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; @@ -13,6 +15,8 @@ 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.contract.event.ContractCreatedEvent; +import com.qniao.dam.domian.aggregate.contract.event.CustomizedServiceContractCreatedMQ; 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; @@ -25,10 +29,13 @@ 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.dam.query.contract.ContractQueryService; import com.qniao.dcs.domain.dsc.event.DatingStoreCustomerSignedMQ; import com.qniao.domain.BaseApplicationService; +import com.qniao.domain.BaseDomainEvent; import com.qniao.framework.utils.TypeConvertUtils; import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.AmqpTemplate; import org.springframework.amqp.core.ExchangeTypes; import org.springframework.amqp.rabbit.annotation.Exchange; import org.springframework.amqp.rabbit.annotation.Queue; @@ -57,6 +64,12 @@ public class ContractEventHandler extends BaseApplicationService { private OrderAggregate orderAggregate; @Resource private PaymentOrderAggregate paymentOrderAggregate; + @Resource + private ContractRepository contractRepository; + @Resource + private ContractQueryService contractQueryService; + @Resource + private AmqpTemplate amqpTemplate; @Value("${platform-org-id:963432943739605555}") private Long platformOrgId; @@ -70,15 +83,17 @@ public class ContractEventHandler extends BaseApplicationService { type = ExchangeTypes.FANOUT))) public void handle(DatingStoreCustomerSignedMQ mq) { try { + List eventList = new ArrayList<>(); //合同 Contract contract = handleContract(mq); - contractAggregate.create(contract); + eventList.add(contractAggregate.create(contract)); //订单 Order order = handleOrder(mq); orderAggregate.complete(order); //付款单 PaymentOrder paymentOrder = handlePaymentOrder(mq, order); paymentOrderAggregate.save(paymentOrder); + this.sendEvent(eventList); } catch (Exception e) { log.error("线下门店客户已签约事件处理异常", e); } @@ -172,4 +187,19 @@ public class ContractEventHandler extends BaseApplicationService { contract.setContractImageList(TypeConvertUtils.convert(mq.getContractImageList(), ContractImage.class)); return contract; } + + @Subscribe + private void handle(ContractCreatedEvent event) { + try { + Contract contract = contractRepository.load(event.getId()); + CustomizedServiceContractCreatedMQ mq = new CustomizedServiceContractCreatedMQ(); + mq.setContractId(contract.getId()); + mq.setDatingStoreCustomerId(contract.getFirstPartyId()); + ContractTerm contractTerm = contractQueryService.findTermBy(contract.getContractTermList(), ContractTermNameEnum.NUMBER_OF_SERVICES); + mq.setNumberOfServices(Integer.valueOf(contractTerm.getValue())); + amqpTemplate.convertAndSend(MqExchange.CUSTOMIZED_SERVICE_CONTRACT_CREATED, null, mq); + } catch (Exception e) { + log.error("合同已创建事件处理异常", e); + } + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/contract/ContractAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/contract/ContractAggregate.java index df204b7..2c17bd6 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/contract/ContractAggregate.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/contract/ContractAggregate.java @@ -2,6 +2,8 @@ package com.qniao.dam.domain.aggregate.contract; import com.qniao.dam.domain.aggregate.contract.entity.Contract; import com.qniao.dam.domain.aggregate.contract.repository.ContractRepository; +import com.qniao.dam.domian.aggregate.contract.event.ContractCreatedEvent; +import com.qniao.domain.BaseDomainEvent; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -17,8 +19,9 @@ public class ContractAggregate { @Resource private ContractRepository repository; - public void create(Contract entity) { + public BaseDomainEvent create(Contract entity) { repository.save(entity); + return new ContractCreatedEvent(entity.getId()); } public void edit(Contract entity) { diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java index 89ace76..f5eb4b7 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java @@ -35,4 +35,6 @@ public interface MqExchange { String MATCHMAKER_NOVICE_TASK_PROGRESS_FINISHED = "fanout.matchmakerNoviceTaskProgressFinished"; String DATING_STORE_CUSTOMER_SIGNED = "fanout.DatingStoreCustomerSigned"; + + String CUSTOMIZED_SERVICE_CONTRACT_CREATED = "fanout.CustomizedServiceContractCreated"; } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ContractRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ContractRepositoryImpl.java index ba851df..e41c8f6 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ContractRepositoryImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ContractRepositoryImpl.java @@ -1,8 +1,10 @@ package com.qniao.dam.infrastructure.persistent.repository.impl; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qniao.dam.domain.aggregate.contract.entity.Contract; import com.qniao.dam.domain.aggregate.contract.repository.ContractRepository; +import com.qniao.dam.domain.aggregate.contract.valobj.ContractTerm; import com.qniao.dam.infrastructure.persistent.dao.contract.ContractDao; import com.qniao.dam.infrastructure.persistent.dao.contract.ContractImageDao; import com.qniao.dam.infrastructure.persistent.dao.contract.ContractTermDao; @@ -29,7 +31,12 @@ public class ContractRepositoryImpl implements ContractRepository { @Override public Contract load(Long id) { - return dao.selectById(id); + Contract contract = dao.selectById(id); + if (Objects.nonNull(contract)) { + contract.setContractTermList(contractTermDao.selectList(new LambdaQueryWrapper() + .eq(ContractTerm::getContractId, id))); + } + return contract; } @Transactional(rollbackFor = Exception.class) diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/contract/ContractQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/contract/ContractQueryService.java index b9dc05f..7246d7f 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/contract/ContractQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/contract/ContractQueryService.java @@ -4,12 +4,18 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.qniao.dam.api.query.contract.user.request.UserPageCustomizedServiceContractQueryParams; import com.qniao.dam.api.query.contract.user.response.UserGetCustomizedServiceContractVo; import com.qniao.dam.api.query.contract.user.response.UserPageCustomizedServiceContractVo; +import com.qniao.dam.domain.aggregate.contract.valobj.ContractTerm; +import com.qniao.dam.domian.aggregate.contract.constant.ContractTermNameEnum; import com.qniao.domain.QnPage; import com.qniao.framework.utils.PageUtil; +import java.util.List; + public interface ContractQueryService { IPage pageCustomizedServiceContract(UserPageCustomizedServiceContractQueryParams queryParams, PageUtil pageUtil); UserGetCustomizedServiceContractVo detailByDatingStoreCustomerId(Long datingStoreCustomerId); + + ContractTerm findTermBy(List contractTermList, ContractTermNameEnum name); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/contract/impl/ContractQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/contract/impl/ContractQueryServiceImpl.java index 5ea8fb0..147981b 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/contract/impl/ContractQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/contract/impl/ContractQueryServiceImpl.java @@ -1,5 +1,6 @@ package com.qniao.dam.query.contract.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.qniao.dam.api.query.contract.user.request.UserPageCustomizedServiceContractQueryParams; @@ -10,6 +11,7 @@ import com.qniao.dam.api.query.contract.user.response.UserPageCustomizedServiceC 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.domian.aggregate.contract.constant.ContractTermNameEnum; import com.qniao.dam.infrastructure.persistent.dao.contract.ContractDao; import com.qniao.dam.infrastructure.persistent.dao.contract.ContractImageDao; import com.qniao.dam.infrastructure.persistent.dao.contract.ContractTermDao; @@ -66,6 +68,20 @@ public class ContractQueryServiceImpl implements ContractQueryService { return contractVo; } + @Override + public ContractTerm findTermBy(List contractTermList, ContractTermNameEnum name) { + ContractTerm contractTerm = null; + if (CollUtil.isNotEmpty(contractTermList)) { + for (ContractTerm term : contractTermList) { + if (term.getName().equals(name)) { + contractTerm = term; + break; + } + } + } + return contractTerm; + } + private Map> mapContractImageVo(List contractIdList) { List contractImageList = contractImageDao.selectList(new LambdaQueryWrapper() .in(ContractImage::getContractId, contractIdList));