package com.benyun.project.third.kingdee.domain;

import lombok.Data;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.util.List;

/**
 * 物料
 */
@Data
public class BDMaterial {
    /**
     * 需要更新的字段，数组类型，格式：[key1,key2,...] （非必录）注（更新字段时Model数据包中必须设置内码，若更新单据体字段还需设置分录内码）
     */
    private String[] NeedUpDateFields;
    /**
     * 需返回结果的字段集合，数组类型，格式：[key,entitykey.key,...]（非必录） 注（返回单据体字段格式：entitykey.key）
     */
    private String[] NeedReturnFields;
    /**
     * 是否删除已存在的分录，布尔类型，默认true（非必录）
     */
    private boolean IsDeleteEntry;
    /**
     * 表单所在的子系统内码，字符串类型（非必录）
     */
    private String SubSystemId;
    /**
     * 是否验证所有的基础资料有效性，布尔类，默认false（非必录）
     */
    private boolean IsVerifyBaseDataField;
    /**
     * 是否批量填充分录，默认true（非必录）
     */
    private boolean IsEntryBatchFill;
    /**
     * 是否验证数据合法性标志，布尔类型，默认true（非必录）注（设为false时不对数据合法性进行校验）
     */
    private boolean ValidateFlag;
    /**
     * 是否用编码搜索基础资料，布尔类型，默认true（非必录）
     */
    private boolean NumberSearch;
    /**
     * 是否自动调整JSON字段顺序，布尔类型，默认false（非必录）
     */
    private boolean IsAutoAdjustField;
    /**
     * 交互标志集合，字符串类型，分号分隔，格式："flag1;flag2;..."（非必录） 例如（允许负库存标识：STK_InvCheckResult）
     */
    private String InterationFlags;
    /**
     * 是否允许忽略交互，布尔类型，默认true（非必录）
     */
    private String IgnoreInterationFlag;
    /**
     * 是否控制精度，为true时对金额、单价和数量字段进行精度验证，默认false（非必录）
     */
    private boolean IsControlPrecision;
    /**
     * 校验Json数据包是否重复传入，一旦重复传入，接口调用失败，默认false（非必录）
     */
    private boolean ValidateRepeatJson;
    /**
     * 表单数据包，JSON类型（必录）
     */
    @Valid
    @NotEmpty(message = "表单数据包，JSON类型（必录）")
    private Model model;

    /**
     * 表单数据包，JSON类型（必录）
     */
    @Data
    public static class Model{
        public Integer FMATERIALID;
        /**
         * 创建组织
         */
        @Valid
        @NotEmpty(message = "创建组织是必录项")
        public fcreateOrgId FCreateOrgId;
        /**
         * 创建组织
         */
        @Data
        public static class fcreateOrgId{
            @NotNull(message = "创建组织项是必录项")
            public String FNumber;
        }
        /**
         * 使用组织
         */
        @Valid
        @NotEmpty(message = "使用组织是必录项")
        public fuseOrgId FUseOrgId;
        @Data
        public static class fuseOrgId{
            @NotNull(message = "使用组织项是必录项")
            public String FNumber;
        }
        /**
         * 编码
         */
        public String FNumber;
        /**
         * 名称
         */
        @Null(message = "名称是必录项")
        public String FName;
        /**
         * 规格型号
         */
        public String FSpecification;
        /**
         * 助记码
         */
        public String FMnemonicCode;
        /**
         * 旧物料编码
         */
        public String FOldNumber;
        /**
         * 描述
         */
        public String FDescription;
        /**
         * 物料分组
         */
        @Valid
        @NotEmpty(message = "物料分组是必录项")
        public fmaterialGroup FMaterialGroup;
        @Data
        public static class fmaterialGroup{
            @NotNull(message = "物料分组项是必录项")
            public String FNumber;
        }
        /**
         * 按批号匹配供需
         */
        public boolean FDSMatchByLot;
        /**
         * 图片存储类型
         */
        public String FImgStorageType;
        /**
         * SPU信息
         */
        public fspuid FSPUID;
        @Data
        public static class fspuid{
            public String FNUMBER;
        }
        /**
         * 拼音
         */
        public String FPinYin;
        /**
         * 扩展编码
         */
        public String FExtVar;
        /**
         * 可手工预留
         */
        public String FIsHandleReserve;
        /**
         * 物料基本信息 （必录）
         */
        @Valid
        @NotEmpty(message = "物料基本信息（必录）")
        public subHeadEntity SubHeadEntity;
        /**
         * 物料基本信息 （必录）
         */
        @Data
        public static class subHeadEntity{
            /**
             * 实体主键
             */
            public Integer FEntryId;
            /**
             * 条码
             */
            public String FBARCODE;
            /**
             * 物料属性(必填项)
             */
            @NotNull(message = "物料属性是必填项")
            public String FErpClsID;
            /**
             * 特征件子项(必填项)
             */
            @NotNull(message = "特征件子项是必填项")
            public String FFeatureItem;
            /**
             * 配置生产
             */
            public String FCONFIGTYPE;
            /**
             * 存货类别
             */
            @NotNull(message = "存货类别是必填项")
            public fcategoryID FCategoryID;
            @Valid
            @Data
            public static class fcategoryID{
                @NotNull(message = "存货类别项是必填项")
                public String FNumber;
            }
            /**
             * 税分类
             */
            public ftaxtype FTaxType;
            @Data
            public static class ftaxtype{
                public String FNumber;
            }
            /**
             * 默认税率
             */
            public ftaxrateid FTaxRateId;
            @Data
            public static class ftaxrateid{
                public String FNumber;
            }
            /**
             * 基本单位
             */
            @NotNull(message = "存货类别是必填项")
            public fbaseunitid FBaseUnitId;
            @Valid
            @Data
            public static class fbaseunitid{
                @NotNull(message = "基本单位项是必填项")
                public String FNumber;
            }
            /**
             * 允许采购
             */
            public boolean FIsPurchase;
            /**
             * 允许库存
             */
            public boolean FIsInventory;
            /**
             * 允许委外
             */
            public boolean FIsSubContract;
            /**
             * 允许销售
             */
            public boolean FIsSale;
            /**
             * 允许生产
             */
            public boolean FIsProduce;
            /**
             * 允许转资产
             */
            public boolean FIsAsset;
            /**
             * 毛重
             */
            public Integer FGROSSWEIGHT;
            /**
             * 净重
             */
            public Integer FNETWEIGHT;
            /**
             * 重量单位
             */
            public fweightunitid FWEIGHTUNITID;
            @Data
            public static class fweightunitid{
                public String FNUMBER;
            }

            /**
             * 长
             */
            public Integer FLENGTH;
            /**
             * 宽
             */
            public Integer FWIDTH;
            /**
             * 宽
             */
            public Integer FHEIGHT;
            /**
             * 体积
             */
            public Integer FVOLUME;
            /**
             * 尺寸单位
             */
            public fvolumeunitid FVOLUMEUNITID;
            @Data
            public static class fvolumeunitid{
                public String FNUMBER;
            }

            /**
             * 套件
             */
            public String FSuite;
            /**
             * 结算成本价加减价比例(%)
             */
            public Integer FCostPriceRate;
            /**
             * 颜色
             */
            public String FColor;
            /**
             * 传播名
             */
            public String FSpreadName;
            /**
             * 传播名
             */
            public String FNameEn;
            /**
             * 制式
             */
            public String FSysModel;
            /**
             * 使用组织
             */
            public fuseorgid1 FUseOrgId1;
            @Data
            public static class fuseorgid1{
                public String FNumber;
            }

        }
        /**
         * 库存资料 （必录）
         */
        @Valid
        @NotEmpty(message = "库存资料（必录）")
        public subHeadEntity1 SubHeadEntity1;
        /**
         * 库存资料 （必录）
         */
        @Data
        public static class subHeadEntity1{
            public Integer FEntryId;
            /**
             * 库存单位（必录）
             */
            public fstoreunitid FStoreUnitID;
            @Data
            public static class fstoreunitid{
                public String FNumber;
            }
            /**
             * 换算方向（必录）
             */
            public String FUnitConvertDir;
            /**
             * 仓库
             */
            public fstockid FStockId;
            @Data
            public static class fstockid{
                public String FNumber;
            }

            /**
             * 仓位
             */
            public String FStockPlaceId;
            /**
             * 可锁库
             */
            public boolean FIsLockStock;
            /**
             * 启用盘点周期
             */
            public boolean FIsCycleCounting;
            /**
             * 盘点周期单位
             */
            public String FCountCycle;
            /**
             * 盘点周期
             */
            public Integer FCountDay;
            /**
             * 必盘
             */
            public boolean FIsMustCounting;
            /**
             * 启用批号管理
             */
            public boolean FIsBatchManage;
            /**
             * 批号编码规则
             */
            public fbathcruleid FBatchRuleID;
            @Data
            public static class fbathcruleid{
                public String FNumber;
            }

            /**
             * 启用保质期管理
             */
            public boolean FIsKFPeriod;
            /**
             * 批号附属信息
             */
            public boolean FIsExpParToFlot;
            /**
             * 保质期单位
             */
            public String FExpUnit;
            /**
             * 保质期
             */
            public Integer FExpPeriod;
            /**
             * 在架寿命期
             */
            public Integer FOnlineLife;
            /**
             * 参考成本
             */
            public Integer FRefCost;
            /**
             * 币别（必录）
             */
            public fucrrencyid FCurrencyId;
            @Data
            public static class fucrrencyid{
                public String FNumber;
            }
            /**
             * 启用最小库存
             */
            public boolean FIsEnableMinStock;
            /**
             * 启用最大库存
             */
            public boolean FIsEnableMaxStock;
            /**
             * 启用安全库存
             */
            public boolean FIsEnableSafeStock;
            /**
             * 启用再订货点
             */
            public boolean FIsEnableReOrder;
            /**
             * 最小库存
             */
            public Integer FMinStock;
            /**
             * 安全库存
             */
            public Integer FSafeStock;
            /**
             * 再订货点
             */
            public Integer FReOrderGood;
            /**
             * 经济订货批量
             */
            public Integer FEconReOrderQty;
            /**
             * 最大库存
             */
            public Integer FMaxStock;
            /**
             * 库存管理
             */
            public String FIsSNManage;
            /**
             * 生产追溯
             */
            public String FIsSNPRDTracy;
            /**
             * 业务范围（必录）
             */
            public String FSNManageType;
            /**
             * 序列号生成时机（必录）
             */
            public String FSNGenerateTime;
            /**
             * 使用组织
             */
            public fuseorgid2 FUseOrgId2;
            @Data
            public static class fuseorgid2{
                public String FNumber;
            }

        }

        /**
         * 采购信息 （必录）
         */
        @Valid
        @NotEmpty(message = "采购信息（必录）")
        public subHeadEntity3 SubHeadEntity3;
        /**
         * 采购信息 （必录）
         */
        @Data
        public static class subHeadEntity3{
            public Integer FEntryId;
            /**
             * 采购单位
             */
            public fpurchaseUnitId FPurchaseUnitId;
            @Data
            public static class fpurchaseUnitId{
                public String FNumber;
            }

            /**
             * 采购计价单位
             */
            public pfurchasePriceUnitId FPurchasePriceUnitId;
            @Data
            public static class pfurchasePriceUnitId{
                public String FNumber;
            }

            /**
             * 配额方式
             */
            public String FQuotaType;
        }

        /**
         * 条形码 （必录）
         */
        @Valid
        @NotEmpty(message = "条形码（必录）")
        public List<fbarCodeEntity_CMK> FBarCodeEntity_CMK;
        /**
         * 条形码 （必录）
         */
        @Data
        public static class fbarCodeEntity_CMK{
            public Integer FEntryID;
            /**
             * 形码类型
             */
            public String FCodeType_CMK;
            /**
             * 条形码
             */
            public String FBarCode_CMK;
            /**
             * 计量单位
             */
            public funitidcmk FUnitId_CMK;
            @Data
            public static class funitidcmk{
                public String FNUMBER;
            }

            /**
             * 会员价
             */
            public Integer FPrice_CMK;
            /**
             * 会员价
             */
            public Integer FVIPPrice;
        }
    }
}
