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 PRDInStock {
    /**
     *
     * 需要更新的字段，数组类型，格式：[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 List<Model> model;

    @Data
    public static class Model{
        public Integer FID;
        /**
         * 单据类型
         */
        @Valid
        @NotEmpty(message = "单据类型是必录项")
        public fBillType FBillType;
        /**
         * 单据类型
         */
        @Data
        public static class fBillType{
            public String FNumber;
        }
        /**
         * 日期
         */
        @Null(message = "日期是必录项")
        public String FDate;
        /**
         * 入库组织
         */
        @Valid
        @NotEmpty(message = "入库组织项是必录项")
        public fStockOrgId FStockOrgId;
        /**
         * 入库组织
         */
        @Data
            public static class fStockOrgId{
                @NotNull(message = "入库组织项是必录项")
            public String FNumber;
        }
        /**
         * 仓库
         */
        @Valid
        @NotEmpty(message = "仓库是必录项")
        public fStockId0 FStockId0;
        /**
         * 仓库
         */
        @Data
        public static class fStockId0{
            @NotNull(message = "仓库是必录项")
            public String FNumber;
        }
        /**
         * 生产组织
         */
        @Valid
        @NotEmpty(message = "生产组织是必录项")
        public fPrdOrgId FPrdOrgId;
        /**
         * 生产组织
         */
        @Data
        public static class fPrdOrgId{
            @NotNull(message = "生产组织是必录项")
            public String FNumber;
        }
        /**
         * 车间
         */
        @Valid
        @NotEmpty(message = "车间是必录项")
        public fWorkShopId FWorkShopId;
        /**
         * 车间
         */
        @Data
        public static class fWorkShopId{
            @NotNull(message = "车间是必录项")
            public String FNumber;
        }
        /**
         * 货主类型
         */
        public String FOwnerTypeId0;
        /**
         *
         * 货主
         */
        @Valid
        @NotEmpty(message = "货主是必录项")
        public fOwnerId0 FOwnerId0;
        /**
         * 货主
         */
        @Data
        public static class fOwnerId0{
            @NotNull(message = "货主是必录项")
            public String FNumber;
        }
        /**
         *
         * 仓管员
         */
        @Valid
        @NotEmpty(message = "仓管员是必录项")
        public fstockerid FSTOCKERID;
        /**
         *
         * 仓管员
         */
        @Data
        public static class fstockerid{
            @NotNull(message = "仓管员是必录项")
            public String FNAME;
        }
        /**
         * 备注
         */
        public String FDescription;
        /**
         * 组织委托加工
         */
        public boolean FIsEntrust;
        /**
         *
         * 本位币
         */
        @Valid
        @NotEmpty(message = "本位币是必录项")
        public fCurrId FCurrId;
        /**
         * 本位币
         */
        @Data
        public static class fCurrId{
            @NotNull(message = "本位币是必录项")
            public String FNumber;
        }
        /**
         * 委托组织入库单Id
         */
        public Integer FEntrustInStockId;
        /**
         * 序列号上传
         */
        public String FScanBox;
        /**
         * 明细
         */
        @Valid
        @NotEmpty(message = "明细是必录入项目")
        public List<fEntity> FEntity;
        @Data
        public static class fEntity{
            /**
             * 明细主键
             */
            public Integer FEntryID;
            /**
             * 源单分录内码
             */
            public Integer FSrcEntryId;
            /**
             * 是否新增行
             */
            public boolean FIsNew;
            /**
             * 物料编码
             */
            @NotNull(message = "物料编码是必录项")
            public fMaterialId FMaterialId;
            /**
             * 物料编码
             */
            @Data
            public static class fMaterialId{
                @NotNull(message = "物料编码是必录项")
                public String FNumber;
            }
            /**
             * 产品检验(弃用)
             */
            public boolean FCheckProduct;
            /**
             * 产品类型
             */
            public String FProductType;
            /**
             * 入库类型
             */
            public String FInStockType;
            /**
             * 单位
             */
            @NotNull(message = "单位是必录项")
            public fUnitID FUnitID;
            /**
             * 单位
             */
            @Data
            public static class fUnitID{
                @NotNull(message = "单位是必录项")
                public String FNumber;
            }
            /**
             * 应收数量
             */
            public Integer FMustQty;
            /**
             * 实收数量
             */
            public Integer FRealQty;
            /**
             * 成本权重
             */
            public Integer FCostRate;
            /**
             * 基本单位
             */
            @NotNull(message = "基本单位是必录项")
            public fBaseUnitId FBaseUnitId;
            /**
             * 基本单位
             */
            @Data
            public static class fBaseUnitId{
                @NotNull(message = "基本单位是必录项")
                public String FNumber;
            }
            /**
             * 基本单位应收数量
             */
            public Integer FBaseMustQty;
            /**
             * 基本单位库存实收数量
             */
            public Integer FBaseRealQty;
            /**
             * 货主类型
             */
            public String FOwnerTypeId;
            /**
             * 货主
             */
            @NotNull(message = "货主是必录项")
            public fOwnerId FOwnerId;
            /**
             * 货主
             */
            @Data
            public static class fOwnerId{
                @NotNull(message = "货主是必录项")
                public String FNumber;
            }
            /**
             * 仓库
             */
            @NotNull(message = "仓库是必录项")
            public fStockId FStockId;
            /**
             * 仓库
             */
            @Data
            public static class fStockId{
                @NotNull(message = "仓库是必录项")
                public String FNumber;
            }
            /**
             * BOM版本
             */
            public static class FStockLocId{};
            public fBomId FBomId;
            /**
             * BOM版本
             */
            @Data
            public static class fBomId{
                public String FNumber;
            }
            /**
             * 批号
             */
            public fLot FLot;
            /**
             * 批号
             */
            @Data
            public static class fLot{
                public String FNumber;
            }
            /**
             * 倒冲领料
             */
            public boolean FISBACKFLUSH;
            /**
             * 项目编号
             */
            public String FProjectNo;
            /**
             * 生产车间
             */
            public fWorkShopId1 FWorkShopId1;
            /**
             * 生产车间
             */
            @Data
            public static class fWorkShopId1{
                public String FNumber;
            }
            /**
             * 产线
             */
            public flienid FLINEID;
            /**
             * 产线
             */
            @Data
            public static class flienid{
                public String FNUMBER;
            }
            /**
             * 班组
             */
            public fShiftGroupId FShiftGroupId;
            /**
             * 班组
             */
            @Data
            public static class fShiftGroupId{
                public String FNumber;
            }
            /**
             * 生产订单编号
             */
            @NotNull(message = "生产订单编号是必录项")
            public String FMoBillNo;
            /**
             * 生产订单内码
             */
            public Integer FMoId;
            /**
             * 生产订单分录内码
             */
            public Integer FMoEntryId;
            /**
             * 生产订单行号
             */
            public Integer FMoEntrySeq;
            /**
             * 备注
             */
            public Integer FMemo;
            /**
             * 辅助属性
             */
            public static class FAuxpropId{}
            /**
             * 库存单位
             */
            public fStockUnitId FStockUnitId;
            /**
             * 库存单位
             */
            @Data
            public static class fStockUnitId{
                public String FNumber;
            }
            /**
             * 库存单位实收数量
             */
            public Integer FStockRealQty;
            /**
             * 辅助单位
             */
            public fSecUnitId FSecUnitId;
            /**
             * 辅助单位
             */
            @Data
            public static class fSecUnitId{
                public String FNumber;
            }
            /**
             * 辅助单位实收数量
             */
            public Integer FSecRealQty;
            /**
             * 源单类型
             */
            public String FSrcBillType;
            /**
             *
             * 源单内码
             */
            public Integer FSrcInterId;
            /**
             * 源单编号
             */
            public String FSrcBillNo;
            /**
             * 基本单位生产实收数量
             */
            public Integer FBasePrdRealQty;
            /**
             * 完工
             */
            public boolean FIsFinished;
            /**
             * 库存状态
             */
            @NotNull(message = "库存状态是必录项")
            public fStockStatusId FStockStatusId;
            /**
             * 库存状态
             */
            @Data
            public static class fStockStatusId{
                @NotNull(message = "库存状态是必录项")
                public String FNumber;
            }
            /**
             * 源单行号
             */
            public Integer FSrcEntrySeq;
            /**
             * 生产订单主产品分录
             */
            public Integer FMOMAINENTRYID;
            /**
             * 保管者类型
             */
            @NotNull(message = "保管者类型是必录项")
            public String FKeeperTypeId;
            /**
             * 保管者
             */
            @NotNull(message = "保管者是必录项")
            public fKeeperId FKeeperId;
            /**
             * 保管者
             */
            @Data
            public static class fKeeperId{
                @NotNull(message = "保管者是必录项")
                public String FNumber;
            }
            /**
             * 生产日期
             */
            public String FProduceDate;
            /**
             * 有效期至
             */
            public String FExpiryDate;
            /**
             * 退库选单数
             */
            public Integer FSelReStkQty;
            /**
             * 基本单位退库选单数量
             */
            public Integer FBaseSelReStkQty;
            /**
             * 业务来源类型
             */
            public String FSrcBusinessType;
            /**
             * 组织间结算跨法人
             */
            public boolean FIsOverLegalOrg;
            /**
             * 直送标识
             */
            public String FSendRowId;
            /**
             * 序列号子单据体
             */
            public List<fSerialSubEntity> FSerialSubEntity;
            /**
             * 序列号子单据体
             */
            @Data
            public static class fSerialSubEntity{
                public Integer FDetailID;
                public String FSerialNo;
                /**
                 * 序列号
                 */
                public fSerialId FSerialId;
                @Data
                public static class fSerialId{
                    public String FNumber;
                }
            }
            /**
             * 数量
             */
            public Integer FQty;
            /**
             * 基本单位数量
             */
            public Integer FBaseSNQty;
            /**
             * 备注
             */
            public String FSerialNote;
        }
    }
}
