refactor(payment): 普通支付系列类统一 Normal 前缀, 规范命名语序与注释

This commit is contained in:
DaxPay Dev
2026-07-01 10:42:14 +08:00
parent 7890298040
commit fa171225d5
41 changed files with 158 additions and 158 deletions

View File

@@ -6,7 +6,7 @@ import cn.daxpay.open.channel.alipay.dto.AlipayPayResp;
import cn.daxpay.open.payment.common.result.DaxResult;
import cn.daxpay.open.payment.pay.bo.PayTradeResultBo;
import cn.daxpay.open.payment.pay.order.entity.PayTrade;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import cn.daxpay.open.platform.core.enums.pay.channel.PayMethodEnum;
import cn.daxpay.open.platform.core.enums.unipay.PayBodyTypeEnum;
import lombok.RequiredArgsConstructor;
@@ -34,7 +34,7 @@ public class AlipayPayService {
/// @param payParam 支付参数
/// @param config 通道调用配置(密钥/证书/回调地址等)
/// @return 支付结果
public PayTradeResultBo pay(PayTrade order, PayParam payParam, Map<String, Object> config) {
public PayTradeResultBo pay(PayTrade order, NormalPayParam payParam, Map<String, Object> config) {
// 构建请求
AlipayPayReq req = new AlipayPayReq();
req.setChannel("alipay");

View File

@@ -5,7 +5,7 @@ import cn.daxpay.open.payment.admin.result.develop.DevelopPayResult;
import cn.daxpay.open.payment.admin.result.develop.DevelopSignResult;
import cn.daxpay.open.payment.admin.service.develop.DevelopTradeService;
import cn.daxpay.open.payment.masterdata.constants.provider.result.PayProviderMethodResult;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import cn.daxpay.open.platform.core.annotation.PermCode;
import cn.daxpay.open.platform.core.rest.Res;
import cn.daxpay.open.platform.core.rest.dto.LabelValue;
@@ -35,14 +35,14 @@ public class DevelopTradeController {
@PermCode(code = "sign", nameCn = "签名", nameEn = "Sign")
@Operation(summary = "支付参数签名")
@PostMapping("/sign")
public Result<DevelopSignResult> sign(@RequestBody DevelopParam<PayParam> param) {
public Result<DevelopSignResult> sign(@RequestBody DevelopParam<NormalPayParam> param) {
return Res.ok(developTradeService.sign(param));
}
@PermCode(code = "pay", nameCn = "支付", nameEn = "Pay")
@Operation(summary = "支付调试(真实发起)")
@PostMapping("/pay")
public Result<DevelopPayResult> pay(@RequestBody DevelopParam<PayParam> param) {
public Result<DevelopPayResult> pay(@RequestBody DevelopParam<NormalPayParam> param) {
return Res.ok(developTradeService.pay(param));
}

View File

@@ -1,6 +1,6 @@
package cn.daxpay.open.payment.admin.result.develop;
import cn.daxpay.open.payment.unipay.result.trade.pay.PayResult;
import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPayResult;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
@@ -21,5 +21,5 @@ public class DevelopPayResult {
/// 支付结果
@Schema(description = "支付结果")
private PayResult payResult;
private NormalPayResult payResult;
}

View File

@@ -10,8 +10,8 @@ import cn.daxpay.open.payment.masterdata.constants.provider.result.PayProviderMe
import cn.daxpay.open.payment.masterdata.constants.provider.service.PayProviderMethodService;
import cn.daxpay.open.payment.merchant.service.route.support.PayRouteStrategyCapabilitySupport;
import cn.daxpay.open.payment.pay.service.NormalPayService;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.PayResult;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPayResult;
import cn.daxpay.open.platform.common.json.util.JsonUtil;
import cn.daxpay.open.platform.core.rest.dto.LabelValue;
import cn.hutool.core.util.StrUtil;
@@ -36,7 +36,7 @@ public class DevelopTradeService {
private final PayRouteStrategyCapabilitySupport payRouteStrategyCapabilitySupport;
/// 生成支付参数签名(与正式签名逻辑一致)
public DevelopSignResult sign(DevelopParam<PayParam> param) {
public DevelopSignResult sign(DevelopParam<NormalPayParam> param) {
// 签名串(与 PaySignUtil 内部一致)
String signStr = ObjectSignStrUtil.buildSignStr(param.getParam());
// 签名值
@@ -45,8 +45,8 @@ public class DevelopTradeService {
}
/// 支付调试(真实发起)
public DevelopPayResult pay(DevelopParam<PayParam> param) {
PayParam payParam = param.getParam();
public DevelopPayResult pay(DevelopParam<NormalPayParam> param) {
NormalPayParam payParam = param.getParam();
// 记录发送的请求体
String requestBody = JsonUtil.toJsonStr(payParam);
// 签名信息(传入私钥时生成, 便于核对)
@@ -55,7 +55,7 @@ public class DevelopTradeService {
signInfo = this.sign(param);
}
// 在支付作用域内执行, 初始化商户上下文, 使 mchNo/appId 等字段自动填充
PayResult payResult = paymentScopeManager.executeWithScope(
NormalPayResult payResult = paymentScopeManager.executeWithScope(
payParam.getMchNo(), payParam.getAppId(),
() -> normalPayService.pay(payParam)
);

View File

@@ -1,7 +1,7 @@
package cn.daxpay.open.payment.common.context;
import cn.daxpay.open.payment.pay.order.entity.PayTrade;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
public class PayContext {
/// 支付参数
private PayParam payParam;
private NormalPayParam payParam;
/// 资金交易凭证
private PayTrade trade;
@@ -26,7 +26,7 @@ public class PayContext {
public PayContext() {
}
public PayContext(PayParam payParam) {
public PayContext(NormalPayParam payParam) {
this.payParam = payParam;
}

View File

@@ -13,7 +13,7 @@ import java.util.Arrays;
/// 字典: normal_order_status
@Getter
@RequiredArgsConstructor
public enum NormalOrderStatusEnum implements I18nSupport {
public enum NormalPayOrderStatusEnum implements I18nSupport {
/// 待支付
WAIT_PAY("wait_pay"),
@@ -32,7 +32,7 @@ public enum NormalOrderStatusEnum implements I18nSupport {
return "enum.normal_order_status";
}
public static NormalOrderStatusEnum findByCode(String code) {
public static NormalPayOrderStatusEnum findByCode(String code) {
return Arrays.stream(values())
.filter(e -> e.getCode().equals(code))
.findFirst()

View File

@@ -2,8 +2,8 @@ package cn.daxpay.open.payment.old.pay.convert.order.pay;
import cn.daxpay.open.payment.common.context.CallbackInfo;
import cn.daxpay.open.payment.old.pay.bo.sync.PaySyncResultBo;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.PayOrderResult;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPayOrderResult;
import cn.daxpay.open.payment.old.pay.entity.order.pay.PayOrder;
import cn.daxpay.open.payment.old.pay.entity.order.pay.PayOrderExpand;
import cn.daxpay.open.payment.old.pay.result.order.pay.PayOrderExpandResult;
@@ -24,12 +24,12 @@ public interface PayOrderConvert {
PayOrderVo toVo(PayOrder payOrder);
PayOrderResult toResult(PayOrder payOrder);
NormalPayOrderResult toResult(PayOrder payOrder);
PayOrderExpandResult toResult(PayOrderExpand payOrder);
@Mapping(target = "limitPay", source = "limitPay")
void copy(PayParam param, @MappingTarget PayOrder payOrder);
void copy(NormalPayParam param, @MappingTarget PayOrder payOrder);
/// 将 List<String> limitPay 转换为逗号分隔的字符串
default String mapListToString(List<String> list) {
@@ -45,5 +45,5 @@ public interface PayOrderConvert {
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
void copy(PaySyncResultBo resultBo, @MappingTarget PayOrderExpand payOrderExpand);
void copy(PayOrderExpand orderExpand, @MappingTarget PayOrderResult noticeResult);
void copy(PayOrderExpand orderExpand, @MappingTarget NormalPayOrderResult noticeResult);
}

View File

@@ -3,7 +3,7 @@ package cn.daxpay.open.payment.old.pay.result.notice.callback;
import cn.daxpay.open.platform.core.enums.pay.notice.CallbackNoticeTypeEnum;
import cn.daxpay.open.platform.core.enums.pay.trade.TradeTypeEnum;
import cn.daxpay.open.payment.common.result.MchTradeBaseResult;
import cn.daxpay.open.payment.unipay.result.trade.pay.PayOrderResult;
import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPayOrderResult;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -38,7 +38,7 @@ public class MerchantCallbackTaskResult extends MchTradeBaseResult {
private String tradeType;
/// 消息内容
/// @see PayOrderResult
/// @see NormalPayOrderResult
@Schema(description = "消息内容")
private String content;

View File

@@ -1,6 +1,6 @@
package cn.daxpay.open.payment.old.pay.service.assist;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import cn.daxpay.open.platform.core.code.CommonErrorCode;
import cn.daxpay.open.platform.core.exception.BizInfoException;
import cn.daxpay.open.platform.common.i18n.util.I18nUtil;
@@ -14,7 +14,7 @@ import org.springframework.stereotype.Component;
public class PayParamCapabilityValidator {
/// 当已传入支付方式 method 时,校验其必填性
public void validate(PayParam payParam) {
public void validate(NormalPayParam payParam) {
if (StrUtil.isBlank(payParam.getMethod())) {
return;
}

View File

@@ -1,6 +1,6 @@
package cn.daxpay.open.payment.old.pay.service.assist;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import cn.daxpay.open.platform.core.code.CommonErrorCode;
import cn.daxpay.open.platform.core.exception.BizInfoException;
import cn.hutool.core.util.StrUtil;
@@ -12,7 +12,7 @@ import org.springframework.stereotype.Component;
public class PayParamRouteValidator {
/// 校验支付参数与路由模式相关的字段
public void validate(PayParam payParam) {
public void validate(NormalPayParam payParam) {
if (StrUtil.isNotBlank(payParam.getProduct())) {
if (StrUtil.isBlank(payParam.getMethod())) {
throw new BizInfoException(CommonErrorCode.VALIDATE_PARAMETERS_ERROR,

View File

@@ -19,8 +19,8 @@ import cn.daxpay.open.payment.old.pay.exception.TradeNotExistException;
import cn.daxpay.open.payment.old.pay.param.order.pay.PayOrderQuery;
import cn.daxpay.open.payment.old.pay.result.order.pay.PayOrderExpandResult;
import cn.daxpay.open.payment.old.pay.result.order.pay.PayOrderVo;
import cn.daxpay.open.payment.unipay.param.trade.pay.QueryPayParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.PayOrderResult;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayQueryParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPayOrderResult;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
@@ -100,7 +100,7 @@ public class PayOrderQueryService {
}
/// 查询支付记录
public PayOrderResult queryPayOrder(QueryPayParam param) {
public NormalPayOrderResult queryPayOrder(NormalPayQueryParam param) {
// 校验参数
if (StrUtil.isBlank(param.getOrderNo()) && Objects.isNull(param.getBizOrderNo())){
// 支付订单号不能都为空

View File

@@ -21,8 +21,8 @@ import cn.hutool.core.util.StrUtil;
import cn.daxpay.open.payment.old.pay.exception.TradeStatusErrorException;
import cn.daxpay.open.payment.common.context.PaymentContext;
import cn.daxpay.open.payment.old.pay.service.order.pay.PayOrderQueryService;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.PayResult;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPayResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -50,7 +50,7 @@ public class PayAssistService {
/// 创建支付订单并保存, 返回支付订单
@Transactional(rollbackFor = Exception.class)
public PayOrder createPayOrder(PayParam payParam) {
public PayOrder createPayOrder(NormalPayParam payParam) {
// 订单超时时间
OffsetDateTime expiredTime = this.getExpiredTime(payParam.getExpiredTime());
// 构建支付订单对象
@@ -96,7 +96,7 @@ public class PayAssistService {
/// 更新, 通常只有网关支付方式创建的订单才需要进行更新, 用来设置支付方式等信息
@Transactional(rollbackFor = Exception.class)
public void updatePayOrder(PayParam payParam, PayOrder payOrder) {
public void updatePayOrder(NormalPayParam payParam, PayOrder payOrder) {
payOrder.setProduct(payParam.getProduct())
.setMethod(payParam.getMethod())
.setStatus(PayStatusEnum.PROGRESS.getCode());
@@ -172,9 +172,9 @@ public class PayAssistService {
///
/// @param payOrder 支付订单
/// @param orderExpand 支付订单扩展信息
/// @return PayResult 支付结果
public PayResult buildResult(PayOrder payOrder, PayOrderExpand orderExpand) {
return new PayResult()
/// @return NormalPayResult 支付结果
public NormalPayResult buildResult(PayOrder payOrder, PayOrderExpand orderExpand) {
return new NormalPayResult()
.setBizOrderNo(payOrder.getBizOrderNo())
.setOrderNo(payOrder.getOrderNo())
.setStatus(payOrder.getStatus())

View File

@@ -23,7 +23,7 @@ import cn.daxpay.open.payment.old.pay.service.order.pay.PayOrderQueryService;
import cn.daxpay.open.payment.old.pay.service.record.close.PayCloseRecordService;
import cn.daxpay.open.payment.old.pay.service.trade.TradeUniHandleService;
import cn.daxpay.open.payment.strategy.pay.AbsPayCloseStrategy;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayCloseParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayCloseParam;
import cn.hutool.core.util.StrUtil;
import com.baomidou.lock.LockInfo;
import com.baomidou.lock.LockTemplate;
@@ -54,7 +54,7 @@ public class PayCloseService {
private final PaymentContext apiContext;
/// 关闭支付
public void close(PayCloseParam param){
public void close(NormalPayCloseParam param){
// 校验参数
if (StrUtil.isBlank(param.getOrderNo()) && Objects.isNull(param.getBizOrderNo())){
// 支付订单号不能都为空

View File

@@ -20,8 +20,8 @@ import cn.daxpay.open.payment.masterdata.constants.product.service.PayProductCap
import cn.daxpay.open.payment.pay.order.entity.PayTrade;
import cn.daxpay.open.payment.strategy.pay.AbsPayStrategy;
import cn.daxpay.open.platform.core.enums.unipay.PayBodyTypeEnum;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.PayResult;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPayResult;
import cn.hutool.core.lang.Opt;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
@@ -49,7 +49,7 @@ public class PayService {
private final TradeUniHandleService tradeUniHandleService;
/// 支付入口
public PayResult pay(PayParam payParam){
public NormalPayResult pay(NormalPayParam payParam){
// 校验超时时间, 不可早于当前
payAssistService.validationExpiredTime(payParam.getExpiredTime());
// 获取商户订单号
@@ -76,7 +76,7 @@ public class PayService {
/// 支付操作 无事务
/// 拆分为多阶段1. 保存订单记录信息 2. 调起支付 3. 支付成功后操作
public PayResult payHandle(PayParam payParam, PayOrder payOrder) {
public NormalPayResult payHandle(NormalPayParam payParam, PayOrder payOrder) {
// 获取支付策略类
var payStrategy = PaymentStrategyFactory.createByProduct(payParam.getProduct(), AbsPayStrategy.class);
PayContext context = new PayContext(payParam);
@@ -148,7 +148,7 @@ public class PayService {
/// 支付调用成功后操作, 更新订单信息
@Transactional(rollbackFor = Exception.class)
public PayResult paySuccess(PayOrder payOrder, PayResultBo result){
public NormalPayResult paySuccess(PayOrder payOrder, PayResultBo result){
// 如果支付完成, 进行订单完成处理, 同时发送回调消息
if (result.isComplete()) {
payOrder.setStatus(PayStatusEnum.SUCCESS.getCode())

View File

@@ -28,8 +28,8 @@ import cn.daxpay.open.payment.common.enums.PayFundStatusEnum;
import cn.daxpay.open.payment.pay.order.entity.PayTrade;
import cn.daxpay.open.payment.strategy.pay.AbsPayCloseStrategy;
import cn.daxpay.open.payment.strategy.sync.AbsSyncPayOrderStrategy;
import cn.daxpay.open.payment.unipay.param.trade.pay.PaySyncParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.PaySyncResult;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPaySyncParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPaySyncResult;
import cn.hutool.core.util.StrUtil;
import com.baomidou.lock.LockInfo;
import com.baomidou.lock.LockTemplate;
@@ -66,7 +66,7 @@ public class PaySyncService {
/// 支付同步, 开启一个新的事务, 不受外部抛出异常的影响
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public PaySyncResult sync(PaySyncParam param) {
public NormalPaySyncResult sync(NormalPaySyncParam param) {
// 校验参数
if (StrUtil.isBlank(param.getOrderNo()) && Objects.isNull(param.getBizOrderNo())&& Objects.isNull(param.getOutOrderNo())){
// 支付订单号不能都为空
@@ -82,7 +82,7 @@ public class PaySyncService {
/// 1. 如果状态一致, 不进行处理, 直接返回
/// 2. 如果状态不一致, 更新状态/完成时间/关联网关订单号
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public PaySyncResult syncPayOrder(PayOrder payOrder) {
public NormalPaySyncResult syncPayOrder(PayOrder payOrder) {
// 待支付状态不允许同步
if (Objects.equals(payOrder.getStatus(), PayStatusEnum.WAIT.getCode())){
// 订单未开始支付, 请重新确认支付状态
@@ -154,7 +154,7 @@ public class PaySyncService {
// 同步失败记录日志
this.saveRecord(payOrder, syncResult, true);
}
return new PaySyncResult()
return new NormalPaySyncResult()
.setOrderStatus(payOrder.getStatus())
.setAdjust(statusSync);
} finally {

View File

@@ -1,8 +1,8 @@
package cn.daxpay.open.payment.pay.convert;
import cn.daxpay.open.payment.pay.order.entity.PayNormalOrder;
import cn.daxpay.open.payment.pay.order.entity.NormalPayOrder;
import cn.daxpay.open.payment.pay.order.entity.PayTrade;
import cn.daxpay.open.payment.unipay.result.trade.pay.PayResult;
import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPayResult;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@@ -14,12 +14,12 @@ public interface PayTradeConvert {
PayTradeConvert CONVERT = Mappers.getMapper(PayTradeConvert.class);
/// PayTrade + PayNormalOrder → PayResult
/// PayTrade + NormalPayOrder → NormalPayResult
@Mapping(target = "orderId", source = "trade.id")
@Mapping(target = "orderNo", source = "trade.tradeNo")
@Mapping(target = "status", source = "trade.status")
@Mapping(target = "bizOrderNo", source = "normalOrder.bizOrderNo")
@Mapping(target = "payBody", source = "trade.payBody")
@Mapping(target = "payBodyType", source = "trade.payBodyType")
PayResult toResult(PayTrade trade, PayNormalOrder normalOrder);
NormalPayResult toResult(PayTrade trade, NormalPayOrder normalOrder);
}

View File

@@ -1,7 +1,7 @@
package cn.daxpay.open.payment.pay.order.dao;
import cn.daxpay.open.platform.common.mybatisplus.impl.BaseManager;
import cn.daxpay.open.payment.pay.order.entity.PayNormalOrder;
import cn.daxpay.open.payment.pay.order.entity.NormalPayOrder;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@@ -9,12 +9,12 @@ import java.util.Optional;
/// # 普通支付业务单管理器
///
@Repository
public class PayNormalOrderManager extends BaseManager<PayNormalOrderMapper, PayNormalOrder> {
public class NormalPayOrderManager extends BaseManager<NormalPayOrderMapper, NormalPayOrder> {
/// 根据业务单号查询按商户号自动租户隔离
public Optional<PayNormalOrder> findByBizOrderNo(String bizOrderNo) {
public Optional<NormalPayOrder> findByBizOrderNo(String bizOrderNo) {
return lambdaQuery()
.eq(PayNormalOrder::getBizOrderNo, bizOrderNo)
.eq(NormalPayOrder::getBizOrderNo, bizOrderNo)
.oneOpt();
}
}

View File

@@ -1,11 +1,11 @@
package cn.daxpay.open.payment.pay.order.dao;
import cn.daxpay.open.payment.pay.order.entity.PayNormalOrder;
import cn.daxpay.open.payment.pay.order.entity.NormalPayOrder;
import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.Mapper;
/// # 普通支付业务单 Mapper
///
@Mapper
public interface PayNormalOrderMapper extends MPJBaseMapper<PayNormalOrder> {
public interface NormalPayOrderMapper extends MPJBaseMapper<NormalPayOrder> {
}

View File

@@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import cn.daxpay.open.payment.common.enums.NormalOrderStatusEnum;
import cn.daxpay.open.payment.common.enums.NormalPayOrderStatusEnum;
import cn.daxpay.open.payment.unipay.param.trade.pay.GoodsDetail;
import cn.daxpay.open.platform.core.enums.pay.channel.CurrencyEnum;
import cn.daxpay.open.platform.core.enums.pay.channel.PayMethodEnum;
@@ -27,7 +27,7 @@ import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName(value = "pay_normal_order", autoResultMap = true)
public class PayNormalOrder extends MchBaseEntity {
public class NormalPayOrder extends MchBaseEntity {
/// 应用号
@TableField(updateStrategy = FieldStrategy.NEVER, fill = FieldFill.INSERT)
@@ -43,7 +43,7 @@ public class PayNormalOrder extends MchBaseEntity {
private String description;
/// 业务状态
/// @see NormalOrderStatusEnum
/// @see NormalPayOrderStatusEnum
private String status;
/// 异步通知地址出站商户通知用

View File

@@ -12,8 +12,8 @@ import cn.daxpay.open.payment.pay.order.entity.PayTrade;
import cn.daxpay.open.payment.pay.service.route.PayRouteFacade;
import cn.hutool.core.util.StrUtil;
import cn.daxpay.open.payment.strategy.pay.AbsPayStrategy;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.PayResult;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPayResult;
import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.lock.LockInfo;
import com.baomidou.lock.LockTemplate;
@@ -24,7 +24,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.Objects;
/// # 常规支付服务
/// # 普通支付服务
///
@Slf4j
@Service
@@ -38,7 +38,7 @@ public class NormalPayService {
private final PayRouteFacade payRouteFacade;
/// 支付入口
public PayResult pay(PayParam payParam) {
public NormalPayResult pay(NormalPayParam payParam) {
payAssistService.validationExpiredTime(payParam.getExpiredTime());
String bizOrderNo = payParam.getBizOrderNo();
LockInfo lock = lockTemplate.lock("payment:pay:" + bizOrderNo, 10000, 200);
@@ -54,7 +54,7 @@ public class NormalPayService {
}
/// 支付操作
public PayResult payHandle(PayParam payParam, PayTrade trade) {
public NormalPayResult payHandle(NormalPayParam payParam, PayTrade trade) {
// 解析应用号:空则取商户默认应用
payAssistService.resolveApp(payParam);
// 路由解析:直定模式(已传 channelMchNo)直接解析,否则按 appId+method 策略匹配
@@ -91,7 +91,7 @@ public class NormalPayService {
/// 支付成功后操作
@Transactional(rollbackFor = Exception.class)
public PayResult paySuccess(PayTrade trade, PayTradeResultBo result) {
public NormalPayResult paySuccess(PayTrade trade, PayTradeResultBo result) {
if (result.isComplete()) {
trade.setStatus(PayFundStatusEnum.SUCCESS.getCode());
trade.setPayTime(result.getFinishTime());

View File

@@ -6,19 +6,19 @@ import cn.daxpay.open.platform.core.exception.BizInfoException;
import cn.daxpay.open.platform.core.code.CommonErrorCode;
import cn.daxpay.open.platform.core.util.DateTimeUtil;
import cn.daxpay.open.platform.core.util.TradeNoGenerateUtil;
import cn.daxpay.open.payment.common.enums.NormalOrderStatusEnum;
import cn.daxpay.open.payment.common.enums.NormalPayOrderStatusEnum;
import cn.daxpay.open.payment.common.enums.PayFundStatusEnum;
import cn.daxpay.open.payment.common.enums.PayTradeTypeEnum;
import cn.daxpay.open.payment.common.service.MchAppInfoAssistQueryService;
import cn.daxpay.open.payment.common.util.PayUtil;
import cn.hutool.core.util.StrUtil;
import cn.daxpay.open.payment.pay.convert.PayTradeConvert;
import cn.daxpay.open.payment.pay.order.dao.PayNormalOrderManager;
import cn.daxpay.open.payment.pay.order.entity.PayNormalOrder;
import cn.daxpay.open.payment.pay.order.dao.NormalPayOrderManager;
import cn.daxpay.open.payment.pay.order.entity.NormalPayOrder;
import cn.daxpay.open.payment.pay.order.dao.PayTradeManager;
import cn.daxpay.open.payment.pay.order.entity.PayTrade;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.PayResult;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPayResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -36,12 +36,12 @@ import java.util.Optional;
@RequiredArgsConstructor
public class PayAssistService {
private final PayNormalOrderManager payNormalOrderManager;
private final NormalPayOrderManager payNormalOrderManager;
private final PayTradeManager payTradeManager;
private final MchAppInfoAssistQueryService mchAppInfoAssistQueryService;
/// 解析应用号param 有则用,无则取商户默认应用并回填到 param
public void resolveApp(PayParam payParam) {
public void resolveApp(NormalPayParam payParam) {
if (StrUtil.isBlank(payParam.getAppId())) {
String appId = mchAppInfoAssistQueryService.findDefaultAppId(payParam.getMchNo());
payParam.setAppId(appId);
@@ -51,7 +51,7 @@ public class PayAssistService {
/// 创建支付订单(容器 + 资金交易)
/// 调用方需保证 appId 和 product 已解析完毕
@Transactional(rollbackFor = Exception.class)
public PayTrade createOrder(PayParam payParam) {
public PayTrade createOrder(NormalPayParam payParam) {
String appId = payParam.getAppId();
OffsetDateTime expiredTime = this.getExpiredTime(payParam.getExpiredTime());
Long amount = payParam.getAmount();
@@ -65,12 +65,12 @@ public class PayAssistService {
}
// 终端信息
String terminalNo = payParam.getTerminal() != null ? payParam.getTerminal().getTerminalNo() : null;
// 创建容器 PayNormalOrder含冗余字段方便查询
PayNormalOrder normalOrder = new PayNormalOrder();
// 创建容器 NormalPayOrder含冗余字段方便查询
NormalPayOrder normalOrder = new NormalPayOrder();
normalOrder.setBizOrderNo(payParam.getBizOrderNo());
normalOrder.setTitle(payParam.getTitle());
normalOrder.setDescription(payParam.getDescription());
normalOrder.setStatus(NormalOrderStatusEnum.WAIT_PAY.getCode());
normalOrder.setStatus(NormalPayOrderStatusEnum.WAIT_PAY.getCode());
normalOrder.setNotifyUrl(payParam.getNotifyUrl());
normalOrder.setReturnUrl(payParam.getReturnUrl());
normalOrder.setAttach(payParam.getAttach());
@@ -110,11 +110,11 @@ public class PayAssistService {
/// 根据业务单号查询并检查支付状态(按商户号自动租户隔离)
public PayTrade getOrderAndCheck(String bizOrderNo) {
Optional<PayNormalOrder> normalOrderOpt = payNormalOrderManager.findByBizOrderNo(bizOrderNo);
Optional<NormalPayOrder> normalOrderOpt = payNormalOrderManager.findByBizOrderNo(bizOrderNo);
if (normalOrderOpt.isEmpty()) {
return null;
}
PayNormalOrder normalOrder = normalOrderOpt.get();
NormalPayOrder normalOrder = normalOrderOpt.get();
PayTrade trade = payTradeManager.findByContainerId(normalOrder.getId()).orElse(null);
if (trade == null) {
return null;
@@ -124,14 +124,14 @@ public class PayAssistService {
}
/// 检查订单状态
public void checkOrder(PayNormalOrder normalOrder, PayTrade trade) {
public void checkOrder(NormalPayOrder normalOrder, PayTrade trade) {
// 容器状态检查
String bizStatus = normalOrder.getStatus();
if (Objects.equals(bizStatus, NormalOrderStatusEnum.PAID.getCode())) {
if (Objects.equals(bizStatus, NormalPayOrderStatusEnum.PAID.getCode())) {
throw new BizInfoException(CommonErrorCode.VALIDATE_PARAMETERS_ERROR, "pay.error.pay.alreadySuccess");
}
if (Objects.equals(bizStatus, NormalOrderStatusEnum.CLOSED.getCode())
|| Objects.equals(bizStatus, NormalOrderStatusEnum.EXPIRED.getCode())) {
if (Objects.equals(bizStatus, NormalPayOrderStatusEnum.CLOSED.getCode())
|| Objects.equals(bizStatus, NormalPayOrderStatusEnum.EXPIRED.getCode())) {
throw new BizInfoException(CommonErrorCode.VALIDATE_PARAMETERS_ERROR, "pay.error.pay.failedOrClosed");
}
// 资金状态检查
@@ -151,8 +151,8 @@ public class PayAssistService {
}
/// 根据 PayTrade 构建支付结果
public PayResult buildResult(PayTrade trade) {
PayNormalOrder normalOrder = payNormalOrderManager.findById(trade.getContainerId()).orElse(null);
public NormalPayResult buildResult(PayTrade trade) {
NormalPayOrder normalOrder = payNormalOrderManager.findById(trade.getContainerId()).orElse(null);
return PayTradeConvert.CONVERT.toResult(trade, normalOrder);
}

View File

@@ -5,8 +5,8 @@ import cn.daxpay.open.platform.core.exception.system.DataErrorException;
import cn.daxpay.open.payment.common.context.CallbackInfo;
import cn.daxpay.open.payment.common.context.PaymentContext;
import cn.daxpay.open.payment.common.enums.PayFundStatusEnum;
import cn.daxpay.open.payment.pay.order.dao.PayNormalOrderManager;
import cn.daxpay.open.payment.pay.order.entity.PayNormalOrder;
import cn.daxpay.open.payment.pay.order.dao.NormalPayOrderManager;
import cn.daxpay.open.payment.pay.order.entity.NormalPayOrder;
import cn.daxpay.open.payment.pay.order.dao.PayTradeManager;
import cn.daxpay.open.payment.pay.order.entity.PayTrade;
import com.baomidou.lock.LockInfo;
@@ -26,7 +26,7 @@ import java.util.Objects;
public class PayCallbackService {
private final PayTradeManager payTradeManager;
private final PayNormalOrderManager payNormalOrderManager;
private final NormalPayOrderManager payNormalOrderManager;
private final PayUniHandleService payUniHandleService;
private final PaymentContext apiContext;
private final LockTemplate lockTemplate;
@@ -57,7 +57,7 @@ public class PayCallbackService {
if (Objects.nonNull(callbackInfo.getOutTradeNo())) {
trade.setOutOrderNo(callbackInfo.getOutTradeNo());
}
PayNormalOrder normalOrder = payNormalOrderManager.findById(trade.getContainerId())
NormalPayOrder normalOrder = payNormalOrderManager.findById(trade.getContainerId())
.orElseThrow(() -> new DataErrorException("error.payment.order.payOrderNotExist"));
if (Objects.equals(CallbackStatusEnum.SUCCESS.getCode(), callbackInfo.getTradeStatus())) {
this.success(trade, normalOrder, callbackInfo);
@@ -71,7 +71,7 @@ public class PayCallbackService {
}
/// 成功处理
private void success(PayTrade trade, PayNormalOrder normalOrder, CallbackInfo callbackInfo) {
private void success(PayTrade trade, NormalPayOrder normalOrder, CallbackInfo callbackInfo) {
trade.setStatus(PayFundStatusEnum.SUCCESS.getCode());
trade.setPayTime(callbackInfo.getFinishTime());
trade.setCloseTime(null);
@@ -82,7 +82,7 @@ public class PayCallbackService {
}
/// 失败处理
private void fail(PayTrade trade, PayNormalOrder normalOrder, CallbackInfo callbackInfo) {
private void fail(PayTrade trade, NormalPayOrder normalOrder, CallbackInfo callbackInfo) {
if (!Objects.equals(trade.getStatus(), PayFundStatusEnum.PROCESSING.getCode())) {
callbackInfo.setCallbackStatus(CallbackStatusEnum.IGNORE)
.setCallbackErrorMsg("订单不是支付中状态,忽略");

View File

@@ -8,12 +8,12 @@ import cn.daxpay.open.platform.core.exception.PayFailureException;
import cn.daxpay.open.platform.core.exception.operation.OperationFailException;
import cn.daxpay.open.payment.common.enums.PayFundStatusEnum;
import cn.daxpay.open.payment.common.util.PaymentStrategyFactory;
import cn.daxpay.open.payment.pay.order.dao.PayNormalOrderManager;
import cn.daxpay.open.payment.pay.order.entity.PayNormalOrder;
import cn.daxpay.open.payment.pay.order.dao.NormalPayOrderManager;
import cn.daxpay.open.payment.pay.order.entity.NormalPayOrder;
import cn.daxpay.open.payment.pay.order.dao.PayTradeManager;
import cn.daxpay.open.payment.pay.order.entity.PayTrade;
import cn.daxpay.open.payment.strategy.pay.AbsPayCloseStrategy;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayCloseParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayCloseParam;
import cn.daxpay.open.platform.core.enums.pay.pay.CloseTypeEnum;
import cn.hutool.core.util.StrUtil;
import com.baomidou.lock.LockInfo;
@@ -33,19 +33,19 @@ import java.util.Objects;
public class PayCloseService {
private final PayTradeManager payTradeManager;
private final PayNormalOrderManager payNormalOrderManager;
private final NormalPayOrderManager payNormalOrderManager;
private final PayUniHandleService payUniHandleService;
private final LockTemplate lockTemplate;
/// 关闭支付
public void close(PayCloseParam param) {
public void close(NormalPayCloseParam param) {
if (StrUtil.isBlank(param.getOrderNo()) && Objects.isNull(param.getBizOrderNo())) {
throw new BizInfoException(CommonErrorCode.VALIDATE_PARAMETERS_ERROR, "pay.error.orderNoRequired");
}
PayTrade trade = payTradeManager.findByTradeNo(param.getOrderNo())
.orElse(null);
if (Objects.isNull(trade) && Objects.nonNull(param.getBizOrderNo())) {
PayNormalOrder normalOrder = payNormalOrderManager.findByBizOrderNo(param.getBizOrderNo())
NormalPayOrder normalOrder = payNormalOrderManager.findByBizOrderNo(param.getBizOrderNo())
.orElse(null);
if (Objects.nonNull(normalOrder)) {
trade = payTradeManager.findByContainerId(normalOrder.getId())
@@ -69,7 +69,7 @@ public class PayCloseService {
throw new BizInfoException(CommonErrorCode.VALIDATE_PARAMETERS_ERROR, "pay.error.pay.closeProcessing");
}
try {
PayNormalOrder normalOrder = payNormalOrderManager.findById(trade.getContainerId())
NormalPayOrder normalOrder = payNormalOrderManager.findById(trade.getContainerId())
.orElse(null);
if (Objects.equals(PayFundStatusEnum.INIT.getCode(), trade.getStatus())) {
payUniHandleService.payClose(trade, normalOrder);

View File

@@ -10,13 +10,13 @@ import cn.daxpay.open.platform.core.util.DateTimeUtil;
import cn.daxpay.open.payment.common.enums.PayFundStatusEnum;
import cn.daxpay.open.payment.common.util.PaymentStrategyFactory;
import cn.daxpay.open.payment.pay.bo.PaySyncResultBo;
import cn.daxpay.open.payment.pay.order.dao.PayNormalOrderManager;
import cn.daxpay.open.payment.pay.order.entity.PayNormalOrder;
import cn.daxpay.open.payment.pay.order.dao.NormalPayOrderManager;
import cn.daxpay.open.payment.pay.order.entity.NormalPayOrder;
import cn.daxpay.open.payment.pay.order.dao.PayTradeManager;
import cn.daxpay.open.payment.pay.order.entity.PayTrade;
import cn.daxpay.open.payment.strategy.sync.AbsSyncPayOrderStrategy;
import cn.daxpay.open.payment.unipay.param.trade.pay.PaySyncParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.PaySyncResult;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPaySyncParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPaySyncResult;
import cn.hutool.core.util.StrUtil;
import com.baomidou.lock.LockInfo;
import com.baomidou.lock.LockTemplate;
@@ -39,13 +39,13 @@ import java.util.Optional;
public class PaySyncService {
private final PayTradeManager payTradeManager;
private final PayNormalOrderManager payNormalOrderManager;
private final NormalPayOrderManager payNormalOrderManager;
private final PayUniHandleService payUniHandleService;
private final LockTemplate lockTemplate;
/// 支付同步
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public PaySyncResult sync(PaySyncParam param) {
public NormalPaySyncResult sync(NormalPaySyncParam param) {
if (StrUtil.isBlank(param.getOrderNo()) && Objects.isNull(param.getBizOrderNo())
&& Objects.isNull(param.getOutOrderNo())) {
throw new BizInfoException(CommonErrorCode.VALIDATE_PARAMETERS_ERROR, "pay.error.orderNoRequired");
@@ -55,7 +55,7 @@ public class PaySyncService {
trade = payTradeManager.findByTradeNo(param.getOrderNo()).orElse(null);
}
if (Objects.isNull(trade) && Objects.nonNull(param.getBizOrderNo())) {
PayNormalOrder normalOrder = payNormalOrderManager.findByBizOrderNo(
NormalPayOrder normalOrder = payNormalOrderManager.findByBizOrderNo(
param.getBizOrderNo()).orElse(null);
if (Objects.nonNull(normalOrder)) {
trade = payTradeManager.findByContainerId(normalOrder.getId())
@@ -74,7 +74,7 @@ public class PaySyncService {
/// 同步支付状态
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public PaySyncResult syncPayOrder(PayTrade trade) {
public NormalPaySyncResult syncPayOrder(PayTrade trade) {
if (Objects.equals(trade.getStatus(), PayFundStatusEnum.INIT.getCode())) {
throw new BizInfoException(DaxPayErrorCode.TRADE_STATUS_ERROR, "pay.error.pay.syncNotStarted");
}
@@ -83,7 +83,7 @@ public class PaySyncService {
throw new RepetitiveOperationException();
}
try {
PayNormalOrder normalOrder = payNormalOrderManager.findById(trade.getContainerId())
NormalPayOrder normalOrder = payNormalOrderManager.findById(trade.getContainerId())
.orElse(null);
var syncStrategy = PaymentStrategyFactory.createByProduct(
trade.getProduct(), AbsSyncPayOrderStrategy.class);
@@ -100,7 +100,7 @@ public class PaySyncService {
syncResult.setSyncSuccess(false).setSyncErrorMsg(e.getMessage());
}
}
return new PaySyncResult()
return new NormalPaySyncResult()
.setOrderStatus(trade.getStatus())
.setAdjust(statusSync);
} finally {
@@ -131,7 +131,7 @@ public class PaySyncService {
}
/// 根据同步结果调整支付单状态
private void adjustHandler(PaySyncResultBo syncResult, PayTrade trade, PayNormalOrder normalOrder) {
private void adjustHandler(PaySyncResultBo syncResult, PayTrade trade, NormalPayOrder normalOrder) {
var payStatus = syncResult.getPayStatus();
if (Objects.isNull(payStatus)) {
return;
@@ -146,7 +146,7 @@ public class PaySyncService {
}
/// 同步成功后更新
private void success(PayTrade trade, PayNormalOrder normalOrder, PaySyncResultBo syncResult) {
private void success(PayTrade trade, NormalPayOrder normalOrder, PaySyncResultBo syncResult) {
trade.setStatus(PayFundStatusEnum.SUCCESS.getCode());
trade.setPayTime(syncResult.getFinishTime());
trade.setCloseTime(null);

View File

@@ -1,9 +1,9 @@
package cn.daxpay.open.payment.pay.service;
import cn.daxpay.open.payment.common.enums.NormalOrderStatusEnum;
import cn.daxpay.open.payment.common.enums.NormalPayOrderStatusEnum;
import cn.daxpay.open.payment.common.enums.PayFundStatusEnum;
import cn.daxpay.open.payment.pay.order.dao.PayNormalOrderManager;
import cn.daxpay.open.payment.pay.order.entity.PayNormalOrder;
import cn.daxpay.open.payment.pay.order.dao.NormalPayOrderManager;
import cn.daxpay.open.payment.pay.order.entity.NormalPayOrder;
import cn.daxpay.open.payment.pay.order.dao.PayTradeManager;
import cn.daxpay.open.payment.pay.order.entity.PayTrade;
import lombok.RequiredArgsConstructor;
@@ -23,14 +23,14 @@ import java.util.Objects;
public class PayUniHandleService {
private final PayTradeManager payTradeManager;
private final PayNormalOrderManager payNormalOrderManager;
private final NormalPayOrderManager payNormalOrderManager;
/// 支付成功后续处理(同步冗余时间线到容器)
public void paySuccess(PayTrade trade) {
PayNormalOrder normalOrder = payNormalOrderManager.findById(trade.getContainerId())
NormalPayOrder normalOrder = payNormalOrderManager.findById(trade.getContainerId())
.orElse(null);
if (normalOrder != null) {
normalOrder.setStatus(NormalOrderStatusEnum.PAID.getCode());
normalOrder.setStatus(NormalPayOrderStatusEnum.PAID.getCode());
normalOrder.setPayTime(trade.getPayTime());
payNormalOrderManager.updateById(normalOrder);
}
@@ -38,23 +38,23 @@ public class PayUniHandleService {
}
/// 支付失败处理(同步冗余时间线到容器)
public void payFail(PayTrade trade, PayNormalOrder normalOrder, String errMsg) {
public void payFail(PayTrade trade, NormalPayOrder normalOrder, String errMsg) {
OffsetDateTime now = OffsetDateTime.now(ZoneOffset.UTC);
trade.setStatus(PayFundStatusEnum.FAIL.getCode());
trade.setErrorMsg(errMsg);
trade.setCloseTime(now);
normalOrder.setStatus(NormalOrderStatusEnum.CLOSED.getCode());
normalOrder.setStatus(NormalPayOrderStatusEnum.CLOSED.getCode());
normalOrder.setCloseTime(now);
payTradeManager.updateById(trade);
payNormalOrderManager.updateById(normalOrder);
}
/// 支付关闭处理(同步冗余时间线到容器)
public void payClose(PayTrade trade, PayNormalOrder normalOrder) {
public void payClose(PayTrade trade, NormalPayOrder normalOrder) {
OffsetDateTime now = OffsetDateTime.now(ZoneOffset.UTC);
trade.setStatus(PayFundStatusEnum.CLOSE.getCode());
trade.setCloseTime(now);
normalOrder.setStatus(NormalOrderStatusEnum.CLOSED.getCode());
normalOrder.setStatus(NormalPayOrderStatusEnum.CLOSED.getCode());
normalOrder.setCloseTime(now);
payTradeManager.updateById(trade);
payNormalOrderManager.updateById(normalOrder);

View File

@@ -1,6 +1,6 @@
package cn.daxpay.open.payment.pay.service.route;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
/// # 支付路由门面接口
///
@@ -10,5 +10,5 @@ public interface PayRouteFacade {
/// 解析支付路由:直定模式(已传 channelMchNo)直接解析,否则按策略模式匹配并回填。
/// 调用方需保证 appId 已解析完毕。
void resolve(PayParam payParam);
void resolve(NormalPayParam payParam);
}

View File

@@ -12,7 +12,7 @@ import cn.daxpay.open.payment.old.pay.anno.PaymentVerify;
import cn.daxpay.open.payment.old.pay.service.assist.PayParamCapabilityValidator;
import cn.daxpay.open.payment.old.pay.service.assist.PayParamRouteValidator;
import cn.daxpay.open.payment.old.pay.service.assist.PaymentAssistService;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
@@ -61,7 +61,7 @@ public class PaymentVerifyAspect {
if (param instanceof MerchantPaymentCommonParam paymentParam){
// 参数校验
ValidationUtil.validateParam(paymentParam);
if (paymentParam instanceof PayParam payParam) {
if (paymentParam instanceof NormalPayParam payParam) {
// 先校验支付渠道+支付方式(渠道支付方式目录),再校验路由必填项
payParamCapabilityValidator.validate(payParam);
payParamRouteValidator.validate(payParam);

View File

@@ -4,10 +4,10 @@ import cn.daxpay.open.platform.core.annotation.IgnoreAuth;
import cn.daxpay.open.platform.core.enums.common.PaymentApiEnum;
import cn.daxpay.open.platform.core.exception.operation.OperationFailException;
import cn.daxpay.open.payment.common.service.MerchantPermissionService;
import cn.daxpay.open.payment.unipay.param.trade.pay.QueryPayParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayQueryParam;
import cn.daxpay.open.payment.common.result.DaxResult;
import cn.daxpay.open.payment.unipay.result.trade.pay.PayOrderResult;
import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPayOrderResult;
import cn.daxpay.open.payment.common.util.DaxRes;
import cn.daxpay.open.payment.old.pay.anno.PaymentVerify;
import cn.daxpay.open.payment.old.pay.service.order.pay.PayOrderQueryService;
@@ -35,7 +35,7 @@ public class UniQueryController {
@Operation(summary = "支付订单查询接口")
@PostMapping("/pay-order")
public DaxResult<PayOrderResult> queryPayOrder(@RequestBody QueryPayParam param){
public DaxResult<NormalPayOrderResult> queryPayOrder(@RequestBody NormalPayQueryParam param){
if (!permConfigService.hasApiPerm(PaymentApiEnum.PAY_ORDER.getCode())){
// 订单: 该商户没有此接口的权限
throw new OperationFailException(CommonCode.FAIL_CODE, "error.payment.order.merchantNoApiPermission");

View File

@@ -1,10 +1,10 @@
package cn.daxpay.open.payment.unipay.controller;
import cn.daxpay.open.platform.core.annotation.IgnoreAuth;
import cn.daxpay.open.payment.unipay.param.trade.pay.PaySyncParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPaySyncParam;
import cn.daxpay.open.payment.common.result.DaxResult;
import cn.daxpay.open.payment.unipay.result.trade.pay.PaySyncResult;
import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPaySyncResult;
import cn.daxpay.open.payment.common.util.DaxRes;
import cn.daxpay.open.payment.old.pay.anno.PaymentVerify;
import cn.daxpay.open.payment.old.pay.service.trade.pay.PaySyncService;
@@ -31,7 +31,7 @@ public class UniSyncController {
@Operation(summary = "支付订单同步接口")
@PostMapping("/pay")
public DaxResult<PaySyncResult> pay(@RequestBody PaySyncParam param){
public DaxResult<NormalPaySyncResult> pay(@RequestBody NormalPaySyncParam param){
return DaxRes.ok(paySyncService.sync(param));
}

View File

@@ -10,9 +10,9 @@ import cn.daxpay.open.payment.common.service.MerchantPermissionService;
import cn.daxpay.open.payment.old.pay.anno.PaymentVerify;
import cn.daxpay.open.payment.pay.service.PayCloseService;
import cn.daxpay.open.payment.pay.service.NormalPayService;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayCloseParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.PayResult;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayCloseParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import cn.daxpay.open.payment.unipay.result.trade.pay.NormalPayResult;
import cn.daxpay.open.platform.core.enums.pay.trade.TradeSourceEnum;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -37,7 +37,7 @@ public class UniTradeController {
@Operation(summary = "支付接口")
@PostMapping("/pay")
public DaxResult<PayResult> pay(@RequestBody PayParam payParam){
public DaxResult<NormalPayResult> pay(@RequestBody NormalPayParam payParam){
if (!permConfigService.hasApiPerm(PaymentApiEnum.PAY.getCode())){
// 订单: 该商户没有此接口的权限
throw new OperationFailException(CommonCode.FAIL_CODE, "error.payment.order.merchantNoApiPermission");
@@ -47,7 +47,7 @@ public class UniTradeController {
@Operation(summary = "关闭和撤销接口")
@PostMapping("/close")
public DaxResult<Void> close(@RequestBody PayCloseParam param){
public DaxResult<Void> close(@RequestBody NormalPayCloseParam param){
if ( permConfigService.hasApiPerm(PaymentApiEnum.CLOSE.getCode())){
// 订单: 该商户没有此接口的权限
throw new OperationFailException(CommonCode.FAIL_CODE, "error.payment.order.merchantNoApiPermission");

View File

@@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(title = "支付关闭参数")
public class PayCloseParam extends MerchantPaymentCommonParam {
public class NormalPayCloseParam extends MerchantPaymentCommonParam {
/// 支付订单号/商户订单号/通道订单号至少要传输一个支付订单号 > 商户订单号 > 通道订单号
@Schema(description = "订单号")

View File

@@ -14,12 +14,12 @@ import lombok.EqualsAndHashCode;
import java.time.OffsetDateTime;
import java.util.List;
/// # 统一下单参数国内普通支付
/// # 普通支付下单参数
///
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(title = "支付参数")
public class PayParam extends MerchantPaymentCommonParam {
public class NormalPayParam extends MerchantPaymentCommonParam {
// ===== 业务核心 =====

View File

@@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(title = "支付单查询参数")
public class QueryPayParam extends MerchantPaymentCommonParam {
public class NormalPayQueryParam extends MerchantPaymentCommonParam {
/// 支付订单号/商户订单号/通道订单号至少要传输一个支付订单号 > 商户订单号 > 通道订单号
@Schema(description = "订单号")

View File

@@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(title = "支付订单信息同步参数")
public class PaySyncParam extends MerchantPaymentCommonParam {
public class NormalPaySyncParam extends MerchantPaymentCommonParam {
/// 支付订单号/商户订单号/通道订单号至少要传输一个支付订单号 > 商户订单号 > 通道订单号
@Schema(description = "订单号")

View File

@@ -16,7 +16,7 @@ import java.time.OffsetDateTime;
@Data
@Accessors(chain = true)
@Schema(title = "支付订单")
public class PayOrderResult {
public class NormalPayOrderResult {
/// 商户订单号
@Schema(description = "商户订单号")

View File

@@ -10,7 +10,7 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@Schema(title = "统一支付响应参数")
public class PayResult {
public class NormalPayResult {
/// 订单ID
@Schema(description = "订单ID")

View File

@@ -10,7 +10,7 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@Schema(title = "支付同步结果")
public class PaySyncResult {
public class NormalPaySyncResult {
/// 退款订单同步后的状态状态
/// @see PayStatusEnum

View File

@@ -7,7 +7,7 @@ import cn.daxpay.open.payment.merchant.service.route.runtime.PayRouteProductReso
import cn.daxpay.open.payment.merchant.service.route.support.PayRouteI18nHelper;
import cn.daxpay.open.payment.old.pay.support.ProductStrategySupport;
import cn.daxpay.open.payment.strategy.product.AbsProductStrategy;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import cn.daxpay.open.platform.core.code.CommonErrorCode;
import cn.daxpay.open.platform.core.enums.pay.channel.PayCapabilityEnum;
import cn.daxpay.open.platform.core.enums.pay.channel.PayMethodEnum;
@@ -31,7 +31,7 @@ public class PayRouteBasicMatcher {
private final PayRouteProductResolver productResolver;
/// 基础模式匹配
public RouteHit match(List<PayRouteBasicConfig> basicConfigs, PayParam payParam) {
public RouteHit match(List<PayRouteBasicConfig> basicConfigs, NormalPayParam payParam) {
if (StrUtil.isBlank(payParam.getMethod())) {
// 场景模式下须选择支付方式
throw new BizInfoException(CommonErrorCode.VALIDATE_PARAMETERS_ERROR, "pay.route.error.sceneMethodRequired");

View File

@@ -2,7 +2,7 @@ package cn.daxpay.open.payment.merchant.service.route.model;
/// # 通道路由命中结果
///
/// 匹配成功后得到的支付产品、通道商户及能力,供填充 PayParam。
/// 匹配成功后得到的支付产品、通道商户及能力,供填充 NormalPayParam。
///
/// @param product 支付产品编码(由通道商户号派生)
/// @param channelMchNo 通道商户号(场景/基础模式命中的核心定位字段)

View File

@@ -13,7 +13,7 @@ import cn.daxpay.open.payment.merchant.service.route.model.PayRouteBundle;
import cn.daxpay.open.payment.old.pay.support.ProductStrategySupport;
import cn.daxpay.open.payment.pay.service.route.PayRouteFacade;
import cn.daxpay.open.payment.strategy.product.AbsProductStrategy;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import cn.daxpay.open.platform.common.i18n.util.I18nUtil;
import cn.daxpay.open.platform.core.enums.pay.channel.PayCapabilityEnum;
import cn.daxpay.open.platform.core.enums.pay.channel.PayMethodEnum;
@@ -49,7 +49,7 @@ public class PayRouteService implements PayRouteFacade {
/// 实付路由解析:直定模式优先,否则按策略模式匹配
@Override
public void resolve(PayParam payParam) {
public void resolve(NormalPayParam payParam) {
// 直定模式:指定通道商户号,跳过路由
if (StrUtil.isNotBlank(payParam.getChannelMchNo())) {
resolveDirect(payParam);
@@ -69,7 +69,7 @@ public class PayRouteService implements PayRouteFacade {
}
/// 直定模式capability 必填由通道商户推导产品method 未传时由(通道商户, 能力)反推回填
private void resolveDirect(PayParam payParam) {
private void resolveDirect(NormalPayParam payParam) {
String channelMchNo = payParam.getChannelMchNo();
String capability = payParam.getCapability();
// 传值模式: 支付能力必填
@@ -116,15 +116,15 @@ public class PayRouteService implements PayRouteFacade {
}
/// 按路由模式委托匹配器;未识别模式按场景模式处理
private RouteHit resolveByMode(PayRouteBundle bundle, PayParam payParam, String mode) {
private RouteHit resolveByMode(PayRouteBundle bundle, NormalPayParam payParam, String mode) {
if (Objects.equals(mode, PayRouteModeEnum.BASIC.getCode())) {
return basicMatcher.match(bundle.getBasicConfigs(), payParam);
}
return PayRouteSceneMatcher.match(bundle.getSceneConfigs(), payParam);
}
/// 将命中结果写入 PayParam回填 product(由通道商户号派生)、通道商户号、支付能力
private void fillPayParam(PayParam payParam, RouteHit hit) {
/// 将命中结果写入 NormalPayParam回填 product(由通道商户号派生)、通道商户号、支付能力
private void fillPayParam(NormalPayParam payParam, RouteHit hit) {
String product = StrUtil.isNotBlank(hit.product())
? hit.product()
: productResolver.productOfChannelMchNo(hit.channelMchNo());

View File

@@ -2,7 +2,7 @@ package cn.daxpay.open.payment.merchant.service.route.scene;
import cn.daxpay.open.payment.merchant.entity.route.scene.PayRouteSceneConfig;
import cn.daxpay.open.payment.merchant.service.route.model.RouteHit;
import cn.daxpay.open.payment.unipay.param.trade.pay.PayParam;
import cn.daxpay.open.payment.unipay.param.trade.pay.NormalPayParam;
import cn.daxpay.open.platform.core.code.CommonErrorCode;
import cn.daxpay.open.platform.core.exception.BizInfoException;
import cn.hutool.core.collection.CollUtil;
@@ -20,7 +20,7 @@ import java.util.Objects;
public class PayRouteSceneMatcher {
/// 场景模式匹配:按 method 精确命中唯一配置行
public RouteHit match(List<PayRouteSceneConfig> configs, PayParam payParam) {
public RouteHit match(List<PayRouteSceneConfig> configs, NormalPayParam payParam) {
if (CollUtil.isEmpty(configs)) {
return null;
}