mirror of
https://gitee.com/dromara/dax-pay
synced 2026-08-10 14:56:06 +08:00
feat(strategy): 迁移策略抽象类到 payment/strategy/
- 新建 strategy/ 模块 (payment.strategy.{sub})
- 8 个子域: pay/refund/transfer/sync/reconcile/profit/product/auth
- 12 个 Abs* 策略文件从 old/pay/strategy 迁移完成
This commit is contained in:
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.dromara.daxpay.payment.common.enums.AuthStatusEnum;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package org.dromara.daxpay.payment.strategy.auth;
|
||||
|
||||
import org.dromara.daxpay.payment.common.strategy.PaymentStrategy;
|
||||
import org.dromara.daxpay.payment.unipay.param.assist.AuthCodeParam;
|
||||
import org.dromara.daxpay.payment.unipay.param.assist.GenerateAuthUrlParam;
|
||||
import org.dromara.daxpay.payment.unipay.result.assist.AuthResult;
|
||||
import org.dromara.daxpay.payment.unipay.result.assist.AuthUrlResult;
|
||||
|
||||
/// # 通道抽象认证策略
|
||||
///
|
||||
public abstract class AbsChannelAuthStrategy implements PaymentStrategy {
|
||||
|
||||
/// 获取授权链接
|
||||
public abstract AuthUrlResult generateAuthUrl(GenerateAuthUrlParam param);
|
||||
|
||||
/// 通过AuthCode获取认证结果
|
||||
public abstract AuthResult doAuth(AuthCodeParam param);
|
||||
|
||||
/// 获取微信OpenId认证是否使用道通认证方式
|
||||
public boolean isWxChannelAuth() {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package org.dromara.daxpay.payment.strategy.pay;
|
||||
|
||||
import org.dromara.daxpay.payment.common.strategy.PaymentStrategy;
|
||||
import org.dromara.daxpay.platform.core.enums.pay.pay.CloseTypeEnum;
|
||||
import org.dromara.daxpay.payment.old.pay.entity.order.pay.PayOrder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/// # 支付关闭策略
|
||||
///
|
||||
@Getter
|
||||
@Setter
|
||||
public abstract class AbsPayCloseStrategy implements PaymentStrategy {
|
||||
|
||||
/// 支付订单
|
||||
private PayOrder order = null;
|
||||
|
||||
/// 是否使用撤销方式进行订单关闭
|
||||
private boolean useCancel = false;
|
||||
|
||||
public void init(PayOrder order, boolean useCancel){
|
||||
this.order = order;
|
||||
this.useCancel = useCancel;
|
||||
}
|
||||
|
||||
/// 关闭前的处理方式
|
||||
public void doBeforeCloseHandler() {}
|
||||
|
||||
/// 关闭操作
|
||||
/// @return 如果执行成功, 返回使用何种方式关闭的支付订单
|
||||
public abstract CloseTypeEnum doCloseHandler();
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package org.dromara.daxpay.payment.strategy.pay;
|
||||
|
||||
import org.dromara.daxpay.payment.old.pay.entity.notice.callback.MerchantCallbackTask;
|
||||
import org.dromara.daxpay.payment.old.pay.entity.order.pay.PayOrder;
|
||||
import org.dromara.daxpay.payment.old.pay.entity.order.pay.PayOrderExpand;
|
||||
import org.dromara.daxpay.payment.old.pay.entity.order.refund.RefundOrder;
|
||||
|
||||
/// # 支付插件
|
||||
///
|
||||
public interface AbsPayPluginStrategy {
|
||||
|
||||
/// 支付成功
|
||||
default void paySuccess(PayOrder payOrder, PayOrderExpand expand){}
|
||||
|
||||
/// 支付失败
|
||||
default void payFail(PayOrder payOrder){}
|
||||
|
||||
/// 支付关闭
|
||||
default void payClose(PayOrder payOrder){}
|
||||
|
||||
/// 退款成功
|
||||
default void refundSuccess(PayOrder payOrder, RefundOrder refundOrder){}
|
||||
|
||||
/// 退款关闭
|
||||
default void refundClose(PayOrder payOrder, RefundOrder refundOrder){}
|
||||
|
||||
/// 回调消息发送
|
||||
default void noticeSend(MerchantCallbackTask task, boolean autoSend){}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package org.dromara.daxpay.payment.strategy.pay;
|
||||
|
||||
import org.dromara.daxpay.payment.common.strategy.PaymentStrategy;
|
||||
import org.dromara.daxpay.payment.unipay.param.trade.pay.PayParam;
|
||||
import org.dromara.daxpay.payment.old.pay.bo.trade.PayResultBo;
|
||||
import org.dromara.daxpay.payment.old.pay.entity.order.pay.PayOrder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/// # 抽象支付策略基类
|
||||
///
|
||||
@Getter
|
||||
@Setter
|
||||
public abstract class AbsPayStrategy implements PaymentStrategy {
|
||||
|
||||
/// 支付订单
|
||||
private PayOrder order = null;
|
||||
|
||||
/// 支付参数
|
||||
private PayParam payParam = null;
|
||||
|
||||
/// 初始化支付的参数支付上下文
|
||||
public void initPayParam(PayOrder order, PayParam payParam) {
|
||||
this.order = order;
|
||||
this.payParam = payParam;
|
||||
}
|
||||
|
||||
/// 支付前处理 包含必要的校验以及对当前通道支付配置信息的初始化
|
||||
/// 出现错误不会保存相关信息
|
||||
public void doBeforePayHandler(){
|
||||
}
|
||||
|
||||
/// 支付操作
|
||||
/// 出现错误会保存相关信息
|
||||
public abstract PayResultBo doPayHandler();
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package org.dromara.daxpay.payment.strategy.product;
|
||||
|
||||
import org.dromara.daxpay.payment.common.strategy.PaymentStrategy;
|
||||
import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelApiCallMode;
|
||||
import org.dromara.daxpay.platform.core.enums.pay.channel.ChannelPayIdType;
|
||||
import org.dromara.daxpay.platform.core.enums.pay.channel.PayCapabilityEnum;
|
||||
import org.dromara.daxpay.platform.core.enums.pay.channel.PayMethodEnum;
|
||||
import org.dromara.daxpay.platform.core.enums.pay.channel.PayProviderEnum;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/// # 产品策略抽象类
|
||||
///
|
||||
public abstract class AbsProductStrategy implements PaymentStrategy {
|
||||
|
||||
/// 是否支持服务商模式
|
||||
public boolean isIsv() { return false; }
|
||||
|
||||
/// 是否支持分账
|
||||
public boolean isAllocatable() { return false; }
|
||||
|
||||
/// 是否支持终端报备
|
||||
public boolean isTerminal() { return false; }
|
||||
|
||||
/// 是否支持沙箱环境
|
||||
public boolean isSandbox() { return false; }
|
||||
|
||||
/// API调用模式
|
||||
public ChannelApiCallMode getApiCallMode() { return ChannelApiCallMode.MCH; }
|
||||
|
||||
/// 支付标识类型
|
||||
public ChannelPayIdType getPayIdType() { return ChannelPayIdType.MCH; }
|
||||
|
||||
/// 目录支付方式 → 本产品在该方式下可用的支付能力列表(发版契约,对齐 PayMethodEnum / PayCapabilityEnum)
|
||||
public abstract Map<PayMethodEnum, List<PayCapabilityEnum>> methodCapabilityMapping();
|
||||
|
||||
/// 基础模式通道路由可用的支付渠道列表(各产品策略必须显式声明)
|
||||
public abstract List<PayProviderEnum> supportedPayProviders();
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package org.dromara.daxpay.payment.strategy.profit;
|
||||
|
||||
import org.dromara.daxpay.payment.common.strategy.PaymentStrategy;
|
||||
import org.dromara.daxpay.payment.old.pay.entity.order.pay.PayOrder;
|
||||
import org.dromara.daxpay.payment.old.pay.entity.order.pay.PayOrderExpand;
|
||||
|
||||
/// # 交易订单费率计算策略抽象类
|
||||
///
|
||||
public abstract class AbsTradeProfitStrategy implements PaymentStrategy {
|
||||
|
||||
/// 获取所适用的费率产品, 默认返回支付渠道,
|
||||
/// 费率产品必须要为下划线分隔格式, 否则映射会有问题
|
||||
public String getRateProduct(PayOrder order, PayOrderExpand payOrderExpand) {
|
||||
return order.getProvider();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package org.dromara.daxpay.payment.strategy.reconcile;
|
||||
|
||||
import org.dromara.daxpay.payment.common.strategy.PaymentStrategy;
|
||||
import org.dromara.daxpay.payment.old.pay.bo.reconcile.ReconcileResolveResultBo;
|
||||
import org.dromara.daxpay.payment.old.pay.entity.reconcile.ReconcileStatement;
|
||||
import org.dromara.daxpay.platform.core.enums.pay.reconcile.ReconcileFileTypeEnum;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
/// # 抽象对账策略
|
||||
///
|
||||
@Setter
|
||||
@Getter
|
||||
public abstract class AbsReconcileStrategy implements PaymentStrategy {
|
||||
|
||||
/// 对账单
|
||||
private ReconcileStatement statement;
|
||||
|
||||
/// 对账前处理, 主要是初始化支付SDK配置
|
||||
public void doBeforeHandler() {
|
||||
}
|
||||
|
||||
/// 上传对账单解析并保存
|
||||
public abstract ReconcileResolveResultBo uploadAndResolve(MultipartFile file, ReconcileFileTypeEnum fileType);
|
||||
|
||||
/// 下载对账单到本地进行保存
|
||||
public abstract ReconcileResolveResultBo downAndResolve();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package org.dromara.daxpay.payment.strategy.refund;
|
||||
|
||||
import org.dromara.daxpay.payment.common.strategy.PaymentStrategy;
|
||||
import org.dromara.daxpay.payment.old.pay.bo.trade.RefundResultBo;
|
||||
import org.dromara.daxpay.payment.old.pay.entity.order.refund.RefundOrder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/// # 抽象支付退款策略
|
||||
///
|
||||
@Getter
|
||||
@Setter
|
||||
public abstract class AbsRefundStrategy implements PaymentStrategy {
|
||||
|
||||
/// 退款订单
|
||||
private RefundOrder refundOrder = null;
|
||||
|
||||
/// 退款前对处理, 主要进行各种检查
|
||||
public void doBeforeRefundHandler() {
|
||||
}
|
||||
|
||||
/// 退款操作
|
||||
public abstract RefundResultBo doRefundHandler();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.dromara.daxpay.payment.strategy.sync;
|
||||
|
||||
import org.dromara.daxpay.payment.common.strategy.PaymentStrategy;
|
||||
import org.dromara.daxpay.payment.old.pay.bo.sync.PaySyncResultBo;
|
||||
import org.dromara.daxpay.payment.old.pay.entity.order.pay.PayOrder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/// # 支付同步抽象类
|
||||
///
|
||||
@Getter
|
||||
@Setter
|
||||
public abstract class AbsSyncPayOrderStrategy implements PaymentStrategy {
|
||||
|
||||
/// 支付订单
|
||||
private PayOrder order = null;
|
||||
|
||||
/// 查询通道网关方的退款订单状态信息
|
||||
public abstract PaySyncResultBo doSync();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.dromara.daxpay.payment.strategy.sync;
|
||||
|
||||
import org.dromara.daxpay.payment.common.strategy.PaymentStrategy;
|
||||
import org.dromara.daxpay.payment.old.pay.bo.sync.RefundSyncResultBo;
|
||||
import org.dromara.daxpay.payment.old.pay.entity.order.refund.RefundOrder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/// # 支付退款订单同步策略
|
||||
///
|
||||
@Getter
|
||||
@Setter
|
||||
public abstract class AbsSyncRefundOrderStrategy implements PaymentStrategy {
|
||||
|
||||
private RefundOrder refundOrder;
|
||||
|
||||
/// 同步前处理, 主要是预防请求过于迅速, 支付网关没有处理完退款请求, 导致返回的状态不正确
|
||||
public void doBeforeHandler(){}
|
||||
/// 查询通道网关方的退款订单状态信息
|
||||
public abstract RefundSyncResultBo doSync();
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.dromara.daxpay.payment.strategy.sync;
|
||||
|
||||
import org.dromara.daxpay.payment.common.strategy.PaymentStrategy;
|
||||
import org.dromara.daxpay.payment.old.pay.bo.sync.TransferSyncResultBo;
|
||||
import org.dromara.daxpay.payment.old.pay.entity.order.transfer.TransferOrder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/// # 转账同步策略
|
||||
///
|
||||
@Getter
|
||||
@Setter
|
||||
public abstract class AbsSyncTransferOrderStrategy implements PaymentStrategy {
|
||||
|
||||
private TransferOrder transferOrder;
|
||||
|
||||
/// 同步前处理, 主要是预防请求过于迅速, 支付网关没有处理完退款请求, 导致返回的状态不正确
|
||||
public void doBeforeHandler(){}
|
||||
/// 查询通道网关方的退款订单状态信息
|
||||
public abstract TransferSyncResultBo doSync();
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package org.dromara.daxpay.payment.strategy.transfer;
|
||||
|
||||
import org.dromara.daxpay.payment.common.strategy.PaymentStrategy;
|
||||
import org.dromara.daxpay.payment.old.pay.bo.trade.TransferResultBo;
|
||||
import org.dromara.daxpay.payment.old.pay.entity.order.transfer.TransferOrder;
|
||||
import org.dromara.daxpay.payment.unipay.param.trade.transfer.TransferParam;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/// # 转账抽象策略
|
||||
///
|
||||
@Getter
|
||||
@Setter
|
||||
public abstract class AbsTransferStrategy implements PaymentStrategy {
|
||||
/// 转账订单
|
||||
private TransferOrder transferOrder;
|
||||
/// 转账参数
|
||||
private TransferParam transferParam;
|
||||
|
||||
/// 校验参数
|
||||
public void doValidateParam() {
|
||||
|
||||
}
|
||||
|
||||
/// 转账前操作
|
||||
public void doBeforeHandler(){}
|
||||
|
||||
/// 转账操作
|
||||
public abstract TransferResultBo doTransferHandler();
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user