package com.jwipc.finance.dto;

import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;

/**
 * @author shenyang.ou
 * @date 2024/3/22 11:22
 * @desc
 */
@Data
public class CompanyAccountApiDTO {

    @JSONField(name="IT_HEAD")
    public Head head;

    @Data
    public static class Head {
        /**
         * 对账日期（必填）
         */
        @NotBlank(message = "请传入对账日期")
        @JSONField(name = "DZRQ")
        public String DZRQ;

        /**
         * 备注
         */
        @JSONField(name = "BZZ")
        public String BZZ;

        /**
         * 对账期间起（必填）
         */
        @NotBlank(message = "请传入对账期间起")
        @JSONField(name = "DZQJQ")
        public String DZQJQ;

        /**
         * 对账期间止（必填）
         */
        @NotBlank(message = "请传入对账期间止")
        @JSONField(name = "DZQJZ")
        public String DZQJZ;

        /**
         * 币种（必填）
         */
        @NotBlank(message = "请传入币种")
        @JSONField(name = "BZ") //
        public String BZ;

        /**
         * 对帐编号（必填）
         */
        @NotBlank(message = "请传入对账编号")
        @JSONField(name = "DZBH")
        public String DZBH;

        /**
         * 本期金额（必填）
         */
        @NotBlank(message = "请传入本期金额")
        @JSONField(name = "BQJE")
        public String BQJE;

//        /**
//         * 对账方式
//         */
//        @JSONField(name = "DZFS")
//        public String DZFS;

        /**
         * 客户
         */
        @JSONField(name = "KHBM")
        public String KHBM;

        /**
         * 客户名称
         */
        @JSONField(name = "KHMC")
        public String KHMC;

        /**
         * 销售公司编码（必填）
         */
        @NotBlank(message = "请传入销售公司编码")
        @JSONField(name = "XSGSBM")
        public String XSGSBM;

        /**
         * 销售公司名称（必填）
         */
        @NotBlank(message = "请传入销售公司名称")
        @JSONField(name = "XSGSMC")
        public String XSGSMC;

        /**
         * 销售公司地址
         */
        @JSONField(name = "XSGSDZ")
        public String XSGSDZ;

        /**
         * 销售公司联系电话
         */
        @JSONField(name = "XSGSLXDH")
        public String XSGSLXDH;

        /**
         * 销售公司对账人签字
         */
        @JSONField(name = "XSGSDZRQZ")
        public String XSGSDZRQZ;

        /**
         * 销售公司签批日期
         */
        @JSONField(name = "XSGSQBRQ")
        public String XSGSQBRQ;

        /**
         * 生产公司编码（必填）
         */
        @NotBlank(message = "请传入生产公司编码")
        @JSONField(name = "SCGSBM")
        public String SCGSBM;

        /**
         * 生产公司名称（必填）
         */
        @NotBlank(message = "请传入生产公司名称")
        @JSONField(name = "SCGSMC")
        public String SCGSMC;

        /**
         * 生产公司地址
         */
        @JSONField(name = "SCGSDZ")
        public String SCGSDZ;

        /**
         * 生产公司联系电话
         */
        @JSONField(name = "SCGSLXDH")
        public String SCGSLXDH;

        /**
         * 生产公司对账人签字
         */
        @JSONField(name = "SCGSDZRQZ")
        public String SCGSDZRQZ;

        /**
         * 生产公司签批日期
         */
        @JSONField(name = "SCGSQBRQ")
        public String SCGSQBRQ;
    }

    @Valid
    @NotEmpty(message = "请传入明细")
    @JSONField(name="IT_ITEM")
    List<Item> items;

    @Data
    public static class Item {
        /**
         * 列表序号（必填）
         */
        @NotBlank(message = "请传入列表序号")
        @JSONField(name = "LBXH")
        public String LBXH;

        /**
         * 客户PO（必填）
         */
        @NotBlank(message = "请传入客户PO")
        @JSONField(name = "KHPO")
        public String KHPO;

        /**
         * 销售订单类型（必填）
         */
        @NotBlank(message = "请传入销售订单类型")
        @JSONField(name = "XSDDLX")
        public String XSDDLX;

        /**
         * 销售订单（必填）
         */
        @NotBlank(message = "请传入销售订单")
        @JSONField(name = "XSDD")
        public String XSDD;

        /**
         * 销售订单行号（必填）
         */
        @NotBlank(message = "请传入销售订单行号")
        @JSONField(name = "XSDDHH")
        public String XSDDHH;

        /**
         * 出货日期
         */
        @JSONField(name = "CHRQ")
        public String CHRQ;

        /**
         * 交货单（必填）
         */
        @NotBlank(message = "请传入交货单")
        @JSONField(name = "JHD")
        public String JHD;

        /**
         * 交货单行号（必填）
         */
        @NotBlank(message = "请传入交货单行号")
        @JSONField(name = "JHDHH")
        public String JHDHH;

        /**
         * 物料编码（必填）
         */
        @NotBlank(message = "请传入物料编码")
        @JSONField(name = "WLBM")
        public String WLBM;

        /**
         * 物料组描述
         */
        @JSONField(name = "WLZMS")
        public String WLZMS;

        /**
         * 物料描述
         */
        @JSONField(name = "WLMS")
        public String WLMS;

        /**
         * 客户料号
         */
        @JSONField(name = "KHLH")
        public String KHLH;

        /**
         * 开票品名
         */
        @JSONField(name = "KPPM")
        public String KPPM;

        /**
         * 规格型号
         */
        @JSONField(name = "GGXH")
        public String GGXH;

        /**
         * 对账数量（必填）
         */
        @NotBlank(message = "请传入对账数量")
        @JSONField(name = "DZSL")
        public String DZSL;

        /**
         * 开票数量（必填）
         */
        @NotBlank(message = "请传入开票数量")
        @JSONField(name = "KPSL")
        public String KPSL;

        /**
         * 单位（必填）
         */
        @NotBlank(message = "请传入单位")
        @JSONField(name = "DW")
        public String DW;

        /**
         * 税率（必填）
         */
        @NotBlank(message = "请传入税率")
        @JSONField(name = "SL")
        public String SL;

        /**
         * 含税单价（必填）
         */
        @NotBlank(message = "请传入含税单价")
        @JSONField(name = "HSDJ")
        public String HSDJ;

        /**
         * 未税金额（必填）
         */
        @NotBlank(message = "请传入未税金额")
        @JSONField(name = "WSJE")
        public String WSJE;

        /**
         * 税额（必填）
         */
        @NotBlank(message = "请传入税额")
        @JSONField(name = "SE")
        public String SE;

        /**
         * 含税金额（必填）
         */
        @NotBlank(message = "请传入含税金额")
        @JSONField(name = "HSJE")
        public String HSJE;
    }
}
