package com.qxgmat.data.dao.entity;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;

@Table(name = "pay")
public class Pay implements Serializable {
    @Id
    @Column(name = "`id`")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * 支付流水id
     */
    @Column(name = "`no`")
    private String no;

    /**
     * 支付渠道
     */
    @Column(name = "`channel`")
    private String channel;

    /**
     * 商户号
     */
    @Column(name = "`pid`")
    private String pid;

    /**
     * 支付端ip
     */
    @Column(name = "`client_ip`")
    private String clientIp;

    /**
     * 支付金额
     */
    @Column(name = "`money`")
    private BigDecimal money;

    /**
     * 模块
     */
    @Column(name = "`module`")
    private String module;

    /**
     * 模块扩展信息
     */
    @Column(name = "`module_extend`")
    private String moduleExtend;

    /**
     * 商品标题
     */
    @Column(name = "`subject`")
    private String subject;

    /**
     * 商品描述
     */
    @Column(name = "`body`")
    private String body;

    /**
     * 支付渠道交易流水号
     */
    @Column(name = "`transaction_no`")
    private String transactionNo;

    /**
     * 3位iso货币代码，人民币为cny
     */
    @Column(name = "`currency`")
    private String currency;

    /**
     * 订单状态
     */
    @Column(name = "`trade_status`")
    private Integer tradeStatus;

    /**
     * 支付时间
     */
    @Column(name = "`pay_time`")
    private Date payTime;

    /**
     * 工具类型: 1账户, 2支付宝, 3微信
     */
    @Column(name = "`pay_type`")
    private Integer payType;

    /**
     * 创建时间
     */
    @Column(name = "`create_time`")
    private Date createTime;

    /**
     * 更新时间
     */
    @Column(name = "`update_time`")
    private Date updateTime;

    /**
     * 支付传递的扩展参数
     */
    @Column(name = "`pay_info`")
    private String payInfo;

    /**
     * 支付渠道最后的返回信息
     */
    @Column(name = "`result_info`")
    private String resultInfo;

    private static final long serialVersionUID = 1L;

    /**
     * @return id
     */
    public Long getId() {
        return id;
    }

    /**
     * @param id
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * 获取支付流水id
     *
     * @return no - 支付流水id
     */
    public String getNo() {
        return no;
    }

    /**
     * 设置支付流水id
     *
     * @param no 支付流水id
     */
    public void setNo(String no) {
        this.no = no;
    }

    /**
     * 获取支付渠道
     *
     * @return channel - 支付渠道
     */
    public String getChannel() {
        return channel;
    }

    /**
     * 设置支付渠道
     *
     * @param channel 支付渠道
     */
    public void setChannel(String channel) {
        this.channel = channel;
    }

    /**
     * 获取商户号
     *
     * @return pid - 商户号
     */
    public String getPid() {
        return pid;
    }

    /**
     * 设置商户号
     *
     * @param pid 商户号
     */
    public void setPid(String pid) {
        this.pid = pid;
    }

    /**
     * 获取支付端ip
     *
     * @return client_ip - 支付端ip
     */
    public String getClientIp() {
        return clientIp;
    }

    /**
     * 设置支付端ip
     *
     * @param clientIp 支付端ip
     */
    public void setClientIp(String clientIp) {
        this.clientIp = clientIp;
    }

    /**
     * 获取支付金额
     *
     * @return money - 支付金额
     */
    public BigDecimal getMoney() {
        return money;
    }

    /**
     * 设置支付金额
     *
     * @param money 支付金额
     */
    public void setMoney(BigDecimal money) {
        this.money = money;
    }

    /**
     * 获取模块
     *
     * @return module - 模块
     */
    public String getModule() {
        return module;
    }

    /**
     * 设置模块
     *
     * @param module 模块
     */
    public void setModule(String module) {
        this.module = module;
    }

    /**
     * 获取模块扩展信息
     *
     * @return module_extend - 模块扩展信息
     */
    public String getModuleExtend() {
        return moduleExtend;
    }

    /**
     * 设置模块扩展信息
     *
     * @param moduleExtend 模块扩展信息
     */
    public void setModuleExtend(String moduleExtend) {
        this.moduleExtend = moduleExtend;
    }

    /**
     * 获取商品标题
     *
     * @return subject - 商品标题
     */
    public String getSubject() {
        return subject;
    }

    /**
     * 设置商品标题
     *
     * @param subject 商品标题
     */
    public void setSubject(String subject) {
        this.subject = subject;
    }

    /**
     * 获取商品描述
     *
     * @return body - 商品描述
     */
    public String getBody() {
        return body;
    }

    /**
     * 设置商品描述
     *
     * @param body 商品描述
     */
    public void setBody(String body) {
        this.body = body;
    }

    /**
     * 获取支付渠道交易流水号
     *
     * @return transaction_no - 支付渠道交易流水号
     */
    public String getTransactionNo() {
        return transactionNo;
    }

    /**
     * 设置支付渠道交易流水号
     *
     * @param transactionNo 支付渠道交易流水号
     */
    public void setTransactionNo(String transactionNo) {
        this.transactionNo = transactionNo;
    }

    /**
     * 获取3位iso货币代码，人民币为cny
     *
     * @return currency - 3位iso货币代码，人民币为cny
     */
    public String getCurrency() {
        return currency;
    }

    /**
     * 设置3位iso货币代码，人民币为cny
     *
     * @param currency 3位iso货币代码，人民币为cny
     */
    public void setCurrency(String currency) {
        this.currency = currency;
    }

    /**
     * 获取订单状态
     *
     * @return trade_status - 订单状态
     */
    public Integer getTradeStatus() {
        return tradeStatus;
    }

    /**
     * 设置订单状态
     *
     * @param tradeStatus 订单状态
     */
    public void setTradeStatus(Integer tradeStatus) {
        this.tradeStatus = tradeStatus;
    }

    /**
     * 获取支付时间
     *
     * @return pay_time - 支付时间
     */
    public Date getPayTime() {
        return payTime;
    }

    /**
     * 设置支付时间
     *
     * @param payTime 支付时间
     */
    public void setPayTime(Date payTime) {
        this.payTime = payTime;
    }

    /**
     * 获取工具类型: 1账户, 2支付宝, 3微信
     *
     * @return pay_type - 工具类型: 1账户, 2支付宝, 3微信
     */
    public Integer getPayType() {
        return payType;
    }

    /**
     * 设置工具类型: 1账户, 2支付宝, 3微信
     *
     * @param payType 工具类型: 1账户, 2支付宝, 3微信
     */
    public void setPayType(Integer payType) {
        this.payType = payType;
    }

    /**
     * 获取创建时间
     *
     * @return create_time - 创建时间
     */
    public Date getCreateTime() {
        return createTime;
    }

    /**
     * 设置创建时间
     *
     * @param createTime 创建时间
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /**
     * 获取更新时间
     *
     * @return update_time - 更新时间
     */
    public Date getUpdateTime() {
        return updateTime;
    }

    /**
     * 设置更新时间
     *
     * @param updateTime 更新时间
     */
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    /**
     * 获取支付传递的扩展参数
     *
     * @return pay_info - 支付传递的扩展参数
     */
    public String getPayInfo() {
        return payInfo;
    }

    /**
     * 设置支付传递的扩展参数
     *
     * @param payInfo 支付传递的扩展参数
     */
    public void setPayInfo(String payInfo) {
        this.payInfo = payInfo;
    }

    /**
     * 获取支付渠道最后的返回信息
     *
     * @return result_info - 支付渠道最后的返回信息
     */
    public String getResultInfo() {
        return resultInfo;
    }

    /**
     * 设置支付渠道最后的返回信息
     *
     * @param resultInfo 支付渠道最后的返回信息
     */
    public void setResultInfo(String resultInfo) {
        this.resultInfo = resultInfo;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", id=").append(id);
        sb.append(", no=").append(no);
        sb.append(", channel=").append(channel);
        sb.append(", pid=").append(pid);
        sb.append(", clientIp=").append(clientIp);
        sb.append(", money=").append(money);
        sb.append(", module=").append(module);
        sb.append(", moduleExtend=").append(moduleExtend);
        sb.append(", subject=").append(subject);
        sb.append(", body=").append(body);
        sb.append(", transactionNo=").append(transactionNo);
        sb.append(", currency=").append(currency);
        sb.append(", tradeStatus=").append(tradeStatus);
        sb.append(", payTime=").append(payTime);
        sb.append(", payType=").append(payType);
        sb.append(", createTime=").append(createTime);
        sb.append(", updateTime=").append(updateTime);
        sb.append(", payInfo=").append(payInfo);
        sb.append(", resultInfo=").append(resultInfo);
        sb.append("]");
        return sb.toString();
    }

    public static Pay.Builder builder() {
        return new Pay.Builder();
    }

    public static class Builder {
        private Pay obj;

        public Builder() {
            this.obj = new Pay();
        }

        /**
         * @param id
         */
        public Builder id(Long id) {
            obj.setId(id);
            return this;
        }

        /**
         * 设置支付流水id
         *
         * @param no 支付流水id
         */
        public Builder no(String no) {
            obj.setNo(no);
            return this;
        }

        /**
         * 设置支付渠道
         *
         * @param channel 支付渠道
         */
        public Builder channel(String channel) {
            obj.setChannel(channel);
            return this;
        }

        /**
         * 设置商户号
         *
         * @param pid 商户号
         */
        public Builder pid(String pid) {
            obj.setPid(pid);
            return this;
        }

        /**
         * 设置支付端ip
         *
         * @param clientIp 支付端ip
         */
        public Builder clientIp(String clientIp) {
            obj.setClientIp(clientIp);
            return this;
        }

        /**
         * 设置支付金额
         *
         * @param money 支付金额
         */
        public Builder money(BigDecimal money) {
            obj.setMoney(money);
            return this;
        }

        /**
         * 设置模块
         *
         * @param module 模块
         */
        public Builder module(String module) {
            obj.setModule(module);
            return this;
        }

        /**
         * 设置模块扩展信息
         *
         * @param moduleExtend 模块扩展信息
         */
        public Builder moduleExtend(String moduleExtend) {
            obj.setModuleExtend(moduleExtend);
            return this;
        }

        /**
         * 设置商品标题
         *
         * @param subject 商品标题
         */
        public Builder subject(String subject) {
            obj.setSubject(subject);
            return this;
        }

        /**
         * 设置商品描述
         *
         * @param body 商品描述
         */
        public Builder body(String body) {
            obj.setBody(body);
            return this;
        }

        /**
         * 设置支付渠道交易流水号
         *
         * @param transactionNo 支付渠道交易流水号
         */
        public Builder transactionNo(String transactionNo) {
            obj.setTransactionNo(transactionNo);
            return this;
        }

        /**
         * 设置3位iso货币代码，人民币为cny
         *
         * @param currency 3位iso货币代码，人民币为cny
         */
        public Builder currency(String currency) {
            obj.setCurrency(currency);
            return this;
        }

        /**
         * 设置订单状态
         *
         * @param tradeStatus 订单状态
         */
        public Builder tradeStatus(Integer tradeStatus) {
            obj.setTradeStatus(tradeStatus);
            return this;
        }

        /**
         * 设置支付时间
         *
         * @param payTime 支付时间
         */
        public Builder payTime(Date payTime) {
            obj.setPayTime(payTime);
            return this;
        }

        /**
         * 设置工具类型: 1账户, 2支付宝, 3微信
         *
         * @param payType 工具类型: 1账户, 2支付宝, 3微信
         */
        public Builder payType(Integer payType) {
            obj.setPayType(payType);
            return this;
        }

        /**
         * 设置创建时间
         *
         * @param createTime 创建时间
         */
        public Builder createTime(Date createTime) {
            obj.setCreateTime(createTime);
            return this;
        }

        /**
         * 设置更新时间
         *
         * @param updateTime 更新时间
         */
        public Builder updateTime(Date updateTime) {
            obj.setUpdateTime(updateTime);
            return this;
        }

        /**
         * 设置支付传递的扩展参数
         *
         * @param payInfo 支付传递的扩展参数
         */
        public Builder payInfo(String payInfo) {
            obj.setPayInfo(payInfo);
            return this;
        }

        /**
         * 设置支付渠道最后的返回信息
         *
         * @param resultInfo 支付渠道最后的返回信息
         */
        public Builder resultInfo(String resultInfo) {
            obj.setResultInfo(resultInfo);
            return this;
        }

        public Pay build() {
            return this.obj;
        }
    }
}