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 java.util.List;

/**
 * 盘亏单
 */
@Data
public class STKStockCountLoss {
    /**
     *
     * 需要更新的字段，数组类型，格式：[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 FID;
        /**
         * 单据编号
         */
        private String FBillNo;
        /**
         * 单据类型
         */
        @NotEmpty(message = "单据类型是必录项")
        public fBillTypeID FBillTypeID;
        /**
         * 单据类型
         */
        @Data
        public static class fBillTypeID{
            public String FNumber;
        }
        /**
         * 日期
         */
        private String FDate;
        /**
         * 物料盘点作业编码
         */
        private String FStockCountInputNo;
        /**
         * 盘点来源内码
         */
        private String FStkCountSchemeId;
        /**
         * 库存组织
         */
        @NotEmpty(message = "库存组织是必录项")
        public fStockOrgId FStockOrgId;
        /**
         * 库存组织
         */
        @Data
        public static class fStockOrgId{
            public String FNumber;
        }
        /**
         * 货主类型
         */
        private String FOwnerTypeIdHead;
        /**
         * 货主
         */
        public fOwnerIdHead FOwnerIdHead;
        /**
         * 货主
         */
        @Data
        public static class fOwnerIdHead{
            public String FNumber;
        }
        /**
         * 部门
         */
        public fDeptId FDeptId;
        /**
         * 部门
         */
        @Data
        public static class fDeptId{
            public String FNumber;
        }
        /**
         * 库存组
         */
        public fStockerGroupId FStockerGroupId;
        /**
         * 库存组
         */
        @Data
        public static class fStockerGroupId{
            public String FNumber;
        }
        /**
         * 仓管员
         */
        public fStockerId FStockerId;
        /**
         * 仓管员
         */
        @Data
        public static class fStockerId{
            public String FNumber;
        }
        /**
         * 备注
         */
        private String FNoteHead;
        /**
         * 盘点来源名称
         */
        private String FStkCountSchemeName;
        /**
         * 序列号上传
         */
        private String FScanBox;
        /**
         * 第三方系统
         */
        private String FThirdSystem;
        /**
         * 第三方源单内码
         */
        private String FThirdSrcId;
        /**
         * 第三方源单编码
         */
        private String FThirdSrcBillNo;
        /**
         * 作废人
         */
        public fcancellerid FCANCELLERID;
        /**
         * 作废人
         */
        @Data
        public static class fcancellerid{
            public String FUserID;
        }
        /**
         * 作废日期
         */
        private String FCANCELDATE;
        /**
         * 明细信息
         */
        @Valid
        @NotEmpty(message = "明细信息是必录项")
        public List<fBillEntry> FBillEntry;
        /**
         * 明细信息
         */
        @Data
        public static class fBillEntry{
            public Integer FEntryID;
            /**
             * 物料编码
             */
            @NotEmpty(message = "物料编码是必录项")
            public fMaterialId FMaterialId;
            /**
             * 物料编码
             */
            @Data
            public static class fMaterialId{
                public String FNumber;
            }
            /**
             * 辅助属性
             */
            public fAuxPropId FAuxPropId;
            /**
             * 辅助属性
             */
            @Data
            public static class fAuxPropId{}
            /**
             * 单位
             */
            @NotEmpty(message = "单位是必录项")
            public fUnitID FUnitID;
            /**
             * 单位
             */
            @Data
            public static class fUnitID{
                public String FNumber;
            }
            /**
             * 盘点数量
             */
            private String FCountQty;
            /**
             * 仓库
             */
            @NotEmpty(message = "单位是必录项")
            public fStockId FStockId;
            /**
             * 仓库
             */
            @Data
            public static class fStockId{
                public String FNumber;
            }
            /**
             * 仓位
             */
            public fStockLocId FStockLocId;
            /**
             * 仓位
             */
            @Data
            public static class fStockLocId{}
            /**
             * 批号
             */
            public fLot FLot;
            /**
             * 批号
             */
            @Data
            public static class fLot{
                public String FNumber;
            }
            /**
             * 库存状态
             */
            @NotEmpty(message = "库存状态是必录项")
            public fStockStatusId FStockStatusId;
            /**
             * 库存状态
             */
            @Data
            public static class fStockStatusId{
                public String FNumber;
            }
            /**
             * 货主类型
             */
            @NotNull(message = "货主类型是必录项")
            private String FOwnerTypeId;
            /**
             * 货主
             */
            @NotEmpty(message = "库存状态是必录项")
            public fOwnerid FOwnerid;
            /**
             * 货主
             */
            @Data
            public static class fOwnerid{
                public String FNumber;
            }
            /**
             * 备注
             */
            private String Fnote;
            /**
             * 保管者类型
             */
            @NotNull(message = "货主类型是必录项")
            private String FKeeperTypeId;
            /**
             * 保管者
             */
            @NotEmpty(message = "保管者是必录项")
            public fKeeperId FKeeperId;
            /**
             * 保管者
             */
            @Data
            public static class fKeeperId{
                public String FNumber;
            }
            /**
             * 项目编号
             */
            private String FProjectNo;
            /**
             * BOM版本
             */
            @NotEmpty(message = "保管者是必录项")
            public fBomId FBomId;
            /**
             * BOM版本
             */
            @Data
            public static class fBomId{
                public String FNumber;
            }
            /**
             * 服务上下文
             */
            private String FServiceContext;
            /**
             * 生产日期
             */
            private String FProduceDate;
            /**
             * 有效期至
             */
            private String FExpiryDate;
            /**
             * 辅单位
             */
            public fExtAuxUnitId FExtAuxUnitId;
            /**
             * 辅单位
             */
            @Data
            public static class fExtAuxUnitId{
                public String FNumber;
            }
            /**
             * 盘点数量（辅单位）
             */
            private Integer FExtAuxUnitQty;
            /**
             * 账存数量（辅单位）
             */
            private Integer FExtSecAcctQty;
            /**
             * 盘亏数量（辅单位）
             */
            private Integer FExtSecLOSSQty;
            /**
             * 盘点数量（基本）
             */
            private Integer FBaseCountQty;
            /**
             * 库存辅单位
             */
            public fSecUnitId FSecUnitId;
            /**
             * 库存辅单位
             */
            @Data
            public static class fSecUnitId{
                public String FNumber;
            }
            /**
             * 计划跟踪号
             */
            private String FMtoNo;
            /**
             * 第三方源单分录编码
             */
            private String FThirdSrcEntryId;
            /**
             * 序列号子单据体
             */
            public List<fSerialSubEntity> FSerialSubEntity;
            /**
             * 序列号子单据体
             */
            @Data
            public static class fSerialSubEntity{
                public Integer FDetailID;
                /**
                 * 序列号
                 */
                private String FSerialNo;
                /**
                 * 备注
                 */
                private String FSerialNote;
            }
        }
    }
}
