Browse Source

合同

master
张彭杰 8 months ago
parent
commit
d4e08a80bc
17 changed files with 260 additions and 9 deletions
  1. 2
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractStatusEnum.java
  2. 4
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractTermNameEnum.java
  3. 4
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/order/constant/OrderBelongingEnum.java
  4. 3
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/paymentorder/constant/PaymentMethodEnum.java
  5. 1
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductMainCategoryEnum.java
  6. 2
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java
  7. 11
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/contract/entity/Contract.java
  8. 11
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/contract/valobj/ContractTerm.java
  9. 4
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/entity/PaymentOrder.java
  10. 20
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/valobj/PaymentOrderVoucherImage.java
  11. 5
      dating-agency-mall-server/pom.xml
  12. 175
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/contract/ContractEventHandler.java
  13. 4
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/PaymentOrderAggregate.java
  14. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java
  15. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java
  16. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/PaymentOrderVoucherImageDao.java
  17. 12
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/PaymentOrderRepositoryImpl.java

2
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractStatusEnum.java

@ -22,7 +22,7 @@ public enum ContractStatusEnum {
*/
OVER(3, "已结束"),
/**
* 已废弃
* 已废弃wa
*/
OBSOLETED(4, "已废弃");

4
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractTermNameEnum.java

@ -10,9 +10,7 @@ import lombok.Getter;
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum ContractTermNameEnum {
PIC(1, "图片"),
FILE(2, "文件");
NUMBER_OF_SERVICES(1, "服务次数");
@EnumValue
@JsonValue

4
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/order/constant/OrderBelongingEnum.java

@ -14,7 +14,9 @@ public enum OrderBelongingEnum {
MATCHMAKER(2, "红娘"),
MATCHMAKING_CORNER(3, "相亲角");
MATCHMAKING_CORNER(3, "相亲角"),
CUSTOMIZED_SERVICE(4, "定制服务");
@EnumValue
@JsonValue

3
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/paymentorder/constant/PaymentMethodEnum.java

@ -12,8 +12,9 @@ public enum PaymentMethodEnum {
WECHAT_PAY(1, "微信付款JSAPI"),
WECHAT_PAY_H5(2, "微信付款H5");
WECHAT_PAY_H5(2, "微信付款H5"),
OFFLINE(3, "线下付款");
@EnumValue
@JsonValue

1
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductMainCategoryEnum.java

@ -21,6 +21,7 @@ public enum ProductMainCategoryEnum {
VIP(6, "会员"),
MARRIAGE_BOUNTY(7, "悬赏招亲"),
SITE_ACTIVITY(8, "线下活动"),
CUSTOMIZED_SERVICE(9, "定制服务"),
MATCHMAKER(888, "红娘合伙人"),

2
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java

@ -42,6 +42,8 @@ public enum ProductSubCategoryEnum {
MARRIAGE_BOUNTY_WOMAN_FEE(1002, "线下活动女性费用"),
CUSTOMIZED_SERVICE(1101, "定制服务"),
MATCHMAKER_FRANCHISE_FEE(88801, "高级红娘"),
MATCHMAKER_ONLINE_FEE(88802, "线上红娘"),

11
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/contract/entity/Contract.java

@ -10,6 +10,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import com.qniao.domain.Entity;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@ -47,14 +49,17 @@ public class Contract extends Entity<Contract> {
@ApiModelProperty("乙方身份编号 身份证、统一信用代码")
private String secondPartyIdentityNo;
@ApiModelProperty("合同金额")
private BigDecimal amount;
@ApiModelProperty("签订日期")
private LocalDateTime signDate;
private LocalDate signDate;
@ApiModelProperty("开始日期")
private LocalDateTime startDate;
private LocalDate startDate;
@ApiModelProperty("开始日期")
private LocalDateTime endDate;
private LocalDate endDate;
@ApiModelProperty("状态 已生效、已结束、已终止")
private ContractStatusEnum status;

11
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/contract/valobj/ContractTerm.java

@ -28,4 +28,15 @@ public class ContractTerm extends ValueObject<ContractTerm> {
@ApiModelProperty("数值")
private String value;
public static ContractTerm build(ContractTermNameEnum name,
String displayName,
ContractTermUnitEnum type,
String value) {
ContractTerm entity = new ContractTerm();
entity.setName(name);
entity.setDisplayName(displayName);
entity.setType(type);
entity.setValue(value);
return entity;
}
}

4
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/entity/PaymentOrder.java

@ -1,6 +1,7 @@
package com.qniao.dam.domain.aggregate.paymentorder.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qniao.dam.domain.aggregate.paymentorder.valobj.PaymentOrderVoucherImage;
import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentMethodEnum;
import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentOrderStatusEnum;
import com.qniao.domain.Entity;
@ -10,6 +11,7 @@ import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
@ -36,4 +38,6 @@ public class PaymentOrder extends Entity<PaymentOrder> {
@ApiModelProperty("状态")
private PaymentOrderStatusEnum status;
private transient List<PaymentOrderVoucherImage> voucherImageList;
}

20
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/valobj/PaymentOrderVoucherImage.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;
}

5
dating-agency-mall-server/pom.xml

@ -91,6 +91,11 @@
<artifactId>dating-agency-uec-event</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.qniao</groupId>
<artifactId>dating-clue-service-event</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.qniao</groupId>
<artifactId>dating-agency-service-entity</artifactId>

175
dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/contract/ContractEventHandler.java

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

4
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/PaymentOrderAggregate.java

@ -37,4 +37,8 @@ public class PaymentOrderAggregate {
paymentOrderRepository.save(paymentOrder);
return TypeConvertUtils.convert(paymentOrder, PaymentOrderPaidEvent.class);
}
public void save(PaymentOrder paymentOrder) {
paymentOrderRepository.save(paymentOrder);
}
}

2
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java

@ -33,4 +33,6 @@ public interface MqExchange {
String MATCHMAKER_INVITED = "fanout.MatchmakerInvited";
String MATCHMAKER_NOVICE_TASK_PROGRESS_FINISHED = "fanout.matchmakerNoviceTaskProgressFinished";
String DATING_STORE_CUSTOMER_SIGNED = "fanout.DatingStoreCustomerSigned";
}

2
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java

@ -25,4 +25,6 @@ public interface MqQueue {
String OPERATION_CENTER_CREATED = MqExchange.OPERATION_CENTER_CREATED + serviceName;
String MATCHMAKER_NOVICE_TASK_PROGRESS_FINISHED = MqExchange.MATCHMAKER_NOVICE_TASK_PROGRESS_FINISHED + serviceName;
String DATING_STORE_CUSTOMER_SIGNED = MqExchange.DATING_STORE_CUSTOMER_SIGNED + serviceName;
}

7
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/PaymentOrderVoucherImageDao.java

@ -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> {
}

12
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/PaymentOrderRepositoryImpl.java

@ -1,9 +1,12 @@
package com.qniao.dam.infrastructure.persistent.repository.impl;
import cn.hutool.core.collection.CollUtil;
import com.qniao.dam.domain.aggregate.paymentorder.entity.PaymentOrder;
import com.qniao.dam.domain.aggregate.paymentorder.repository.PaymentOrderRepository;
import com.qniao.dam.infrastructure.persistent.dao.domain.PaymentOrderDao;
import com.qniao.dam.infrastructure.persistent.dao.domain.PaymentOrderVoucherImageDao;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Objects;
@ -13,12 +16,15 @@ public class PaymentOrderRepositoryImpl implements PaymentOrderRepository {
@Resource
private PaymentOrderDao paymentOrderDao;
@Resource
private PaymentOrderVoucherImageDao paymentOrderVoucherImageDao;
@Override
public PaymentOrder load(Long id) {
return paymentOrderDao.selectById(id);
}
@Transactional(rollbackFor = Exception.class)
@Override
public Long save(PaymentOrder entity) {
if (Objects.isNull(entity.getId()) || Objects.isNull(paymentOrderDao.selectById(entity.getId()))) {
@ -26,6 +32,12 @@ public class PaymentOrderRepositoryImpl implements PaymentOrderRepository {
} else {
paymentOrderDao.updateById(entity);
}
if (CollUtil.isNotEmpty(entity.getVoucherImageList())) {
entity.getVoucherImageList().forEach(voucherImage -> {
voucherImage.setPaymentOrderId(entity.getId());
paymentOrderVoucherImageDao.insert(voucherImage);
});
}
return entity.getId();
}
}
Loading…
Cancel
Save