23 changed files with 463 additions and 14 deletions
Split View
Diff Options
-
38dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/marriagebount/constant/MarriageBountyOrderPaymentStatusEnum.java
-
41dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/paymentorderrefund/constant/PaymentOrderRefundStatusEnum.java
-
4dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/entity/MarriageBountyOrder.java
-
10dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentorderrefund/entity/PaymentOrderRefund.java
-
48dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/paymentorderrefund/event/PaymentOrderRefundRefundedEvent.java
-
51dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/paymentorderrefund/PaymentOrderRefundEventHandler.java
-
21dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/marriagebounty/MarriageBountyOrderApplicationService.java
-
5dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/notify/NotifyApplicationService.java
-
3dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java
-
3dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/IChannelPayService.java
-
51dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java
-
32dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentorderrefund/PaymentOrderRefundApplicationService.java
-
12dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/MarriageBountyOrderAggregate.java
-
22dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/paymentorderrefund/PaymentOrderRefundAggregate.java
-
7dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/paymentorderrefund/impl/PaymentOrderRefundRepository.java
-
7dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/PaymentOrderRefundDao.java
-
31dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/PaymentOrderRefundRepositoryImpl.java
-
5dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriagebounty/MarriageBountyOrderQueryService.java
-
25dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriagebounty/impl/MarriageBountyOrderQueryServiceImpl.java
-
3dating-agency-mall-server/src/main/java/com/qniao/dam/query/paymentchannelorder/PaymentChannelOrderQueryService.java
-
15dating-agency-mall-server/src/main/java/com/qniao/dam/query/paymentchannelorder/impl/PaymentChannelOrderQueryServiceImpl.java
-
7dating-agency-mall-server/src/main/java/com/qniao/dam/query/paymentorderrefund/PaymentOrderRefundQueryService.java
-
36dating-agency-mall-server/src/main/java/com/qniao/dam/query/paymentorderrefund/impl/PaymentOrderRefundQueryServiceImpl.java
@ -0,0 +1,38 @@ |
|||
package com.qniao.dam.domian.aggregate.marriagebount.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 MarriageBountyOrderPaymentStatusEnum { |
|||
|
|||
PAID(1, "已支付"), |
|||
|
|||
BEING_REFUNDED(2, "退款中"), |
|||
|
|||
REFUNDED(3, "已退款"); |
|||
|
|||
@EnumValue |
|||
@JsonValue |
|||
private final Integer value; |
|||
private final String desc; |
|||
|
|||
MarriageBountyOrderPaymentStatusEnum(Integer value, String desc) { |
|||
this.value = value; |
|||
this.desc = desc; |
|||
} |
|||
|
|||
@JsonCreator |
|||
public static MarriageBountyOrderPaymentStatusEnum get(Object code) { |
|||
for (MarriageBountyOrderPaymentStatusEnum e : MarriageBountyOrderPaymentStatusEnum.values()) { |
|||
if (e.getValue().equals(code)) { |
|||
return e; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
} |
|||
@ -0,0 +1,41 @@ |
|||
package com.qniao.dam.domian.aggregate.paymentorderrefund.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 PaymentOrderRefundStatusEnum { |
|||
|
|||
SUCCESS(1, "退款成功"), |
|||
|
|||
CLOSED(2, "退款关闭"), |
|||
|
|||
PROCESSING(3, "退款处理中"), |
|||
|
|||
ABNORMAL(4, "退款异常"); |
|||
|
|||
@EnumValue |
|||
@JsonValue |
|||
private final Integer value; |
|||
private final String desc; |
|||
|
|||
PaymentOrderRefundStatusEnum(Integer value, String desc) { |
|||
this.value = value; |
|||
this.desc = desc; |
|||
} |
|||
|
|||
@JsonCreator |
|||
public static PaymentOrderRefundStatusEnum get(Object code) { |
|||
for (PaymentOrderRefundStatusEnum e : PaymentOrderRefundStatusEnum.values()) { |
|||
if (e.getValue().equals(code)) { |
|||
return e; |
|||
} |
|||
} |
|||
return null; |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,48 @@ |
|||
package com.qniao.dam.domian.aggregate.paymentorderrefund.event; |
|||
|
|||
import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentMethodEnum; |
|||
import com.qniao.dam.domian.aggregate.paymentorderrefund.constant.PaymentOrderRefundStatusEnum; |
|||
import com.qniao.domain.BaseDomainEvent; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.math.BigDecimal; |
|||
import java.time.LocalDateTime; |
|||
|
|||
@Data |
|||
@AllArgsConstructor |
|||
@NoArgsConstructor |
|||
public class PaymentOrderRefundRefundedEvent extends BaseDomainEvent { |
|||
|
|||
@ApiModelProperty("唯一标识") |
|||
private Long id; |
|||
|
|||
@ApiModelProperty("交易订单id") |
|||
private Long tradeOrderId; |
|||
|
|||
@ApiModelProperty("支付单号") |
|||
private Long paymentOrderId; |
|||
|
|||
@ApiModelProperty("付款方式") |
|||
private PaymentMethodEnum paymentMethod; |
|||
|
|||
@ApiModelProperty("订单金额") |
|||
private BigDecimal orderAmount; |
|||
|
|||
@ApiModelProperty("退款金额") |
|||
private BigDecimal refundFee; |
|||
|
|||
@ApiModelProperty("微信支付订单号") |
|||
private String transactionId; |
|||
|
|||
@ApiModelProperty("微信退款单号") |
|||
private String refundId; |
|||
|
|||
@ApiModelProperty("退款成功时间") |
|||
private LocalDateTime refundTime; |
|||
|
|||
@ApiModelProperty("状态") |
|||
private PaymentOrderRefundStatusEnum status; |
|||
} |
|||
@ -0,0 +1,51 @@ |
|||
package com.qniao.dam.application.handler.paymentorderrefund; |
|||
|
|||
import com.qniao.dam.domain.aggregate.marriagebounty.MarriageBountyOrderAggregate; |
|||
import com.qniao.dam.domain.aggregate.marriagebounty.entity.MarriageBountyOrder; |
|||
import com.qniao.dam.domain.aggregate.marriagebounty.valueobj.MarriageBountyOrderRel; |
|||
import com.qniao.dam.domian.aggregate.paymentorderrefund.constant.PaymentOrderRefundStatusEnum; |
|||
import com.qniao.dam.domian.aggregate.paymentorderrefund.event.PaymentOrderRefundRefundedEvent; |
|||
import com.qniao.dam.query.marriagebounty.MarriageBountyOrderQueryService; |
|||
import com.qniao.dam.query.paymentorderrefund.PaymentOrderRefundQueryService; |
|||
import com.qniao.domain.BaseApplicationService; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.util.List; |
|||
import java.util.Objects; |
|||
import java.util.stream.Collectors; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
public class PaymentOrderRefundEventHandler extends BaseApplicationService { |
|||
|
|||
@Resource |
|||
private MarriageBountyOrderQueryService marriageBountyOrderQueryService; |
|||
@Resource |
|||
private PaymentOrderRefundQueryService paymentOrderRefundQueryService; |
|||
@Resource |
|||
private MarriageBountyOrderAggregate marriageBountyOrderAggregate; |
|||
|
|||
/** |
|||
* 付款单已退款事件 |
|||
*/ |
|||
private void handle(PaymentOrderRefundRefundedEvent event) { |
|||
try { |
|||
if (PaymentOrderRefundStatusEnum.SUCCESS.equals(event.getStatus())) { |
|||
MarriageBountyOrder marriageBountyOrder = marriageBountyOrderQueryService.queryByOrderRel(event.getTradeOrderId()); |
|||
if (Objects.nonNull(marriageBountyOrder)) { |
|||
List<Long> tradeOrderIdList = marriageBountyOrder.getOrderRelList().stream().map(MarriageBountyOrderRel::getOrderId).collect(Collectors.toList()); |
|||
if (paymentOrderRefundQueryService.checkRefunded(tradeOrderIdList)) { |
|||
MarriageBountyOrder refundMarriageBountyOrder = new MarriageBountyOrder(); |
|||
refundMarriageBountyOrder.setId(marriageBountyOrder.getId()); |
|||
marriageBountyOrderAggregate.refund(refundMarriageBountyOrder); |
|||
//todo 主动发起退款 |
|||
} |
|||
} |
|||
} |
|||
} catch (Exception e) { |
|||
log.error("悬赏订单已退款事件处理异常", e); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,32 @@ |
|||
package com.qniao.dam.application.service.paymentorderrefund; |
|||
|
|||
import cn.hutool.core.collection.CollUtil; |
|||
import com.qniao.dam.application.service.paymentchannelorder.processor.IChannelPayService; |
|||
import com.qniao.dam.domain.aggregate.paymentorderrefund.PaymentOrderRefundAggregate; |
|||
import com.qniao.dam.domain.aggregate.paymentorderrefund.entity.PaymentOrderRefund; |
|||
import com.qniao.domain.BaseApplicationService; |
|||
import com.qniao.domain.BaseDomainEvent; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
@Service |
|||
public class PaymentOrderRefundApplicationService extends BaseApplicationService { |
|||
|
|||
@Resource |
|||
private PaymentOrderRefundAggregate paymentOrderRefundAggregate; |
|||
|
|||
public void refund(List<PaymentOrderRefund> paymentOrderRefundList) { |
|||
List<BaseDomainEvent> eventList = new ArrayList<>(); |
|||
if (CollUtil.isNotEmpty(paymentOrderRefundList)) { |
|||
for (PaymentOrderRefund paymentOrderRefund : paymentOrderRefundList) { |
|||
IChannelPayService channelPayService = IChannelPayService.getService(paymentOrderRefund.getPaymentMethod()); |
|||
channelPayService.refund(paymentOrderRefund); |
|||
eventList.add(paymentOrderRefundAggregate.refund(paymentOrderRefund)); |
|||
} |
|||
} |
|||
this.sendEvent(eventList); |
|||
} |
|||
} |
|||
@ -0,0 +1,22 @@ |
|||
package com.qniao.dam.domain.aggregate.paymentorderrefund; |
|||
|
|||
import com.qniao.dam.domain.aggregate.paymentorderrefund.entity.PaymentOrderRefund; |
|||
import com.qniao.dam.domain.aggregate.paymentorderrefund.impl.PaymentOrderRefundRepository; |
|||
import com.qniao.dam.domian.aggregate.paymentorderrefund.event.PaymentOrderRefundRefundedEvent; |
|||
import com.qniao.domain.BaseDomainEvent; |
|||
import com.qniao.framework.utils.TypeConvertUtils; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import javax.annotation.Resource; |
|||
|
|||
@Service |
|||
public class PaymentOrderRefundAggregate { |
|||
|
|||
@Resource |
|||
private PaymentOrderRefundRepository paymentOrderRefundRepository; |
|||
|
|||
public BaseDomainEvent refund(PaymentOrderRefund paymentOrderRefund) { |
|||
paymentOrderRefundRepository.save(paymentOrderRefund); |
|||
return TypeConvertUtils.convert(paymentOrderRefund, PaymentOrderRefundRefundedEvent.class); |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
package com.qniao.dam.domain.aggregate.paymentorderrefund.impl; |
|||
|
|||
import com.qniao.dam.domain.aggregate.paymentorderrefund.entity.PaymentOrderRefund; |
|||
import com.qniao.domain.Repository; |
|||
|
|||
public interface PaymentOrderRefundRepository extends Repository<PaymentOrderRefund,Long> { |
|||
} |
|||
@ -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.paymentorderrefund.entity.PaymentOrderRefund; |
|||
|
|||
public interface PaymentOrderRefundDao extends BaseMapper<PaymentOrderRefund> { |
|||
} |
|||
@ -0,0 +1,31 @@ |
|||
package com.qniao.dam.infrastructure.persistent.repository.impl; |
|||
|
|||
import com.qniao.dam.domain.aggregate.paymentorderrefund.entity.PaymentOrderRefund; |
|||
import com.qniao.dam.domain.aggregate.paymentorderrefund.impl.PaymentOrderRefundRepository; |
|||
import com.qniao.dam.infrastructure.persistent.dao.domain.PaymentOrderRefundDao; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.util.Objects; |
|||
|
|||
@Service |
|||
public class PaymentOrderRefundRepositoryImpl implements PaymentOrderRefundRepository { |
|||
|
|||
@Resource |
|||
private PaymentOrderRefundDao paymentOrderRefundDao; |
|||
|
|||
@Override |
|||
public PaymentOrderRefund load(Long id) { |
|||
return paymentOrderRefundDao.selectById(id); |
|||
} |
|||
|
|||
@Override |
|||
public Long save(PaymentOrderRefund entity) { |
|||
if (Objects.isNull(entity.getId()) || Objects.isNull(paymentOrderRefundDao.selectById(entity.getId()))) { |
|||
paymentOrderRefundDao.insert(entity); |
|||
} else { |
|||
paymentOrderRefundDao.updateById(entity); |
|||
} |
|||
return entity.getId(); |
|||
} |
|||
} |
|||
@ -1,4 +1,7 @@ |
|||
package com.qniao.dam.query.paymentchannelorder; |
|||
|
|||
import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelOrder; |
|||
|
|||
public interface PaymentChannelOrderQueryService { |
|||
PaymentChannelOrder queryByTxnOrderId(Long txnOrderId); |
|||
} |
|||
@ -1,8 +1,23 @@ |
|||
package com.qniao.dam.query.paymentchannelorder.impl; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|||
import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelOrder; |
|||
import com.qniao.dam.infrastructure.persistent.dao.domain.PaymentChannelOrderDao; |
|||
import com.qniao.dam.query.paymentchannelorder.PaymentChannelOrderQueryService; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import javax.annotation.Resource; |
|||
|
|||
@Service |
|||
public class PaymentChannelOrderQueryServiceImpl implements PaymentChannelOrderQueryService { |
|||
|
|||
@Resource |
|||
private PaymentChannelOrderDao paymentChannelOrderDao; |
|||
|
|||
@Override |
|||
public PaymentChannelOrder queryByTxnOrderId(Long txnOrderId) { |
|||
return paymentChannelOrderDao.selectOne(new LambdaQueryWrapper<PaymentChannelOrder>() |
|||
.eq(PaymentChannelOrder::getTxnOrderId, txnOrderId) |
|||
.last("limit 1")); |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
package com.qniao.dam.query.paymentorderrefund; |
|||
|
|||
import java.util.List; |
|||
|
|||
public interface PaymentOrderRefundQueryService { |
|||
boolean checkRefunded(List<Long> tradeOrderIdList); |
|||
} |
|||
@ -0,0 +1,36 @@ |
|||
package com.qniao.dam.query.paymentorderrefund.impl; |
|||
|
|||
import cn.hutool.core.collection.CollUtil; |
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|||
import com.qniao.dam.domain.aggregate.paymentorderrefund.entity.PaymentOrderRefund; |
|||
import com.qniao.dam.domian.aggregate.paymentorderrefund.constant.PaymentOrderRefundStatusEnum; |
|||
import com.qniao.dam.infrastructure.persistent.dao.domain.PaymentOrderRefundDao; |
|||
import com.qniao.dam.query.paymentorderrefund.PaymentOrderRefundQueryService; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.util.List; |
|||
|
|||
@Service |
|||
public class PaymentOrderRefundQueryServiceImpl implements PaymentOrderRefundQueryService { |
|||
|
|||
@Resource |
|||
private PaymentOrderRefundDao paymentOrderRefundDao; |
|||
|
|||
@Override |
|||
public boolean checkRefunded(List<Long> tradeOrderIdList) { |
|||
boolean status = true; |
|||
if (CollUtil.isNotEmpty(tradeOrderIdList)) { |
|||
for (Long tradeOrderId : tradeOrderIdList) { |
|||
if (paymentOrderRefundDao.selectCount(new LambdaQueryWrapper<PaymentOrderRefund>() |
|||
.eq(PaymentOrderRefund::getTradeOrderId, tradeOrderId) |
|||
.eq(PaymentOrderRefund::getStatus, PaymentOrderRefundStatusEnum.SUCCESS)) == 0) { |
|||
status = false; |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
return status; |
|||
} |
|||
|
|||
} |
|||
Write
Preview
Loading…
Cancel
Save