using Newtonsoft.Json;
using System.Collections.Generic;
using Tea;

namespace LifePayment.Domain
{
    public class FundBatchDetailQueryResponse : AlipayBaseOutput
    {
        /// <summary>
        /// 支付宝系统内部批次请求id。
        /// </summary>
        [NameInMap("batch_trans_id")]
        public string BatchTransId
        {
            set;
            get;
        }

        /// <summary>
        /// 商户请求的批次流水号,同请求中的"batch_no"。(注:只有境外代发使用,其他场景返回out_batch_no)
        /// </summary>
        [NameInMap("batch_no")]
        public string BatchNo
        {
            set;
            get;
        }

        /// <summary>
        /// 批量代发业务标识。
        /// 批量代发到支付宝账户:BATCH_TRANS_ACC
        /// 批量代发到银行账户:BATCH_TRANS_BC
        ///(注:只有境外代发使用,其他场景返回product_code)
        /// </summary>
        [NameInMap("biz_code")]
        public string BizCode
        {
            set;
            get;
        }
        /// <summary>
        /// 批量代发业务场景。
        /// 如:GLOBAL:全球代发,多币种代发(包括除人民币以外的同币种代发),需要支付宝做货币兑换。
        /// LOCAL:纯人民币代发,不需要支付宝做货币兑换。
        /// MESSAGE_BATCH_PAY:接口报文代发。
        /// </summary>
        [NameInMap("biz_scene")]
        public string BizScene
        {
            set;
            get;
        }

        /// <summary>
        /// 境外场景批次状态:
        /// INIT 批次已接收
        /// WAIT_APPLY 批次资金准备中
        /// DEALING 批次处理中
        /// FINISH 批次处理完成
        /// FAIL 全部处理失败
        /// UNKNOWN 未知状态
        /// 其他场景批次状态:
        /// INIT 批次已接收
        /// WAIT_PAY 等待支付
        /// DEALING 批次处理中
        /// SUCCESS 批次处理全部成功
        /// PART_SUCCESS 批次处理部分成功
        /// FAIL 全部处理失败
        /// DISUSE 批次单据废弃
        /// INVALID 批次单据中明细全部无效
        /// </summary>
        [NameInMap("batch_status")]
        public string BatchStatus
        {
            set;
            get;
        }

        /// <summary>
        /// 批次失败错误码.
        /// 大部分情况是没有的.只有余额不足超时关闭或者付款方账户状态不正常
        /// </summary>
        [NameInMap("error_code")]
        public string ErrorCode
        {
            set;
            get;
        }

        /// <summary>
        /// 批次失败错误原因
        /// </summary>
        [NameInMap("fail_reason")]
        public string FailReason
        {
            set;
            get;
        }

        /// <summary>
        /// 签约了批量代发产品的支付宝账号。(注:境外代发场景加会返回)
        /// </summary>
        [NameInMap("sign_principal")]
        public string SignPrincipal
        {
            set;
            get;
        }

        /// <summary>
        /// 付款方需要支付的金额,受理成功(status为APPLIED)之后才会有值,受理成功之前是0。
        /// </summary>
        [NameInMap("payment_amount")]
        public string PaymentAmount
        {
            set;
            get;
        }

        /// <summary>
        /// 支付币种, 与代发请求的payment_currency相同.
        /// </summary>
        [NameInMap("payment_currency")]
        public string PaymentCurrency
        {
            set;
            get;
        }

        /// <summary>
        /// 当前记录数(默认500,达不到500按实际记录返回)。
        /// </summary>
        [NameInMap("page_size")]
        public string PageSize
        {
            set;
            get;
        }

        /// <summary>
        /// 当前页数
        /// </summary>
        [NameInMap("page_num")]
        public string PageNum
        {
            set;
            get;
        }

        /// <summary>
        /// 业务产品码。不同产品值不同,具体值联系支付宝确认。
        /// </summary>
        [NameInMap("product_code")]
        public string ProductCode
        {
            set;
            get;
        }

        /// <summary>
        /// 总页数
        /// </summary>
        [NameInMap("total_page_count")]
        public string TotalPageCount
        {
            set;
            get;
        }

        /// <summary>
        /// 商户的批次号
        /// </summary>
        [NameInMap("out_batch_no")]
        public string OutBatchNo
        {
            set;
            get;
        }

        /// <summary>
        /// 批次处理完成时间
        /// </summary>
        [NameInMap("gmt_finish")]
        public string GmtFinish
        {
            set;
            get;
        }

        /// <summary>
        /// 批次总金额
        /// </summary>
        [NameInMap("total_amount")]
        public string TotalAmount
        {
            set;
            get;
        }

        /// <summary>
        /// 批次支付完成时间
        /// </summary>
        [NameInMap("gmt_pay_finish")]
        public string GmtPayFinish
        {
            set;
            get;
        }

        /// <summary>
        /// 付款方身份标识
        /// </summary>
        [NameInMap("payer_id")]
        public string PayerId
        {
            set;
            get;
        }

        /// <summary>
        /// 成功金额
        /// </summary>
        [NameInMap("success_amount")]
        public string SuccessAmount
        {
            set;
            get;
        }

        /// <summary>
        /// 失败金额
        /// </summary>
        [NameInMap("fail_amount")]
        public string FailAmount
        {
            set;
            get;
        }


        /// <summary>
        /// 失败笔数
        /// </summary>
        [NameInMap("fail_count")]
        public string FailCount
        {
            set;
            get;
        }

        /// <summary>
        /// 成功笔数
        /// </summary>
        [NameInMap("success_count")]
        public string SuccessCount
        {
            set;
            get;
        }

        /// <summary>
        /// 总记录数
        /// </summary>
        [NameInMap("total_item_count")]
        public string TotalItemCount
        {
            set;
            get;
        }
        /// <summary>
        /// 1)当批次状态为INIT状态时,明细信息还未落地,返回明细信息为空
        /// 2)如果以上都没有问题,返回明细为空,请检查是否以下情况导致:
        /// 1. 校验商户只能查询自己上传的批次信息,批次号不存在或者不是该商户上传的批次。
        /// 2. 查询条件没有查询到结果,包括总共5页,商户要求查询第6页的内容。
        /// 3. 查询的状态不存在。
        /// </summary>
        [NameInMap("acc_detail_list")]
        public List<AccDetailModel> AccDetailList
        {
            set;
            get;
        }

    }

    public class AccDetailModel
    {

        /// <summary>
        /// 应付金额. 付款方应付金额.
        /// LOCAL场景下为空.
        /// </summary>
        [NameInMap("payment_amount")]
        public string PaymentAmount
        {
            set;
            get;
        }

        /// <summary>
        /// 支付币种.付款方应付的币种, 与批次请求时的payment_currency相同.
        /// </summary>
        [NameInMap("payment_currency")]
        public string PaymentCurrency
        {
            set;
            get;
        }

        /// <summary>
        /// 转账金额。代发请求中指定的trans_amount.
        /// </summary>
        [NameInMap("trans_amount")]
        public string TransAmount
        {
            set;
            get;
        }

        /// <summary>
        /// 转账币种
        /// </summary>
        [NameInMap("trans_currency")]
        public string TransCurrency
        {
            set;
            get;
        }

        /// <summary>
        /// 结算金额。
        /// 收款方实际收到的金额.
        /// biz_scene是LOCAL场景下,该参数返回空。
        /// </summary>
        [NameInMap("settlement_amount")]
        public string SettlementAmount
        {
            set;
            get;
        }

        /// <summary>
        /// 结算币种.收款方收到的币种. LOCAL场景下为空.
        /// </summary>
        [NameInMap("settlement_currency")]
        public string SettlementCurrency
        {
            set;
            get;
        }

        /// <summary>
        /// 收款方信息。
        /// </summary>
        [NameInMap("payee_info")]
        public AccPayeeInfo PayeeInfo
        {
            set;
            get;
        }

        /// <summary>
        /// 收款方身份认证信息。biz_scene=LOCAL时忽略该参数。
        /// </summary>
        [NameInMap("cert_info")]
        public CertInfo CertInfo
        {
            set;
            get;
        }

        /// <summary>
        /// 备注
        /// </summary>
        [NameInMap("remark")]
        public string Remark
        {
            set;
            get;
        }
        /// <summary>
        /// INIT:初始
        /// APPLIED:已下单
        /// DEALED:处理中
        /// SUCCESS:处理成功
        /// DISUSE:已废除
        /// FAIL:处理失败
        /// UNKNOWN:未知状态
        /// </summary>
        [NameInMap("status")]
        public string Status
        {
            set;
            get;
        }


        /// <summary>
        /// 是否需要通过alipay_order_no原单据重试.
        /// T: 需要;
        /// F或为空: 不需要.
        /// </summary>
        [NameInMap("need_retry")]
        public string NeedRetry
        {
            set;
            get;
        }

        /// <summary>
        /// 支付宝订单号
        /// </summary>
        [NameInMap("alipay_order_no")]
        public string AlipayOrderNo
        {
            set;
            get;
        }

        /// <summary>
        /// 商户明细订单号
        /// </summary>
        [NameInMap("out_biz_no")]
        public string OutBizNo
        {
            set;
            get;
        }

        /// <summary>
        /// 支付宝系统内部明细单号。
        /// </summary>
        [NameInMap("detail_id")]
        public string DetailId
        {
            set;
            get;
        }

        /// <summary>
        /// 明细失败错误码
        /// </summary>
        [NameInMap("error_code")]
        public string ErrorCode
        {
            set;
            get;
        }

        /// <summary>
        /// 明细失败错误原因
        /// </summary>
        [NameInMap("error_msg")]
        public string ErrorMsg
        {
            set;
            get;
        }

        /// <summary>
        /// 创建时间
        /// </summary>
        [NameInMap("gmt_create")]
        public string GmtCreate
        {
            set;
            get;
        }

        /// <summary>
        /// 完成时间
        /// </summary>
        [NameInMap("gmt_finish")]
        public string GmtFinish
        {
            set;
            get;
        }

        /// <summary>
        /// 子状态
        /// </summary>
        [NameInMap("sub_status")]
        public string SubStatus
        {
            set;
            get;
        }
    }

    public class AccPayeeInfo
    {
        /// <summary>
        /// 收款方电子钱包账号。
        /// </summary>
        [NameInMap("payee_account")]
        public string PayeeAccount
        {
            set;
            get;
        }

        /// <summary>
        /// 收款方电子钱包持有者姓名。
        /// </summary>
        [NameInMap("payee_name")]
        public string PayeeName
        {
            set;
            get;
        }
    }

    public class CertInfo
    {
        /// <summary>
        /// 代发时商家上传的收款方证件号码
        /// biz_scene=LOCAL时忽略该参数。
        /// </summary>
        [NameInMap("cert_no")]
        public string CertNo
        {
            set;
            get;
        }

        /// <summary>
        /// 代发时商家上传的收款方证件类型。
        /// biz_scene=LOCAL时忽略该参数。
        /// </summary>
        [NameInMap("cert_type")]
        public string CertType
        {
            set;
            get;
        }
    }

}