package com.jeeplus.assess.invoice.domain.OMS;

import com.google.common.collect.Lists;
import org.hibernate.validator.constraints.NotBlank;

import javax.validation.Valid;
import javax.validation.constraints.Digits;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.math.BigDecimal;
import java.util.List;

public class InvoiceOMSImportInfo {
    /**
     * 组织代码
     * 所属组织唯一标识，必填
     */
    @NotBlank(message = "组织代码deptCode不能为空")
    private String deptCode;

    /**
     * 订单号
     * 订单唯一标识，必填
     */
    @NotBlank(message = "订单号orderno不能为空")
    private String orderno;

    /**
     * 销售方名称
     * 必填
     */
    @NotBlank(message = "销售方名称sellerName不能为空")
    private String sellerName;

    /**
     * 销售方纳税人识别号
     * 必填
     */
    @NotBlank(message = "销售方纳税人识别号sellerTaxno不能为空")
    private String sellerTaxno;

    /**
     * 销售方地址
     */
    private String sellerAddr;

    /**
     * 销售方电话
     */
    private String sellerPhone;

    /**
     * 销售方开户行名称
     */
    private String sellerBank;

    /**
     * 销售方开户银行账号
     */
    private String sellerBankaccount;

    /**
     * 销售方国籍/地区代码
     * 二手车销售统一发票且销售方为自然人时必填
     */
    private String sellerNationality;

    /**
     * 销售方证件号码
     * 二手车销售统一发票且销售方为自然人时必填
     */
    private String sellerIdcardno;

    /**
     * 销售方证件类型
     * 二手车销售统一发票且销售方为自然人时必填
     */
    private String sellerIdcartype;

    /**
     * 销售方类型
     * 0:企业(默认) 1:自然人
     */
    @Pattern(regexp = "^$|0|1", message = "销售方类型sellerType只能传入：0(企业)、1(自然人)")
    private String sellerType;

    /**
     * 购方编号
     * 购方唯一标识为购方编号时必填
     */
    private String buyerCode;

    /**
     * 购买方名称
     * 购方唯一标识为购方名时必填
     */
    private String buyerName;

    /**
     * 购买方纳税人识别号
     */
    private String buyerTaxno;

    /**
     * 购买方地址
     */
    private String buyerAddr;

    /**
     * 购买方电话
     */
    private String buyerPhone;

    /**
     * 购买方开户行名称
     */
    private String buyerBank;

    /**
     * 购买方开户银行账号
     */
    private String buyerBankaccount;

    /**
     * 购买方国籍/地区代码
     * 特定要素为农产品收购发票等场景且购买方为自然人时必填
     */
    private String buyerNationality;

    /**
     * 购买方证件号码
     * 特定要素为农产品收购发票等场景且购买方为自然人时必填
     */
    private String buyerIdcardno;

    /**
     * 购买方证件类型
     * 特定要素为农产品收购发票等场景且购买方为自然人时必填
     */
    private String buyerIdcartype;

    /**
     * 购买方类型
     * 0:企业(默认) 1:自然人
     */
    @Pattern(regexp = "^$|0|1", message = "购买方类型buyerType只能传入：0(企业)、1(自然人)")
    private String buyerType;

    /**
     * 购买方手机号
     * 多个手机号之间用英文分号";"拼接
     */
    private String buyerCellphone;

    /**
     * 购买方邮箱
     * 多个邮箱地址之间用英文逗号","拼接
     */
    private String buyerEmail;

    /**
     * 密送人邮箱
     * 多个邮箱地址之间用英文逗号","拼接
     */
    private String bccEmail;

    /**
     * 抄送人邮箱
     * 多个邮箱地址之间用英文逗号","拼接
     */
    private String ccEmail;

    /**
     * 银行备注信息展示状态
     * 0:都不显示 1:仅显示销方信息 2:仅显示购方信息 3:都展示
     */
    @Pattern(regexp = "^$|0|1|2|3", message = "银行备注信息展示状态bankRemarkStatus只能传入：0-3的数字")
    private String bankRemarkStatus;

    /**
     * 地址电话备注信息展示状态
     * 0:都不显示 1:仅展示销方信息 2:仅展示购方信息 3:都展示
     */
    @Pattern(regexp = "^$|0|1|2|3", message = "地址电话备注信息展示状态addressRemarkStatus只能传入：0-3的数字")
    private String addressRemarkStatus;

    /**
     * 3%、1%税率开具理由
     * 1:开具发票为2022年3月31日前发生纳税义务的业务; 2:前期已开具相应征收率发票... 3:放弃享受免征增值税政策
     */
    @Pattern(regexp = "^$|1|2|3", message = "3%、1%税率开具理由surveyAnswerType只能传入：1-3的数字")
    private String surveyAnswerType;

    /**
     * 购买方经办人
     */
    private String buyerHandler;

    /**
     * 经办人身份证号码
     */
    private String buyerHandlerIdcardno;

    /**
     * 经办人联系电话
     */
    private String buyerHandlerPhone;

    /**
     * 开票类型
     * 01:红字发票 02:蓝字发票，必填
     */
    @NotBlank(message = "开票类型invKind不能为空")
    @Pattern(regexp = "^01|02$", message = "开票类型invKind只能传入：01(红字发票)、02(蓝字发票)")
    private String invKind;

    /**
     * 发票类型
     * 01:数电票(增值税专用发票) 02:数电票(普通发票)等，必填
     */
    @NotBlank(message = "发票类型invType不能为空")
    private String invType;

    /**
     * 订单日期
     * 格式：yyyy-MM-dd
     */
    @Pattern(regexp = "^$|\\d{4}-\\d{2}-\\d{2}", message = "订单日期orderDate格式错误，应为yyyy-MM-dd")
    private String orderDate;

    /**
     * 订单类型
     */
    private String orderType;

    /**
     * 原蓝票发票代码
     * 开具红票且蓝票发票类型为增值税发票时必传
     */
    private String originalInvcode;

    /**
     * 原蓝票发票号码
     * 红票必传
     */
    private String originalInvno;

    /**
     * 红字确认信息单编号
     * 红票必传
     */
    private String redNo;

    /**
     * 红字确认单id
     * 红票必传
     */
    private String redUuid;

    /**
     * 备注
     */
    private String remarks;

    /**
     * 合计金额（不含税）
     * 小数点后两位有效数字
     */
    @Digits(integer = 18, fraction = 2, message = "合计金额totalAmount格式错误，最多18位整数，保留2位小数")
    private BigDecimal totalAmount;

    /**
     * 合计税额
     * 小数点后两位有效数字
     */
    @Digits(integer = 18, fraction = 2, message = "合计税额totalTax格式错误，最多18位整数，保留2位小数")
    private BigDecimal totalTax;

    /**
     * 价税合计
     * 小数点后两位有效数字
     */
    @Digits(integer = 18, fraction = 2, message = "价税合计totalTaxamount格式错误，最多18位整数，保留2位小数")
    private BigDecimal totalTaxamount;

    /**
     * 差额征税标签
     * 空:非差额发票 01:差额开票 02:全额开票 03:销售自己使用过的固定资产
     */
    @Pattern(regexp = "^$|01|02|03", message = "差额征税标签diffFlag传入值不在合法范围内")
    private String diffFlag;

    /**
     * 减按征税标签
     */
    private String taxDeductionFlag;

    /**
     * 开票人
     */
    private String drawer;

    /**
     * 收款人
     */
    private String payee;

    /**
     * 复核人
     */
    private String checker;

    /**
     * 开票人证件号码
     * 乐企通道开具发票类型为机动车销售统一发票或特定要素为机动车时必填
     */
    private String drawerIdcardno;

    /**
     * 开票人证件类型
     * 乐企通道开具发票类型为机动车销售统一发票或特定要素为机动车时必填
     */
    private String drawerIdcardtype;

    /**
     * 收款银行名称
     */
    private String payeeBank;

    /**
     * 收款银行账号
     */
    private String payeeBankaccount;

    /**
     * 收购发票类型代码
     * 空:非收购 01:农产品收购 02:光伏收购 03:二手车收购
     */
    @Pattern(regexp = "^$|01|02|03", message = "收购发票类型代码purchaseLabel只能传入：01-03的数字")
    private String purchaseLabel;

    /**
     * 结算方式
     * 01:现金 02:银行转账 03:票据 04:第三方支付 05:预付卡 99:其他
     */
    @Pattern(regexp = "^$|01|02|03|04|05|99", message = "结算方式settlementType传入值不在合法范围内")
    private String settlementType;

    /**
     * 特定要素
     * 空:非特定要素 01:成品油发票 02:稀土发票 ... 52:二手车反向开具
     */
    private String specificFactor;

    /**
     * 数电纸票类型
     */
    private String paperType;

    /**
     * 操作员
     */
    private String operator;

    /**
     * 区域代码
     */
    private String areaCode;

    /**
     * 出口业务适用政策代码
     * 空:非出口业务 01:退税政策 02:免税政策 03:征税政策
     */
    @Pattern(regexp = "^$|01|02|03", message = "出口业务适用政策代码exportPolicyCode只能传入：01-03的数字")
    private String exportPolicyCode;

    /**
     * 增值税即征即退代码
     * 空:非增值税即征即退 01:软件产品发票 ... 12:铂金发票
     */
    @Pattern(regexp = "^$|01|02|03|04|05|06|07|08|09|10|11|12", message = "增值税即征即退代码vatCRCode传入值不在合法范围内")
    private String vatCRCode;

    /**
     * 应税行为发生地
     */
    private String taxablePlace;

    /**
     * 是否自动开票
     * 空:默认自动开票 N:不自动开票 Y:自动开票
     */
    @Pattern(regexp = "^$|N|Y", message = "是否自动开票autoMakeInv只能传入：N或Y")
    private String autoMakeInv;

    /**
     * 销售方证件类型
     */
    private String eertificateType;

    /**
     * 企业性质
     * 发票类型为二手车销售统一发票时必传
     * 07:二手车市场 08:二手车经销企业 09:二手车拍卖企业
     */
    @Pattern(regexp = "^$|07|08|09", message = "企业性质businessNature只能传入：07-09的数字")
    private String businessNature;

    /**
     * 二手车减免税
     * N:否 Y:是
     */
    @Pattern(regexp = "^$|N|Y", message = "二手车减免税usedCarTaxExemption只能传入：N或Y")
    private String usedCarTaxExemption;

    /**
     * 跨地市确认开票
     * 0:否 1:是
     */
    @Pattern(regexp = "^$|0|1", message = "跨地市确认开票crossCityConfirm只能传入：0或1")
    private String crossCityConfirm;

    /**
     * 多方共同购买标签
     * N:否 Y:是
     */
    @Pattern(regexp = "^$|N|Y", message = "多方共同购买标签jointBuyerFlag只能传入：N或Y")
    private String jointBuyerFlag;

    /**
     * 每千克煤炭发热量（千卡）
     * 煤炭商品不含税合计金额大于等于1000万时必填
     */
    @Digits(integer = 5, fraction = 0, message = "每千克煤炭发热量heatValuePerKgCoal格式错误，最多5位整数")
    private BigDecimal heatValuePerKgCoal;

    /**
     * 干基全硫（%）
     * 煤炭商品不含税合计金额大于等于1000万时必填
     */
    @Digits(integer = 6, fraction = 2, message = "干基全硫dryBasisTotalSulfur格式错误，最多6位整数，保留2位小数")
    private BigDecimal dryBasisTotalSulfur;

    /**
     * 干燥无灰基挥发分（%）
     * 煤炭商品不含税合计金额大于等于1000万时必填
     */
    @Digits(integer = 6, fraction = 2, message = "干燥无灰基挥发分dryAshFreeVolatileMatter格式错误，最多6位整数，保留2位小数")
    private BigDecimal dryAshFreeVolatileMatter;

    /**
     * 返回发票交付链接
     * 0:否 1:是
     */
    @Pattern(regexp = "^$|0|1", message = "返回发票交付链接returnDeliveryUrl只能传入：0或1")
    private String returnDeliveryUrl;

    /**
     * 是否获取医保电子结算清单
     * 0:否 1:是，默认为否
     */
    @Pattern(regexp = "^$|0|1", message = "是否获取医保电子结算清单fetchMiStatement只能传入：0或1")
    private String fetchMiStatement;

    /**
     * 医保交易流水号
     * 是否获取医保电子结算清单为是时必填
     */
    private String miTransactionId;

    /**
     * 医院业务流水号
     * 是否获取医保电子结算清单为是时必填
     */
    private String hisBizNo;

    /**
     * 医疗类别
     * 是否获取医保电子结算清单为是时必填
     * 0:门诊类(包含普通门诊、急诊) 1:住院类(包含普通住院...)
     */
    @Pattern(regexp = "^$|0|1", message = "医疗类别cureType只能传入：0或1")
    private String cureType;

    /**
     * 备用1-20 预留字段
     */
    private String spare1;
    private String spare2;
    private String spare3;
    private String spare4;
    private String spare5;
    private String spare6;
    private String spare7;
    private String spare8;
    private String spare9;
    private String spare10;
    private String spare11;
    private String spare12;
    private String spare13;
    private String spare14;
    private String spare15;
    private String spare16;
    private String spare17;
    private String spare18;
    private String spare19;
    private String spare20;



    // ======================== ✅ 核心修正：所有子实体 全部改为 List集合类型【全部在这里】✅ ========================
    // 发票明细行 (核心必传，至少1行，无上限)
    @Valid
    @Size(min = 1, message = "发票明细至少需要1行")
    private List<OrderItem> orderItems = Lists.newArrayList();

    // 附加要素列表 (蓝票+电子发票生效，无行数限制)
    @Valid
    private List<Additional> additionalList = Lists.newArrayList();

    // 建筑服务特定要素 (specificFactor=03 必填，业务规则：最多1行)
    @Valid
    @Size(max = 1, message = "建筑服务特定要素最多只能传入1行")
    private List<BuildingInfo> buildingInfo = Lists.newArrayList();

    // 货物运输服务特定要素 (specificFactor=04 必填，至少1行，最多2000行)
    @Valid
    @Size(min = 1, max = 2000, message = "货物运输要素列表至少1行，最多2000行")
    private List<GoodsTransport> goodsTransports = Lists.newArrayList();

    // 不动产销售特定要素 (specificFactor=05 必填，业务规则：最多1行)
    @Valid
    @Size(max = 1, message = "不动产销售特定要素最多只能传入1行")
    private List<RealPropertySellInfo> realPropertySellInfo = Lists.newArrayList();

    // 不动产经营租赁特定要素 (specificFactor=06 必填，行数与发票明细一致)
    @Valid
    private List<RealPropertyRentInfo> realPropertyRentInfo = Lists.newArrayList();

    // 代收车船税信息 (specificFactor=07 必填，业务规则：最多1行)
    @Valid
    @Size(max = 1, message = "代收车船税信息最多只能传入1行")
    private List<VehicleVesselInfo> vehicleVesselInfo = Lists.newArrayList();

    // 旅客运输服务特定要素 (specificFactor=09 必填，至少1行，最多2000行)
    @Valid
    @Size(min = 1, max = 2000, message = "旅客运输要素列表至少1行，最多2000行")
    private List<TravellerTransport> travellerTransports = Lists.newArrayList();

    // 拖拉机和联合收割机信息 (specificFactor=13 必填，业务规则：最多1行)
    @Valid
    @Size(max = 1, message = "拖拉机和联合收割机信息最多只能传入1行")
    private List<HarvesterInfo> harvesterInfo = Lists.newArrayList();

    // 机动车销售统一发票信息 (invType=83/87 必填，业务规则：最多1行)
    @Valid
    @Size(max = 1, message = "机动车销售发票信息最多只能传入1行")
    private List<Vehicle> vehicle = Lists.newArrayList();

    // 二手车销售统一发票信息 (invType=84/88 必填，业务规则：最多1行)
    @Valid
    @Size(max = 1, message = "二手车销售发票信息最多只能传入1行")
    private List<UsedCarSale> usedCarSales = Lists.newArrayList();

    // 二手车发票关联信息 (specificFactor=31必填/15选填，业务规则：最多1行)
    @Valid
    @Size(max = 1, message = "二手车发票关联信息最多只能传入1行")
    private List<UsedCar> usedCar = Lists.newArrayList();

    // 差额凭证信息 (diffFlag=01 必填，至少1行，无上限)
    @Valid
    @Size(min = 1, message = "差额凭证列表至少需要1行")
    private List<DifferenceVoucher> differenceVoucherList = Lists.newArrayList();

    // 共同购买方集合 (specificFactor=05+jointBuyerFlag=Y 必填，最多100行)
    @Valid
    @Size(max = 100, message = "共同购买方集合不可超过100行")
    private List<JointBuyer> jointBuyer = Lists.newArrayList();

    public List<OrderItem> getOrderItems() {
        return orderItems;
    }

    public void setOrderItems(List<OrderItem> orderItems) {
        this.orderItems = orderItems;
    }

    public List<Additional> getAdditionalList() {
        return additionalList;
    }

    public void setAdditionalList(List<Additional> additionalList) {
        this.additionalList = additionalList;
    }

    public List<BuildingInfo> getBuildingInfo() {
        return buildingInfo;
    }

    public void setBuildingInfo(List<BuildingInfo> buildingInfo) {
        this.buildingInfo = buildingInfo;
    }

    public List<GoodsTransport> getGoodsTransports() {
        return goodsTransports;
    }

    public void setGoodsTransports(List<GoodsTransport> goodsTransports) {
        this.goodsTransports = goodsTransports;
    }

    public List<RealPropertySellInfo> getRealPropertySellInfo() {
        return realPropertySellInfo;
    }

    public void setRealPropertySellInfo(List<RealPropertySellInfo> realPropertySellInfo) {
        this.realPropertySellInfo = realPropertySellInfo;
    }

    public List<RealPropertyRentInfo> getRealPropertyRentInfo() {
        return realPropertyRentInfo;
    }

    public void setRealPropertyRentInfo(List<RealPropertyRentInfo> realPropertyRentInfo) {
        this.realPropertyRentInfo = realPropertyRentInfo;
    }

    public List<VehicleVesselInfo> getVehicleVesselInfo() {
        return vehicleVesselInfo;
    }

    public void setVehicleVesselInfo(List<VehicleVesselInfo> vehicleVesselInfo) {
        this.vehicleVesselInfo = vehicleVesselInfo;
    }

    public List<TravellerTransport> getTravellerTransports() {
        return travellerTransports;
    }

    public void setTravellerTransports(List<TravellerTransport> travellerTransports) {
        this.travellerTransports = travellerTransports;
    }

    public List<HarvesterInfo> getHarvesterInfo() {
        return harvesterInfo;
    }

    public void setHarvesterInfo(List<HarvesterInfo> harvesterInfo) {
        this.harvesterInfo = harvesterInfo;
    }

    public List<Vehicle> getVehicle() {
        return vehicle;
    }

    public void setVehicle(List<Vehicle> vehicle) {
        this.vehicle = vehicle;
    }

    public List<UsedCarSale> getUsedCarSales() {
        return usedCarSales;
    }

    public void setUsedCarSales(List<UsedCarSale> usedCarSales) {
        this.usedCarSales = usedCarSales;
    }

    public List<UsedCar> getUsedCar() {
        return usedCar;
    }

    public void setUsedCar(List<UsedCar> usedCar) {
        this.usedCar = usedCar;
    }

    public List<DifferenceVoucher> getDifferenceVoucherList() {
        return differenceVoucherList;
    }

    public void setDifferenceVoucherList(List<DifferenceVoucher> differenceVoucherList) {
        this.differenceVoucherList = differenceVoucherList;
    }

    public List<JointBuyer> getJointBuyer() {
        return jointBuyer;
    }

    public void setJointBuyer(List<JointBuyer> jointBuyer) {
        this.jointBuyer = jointBuyer;
    }

    public String getDeptCode() {
        return deptCode;
    }

    public void setDeptCode(String deptCode) {
        this.deptCode = deptCode;
    }

    public String getOrderno() {
        return orderno;
    }

    public void setOrderno(String orderno) {
        this.orderno = orderno;
    }

    public String getSellerName() {
        return sellerName;
    }

    public void setSellerName(String sellerName) {
        this.sellerName = sellerName;
    }

    public String getSellerTaxno() {
        return sellerTaxno;
    }

    public void setSellerTaxno(String sellerTaxno) {
        this.sellerTaxno = sellerTaxno;
    }

    public String getSellerAddr() {
        return sellerAddr;
    }

    public void setSellerAddr(String sellerAddr) {
        this.sellerAddr = sellerAddr;
    }

    public String getSellerPhone() {
        return sellerPhone;
    }

    public void setSellerPhone(String sellerPhone) {
        this.sellerPhone = sellerPhone;
    }

    public String getSellerBank() {
        return sellerBank;
    }

    public void setSellerBank(String sellerBank) {
        this.sellerBank = sellerBank;
    }

    public String getSellerBankaccount() {
        return sellerBankaccount;
    }

    public void setSellerBankaccount(String sellerBankaccount) {
        this.sellerBankaccount = sellerBankaccount;
    }

    public String getSellerNationality() {
        return sellerNationality;
    }

    public void setSellerNationality(String sellerNationality) {
        this.sellerNationality = sellerNationality;
    }

    public String getSellerIdcardno() {
        return sellerIdcardno;
    }

    public void setSellerIdcardno(String sellerIdcardno) {
        this.sellerIdcardno = sellerIdcardno;
    }

    public String getSellerIdcartype() {
        return sellerIdcartype;
    }

    public void setSellerIdcartype(String sellerIdcartype) {
        this.sellerIdcartype = sellerIdcartype;
    }

    public String getSellerType() {
        return sellerType;
    }

    public void setSellerType(String sellerType) {
        this.sellerType = sellerType;
    }

    public String getBuyerCode() {
        return buyerCode;
    }

    public void setBuyerCode(String buyerCode) {
        this.buyerCode = buyerCode;
    }

    public String getBuyerName() {
        return buyerName;
    }

    public void setBuyerName(String buyerName) {
        this.buyerName = buyerName;
    }

    public String getBuyerTaxno() {
        return buyerTaxno;
    }

    public void setBuyerTaxno(String buyerTaxno) {
        this.buyerTaxno = buyerTaxno;
    }

    public String getBuyerAddr() {
        return buyerAddr;
    }

    public void setBuyerAddr(String buyerAddr) {
        this.buyerAddr = buyerAddr;
    }

    public String getBuyerPhone() {
        return buyerPhone;
    }

    public void setBuyerPhone(String buyerPhone) {
        this.buyerPhone = buyerPhone;
    }

    public String getBuyerBank() {
        return buyerBank;
    }

    public void setBuyerBank(String buyerBank) {
        this.buyerBank = buyerBank;
    }

    public String getBuyerBankaccount() {
        return buyerBankaccount;
    }

    public void setBuyerBankaccount(String buyerBankaccount) {
        this.buyerBankaccount = buyerBankaccount;
    }

    public String getBuyerNationality() {
        return buyerNationality;
    }

    public void setBuyerNationality(String buyerNationality) {
        this.buyerNationality = buyerNationality;
    }

    public String getBuyerIdcardno() {
        return buyerIdcardno;
    }

    public void setBuyerIdcardno(String buyerIdcardno) {
        this.buyerIdcardno = buyerIdcardno;
    }

    public String getBuyerIdcartype() {
        return buyerIdcartype;
    }

    public void setBuyerIdcartype(String buyerIdcartype) {
        this.buyerIdcartype = buyerIdcartype;
    }

    public String getBuyerType() {
        return buyerType;
    }

    public void setBuyerType(String buyerType) {
        this.buyerType = buyerType;
    }

    public String getBuyerCellphone() {
        return buyerCellphone;
    }

    public void setBuyerCellphone(String buyerCellphone) {
        this.buyerCellphone = buyerCellphone;
    }

    public String getBuyerEmail() {
        return buyerEmail;
    }

    public void setBuyerEmail(String buyerEmail) {
        this.buyerEmail = buyerEmail;
    }

    public String getBccEmail() {
        return bccEmail;
    }

    public void setBccEmail(String bccEmail) {
        this.bccEmail = bccEmail;
    }

    public String getCcEmail() {
        return ccEmail;
    }

    public void setCcEmail(String ccEmail) {
        this.ccEmail = ccEmail;
    }

    public String getBankRemarkStatus() {
        return bankRemarkStatus;
    }

    public void setBankRemarkStatus(String bankRemarkStatus) {
        this.bankRemarkStatus = bankRemarkStatus;
    }

    public String getAddressRemarkStatus() {
        return addressRemarkStatus;
    }

    public void setAddressRemarkStatus(String addressRemarkStatus) {
        this.addressRemarkStatus = addressRemarkStatus;
    }

    public String getSurveyAnswerType() {
        return surveyAnswerType;
    }

    public void setSurveyAnswerType(String surveyAnswerType) {
        this.surveyAnswerType = surveyAnswerType;
    }

    public String getBuyerHandler() {
        return buyerHandler;
    }

    public void setBuyerHandler(String buyerHandler) {
        this.buyerHandler = buyerHandler;
    }

    public String getBuyerHandlerIdcardno() {
        return buyerHandlerIdcardno;
    }

    public void setBuyerHandlerIdcardno(String buyerHandlerIdcardno) {
        this.buyerHandlerIdcardno = buyerHandlerIdcardno;
    }

    public String getBuyerHandlerPhone() {
        return buyerHandlerPhone;
    }

    public void setBuyerHandlerPhone(String buyerHandlerPhone) {
        this.buyerHandlerPhone = buyerHandlerPhone;
    }

    public String getInvKind() {
        return invKind;
    }

    public void setInvKind(String invKind) {
        this.invKind = invKind;
    }

    public String getInvType() {
        return invType;
    }

    public void setInvType(String invType) {
        this.invType = invType;
    }

    public String getOrderDate() {
        return orderDate;
    }

    public void setOrderDate(String orderDate) {
        this.orderDate = orderDate;
    }

    public String getOrderType() {
        return orderType;
    }

    public void setOrderType(String orderType) {
        this.orderType = orderType;
    }

    public String getOriginalInvcode() {
        return originalInvcode;
    }

    public void setOriginalInvcode(String originalInvcode) {
        this.originalInvcode = originalInvcode;
    }

    public String getOriginalInvno() {
        return originalInvno;
    }

    public void setOriginalInvno(String originalInvno) {
        this.originalInvno = originalInvno;
    }

    public String getRedNo() {
        return redNo;
    }

    public void setRedNo(String redNo) {
        this.redNo = redNo;
    }

    public String getRedUuid() {
        return redUuid;
    }

    public void setRedUuid(String redUuid) {
        this.redUuid = redUuid;
    }

    public String getRemarks() {
        return remarks;
    }

    public void setRemarks(String remarks) {
        this.remarks = remarks;
    }

    public BigDecimal getTotalAmount() {
        return totalAmount;
    }

    public void setTotalAmount(BigDecimal totalAmount) {
        this.totalAmount = totalAmount;
    }

    public BigDecimal getTotalTax() {
        return totalTax;
    }

    public void setTotalTax(BigDecimal totalTax) {
        this.totalTax = totalTax;
    }

    public BigDecimal getTotalTaxamount() {
        return totalTaxamount;
    }

    public void setTotalTaxamount(BigDecimal totalTaxamount) {
        this.totalTaxamount = totalTaxamount;
    }

    public String getDiffFlag() {
        return diffFlag;
    }

    public void setDiffFlag(String diffFlag) {
        this.diffFlag = diffFlag;
    }

    public String getTaxDeductionFlag() {
        return taxDeductionFlag;
    }

    public void setTaxDeductionFlag(String taxDeductionFlag) {
        this.taxDeductionFlag = taxDeductionFlag;
    }

    public String getDrawer() {
        return drawer;
    }

    public void setDrawer(String drawer) {
        this.drawer = drawer;
    }

    public String getPayee() {
        return payee;
    }

    public void setPayee(String payee) {
        this.payee = payee;
    }

    public String getChecker() {
        return checker;
    }

    public void setChecker(String checker) {
        this.checker = checker;
    }

    public String getDrawerIdcardno() {
        return drawerIdcardno;
    }

    public void setDrawerIdcardno(String drawerIdcardno) {
        this.drawerIdcardno = drawerIdcardno;
    }

    public String getDrawerIdcardtype() {
        return drawerIdcardtype;
    }

    public void setDrawerIdcardtype(String drawerIdcardtype) {
        this.drawerIdcardtype = drawerIdcardtype;
    }

    public String getPayeeBank() {
        return payeeBank;
    }

    public void setPayeeBank(String payeeBank) {
        this.payeeBank = payeeBank;
    }

    public String getPayeeBankaccount() {
        return payeeBankaccount;
    }

    public void setPayeeBankaccount(String payeeBankaccount) {
        this.payeeBankaccount = payeeBankaccount;
    }

    public String getPurchaseLabel() {
        return purchaseLabel;
    }

    public void setPurchaseLabel(String purchaseLabel) {
        this.purchaseLabel = purchaseLabel;
    }

    public String getSettlementType() {
        return settlementType;
    }

    public void setSettlementType(String settlementType) {
        this.settlementType = settlementType;
    }

    public String getSpecificFactor() {
        return specificFactor;
    }

    public void setSpecificFactor(String specificFactor) {
        this.specificFactor = specificFactor;
    }

    public String getPaperType() {
        return paperType;
    }

    public void setPaperType(String paperType) {
        this.paperType = paperType;
    }

    public String getOperator() {
        return operator;
    }

    public void setOperator(String operator) {
        this.operator = operator;
    }

    public String getAreaCode() {
        return areaCode;
    }

    public void setAreaCode(String areaCode) {
        this.areaCode = areaCode;
    }

    public String getExportPolicyCode() {
        return exportPolicyCode;
    }

    public void setExportPolicyCode(String exportPolicyCode) {
        this.exportPolicyCode = exportPolicyCode;
    }

    public String getVatCRCode() {
        return vatCRCode;
    }

    public void setVatCRCode(String vatCRCode) {
        this.vatCRCode = vatCRCode;
    }

    public String getTaxablePlace() {
        return taxablePlace;
    }

    public void setTaxablePlace(String taxablePlace) {
        this.taxablePlace = taxablePlace;
    }

    public String getAutoMakeInv() {
        return autoMakeInv;
    }

    public void setAutoMakeInv(String autoMakeInv) {
        this.autoMakeInv = autoMakeInv;
    }

    public String getEertificateType() {
        return eertificateType;
    }

    public void setEertificateType(String eertificateType) {
        this.eertificateType = eertificateType;
    }

    public String getBusinessNature() {
        return businessNature;
    }

    public void setBusinessNature(String businessNature) {
        this.businessNature = businessNature;
    }

    public String getUsedCarTaxExemption() {
        return usedCarTaxExemption;
    }

    public void setUsedCarTaxExemption(String usedCarTaxExemption) {
        this.usedCarTaxExemption = usedCarTaxExemption;
    }

    public String getCrossCityConfirm() {
        return crossCityConfirm;
    }

    public void setCrossCityConfirm(String crossCityConfirm) {
        this.crossCityConfirm = crossCityConfirm;
    }

    public String getJointBuyerFlag() {
        return jointBuyerFlag;
    }

    public void setJointBuyerFlag(String jointBuyerFlag) {
        this.jointBuyerFlag = jointBuyerFlag;
    }

    public BigDecimal getHeatValuePerKgCoal() {
        return heatValuePerKgCoal;
    }

    public void setHeatValuePerKgCoal(BigDecimal heatValuePerKgCoal) {
        this.heatValuePerKgCoal = heatValuePerKgCoal;
    }

    public BigDecimal getDryBasisTotalSulfur() {
        return dryBasisTotalSulfur;
    }

    public void setDryBasisTotalSulfur(BigDecimal dryBasisTotalSulfur) {
        this.dryBasisTotalSulfur = dryBasisTotalSulfur;
    }

    public BigDecimal getDryAshFreeVolatileMatter() {
        return dryAshFreeVolatileMatter;
    }

    public void setDryAshFreeVolatileMatter(BigDecimal dryAshFreeVolatileMatter) {
        this.dryAshFreeVolatileMatter = dryAshFreeVolatileMatter;
    }

    public String getReturnDeliveryUrl() {
        return returnDeliveryUrl;
    }

    public void setReturnDeliveryUrl(String returnDeliveryUrl) {
        this.returnDeliveryUrl = returnDeliveryUrl;
    }

    public String getFetchMiStatement() {
        return fetchMiStatement;
    }

    public void setFetchMiStatement(String fetchMiStatement) {
        this.fetchMiStatement = fetchMiStatement;
    }

    public String getMiTransactionId() {
        return miTransactionId;
    }

    public void setMiTransactionId(String miTransactionId) {
        this.miTransactionId = miTransactionId;
    }

    public String getHisBizNo() {
        return hisBizNo;
    }

    public void setHisBizNo(String hisBizNo) {
        this.hisBizNo = hisBizNo;
    }

    public String getCureType() {
        return cureType;
    }

    public void setCureType(String cureType) {
        this.cureType = cureType;
    }

    public String getSpare1() {
        return spare1;
    }

    public void setSpare1(String spare1) {
        this.spare1 = spare1;
    }

    public String getSpare2() {
        return spare2;
    }

    public void setSpare2(String spare2) {
        this.spare2 = spare2;
    }

    public String getSpare3() {
        return spare3;
    }

    public void setSpare3(String spare3) {
        this.spare3 = spare3;
    }

    public String getSpare4() {
        return spare4;
    }

    public void setSpare4(String spare4) {
        this.spare4 = spare4;
    }

    public String getSpare5() {
        return spare5;
    }

    public void setSpare5(String spare5) {
        this.spare5 = spare5;
    }

    public String getSpare6() {
        return spare6;
    }

    public void setSpare6(String spare6) {
        this.spare6 = spare6;
    }

    public String getSpare7() {
        return spare7;
    }

    public void setSpare7(String spare7) {
        this.spare7 = spare7;
    }

    public String getSpare8() {
        return spare8;
    }

    public void setSpare8(String spare8) {
        this.spare8 = spare8;
    }

    public String getSpare9() {
        return spare9;
    }

    public void setSpare9(String spare9) {
        this.spare9 = spare9;
    }

    public String getSpare10() {
        return spare10;
    }

    public void setSpare10(String spare10) {
        this.spare10 = spare10;
    }

    public String getSpare11() {
        return spare11;
    }

    public void setSpare11(String spare11) {
        this.spare11 = spare11;
    }

    public String getSpare12() {
        return spare12;
    }

    public void setSpare12(String spare12) {
        this.spare12 = spare12;
    }

    public String getSpare13() {
        return spare13;
    }

    public void setSpare13(String spare13) {
        this.spare13 = spare13;
    }

    public String getSpare14() {
        return spare14;
    }

    public void setSpare14(String spare14) {
        this.spare14 = spare14;
    }

    public String getSpare15() {
        return spare15;
    }

    public void setSpare15(String spare15) {
        this.spare15 = spare15;
    }

    public String getSpare16() {
        return spare16;
    }

    public void setSpare16(String spare16) {
        this.spare16 = spare16;
    }

    public String getSpare17() {
        return spare17;
    }

    public void setSpare17(String spare17) {
        this.spare17 = spare17;
    }

    public String getSpare18() {
        return spare18;
    }

    public void setSpare18(String spare18) {
        this.spare18 = spare18;
    }

    public String getSpare19() {
        return spare19;
    }

    public void setSpare19(String spare19) {
        this.spare19 = spare19;
    }

    public String getSpare20() {
        return spare20;
    }

    public void setSpare20(String spare20) {
        this.spare20 = spare20;
    }
}
