package org.jeecg.modules.pay.request.v3.labs;


import org.jeecg.modules.pay.core.LakalaPayConfig;
import org.jeecg.modules.pay.request.ReqData;
import org.jeecg.modules.pay.request.ReqLocationInfo;
import org.jeecg.modules.pay.request.v3.labs.accbusifields.ReqAccBusiFields;

/**
 * 被扫交易接口请求报文
 * 交易接口V3.0下支付类接口
 *
 * @author Mr丶xie
 * @version 1.0.0
 * @mail xielinke@lklink.cn
 */
public class MicropayRequest extends ReqData {

    private MicropayRequest() {
    }

    /**
     * 初始化被扫交易接口请求报文
     *
     * @param out_trade_no  商户交易流水号
     * @param auth_code     支付授权码
     * @param total_amount  金额
     * @param location_info 地址位置信息
     */
    public MicropayRequest(String out_trade_no, String auth_code, String total_amount, ReqLocationInfo location_info) {
        this.merchant_no = LakalaPayConfig.MERCHANT_NO;
        this.term_no = LakalaPayConfig.TERM_NO;
        this.out_trade_no = out_trade_no;
        this.auth_code = auth_code;
        this.total_amount = total_amount;
        this.location_info = location_info;
    }

    /**
     * 商户号
     * 拉卡拉分配的商户号
     */
    private String merchant_no;

    /**
     * 终端号
     * 拉卡拉分配的业务终端号
     */
    private String term_no;

    /**
     * 商户交易流水号
     * 商户系统唯一，不可重复
     */
    private String out_trade_no;

    /**
     * 支付授权码
     * 扫码支付授权码，设备读取用户APP中的条码或者二维码信息，用户付款码条形码规则见说明
     */
    private String auth_code;

    /**
     * 金额
     * 单位分，整数型字符
     */
    private String total_amount;

    /**
     * 地址位置信息
     * 地址位置信息，风控要求必送
     */
    private ReqLocationInfo location_info;

    /**
     * 业务模式
     * 业务模式： ACQ-收单 不填，默认为“ACQ-收单”
     */
    private String busi_mode;

    /**
     * 订单标题
     * 标题，用于简单描述订单或商品（账户端控制，实际最多42个字符），微信支付必送。
     */
    private String subject;

    /**
     * 拉卡拉支付业务订单号
     * 拉卡拉订单系统订单号，以拉卡拉支付业务订单号为驱动的支付行为，需上传该字段。
     * 订单交易下单，交易时上送订单系统订单号，交易流程中会校验有效性、判重
     */
    private String pay_order_no;

    /**
     * 商户通知地址
     */
    private String notify_url;

    /**
     * 结算类型
     * “0”或者空，常规结算方式；
     */
    private String settle_type;

    /**
     * 备注
     */
    private String remark;

    /**
     * 扫码类型
     * 0或不填：扫码支付 1：刷脸支付
     */
    private String scan_type;

    /**
     * 身份信息
     */
    private String identity_info;

    /**
     * 营销信息
     * 拉卡拉优惠相关信息，JSON格式。暂不支持
     */
    private String promo_info;

    /**
     * 账户端业务信息域
     */
    private ReqAccBusiFields acc_busi_fields;

    public String getMerchant_no() {
        return merchant_no;
    }

    public void setMerchant_no(String merchant_no) {
        this.merchant_no = merchant_no;
    }

    public String getTerm_no() {
        return term_no;
    }

    public void setTerm_no(String term_no) {
        this.term_no = term_no;
    }

    public String getOut_trade_no() {
        return out_trade_no;
    }

    public void setOut_trade_no(String out_trade_no) {
        this.out_trade_no = out_trade_no;
    }

    public String getAuth_code() {
        return auth_code;
    }

    public void setAuth_code(String auth_code) {
        this.auth_code = auth_code;
    }

    public String getTotal_amount() {
        return total_amount;
    }

    public void setTotal_amount(String total_amount) {
        this.total_amount = total_amount;
    }

    public ReqLocationInfo getLocation_info() {
        return location_info;
    }

    public void setLocation_info(ReqLocationInfo location_info) {
        this.location_info = location_info;
    }

    public String getBusi_mode() {
        return busi_mode;
    }

    public void setBusi_mode(String busi_mode) {
        this.busi_mode = busi_mode;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getPay_order_no() {
        return pay_order_no;
    }

    public void setPay_order_no(String pay_order_no) {
        this.pay_order_no = pay_order_no;
    }

    public String getNotify_url() {
        return notify_url;
    }

    public void setNotify_url(String notify_url) {
        this.notify_url = notify_url;
    }

    public String getSettle_type() {
        return settle_type;
    }

    public void setSettle_type(String settle_type) {
        this.settle_type = settle_type;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public String getScan_type() {
        return scan_type;
    }

    public void setScan_type(String scan_type) {
        this.scan_type = scan_type;
    }

    public String getIdentity_info() {
        return identity_info;
    }

    public void setIdentity_info(String identity_info) {
        this.identity_info = identity_info;
    }

    public String getPromo_info() {
        return promo_info;
    }

    public void setPromo_info(String promo_info) {
        this.promo_info = promo_info;
    }

    public ReqAccBusiFields getAcc_busi_fields() {
        return acc_busi_fields;
    }

    public void setAcc_busi_fields(ReqAccBusiFields acc_busi_fields) {
        this.acc_busi_fields = acc_busi_fields;
    }
}
