Browse Source

合同列表

master
张彭杰 8 months ago
parent
commit
156cca656d
8 changed files with 102 additions and 3 deletions
  1. 15
      dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/contract/event/ContractCreatedEvent.java
  2. 20
      dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/contract/event/CustomizedServiceContractCreatedMQ.java
  3. 32
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/contract/ContractEventHandler.java
  4. 5
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/contract/ContractAggregate.java
  5. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java
  6. 9
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ContractRepositoryImpl.java
  7. 6
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/contract/ContractQueryService.java
  8. 16
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/contract/impl/ContractQueryServiceImpl.java

15
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;
}

20
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;
}

32
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<BaseDomainEvent> 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);
}
}
}

5
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) {

2
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";
}

9
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<ContractTerm>()
.eq(ContractTerm::getContractId, id)));
}
return contract;
}
@Transactional(rollbackFor = Exception.class)

6
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<UserPageCustomizedServiceContractVo> pageCustomizedServiceContract(UserPageCustomizedServiceContractQueryParams queryParams, PageUtil pageUtil);
UserGetCustomizedServiceContractVo detailByDatingStoreCustomerId(Long datingStoreCustomerId);
ContractTerm findTermBy(List<ContractTerm> contractTermList, ContractTermNameEnum name);
}

16
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<ContractTerm> 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<Long, List<ContractImageVo>> mapContractImageVo(List<Long> contractIdList) {
List<ContractImage> contractImageList = contractImageDao.selectList(new LambdaQueryWrapper<ContractImage>()
.in(ContractImage::getContractId, contractIdList));

Loading…
Cancel
Save