feat 支付宝转账接口相关调整

This commit is contained in:
DaxPay
2024-06-17 20:04:52 +08:00
parent f3703a7ced
commit b19888d520
34 changed files with 607 additions and 74 deletions

View File

@@ -89,6 +89,10 @@ public interface AliPayCode {
/** 返回退款时间 */
String GMT_REFUND_PAY = "gmt_refund_pay";
// 转账状态
/** 转账成功 */
String TRANSFER_SUCCESS = "SUCCESS";
// 错误提示
/** 交易不存在 */
String ACQ_TRADE_NOT_EXIST = "ACQ.TRADE_NOT_EXIST";

View File

@@ -19,7 +19,7 @@ public class TransferLocal {
private String outTransferNo;
/** 状态 */
private TransferStatusEnum status = TransferStatusEnum.SUCCESS;
private TransferStatusEnum status = TransferStatusEnum.TRANSFERRING;
/** 完成时间 */
private LocalDateTime finishTime;

View File

@@ -3,22 +3,29 @@ package cn.daxpay.single.service.core.channel.alipay.service;
import cn.bootx.platform.common.core.util.LocalDateTimeUtil;
import cn.daxpay.single.code.PaySyncStatusEnum;
import cn.daxpay.single.code.RefundSyncStatusEnum;
import cn.daxpay.single.code.TransferStatusEnum;
import cn.daxpay.single.result.sync.TransferSyncResult;
import cn.daxpay.single.service.code.AliPayCode;
import cn.daxpay.single.service.core.channel.alipay.entity.AliPayConfig;
import cn.daxpay.single.service.core.order.pay.entity.PayOrder;
import cn.daxpay.single.service.core.order.refund.entity.RefundOrder;
import cn.daxpay.single.service.core.order.transfer.entity.TransferOrder;
import cn.daxpay.single.service.core.payment.sync.result.PayRemoteSyncResult;
import cn.daxpay.single.service.core.payment.sync.result.RefundRemoteSyncResult;
import cn.hutool.json.JSONUtil;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.domain.AlipayFundTransCommonQueryModel;
import com.alipay.api.domain.AlipayTradeFastpayRefundQueryModel;
import com.alipay.api.domain.AlipayTradeQueryModel;
import com.alipay.api.request.AlipayFundTransCommonQueryRequest;
import com.alipay.api.request.AlipayTradeFastpayRefundQueryRequest;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.response.AlipayFundTransCommonQueryResponse;
import com.alipay.api.response.AlipayTradeFastpayRefundQueryResponse;
import com.alipay.api.response.AlipayTradeQueryResponse;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -140,4 +147,26 @@ public class AliPaySyncService {
}
return syncResult;
}
/**
* 转账同步
*/
@SneakyThrows
public TransferSyncResult syncTransferStatus(TransferOrder transferOrder){
AlipayClient alipayClient = aliPayConfigService.getAlipayClient();
// 构造请求参数以调用接口
AlipayFundTransCommonQueryRequest request = new AlipayFundTransCommonQueryRequest();
AlipayFundTransCommonQueryModel model = new AlipayFundTransCommonQueryModel();
// 设置销售产品码
model.setProductCode("STD_RED_PACKET");
// 设置描述特定的业务场景
model.setBizScene("PERSONAL_PAY");
// 设置商户转账唯一订单号
model.setOutBizNo(transferOrder.getTransferNo());
request.setBizModel(model);
AlipayFundTransCommonQueryResponse response = alipayClient.execute(request);
System.out.println(response.getBody());
return new TransferSyncResult().setStatus(TransferStatusEnum.FAIL.getCode());
}
}

View File

@@ -8,17 +8,16 @@ import cn.daxpay.single.service.common.context.TransferLocal;
import cn.daxpay.single.service.common.local.PaymentContextLocal;
import cn.daxpay.single.service.core.channel.alipay.entity.AliPayConfig;
import cn.daxpay.single.service.core.order.transfer.entity.TransferOrder;
import cn.daxpay.single.util.OrderNoGenerateUtil;
import cn.daxpay.single.util.PayUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.util.StrUtil;
import com.alipay.api.AlipayClient;
import com.alipay.api.domain.AlipayFundAccountQueryModel;
import com.alipay.api.domain.AlipayFundTransToaccountTransferModel;
import com.alipay.api.domain.AlipayFundTransUniTransferModel;
import com.alipay.api.domain.Participant;
import com.alipay.api.request.AlipayFundAccountQueryRequest;
import com.alipay.api.request.AlipayFundTransToaccountTransferRequest;
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.response.AlipayFundAccountQueryResponse;
import com.alipay.api.response.AlipayFundTransToaccountTransferResponse;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@@ -57,18 +56,35 @@ public class AliPayTransferService {
@SneakyThrows
public void transfer(TransferOrder order, AliPayConfig aliPayConfig){
AlipayClient alipayClient = aliPayConfigService.getAlipayClient(aliPayConfig);
AlipayFundTransToaccountTransferModel model = new AlipayFundTransToaccountTransferModel();
model.setAmount(PayUtil.conversionAmount(order.getAmount()).toString());
model.setOutBizNo(OrderNoGenerateUtil.transfer());
model.setPayeeType(order.getPayeeType());
model.setPayeeAccount(order.getPayeeAccount());
model.setPayerShowName(order.getPayerShowName());
// 标题需要用附加方式传输进去
model.setExtParam(StrUtil.format("{order_title: '{}'}", order.getTitle()));
// 构造请求参数以调用接口
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
// 设置转账业务的标题
model.setOrderTitle(order.getTitle());
// 设置描述特定的业务场景
model.setBizScene("DIRECT_TRANSFER");
// 设置业务产品码
model.setProductCode("TRANS_ACCOUNT_NO_PWD");
// 设置转账业务请求的扩展参数
model.setBusinessParams("{payer_show_name_use_alias: true}");
// 设置业务备注
model.setRemark(order.getReason());
// 设置商家侧唯一订单号
model.setOutBizNo(order.getTransferNo());
// 设置订单总金额
model.setTransAmount(PayUtil.conversionAmount(order.getAmount()).toString());
// 设置收款方信息
Participant payeeInfo = new Participant();
payeeInfo.setIdentity(order.getPayeeAccount());
payeeInfo.setName(order.getPayeeName());
payeeInfo.setIdentityType(order.getPayeeType());
model.setPayeeInfo(payeeInfo);
model.setRemark(order.getReason());
AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest();
request.setBizModel(model);
AlipayFundTransToaccountTransferResponse response = alipayClient.execute(request);
AlipayFundTransUniTransferResponse response = alipayClient.execute(request);
if (!Objects.equals(AliPayCode.SUCCESS, response.getCode())) {
log.error("网关返回退款失败: {}", response.getSubMsg());
throw new PayFailureException(response.getSubMsg());
@@ -77,9 +93,10 @@ public class AliPayTransferService {
// 通道转账号
transferInfo.setOutTransferNo(response.getOrderId());
// 有完成时间代表处理完成
String payDate = response.getPayDate();
if (StrUtil.isNotBlank(payDate)){
LocalDateTime time = LocalDateTimeUtil.parse(payDate, DatePattern.NORM_DATETIME_PATTERN);
if (Objects.equals(response.getStatus(), AliPayCode.TRANSFER_SUCCESS)){
// 时间
String transDate = response.getTransDate();
LocalDateTime time = LocalDateTimeUtil.parse(transDate, DatePattern.NORM_DATETIME_PATTERN);
transferInfo.setFinishTime(time).setStatus(TransferStatusEnum.SUCCESS);
}
}

View File

@@ -7,7 +7,6 @@ import cn.bootx.platform.common.query.generator.QueryGenerator;
import cn.daxpay.single.code.PayStatusEnum;
import cn.daxpay.single.code.RefundStatusEnum;
import cn.daxpay.single.service.core.order.refund.entity.RefundOrder;
import cn.daxpay.single.service.param.order.PayOrderQuery;
import cn.daxpay.single.service.param.order.RefundOrderQuery;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -86,7 +85,7 @@ public class RefundOrderManager extends BaseManager<RefundOrderMapper, RefundOrd
/**
* 查询汇总金额
*/
public Integer getTalAmount(PayOrderQuery query){
public Integer getTalAmount(RefundOrderQuery query){
QueryWrapper<RefundOrder> generator = QueryGenerator.generator(query);
generator.eq(MpUtil.getColumnName(RefundOrder::getStatus), PayStatusEnum.SUCCESS.getCode());
return baseMapper.getTalAmount(generator);

View File

@@ -11,7 +11,6 @@ import cn.daxpay.single.service.core.order.refund.convert.RefundOrderConvert;
import cn.daxpay.single.service.core.order.refund.dao.RefundOrderManager;
import cn.daxpay.single.service.core.order.refund.entity.RefundOrder;
import cn.daxpay.single.service.dto.order.refund.RefundOrderDto;
import cn.daxpay.single.service.param.order.PayOrderQuery;
import cn.daxpay.single.service.param.order.RefundOrderQuery;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -89,7 +88,7 @@ public class RefundOrderQueryService {
/**
* 查询支付总金额
*/
public Integer getTotalAmount(PayOrderQuery param) {
public Integer getTotalAmount(RefundOrderQuery param) {
return refundOrderManager.getTalAmount(param);
}

View File

@@ -50,8 +50,6 @@ public class RefundOrderService {
refundParam.setReason(param.getReason());
refundParam.setReqTime(LocalDateTime.now());
refundParam.setClientIp(ip);
// 手动初始化上下文
paymentAssistService.initRequest(refundParam);
// 调用统一退款接口
refundService.refund(refundParam);
}
@@ -60,8 +58,7 @@ public class RefundOrderService {
* 重新退款
*/
public void resetRefund(Long id){
// 查询扩展信息
// 查询信息
RefundOrder refundOrder = refundOrderManager.findById(id)
.orElseThrow(() -> new DataNotExistException("未找到退款订单"));
@@ -76,8 +73,7 @@ public class RefundOrderService {
refundParam.setAttach(refundOrder.getAttach());
refundParam.setReqTime(LocalDateTime.now());
refundParam.setClientIp(ip);
// 手动初始化请求上下文
paymentAssistService.initRequest(refundParam);
// 调用统一退款接口
refundService.refund(refundParam);
}
}

View File

@@ -1,5 +1,6 @@
package cn.daxpay.single.service.core.order.transfer.convert;
import cn.daxpay.single.result.order.TransferOrderResult;
import cn.daxpay.single.service.core.order.transfer.entity.TransferOrder;
import cn.daxpay.single.service.dto.order.transfer.TransferOrderDto;
import org.mapstruct.Mapper;
@@ -15,4 +16,7 @@ public interface TransferOrderConvert {
TransferOrderConvert CONVERT = Mappers.getMapper(TransferOrderConvert.class);
TransferOrderDto convert(TransferOrder in);
TransferOrderResult convertResult(TransferOrder in);
}

View File

@@ -1,11 +1,21 @@
package cn.daxpay.single.service.core.order.transfer.dao;
import cn.bootx.platform.common.core.rest.param.PageParam;
import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
import cn.bootx.platform.common.mybatisplus.util.MpUtil;
import cn.bootx.platform.common.query.generator.QueryGenerator;
import cn.daxpay.single.code.PayStatusEnum;
import cn.daxpay.single.service.core.order.refund.entity.RefundOrder;
import cn.daxpay.single.service.core.order.transfer.entity.TransferOrder;
import cn.daxpay.single.service.param.order.TransferOrderQuery;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;
import java.util.Optional;
/**
*
* @author xxm
@@ -15,4 +25,37 @@ import org.springframework.stereotype.Repository;
@Repository
@RequiredArgsConstructor
public class TransferOrderManager extends BaseManager<TransferOrderMapper, TransferOrder> {
/**
* 分页
*/
public Page<TransferOrder> page(PageParam pageParam, TransferOrderQuery query) {
Page<TransferOrder> mpPage = MpUtil.getMpPage(pageParam, TransferOrder.class);
QueryWrapper<TransferOrder> generator = QueryGenerator.generator(query);
return page(mpPage,generator);
}
/**
* 根据转账号查询
*/
public Optional<TransferOrder> findByTransferNo(String transferNo) {
return findByField(TransferOrder::getTransferNo, transferNo);
}
/**
* 根据商户转账号查询
*/
public Optional<TransferOrder> findByBizTransferNo(String bizTransferNo) {
return findByField(TransferOrder::getBizTransferNo, bizTransferNo);
}
/**
* 查询汇总金额
*/
public Integer getTalAmount(TransferOrderQuery query){
QueryWrapper<TransferOrderQuery> generator = QueryGenerator.generator(query);
generator.eq(MpUtil.getColumnName(RefundOrder::getStatus), PayStatusEnum.SUCCESS.getCode());
return baseMapper.getTalAmount(generator);
}
}

View File

@@ -1,8 +1,13 @@
package cn.daxpay.single.service.core.order.transfer.dao;
import cn.daxpay.single.service.core.order.transfer.entity.TransferOrder;
import cn.daxpay.single.service.param.order.TransferOrderQuery;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
*
@@ -11,4 +16,10 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface TransferOrderMapper extends BaseMapper<TransferOrder> {
/**
* 查询转账总金额
*/
@Select("select sum(amount) from pay_transfer_order ${ew.customSqlSegment}")
Integer getTalAmount(@Param(Constants.WRAPPER) QueryWrapper<TransferOrderQuery> generator);
}

View File

@@ -76,10 +76,6 @@ public class TransferOrder extends MpBaseEntity implements EntityBaseFunction<Tr
@DbColumn(comment = "付款方", length = 100)
private String payer;
/** 付款方显示名称 */
@DbColumn(comment = "付款方显示名称", length = 50)
private String payerShowName;
/**
* 收款人类型
* @see TransferPayeeTypeEnum

View File

@@ -0,0 +1,94 @@
package cn.daxpay.single.service.core.order.transfer.service;
import cn.bootx.platform.common.core.exception.DataNotExistException;
import cn.bootx.platform.common.core.rest.PageResult;
import cn.bootx.platform.common.core.rest.param.PageParam;
import cn.bootx.platform.common.mybatisplus.util.MpUtil;
import cn.daxpay.single.exception.pay.PayFailureException;
import cn.daxpay.single.param.payment.transfer.QueryTransferParam;
import cn.daxpay.single.result.order.TransferOrderResult;
import cn.daxpay.single.service.core.order.transfer.convert.TransferOrderConvert;
import cn.daxpay.single.service.core.order.transfer.dao.TransferOrderManager;
import cn.daxpay.single.service.core.order.transfer.entity.TransferOrder;
import cn.daxpay.single.service.dto.order.transfer.TransferOrderDto;
import cn.daxpay.single.service.param.order.TransferOrderQuery;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Objects;
import java.util.Optional;
/**
* 转账订单查询服务
* @author xxm
* @since 2024/3/21
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class TransferOrderQueryService {
private final TransferOrderManager transferOrderManager;
/**
* 分页查询
*/
public PageResult<TransferOrderDto> page(PageParam pageParam, TransferOrderQuery query) {
Page<TransferOrder> page = transferOrderManager.page(pageParam, query);
return MpUtil.convert2DtoPageResult(page);
}
/**
* 根据id查询
*/
public TransferOrderDto findById(Long id) {
return transferOrderManager.findById(id).map(TransferOrder::toDto)
.orElseThrow(() -> new DataNotExistException("转账订单不存在"));
}
/**
* 根据转账号查询
*/
public TransferOrderDto findByTransferNo(String transferNo){
return transferOrderManager.findByTransferNo(transferNo).map(TransferOrder::toDto)
.orElseThrow(() -> new DataNotExistException("转账订单扩展信息不存在"));
}
/**
* 根据转账号和商户转账号查询
*/
public Optional<TransferOrder> findByBizOrTransferNo(String transferNo, String bizTransferNo) {
if (StrUtil.isNotBlank(transferNo)){
return transferOrderManager.findByTransferNo(transferNo);
} else if (StrUtil.isNotBlank(bizTransferNo)){
return transferOrderManager.findByBizTransferNo(bizTransferNo);
} else {
return Optional.empty();
}
}
/**
* 查询转账订单
*/
public TransferOrderResult queryTransferOrder(QueryTransferParam param) {
// 校验参数
if (StrUtil.isBlank(param.getTransferNo()) && Objects.isNull(param.getBizTransferNo())){
throw new PayFailureException("转账号或商户转账号不能都为空");
}
// 查询转账单
TransferOrder transferOrder = this.findByBizOrTransferNo(param.getTransferNo(), param.getBizTransferNo())
.orElseThrow(() -> new PayFailureException("转账订单不存在"));
return TransferOrderConvert.CONVERT.convertResult(transferOrder);
}
/**
* 查询支付总金额
*/
public Integer getTotalAmount(TransferOrderQuery param) {
return transferOrderManager.getTalAmount(param);
}
}

View File

@@ -5,9 +5,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* 转订单服务
* 转订单服务
* @author xxm
* @since 2024/3/21
* @since 2024/6/17
*/
@Slf4j
@Service
@@ -15,6 +15,17 @@ import org.springframework.stereotype.Service;
public class TransferOrderService {
/**
* 创建订单
* 手动转账
*/
public void transfer(){
}
/**
* 重试转账
*/
public void retryTransfer(){
}
}

View File

@@ -40,9 +40,8 @@ public class PaymentVerifyAop {
if (param instanceof PaymentCommonParam){
// 参数校验
ValidationUtil.validateParam(param);
// 请求上下文初始化
paymentAssistService.initRequest((PaymentCommonParam) param);
// 终端信息初始化
paymentAssistService.initClient((PaymentCommonParam) param);
// 参数签名校验
paymentAssistService.signVerify((PaymentCommonParam) param);
// 参数请求时间校验

View File

@@ -32,7 +32,7 @@ public class PaymentAssistService {
/**
* 初始化请求相关信息上下文
*/
public void initRequest(PaymentCommonParam paymentCommonParam){
public void initClient(PaymentCommonParam paymentCommonParam){
ClientLocal request = PaymentContextLocal.get().getClientInfo();
request.setClientIp(paymentCommonParam.getClientIp());
}

View File

@@ -0,0 +1,26 @@
package cn.daxpay.single.service.core.payment.sync.service;
import cn.daxpay.single.param.payment.transfer.TransferSyncParam;
import cn.daxpay.single.result.sync.TransferSyncResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* 转账同步接口
* @author xxm
* @since 2024/6/17
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class TransferSyncService {
/**
* 转账同步接口
*/
public TransferSyncResult sync(TransferSyncParam param) {
return null;
}
}

View File

@@ -2,7 +2,6 @@ package cn.daxpay.single.service.core.payment.sync.strategy.Refund;
import cn.daxpay.single.code.PayChannelEnum;
import cn.daxpay.single.code.PaySyncStatusEnum;
import cn.daxpay.single.service.core.channel.alipay.service.AliPayConfigService;
import cn.daxpay.single.service.core.channel.alipay.service.AliPaySyncService;
import cn.daxpay.single.service.core.payment.sync.result.RefundRemoteSyncResult;
import cn.daxpay.single.service.func.AbsRefundSyncStrategy;
@@ -22,8 +21,6 @@ import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROT
@RequiredArgsConstructor
public class AliRefundSyncStrategy extends AbsRefundSyncStrategy {
private final AliPayConfigService alipayConfigService;
private final AliPaySyncService aliPaySyncService;;
/**

View File

@@ -0,0 +1,18 @@
package cn.daxpay.single.service.core.payment.sync.strategy.transfer;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE;
/**
* 转账同步接口
* @author xxm
* @since 2024/6/17
*/
@Scope(SCOPE_PROTOTYPE)
@Component
@RequiredArgsConstructor
public class AliTransferSyncStrategy {
}

View File

@@ -39,7 +39,6 @@ public class TransferAssistService {
.setPayeeName(param.getPayeeName())
.setPayeeAccount(param.getPayeeAccount())
.setPayeeType(param.getPayeeType())
.setPayerShowName(param.getPayerShowName())
.setReason(param.getReason())
.setStatus(TransferStatusEnum.TRANSFERRING.getCode())
.setTitle(param.getTitle())

View File

@@ -27,7 +27,7 @@ public class TransferOrderDto extends BaseDto {
private String bizTransferNo;
/** 转账号 */
@Schema(description = "收款人账号")
@Schema(description = "账号")
private String transferNo;
/** 通道转账号 */
@@ -64,10 +64,6 @@ public class TransferOrderDto extends BaseDto {
@Schema(description = "付款方")
private String payer;
/** 付款方显示名称 */
@Schema(description = "付款方显示名称")
private String payerShowName;
/**
* 收款人类型
* @see TransferPayeeTypeEnum

View File

@@ -0,0 +1,29 @@
package cn.daxpay.single.service.func;
import cn.daxpay.single.code.PaySyncStatusEnum;
import cn.daxpay.single.service.core.order.transfer.entity.TransferOrder;
import cn.daxpay.single.service.core.payment.sync.result.RefundRemoteSyncResult;
import lombok.Getter;
import lombok.Setter;
/**
* 转账修复策略
* @author xxm
* @since 2024/6/17
*/
@Getter
@Setter
public abstract class AbsTransferSyncStrategy implements PayStrategy{
private TransferOrder transferOrder;
/**
* 同步前处理
*/
public void doBeforeHandler(){}
/**
* 异步支付单与支付网关进行状态比对后的结果
* @see PaySyncStatusEnum
*/
public abstract RefundRemoteSyncResult doSyncStatus();
}

View File

@@ -0,0 +1,101 @@
package cn.daxpay.single.service.param.order;
import cn.bootx.platform.common.core.annotation.QueryParam;
import cn.bootx.platform.common.core.rest.param.QueryOrder;
import cn.daxpay.single.code.PayChannelEnum;
import cn.daxpay.single.code.TransferPayeeTypeEnum;
import cn.daxpay.single.code.TransferTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* 转账订单查询参数
* @author xxm
* @since 2024/6/17
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
@Schema(title = "转账订单查询参数")
public class TransferOrderQuery extends QueryOrder {
/** 商户转账号 */
@Schema(description = "商户转账号")
@QueryParam(type = QueryParam.CompareTypeEnum.LIKE)
private String bizTransferNo;
/** 转账号 */
@Schema(description = "转账号")
@QueryParam(type = QueryParam.CompareTypeEnum.LIKE)
private String transferNo;
/** 通道转账号 */
@Schema(description = "通道转账号")
@QueryParam(type = QueryParam.CompareTypeEnum.LIKE)
private String outTransferNo;
/**
* 支付通道
* @see PayChannelEnum
*/
@Schema(description = "支付通道")
private String channel;
/** 转账金额 */
@Schema(description = "转账金额")
private Integer amount;
/** 标题 */
@Schema(description = "标题")
@QueryParam(type = QueryParam.CompareTypeEnum.LIKE)
private String title;
/**
* 转账类型, 微信使用
* @see TransferTypeEnum
*/
@Schema(description = "转账类型, 微信使用")
private String transferType;
/** 付款方 */
@Schema(description = "付款方")
private String payer;
/**
* 收款人类型
* @see TransferPayeeTypeEnum
*/
@Schema(description = "收款人类型")
private String payeeType;
/** 收款人账号 */
@Schema(description = "收款人账号")
private String payeeAccount;
/** 收款人姓名 */
@Schema(description = "收款人姓名")
@QueryParam(type = QueryParam.CompareTypeEnum.LIKE)
private String payeeName;
/**
* 状态
* @see cn.daxpay.single.code.TransferStatusEnum
*/
@Schema(description = "状态")
private String status;
/** 成功时间 */
@Schema(description = "成功时间")
private LocalDateTime successTime;
/**
* 错误码
*/
@Schema(description = "错误码")
private String errorCode;
}