Browse Source

基础配置

master
张彭杰 1 year ago
parent
commit
1f1fd45b66
12 changed files with 222 additions and 12 deletions
  1. 38
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/externalorder/constant/ExternalOrderRelStatus.java
  2. 13
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/externalorder/entity/ExternalOrderRel.java
  3. 74
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/externalorder/ExternalOrderEventHandler.java
  4. 10
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/order/OrderEventHandler.java
  5. 18
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/externalorder/ExternalOrderRelAggregate.java
  6. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/externalorder/repository/ExternalOrderRelRepository.java
  7. 12
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitSiteActivityOrderDomainService.java
  8. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java
  9. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java
  10. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ExternalOrderRelDao.java
  11. 31
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ExternalOrderRelRepositoryImpl.java
  12. 20
      dating-agency-mall-server/src/main/resources/mapper/externalorder/ExternalOrderRelMapper.xml

38
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/externalorder/constant/ExternalOrderRelStatus.java

@ -0,0 +1,38 @@
package com.qniao.dam.domian.aggregate.externalorder.constant;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum ExternalOrderRelStatus {
INIT(1, "初始化"),
COMPLETED(2, "已完成"),
CANCELED(3, "已取消");
@EnumValue
@JsonValue
private final Integer value;
private final String desc;
ExternalOrderRelStatus(Integer value, String desc) {
this.value = value;
this.desc = desc;
}
@JsonCreator
public static ExternalOrderRelStatus get(Object code) {
for (ExternalOrderRelStatus e : ExternalOrderRelStatus.values()) {
if (e.getValue().equals(code)) {
return e;
}
}
return null;
}
}

dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/externalorder/valueobj/ExternalOrderRel.java → dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/externalorder/entity/ExternalOrderRel.java

@ -1,8 +1,9 @@
package com.qniao.dam.domain.aggregate.externalorder.valueobj;
package com.qniao.dam.domain.aggregate.externalorder.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qniao.dam.domian.aggregate.externalorder.constant.ExternalOrderRelStatus;
import com.qniao.dam.domian.aggregate.externalorder.constant.ExternalOrderTypeEnum;
import com.qniao.domain.ValueObject;
import com.qniao.domain.Entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -10,7 +11,7 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("da_external_order_rel")
public class ExternalOrderRel extends ValueObject<ExternalOrderRel> {
public class ExternalOrderRel extends Entity<ExternalOrderRel> {
@ApiModelProperty("外部标识")
private Long externalId;
@ -21,11 +22,15 @@ public class ExternalOrderRel extends ValueObject<ExternalOrderRel> {
@ApiModelProperty("类型")
private ExternalOrderTypeEnum type;
public static ExternalOrderRel build(Long externalId, Long orderId, ExternalOrderTypeEnum type) {
@ApiModelProperty("状态")
private ExternalOrderRelStatus status;
public static ExternalOrderRel build(Long externalId, Long orderId, ExternalOrderTypeEnum type, ExternalOrderRelStatus status) {
ExternalOrderRel rel = new ExternalOrderRel();
rel.setExternalId(externalId);
rel.setOrderId(orderId);
rel.setType(type);
rel.setStatus(status);
return rel;
}
}

74
dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/externalorder/ExternalOrderEventHandler.java

@ -0,0 +1,74 @@
package com.qniao.dam.application.handler.externalorder;
import com.qniao.dam.application.service.paymentorderrefund.PaymentOrderRefundApplicationService;
import com.qniao.dam.domain.aggregate.externalorder.entity.ExternalOrderRel;
import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelOrder;
import com.qniao.dam.domain.aggregate.paymentorder.entity.PaymentOrder;
import com.qniao.dam.domain.aggregate.paymentorderrefund.entity.PaymentOrderRefund;
import com.qniao.dam.domian.aggregate.externalorder.constant.ExternalOrderTypeEnum;
import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentOrderStatusEnum;
import com.qniao.dam.infrastructure.constant.MqExchange;
import com.qniao.dam.infrastructure.constant.MqQueue;
import com.qniao.dam.infrastructure.persistent.dao.domain.ExternalOrderRelDao;
import com.qniao.dam.query.paymentchannelorder.PaymentChannelOrderQueryService;
import com.qniao.dam.query.paymentorder.PaymentOrderQueryService;
import com.qniao.das.domian.aggregate.siteactivity.event.SiteActivityCancelEvent;
import com.qniao.domain.BaseApplicationService;
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.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
@Component
@Slf4j
public class ExternalOrderEventHandler extends BaseApplicationService {
@Resource
private ExternalOrderRelDao externalOrderRelDao;
@Resource
private PaymentOrderQueryService paymentOrderQueryService;
@Resource
private PaymentChannelOrderQueryService paymentChannelOrderQueryService;
@Resource
private PaymentOrderRefundApplicationService paymentOrderRefundApplicationService;
@RabbitListener(bindings = @QueueBinding(value = @Queue(MqQueue.CANCEL_SITE_ACTIVITY),
exchange = @Exchange(value = MqExchange.CANCEL_SITE_ACTIVITY,
type = ExchangeTypes.FANOUT)))
public void handleConfirmMeeting(SiteActivityCancelEvent event) {
try {
log.error("接收到线下活动订单取消事件:{}", event);
ExternalOrderRel externalOrderRel = externalOrderRelDao.queryCompletedBy(event.getExternalId(), event.getUserId(), ExternalOrderTypeEnum.SITE_ACTIVITY);
if (Objects.nonNull(externalOrderRel)) {
List<PaymentOrderRefund> paymentOrderRefundList = new ArrayList<>();
List<PaymentOrder> paymentOrderList = paymentOrderQueryService.listByOrderId(Collections.singletonList(externalOrderRel.getOrderId()), PaymentOrderStatusEnum.PAID);
for (PaymentOrder paymentOrder : paymentOrderList) {
PaymentOrderRefund paymentOrderRefund = new PaymentOrderRefund();
PaymentChannelOrder paymentChannelOrder = paymentChannelOrderQueryService.queryByTxnOrderId(paymentOrder.getId());
paymentOrderRefund.setTradeOrderId(paymentOrder.getOrderId());
paymentOrderRefund.setPaymentOrderId(paymentOrder.getId());
paymentOrderRefund.setPaymentChannelOrder(paymentChannelOrder.getId());
paymentOrderRefund.setPaymentMethod(paymentOrder.getPaymentMethod());
paymentOrderRefund.setTransactionId(paymentChannelOrder.getExtOrderNo());
paymentOrderRefund.setOrderAmount(paymentChannelOrder.getAmount());
paymentOrderRefund.setRefundAmount(paymentChannelOrder.getAmount());
paymentOrderRefundList.add(paymentOrderRefund);
}
//发起微信退款
paymentOrderRefundApplicationService.refund(paymentOrderRefundList);
}
} catch (Exception e) {
log.error("接收到线下活动订单取消事件处理异常", e);
}
}
}

10
dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/order/OrderEventHandler.java

@ -5,7 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.google.common.eventbus.Subscribe;
import com.qniao.dam.application.service.marriagebounty.MarriageBountyOrderApplicationService;
import com.qniao.dam.application.service.right.RightApplicationService;
import com.qniao.dam.domain.aggregate.externalorder.valueobj.ExternalOrderRel;
import com.qniao.dam.domain.aggregate.externalorder.ExternalOrderRelAggregate;
import com.qniao.dam.domain.aggregate.externalorder.entity.ExternalOrderRel;
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;
@ -16,6 +17,7 @@ import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec;
import com.qniao.dam.domain.aggregate.productspec.repository.ProductSpecRepository;
import com.qniao.dam.domain.aggregate.right.RightAggregate;
import com.qniao.dam.domain.aggregate.right.entity.Right;
import com.qniao.dam.domian.aggregate.externalorder.constant.ExternalOrderRelStatus;
import com.qniao.dam.domian.aggregate.externalorder.constant.ExternalOrderTypeEnum;
import com.qniao.dam.domian.aggregate.order.constant.OrderBelongingEnum;
import com.qniao.dam.domian.aggregate.order.constant.OrderTypeEnum;
@ -63,6 +65,8 @@ public class OrderEventHandler extends BaseApplicationService {
@Resource
private ExternalOrderRelDao externalOrderRelDao;
@Resource
private ExternalOrderRelAggregate externalOrderRelAggregate;
@Resource
private MarriageInformationDao marriageInformationDao;
@Resource
private ProductQueryService productQueryService;
@ -109,6 +113,8 @@ public class OrderEventHandler extends BaseApplicationService {
ExternalOrderRel externalOrderRel = externalOrderRelDao.selectOne(new LambdaQueryWrapper<ExternalOrderRel>()
.eq(ExternalOrderRel::getOrderId, order.getId()));
if (Objects.nonNull(externalOrderRel)) {
externalOrderRel.setStatus(ExternalOrderRelStatus.COMPLETED);
externalOrderRelAggregate.save(externalOrderRel);
if (ExternalOrderTypeEnum.VIP_PRODUCT.equals(externalOrderRel.getType())) {
//购买vip套餐赠送下线参与机会
giftSiteActivityOrder(externalOrderRel.getExternalId(), order.getUserId(), order.getMiId());
@ -135,7 +141,7 @@ public class OrderEventHandler extends BaseApplicationService {
//设置订单号
order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode());
orderAggregate.complete(order);
ExternalOrderRel externalOrderRel = ExternalOrderRel.build(externalId, order.getId(), ExternalOrderTypeEnum.SITE_ACTIVITY);
ExternalOrderRel externalOrderRel = ExternalOrderRel.build(externalId, order.getId(), ExternalOrderTypeEnum.SITE_ACTIVITY, ExternalOrderRelStatus.COMPLETED);
externalOrderRelDao.insert(externalOrderRel);
sendCompletedMQ(externalOrderRel, order);
}

18
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/externalorder/ExternalOrderRelAggregate.java

@ -0,0 +1,18 @@
package com.qniao.dam.domain.aggregate.externalorder;
import com.qniao.dam.domain.aggregate.externalorder.entity.ExternalOrderRel;
import com.qniao.dam.domain.aggregate.externalorder.repository.ExternalOrderRelRepository;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class ExternalOrderRelAggregate {
@Resource
private ExternalOrderRelRepository externalOrderRelRepository;
public void save(ExternalOrderRel externalOrderRel) {
externalOrderRelRepository.save(externalOrderRel);
}
}

7
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/externalorder/repository/ExternalOrderRelRepository.java

@ -0,0 +1,7 @@
package com.qniao.dam.domain.aggregate.externalorder.repository;
import com.qniao.dam.domain.aggregate.externalorder.entity.ExternalOrderRel;
import com.qniao.domain.Repository;
public interface ExternalOrderRelRepository extends Repository<ExternalOrderRel, Long> {
}

12
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitSiteActivityOrderDomainService.java

@ -1,12 +1,13 @@
package com.qniao.dam.domain.service.order;
import com.qniao.dam.domain.aggregate.externalorder.valueobj.ExternalOrderRel;
import com.qniao.dam.domain.aggregate.externalorder.ExternalOrderRelAggregate;
import com.qniao.dam.domain.aggregate.externalorder.entity.ExternalOrderRel;
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.dam.domian.aggregate.externalorder.constant.ExternalOrderRelStatus;
import com.qniao.dam.domian.aggregate.externalorder.constant.ExternalOrderTypeEnum;
import com.qniao.dam.infrastructure.persistent.dao.domain.ExternalOrderRelDao;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -20,14 +21,15 @@ public class SubmitSiteActivityOrderDomainService {
@Resource
private PaymentOrderAggregate paymentOrderAggregate;
@Resource
private ExternalOrderRelDao externalOrderRelDao;
private ExternalOrderRelAggregate externalOrderRelAggregate;
@Transactional(rollbackFor = Exception.class)
public void handle(Order order, PaymentOrder paymentOrder, Long siteActivityId, Boolean openVip) {
orderAggregate.submit(order);
paymentOrder.setOrderId(order.getId());
paymentOrderAggregate.create(paymentOrder);
ExternalOrderRel externalOrderRel = ExternalOrderRel.build(siteActivityId, order.getId(), openVip ? ExternalOrderTypeEnum.VIP_PRODUCT : ExternalOrderTypeEnum.SITE_ACTIVITY);
externalOrderRelDao.insert(externalOrderRel);
ExternalOrderRel externalOrderRel = ExternalOrderRel.build(siteActivityId, order.getId(),
openVip ? ExternalOrderTypeEnum.VIP_PRODUCT : ExternalOrderTypeEnum.SITE_ACTIVITY, ExternalOrderRelStatus.INIT);
externalOrderRelAggregate.save(externalOrderRel);
}
}

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

@ -14,4 +14,6 @@ public interface MqExchange {
String EXTERNAL_ORDER_COMPLETED = "fanout.externalOrderCompleted";
String CANCEL_SITE_ACTIVITY = "fanout.cancelSiteActivity";
}

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

@ -14,4 +14,6 @@ public interface MqQueue {
String SITE_ACTIVITY_CREATED = MqExchange.SITE_ACTIVITY_CREATED + serviceName;
String CANCEL_SITE_ACTIVITY = MqExchange.CANCEL_SITE_ACTIVITY + serviceName;
}

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

@ -1,7 +1,12 @@
package com.qniao.dam.infrastructure.persistent.dao.domain;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qniao.dam.domain.aggregate.externalorder.valueobj.ExternalOrderRel;
import com.qniao.dam.domain.aggregate.externalorder.entity.ExternalOrderRel;
import com.qniao.dam.domian.aggregate.externalorder.constant.ExternalOrderTypeEnum;
import org.apache.ibatis.annotations.Param;
public interface ExternalOrderRelDao extends BaseMapper<ExternalOrderRel> {
ExternalOrderRel queryCompletedBy(@Param("externalId") Long externalId,
@Param("userId") Long userId,
@Param("type") ExternalOrderTypeEnum type);
}

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

@ -0,0 +1,31 @@
package com.qniao.dam.infrastructure.persistent.repository.impl;
import com.qniao.dam.domain.aggregate.externalorder.entity.ExternalOrderRel;
import com.qniao.dam.domain.aggregate.externalorder.repository.ExternalOrderRelRepository;
import com.qniao.dam.infrastructure.persistent.dao.domain.ExternalOrderRelDao;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Objects;
@Service
public class ExternalOrderRelRepositoryImpl implements ExternalOrderRelRepository {
@Resource
private ExternalOrderRelDao externalOrderRelDao;
@Override
public ExternalOrderRel load(Long id) {
return externalOrderRelDao.selectById(id);
}
@Override
public Long save(ExternalOrderRel entity) {
if (Objects.isNull(entity.getId()) || Objects.isNull(externalOrderRelDao.selectById(entity.getId()))) {
externalOrderRelDao.insert(entity);
} else {
externalOrderRelDao.updateById(entity);
}
return entity.getId();
}
}

20
dating-agency-mall-server/src/main/resources/mapper/externalorder/ExternalOrderRelMapper.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qniao.dam.infrastructure.persistent.dao.domain.ExternalOrderRelDao">
<select id="queryCompletedBy"
resultType="com.qniao.dam.domain.aggregate.externalorder.entity.ExternalOrderRel">
select deor.id,
deor.external_id,
deor.order_id,
deor.type
from da_external_order_rel as deor
INNER JOIN da_order as dao on deor.order_id = dao.id and dao.`status` = 5 and dao.user_id = #{userId}
where deor.is_delete = 0
and deor.status = 2
and deor.external_id = #{externalId}
and deor.type = #{type}
limit 1
</select>
</mapper>
Loading…
Cancel
Save