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:
DaxPay Dev
2026-06-16 16:31:29 +08:00
parent 3e25ace24a
commit 4bd3d2c1c7
13 changed files with 334 additions and 0 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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