23 changed files with 463 additions and 14 deletions
Unified 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; |
package com.qniao.dam.query.paymentchannelorder; |
||||
|
|
||||
|
import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelOrder; |
||||
|
|
||||
public interface PaymentChannelOrderQueryService { |
public interface PaymentChannelOrderQueryService { |
||||
|
PaymentChannelOrder queryByTxnOrderId(Long txnOrderId); |
||||
} |
} |
||||
@ -1,8 +1,23 @@ |
|||||
package com.qniao.dam.query.paymentchannelorder.impl; |
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 com.qniao.dam.query.paymentchannelorder.PaymentChannelOrderQueryService; |
||||
import org.springframework.stereotype.Service; |
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
|
||||
@Service |
@Service |
||||
public class PaymentChannelOrderQueryServiceImpl implements PaymentChannelOrderQueryService { |
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