package com.jeequan.jeepay.core.model.openapi.biz.transfer;

import com.jeequan.jeepay.core.validate.Add;
import lombok.Data;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * 代付订单请求参数
 *
 * @author deng
 * @since 2024/5/15
 */
@Data
public class TransferOrderParam {

    /**
     * 转账发起方ID
     */
    @NotBlank(message="转账发起方ID不能为空", groups = {Add.class})
    private String transferFqId;

    /**
     * 商户订单号 外部订单号
     */
    @NotBlank(message="商户订单号不能为空", groups = {Add.class})
    private String mchOrderNo;

    /**
     * 带付接口代码
     */
    @NotBlank(message="支付接口代码不能为空", groups = {Add.class})
    private String ifCode;

    /** 入账方式  **/
    @NotBlank(message="入账方式不能为空", groups = {Add.class})
    private String entryType;

    /** 支付金额， 单位：分 **/
    @NotNull(message="转账金额不能为空", groups = {Add.class})
    @Min(value = 1, message = "转账金额不能小于1分")
    private Long amount;

    /** 货币代码 **/
    @NotBlank(message="货币代码不能为空", groups = {Add.class})
    private String currency;

    /** 收款账号 **/
    @NotBlank(message="收款账号不能为空", groups = {Add.class})
    private String accountNo;

    /** 收款账户名称 **/
    @NotBlank(message="收款账户名称不能为空", groups = {Add.class})
    private String accountName;

    /**
     * 收款账户类型
     */
    @NotBlank(message="收款账户类型不能为空", groups = {Add.class})
    private String accountType;

    private Long mchOrderFeeAmount;

    private String transferId;

    /** 收款人开户行名称 **/
    private String bankName;

    /** 收款账户开户行所在省 */
    private String bankProvinceName;

    /** 收款账户开户行所在市 */
    private String bankCityName;

    /** 开户支行名称 */
    private String bankBranchName;

    /** 客户端IP地址 **/
    private String clientIp;

    /** 转账备注信息 **/
    @NotBlank(message="转账备注信息不能为空", groups = {Add.class})
    private String transferDesc;

    /** 异步通知地址 **/
    private String notifyUrl;

    /** 特定渠道发起额外参数 **/
    private String channelExtra;

    /** 商户扩展参数 **/
    private String extParam;

    /** 安全密码 */
    @NotBlank(message="支付密码不能为空", groups = {Add.class})
    private String sipw;
}
