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 BDStock {
    /**
     *
     * 需要更新的字段，数组类型，格式：[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 FStockId;
        /**
         * 创建组织
         */
        @NotEmpty(message = "创建组织是必录项")
        public Integer FCreateOrgId;
        /**
         * 创建组织
         */
        @Data
        public static class fCreateOrgId{
            public String FNumber;
        }
        /**
         * 编码
         */
        public String FNumber;
        /**
         * 使用组织
         */
        @NotEmpty(message = "使用组织是必录项")
        public fUseOrgId FUseOrgId;
        /**
         * 使用组织
         */
        @Data
        public static class fUseOrgId{
            public String FNumber;
        }
        /**
         * 名称
         */
        @NotNull(message = "名称是必录项")
        public String FName;
        /**
         * 第三方仓储类型
         */
        public String FThirdStockType;
        /**
         * 仓库属性
         */
        @NotNull(message = "仓库属性是必录项")
        public String FStockProperty;
        /**
         * 供应商
         */
        public fSupplierId FSupplierId;
        /**
         * 供应商
         */
        @Data
        public static class fSupplierId{
            public String FNumber;
        }
        /**
         * 客户
         */
        public fCustomerId FCustomerId;
        /**
         * 客户
         */
        @Data
        public static class fCustomerId{
            public String FNumber;
        }
        /**
         * 仓库地址
         */
        public String FAddress;
        /**
         * 仓库负责人
         */
        public fPrincipal FPrincipal;
        /**
         * 仓库负责人
         */
        @Data
        public static class fPrincipal{}
        /**
         * 管易仓编码
         */
        public String FGYStockNumber;
        /**
         * 联系电话
         */
        public String FTel;
        /**
         * 分组
         */
        public fGroup FGroup;
        /**
         * 分组
         */
        @Data
        public static class fGroup{
            public String FNumber;
        }
        /**
         * 描述
         */
        public String FDescription;
        /**
         * 库存状态类型
         */
        @NotNull(message = "库存状态类型是必录项")
        public String FStockStatusType;
        /**
         * 默认收料状态
         */
        public fDefReceiveStatusId FDefReceiveStatusId;
        /**
         * 默认收料状态
         */
        @Data
        public static class fDefReceiveStatusId{
            public String FNumber;
        }
        /**
         * 默认库存状态
         */
        public fDefStockStatusId FDefStockStatusId;
        /**
         * 默认库存状态
         */
        @Data
        public static class fDefStockStatusId{
            public String FNumber;
        }
        /**
         * 允许即时库存负库存
         */
        public boolean FAllowMinusQty;
        /**
         * 管易仓
         */
        public boolean FIsGYStock;
        /**
         * 允许锁库
         */
        public boolean FAllowLock;
        /**
         * 不参与可发量统计
         */
        public boolean FNotExpQty;
        /**
         * 启用仓位管理
         */
        public boolean FIsOpenLocation;
        /**
         * 允许MRP计划
         */
        public boolean FAllowMRPPlan;
        /**
         * 参与拣货
         */
        public boolean FAvailablePicking;
        /**
         * 参与预警
         */
        public boolean FAvailableAlert;
        /**
         * 拣货优先级（1~9999）
         */
        public Integer FSortingPriority;
        /**
         * 仓位维度数据列表显示格式
         */
        @NotNull(message = "仓位维度数据列表显示格式是必录项")
        public String FLocListFormatter;
        /**
         * 部门
         */
        public fDeptId FDeptId;
        /**
         * 部门
         */
        @Data
        public static class fDeptId{
            public String FNUMBER;
        }
        /**
         *
         */
        public List<fStockFlexItem> FStockFlexItem;
        /**
         *
         */
        @Data
        public static class fStockFlexItem{
            public String FEntryID;
            /**
             * 仓位值集编码
             */
            public fFlexId FFlexId;
            /**
             * 仓位值集编码
             */
            @Data
            public static class fFlexId{
                public String FNumber;
            }
            /**
             * 必录
             */
            public boolean FIsMustInput;
            /**
             *
             */
            public List<fStockFlexDetail> FStockFlexDetail;
            /**
             *
             */
            @Data
            public static class fStockFlexDetail{
                public Integer FDetailID;
                /**
                 * 仓位值编码
                 */
                public fFlexEntryId FFlexEntryId;
                /**
                 * 仓位值编码
                 */
                @Data
                public static class fFlexEntryId{
                    public String FNumber;
                }
                /**
                 * 重复标识
                 */
                public String FIsRepeat;
            }
        }
    }
}
