using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DeiNiu.Utils
{
    public struct WmsConstants
    {
        public static bool IS_ONLINE_RESTRICT = false; // 是否限制在线人数
        public static int MAX_ONLINE_USERS = 1;
        public static string SYSTEM_VALID_DATE = "2024-05-25";
        public static int SYSTEM_VALID_LEFT_DAYS = 0;
        public static bool IS_INITIALED = false;
        public static string SQL_CONN_WMS = "";
        public static string SQL_CONN_PLATFORM = "";
        public static string SQL_CONN_WMS_ERP = "";
        // public static int CURRENT_USER_ID;
        //public static string CURRENT_USER_TOKEN;
        public static string CURRENT_USER_ORGID = "LDJNBYXGS";
        public static string CURRENT_USER_NAME = "系统";
        public static string CURRENT_USER_ORG = "贵客集团";//todo 
        public static string CURRENT_WAREHOUSE_ADDRESS = "";
        public static string CURRENT_WAREHOUSE_OUT_DOCNO = "1234"; //随货通行单文件编号
        public static string CURRENT_WAREHOUSE_OUT_PHONE = "12345"; //随货通行单文件编号
        
        public static decimal BULK_MAX_RATE = 1m;     //零货默认比例
        public static decimal BATCH1_MAX_RATE = 1m;
        public static decimal BATCH2_MAX_RATE = 4m;
        public static decimal BATCH3_MAX_RATE = 20m;
        public static int PAGER_SIZE = 100;
        public static bool LOG_SQL_ON = false;
        public static bool IS_MENU_EXPANDED = false;
        public static int DUE_DAYS_AUTO_PICK = 3; //out 订单duedate 几日内的自动处理,进行分拣
        /// 
        /// auto sync orders when form is load
        /// 
        public static bool AUTO_SYNC_SALE_ORDER = false;
        /// 
        ///  auto new wave when form is load
        /// 
        public static bool AUTO_NEW_WAVE = false;
        /// 
        /// auto get  pick orders 4 validation
        /// 
        public static bool AUTO_PICK_BULK_VALIDATION_ORDER = false;
        
        /// 
        /// auto get batch pick orders
        /// 
        public static bool AUTO_PICK_BATCH_PICK_ORDER = false;
        public static bool AUTO_APPROVE_SALE_ORDER = false;
        public static bool FENDIAN_IN_ONE_PICK_ORDER = false;
        public static string LOC_NAME_FORMAT = "{0}.{1:D2}.{2:D2}.{3}{4}";
        /// 
        /// 拣货单明细最大个数
        /// 
        public static int MAX_PICK_DETAIL_CNT_IN_PICKORDER = 500;
        /// 
        /// 零库单笔捡货最大数量,电子标签最大显示9999
        /// 
        public static int MAX_PICK_CNT_BULK = 9999;
        /// 
        /// 分配拣货任务时,最大货位数
        /// 
        public static int MAX_PICK_LOT_CNT = 100;
        public static int MAX_PICK_PERCENT = 30;  ///可获取最大现有任务的百分比
        /// 
        /// 分配拣货任务时,最大箱数
        /// 
        public static int MAX_PICK_BOX_CNT = 500;
        public static int MAX_TASKS_OWN = 3;
        /// 
        /// 统计波次用时,作为取订单间隔的参考
        /// 
        public static int WAVE_CNT = 0;
        public static int WAVE_TOTAL_SECONDS = 0;
        public static DateTime WAVE_LAST_TIME;
        public static string WAVE_LAST_ORDER = "";//last wave order for count time 
        public static string WAVE_CURRENT_ORDER = "";
        public static int WAVE_SECONDS; //average seconds per wave
        public static int MAX_LABEL_DATA_IN_A_WAVE = 40; //一个标签一个波次只能存储40条数据
        public static int MAX_CONTROL_DATA_IN_A_WAVE = 1200;  //一个控制器最大存储1200条
        public static DateTime WAVE_LAST_FREE_TIME;
        /// 
        /// x分钟后强制开始新波次,有可能会有再次发送亮灯数据时,实际已经捡货完毕并拍灭,又重新亮灯造成多捡的可能。
        /// 
        public static int MAX_SECONDS_BETWEEN_WAVES = 1 * 60 * 1000;// 20 * 60000;
        public static int WAVE_ORDERS_CNT = 6;//wave每个最大订单数 ,不适用于电子标签波次,灯光颜色决定最大波次订单数量
       // public static int WAVE_TASK_MAX_CNT = 100;
        public static bool DPS_TASK_GENERATION = false; //亮灯拣选是否生成拆零的任务数据到任务大厅
        //入库规则 
        /// 
        /// 按入库预约到货数量自动收货,等待验收入库
        /// 
        public static bool IN_STOCK_PREIN_AUTO_RECEIVE=true;
        /// 
        /// 按店分货直通类验收,完验时自动验收未手动干预部分
        /// 
        public static bool IN_STOCK_ZHITONG_PREDONE_AUTO_VALIDATION = true;
        /// 
        /// 是否打印通知单号码
        /// 
        public static bool IS_PRINT_PRENO = false; 
        /// 
        /// 检查日期
        /// 
        public static bool IN_STOCK_CHECK_DATE = true;
        /// 
        /// 入库是否优先检查并补充零库
        /// 
        public static bool IN_STOCK_CHECK_BULK_FIRST = false;
        /// 
        /// 入库时,无大整货位,入小整,整库无货位入零库
        /// 
        public static bool IN_STOCK_NO_BATCH_LOCATION_IN_BULK = true;
        /// 
        /// 入库时,优先补大货位
        /// 
        public static bool IN_STOCK_BIG_LOCATION_FIRST = true;
        public static bool IN_STOCK_OVER_RECEIVE = true;
        /// 
        /// 入库时,同一验收批次数量可以入不同货区
        /// 
        public static bool IN_STOCK_DIFF_PARTS = true;
        /// 
        /// 商品入库默认从设定货区分配货位
        /// 
        public static int IN_STOCK_DEFAULT_WAREHOUSE = 0;
        /// 
        /// 入库上架需要扫描条码
        /// 扫描确认后库存增加
        /// 
        public static bool IN_STOCK_PDA_SCAN = true;
        /// 
        /// 入库不良品是否计入采购明细的validCont
        /// 
        public static bool IN_STOCK_BAD_COUNTIN_VALID = false;
        /// 
        /// ABC 上架策略
        /// 
        public static bool IN_STOCK_ABC = true;
        /// 
        /// 是否启用入库验收模块
        /// 
        public static bool IN_STOCK_RECEIVE_VALID = true;
        public static decimal IN_STOCK_LEFT_VALID_FACTOR = 0.3m;
        public static int IN_STOCK_LEFT_VALID_DAYS = 180;
       // public static int PREPICKING_ORDERS_CNT = 0;
        public static string PRINTER_NAME_CODE = "ZDesigner GT800 (EPL)";
        public static string PRINTER_NAME_A4 = "HP LaserJet Professional P1106";
        public static string PRINTER_NAME_PIN = "HP LaserJet Professional P1106";
        public static string LIGHT_COM_1 = "com1";
        //public static char[] SPLIT = { '*', '%', '&' };
        public static string SPLIT = "|*|";
        /// 
        /// light up success or not
        /// 
        public static Dictionary WAVE_CURRENT_LIGHTS_STATUS = new Dictionary();
        /// 
        /// pick status,lights turnned off or not
        /// 
        public static Dictionary WAVE_CURRENT_PICK_STATUS = new Dictionary();
        public static string[] SPECIAL_AUTHS;
        public static string SPECIAL_AUTHS_SUPER = "超级权限";
        public static string SPECIAL_AUTHS_DIC_DELETE = "删除字典";
        public static string SPECIAL_AUTHS_DIC_UPDATE = "修改字典";
        public static string SPECIAL_AUTHS_IN_BATCH_IN = "批量入库";
        public static string SPECIAL_AUTHS_DOUBLE_CHECK = "特殊检验";
        public static string SPECIAL_VALID_NEAR_EXPIRED = "临期入库";
        public static string SPECIAL_VALID_REASSIN_TASK_BY_ID = "按下架任务编号获取任务";
        public static string SPECIAL_AUTHS_PICK_COUNT_MODIFY= "修改拣货任务数量";
        public static string SPECIAL_ALL_PARTION_TASKS = "跨区任务可见";
        public static string SPECIAL_ALL_CHANGE_DESK_COLOR = "分播台颜色设置";
        public static string SPECIAL_OVER_RECEIVE = "超量收货";
        public static string WCF_UN_AUTH_MESSAGE = "未授权的访问,请登录后再试";
        public static string GOODS_VALID_DATE_FORMAT = "yyyyMMdd";
        
        public static string CURRENT_SEEDS_NO, CURRENT_SEEDS_GOODSID, CURRENT_SEEDS_GOOD_BATCH;
        public static int CURRENT_SEEDS_GOOD_SKUID;
        public static int CURRENT_SEEDS_LABLE_ID;
        public static Dictionary SEEDS_CURRENT_PICK_STATUS = new Dictionary();
        /// 
        /// 播种订单商品类型阀值
        /// 订单商品类型数量小于该值时,适用播种
        /// 
        public static int OUT_MAX_SEEDS_GOODSTYPE_CNT = 50;
        /// 
        /// 播种订单商品零捡总数阀
        /// 订单零捡商品总数小于该值时,适用播种
        /// 
        public static int OUT_MAX_SEEDS_BULK_CNT_SUM = 10;
        public static int OUT_MAX_SEEDS_WAIT_MINUES = 10;
        public static int SEEDS_LABLEID_MARK_VALUE = 99999; //适合播种的标记
        //每次处理待拣货订单数量
        public static int OUT_PROCESS_ORDERS_CNT = 100;
        public static int OUT_PROCESS_STOCK_DAYS = 2; //处理分拣单库存定位的最大天数,几天内的进行处理,超过期限的不予处理
        public static int SEEDS_WEIGHT_OUT_RATE = 20; //称重类型的先总拣后分播时,总拣数量需大于总需求的比例,防止不够分; 总拣分播剩余部分将自动归还库存。
        public static decimal OVER_WEIGHT_PERCENT_ALLOW = 20;  // 称重商品允许超收超拣百分比
        public static decimal IN_MAX_OVER_TIMES= 8;  // 最大超收比例 , 订货100 ,最大收1000
        public static int OUT_MIN_DAYS_VALIDTION_LEFT = 30;
        public static int OUT_STOCK_PROCESS_MAX_TIME_MINUTE =5;
        /// 
        /// 开启零货播种拣选
        ///        
        public static bool OUT_BULK_SEEDS_PICK_ON = true;
        public static bool OUT_BATCH_PICK_PRINT_CODE_EACH_BOX = true;
        public static bool OUT_REGIST_BOX_AFTER_PICKED = true;
        public static bool OUT_SPEAK_WAVE = true;
        public static bool OUT_BULK_DESK_CONTROLL = true;
        //PDA can only get batch tasks
        public static bool OUT_TASK_ASSIGN_BATCH_ONLY = true;
      
        /// 
        /// 出库PDA扫描、电子标签确认后(波次强制结束后)扣库存
        /// 
        public static bool OUT_STOCK_DEDUCT = true;
        /// 
        ///零库出货PAD捡货
        /// 
        public static bool OUT_STOCK_BULK_PDA_SCAN = false;
        public static bool OUT_STOCK_BATCH_FIFO = true;
        public static bool OUT_LIGHT_ENABLE = true;
        public static bool VALIDATION_SEEDS_PACK_DESK_SPLIT = false; //是否独立启用打包台
        public static int VALIDATION_KEEP_DAYS = 2;
        public static string ORDER_PRI_PICK = "PK";
        public static string ORDER_PRI_PICK_SELF = "ITK";
        public static string ORDER_PRI_RPO = "RP";
        public static string ORDER_PRI_WAVE = "WV";
        public static string ORDER_PRI_TRAN = "TR";
        public static string ORDER_PRI_SEEDS = "SD";
        public static string ORDER_PRI_PANDIAN = "PN";
        public static string ORDER_PRI_INORDER = "PE";
        public static string ORDER_PRI_WAVEJOB = "JOB";
        public static string ORDER_DPS_WAVE = "DPS";
        public static string ORDER_PRI_OBSOLETE = "OBS";
        public static string ORDER_PRI_TRANSFER_INSIDE = "TRI";
        public static string ORDER_PRI_TRANSFER_OUTSIDE = "TRO";
        public static string ORDER_PRI_RETURN_VENDER = "RTV";
        public static string ORDER_PRI_PICK_OUT_INVOICE = "PKI";
        public static string ORDER_PRI_STK_IN = "STI";
        public static string ORDER_PRI_STK_DOWN = "XJ";
        public static decimal GOODS_IN_VALID_SEEDS_BOXS_STEP = 50;
        public static decimal GOODS_IN_VALID_SEEDS_BOXS_STEP_MIN = 3;
        public static decimal GOODS_IN_VALID_SEEDS_BOXS_STEP_FACTOR = 1;
        public static int DAYS_QUERY_BEFORE = 1;
        public static int DAYS_QUERY_AFTER = 3;
        public static Dictionary USER_CURRENT_DBID = new Dictionary();
        public static Dictionary DBID_CONN_STR = new Dictionary();
        public const string SKU_RESEVRED_PRDDATE_ATTNAME = "生产日期";
        public const string SKU_RESEVRED_EXPIREDATE_ATTNAME = "到期日期";
        public const string SKU_RESEVRED_BATCH_ATTNAME = "厂家批次";
        public const string SKU_RESEVRED_ENTI_ATTNAME = "货主";
        public const string SKU_RESEVRED_GOODSID_ATTNAME = "商品ID";
        //分区亮灯
        //每个分区一次最大订单数量
        public static int PART_ORDER_SIZE = 2;
        //每个分区一次最大分拣笔数
        public static int PART_REC_SIZE = 200;
        // public static int PART_FINISH_LABLE_ID_PLUS = 0;
        public static int[] PART_FINISH_LABLE_IDS;
        public static Dictionary partStatus = new Dictionary();//完成器是否点亮
        /// 
        /// 播种拣选,分区任务波次亮灯,最大同时亮灯的复核台数量
        /// 每个复核台的任务对应特定颜色的灯
        /// 比如总共有10个复核台,每次亮3个复核台的任务,则同时最大拣选3个复核台的任务,用红、绿、蓝三色表示亮灯颜色,注意灯色的映射管理,实际亮灯颜色和真实的分播台编号不同
        /// 使用完成器依次分批呼叫下面的任务
        /// 
        /// 
        public static int SEEDS_PART_LIGHT_DESK_CNT = 3;   
        public static bool SEEDS_PARTION_DESK_COLOR_MAP = true;
        /// 
        /// 灯色的映射管理
        /// [partionid, [oColor,newColor]]
        /// 
       // public static Dictionary> partColorPairs = new Dictionary>();
        /// 
        /// 区域亮灯信息,周转箱注册信息准备
        /// [partionid, [newColor,dspOrder]]
        /// 
      //  public static Dictionary> currentWavePart = new Dictionary>();
    
        public static string LIGHT_SVR_ADDRESS = "";
        public static string PRINT_SVR_ADDRESS = "";
        /// 
        /// 集中配送订单出库集单截止时间
        /// 
        public static string STOCKOUT_JIDAN_DUE_TIME_HOUR = "17";
        public static int JOB_BASIC_INFO_SYNC_INTERVAL = 10; //每十分钟同步更新基础资料
        public static int JOB_OUT_REQUEST_INTERVAL = 10; //每十分钟同步更新基础资料
        public static int JOB_TEST_REQUEST_INTERVAL = 10; //每十分钟同步更新基础资料
        public static int JOB_OUT_REQUEST_NO_STOCK_CHECK_INTERVAL = 60; //每3小时查验缺货订单库存是否已经满足
        public static int JOB_NOTICE_ERP  = 60; //每3小时查验缺货订单库存是否已经满足
        public static bool ERP_NOTICE_STOCK_IN = false; //是否通知ERP入库信息
        public static bool ERP_NOTICE_STOCK_OUT = false; //是否通知ERP出库信息
        public static bool ERP_NOTICE_STOCK_IN_WHEN_FINISH_UP = false;
        public static bool ERP_NOTICE_STOCK_IN_WHEN_FINISH_VALID_IN = true;
        //文件服务地址
        public static string FILE_SVR_PRINT = "";
        public static string FILE_SVR_PIC = "";
        //seeds double check
        public static int CHECKED_BY_2_ID;
        //多联打印机纸张参数
        public static decimal PRINTER_CODE_WIDTH = 5.5m;
        public static decimal PRINTER_CODE_HEIGHT = 4;
        public static string PRINTER_PIN_PAGE_FORMAT="EMF";
        public static decimal PRINTER_PIN_PAGE_WIDTH=21;
        public static decimal PRINTER_PIN_PAGE_HEIGHT = 29.7m;
        public static decimal PRINTER_PIN_PAGE_MARGIN_TOP=1;
        public static decimal PRINTER_PIN_PAGE_MARGIN_LEFT=2;
        public static decimal PRINTER_PIN_PAGE_MARGIN_RIGHT=1;
        public static decimal PRINTER_PIN_PAGE_MARGIN_BOTTOM=1;
        public static bool PDA_LOC_GOODTYPE_VALIDATION=true;
        public static bool NO_FREE_LOCATION_USE_TMP=true;
        public static string TMP_BULK_LOCATION="11.01.01.11";
        public static string TMP_BATCH_LOCATION = "11.01.01.11";
        public static string TMP_LACK_DEBIT_LOCATION = "缺货虚拟货位";//拣货时系统库存不足,但未进系统的待入货物从此周转,借用
        public static bool BOX_BULK_IN_SINGLE_LOC=true; //拆箱入零库,一箱上单个货位,减少分拆上货花费成本。
        public static bool VALID_LOC_CAPICITY = false;//是否验证货位库容
       
        public static List EXCEPTION_IGNORE_LST=new List();
        public static bool OUT_STOCK_LACK_HOLD_ORDER = true;//有缺货则整单不出,原始订单不生成拣货单
        public static bool OUT_STOCK_LACK_VALIDATION = false;//是否检测原始订单是否有缺货; 如果不检测,则原始订单全部生成拣货单,缺货问题在拣货环节进行处理
        public static bool OUT_REQUEST_MERGE = true;
        public static bool OUT_REQUEST_PROCESS_STOCK = true;
        public static bool OUT_VALIDATION_ONE_ENTER = true;
        public static bool OUT_STOCK_LACK_VIR_OUT = true;//有缺货从虚拟库出,虚拟库存出拣货任务
        public static bool OUT_STOCK_LACK_VIR_OUT_AUTO = true;//有缺货从虚拟库借库存,从实体货位出拣货任务,系统管理虚拟库存,自动借// TODO:判断有没有相关在途订单及在途数量
        public static bool OUT_STOCK_LACK_VIR_IN_AUTO = false; //来货是否自动还 借出的货,适用每个货单供应商供货情况
        public static bool OUT_STOCK_BULK_LACK_OUT = true;//分拣单某明细中的零货,(零库)分拣库位货数量不足,其它正常库存的货品可继续分拣,  一次分拣完成并打包的分拣单不适用
        public static bool OUT_STOCK_BULK_LACK_OUT_SEEDS = true;//取总分拣单某明细中的零货,(零库)分拣库位货数量不足,其它正常库存的货品可继续分拣
        public static bool OUT_STOCK_WHEN_NO_MORE_REQUEST; //仅当没有新订单时,统一进行分组处理、库存处理
        public static bool OUT_ZHITONG_FROM_STORE = true;  //直通商品 可以从库存出库
     
        public static string ERP_API_ORDER_NOTICE = "http://47.103.159.209:20999/lsyapi/notice?orderNo={0}&orderType={1}";
        public static string ERP_API_KEY="ApiToken:7c6fa52f4da9bb859c2d44b9b40ee929";
        public static bool TEST_CREATE_PURCH_IN;
        public static bool TEST_VALIDIN;
        public static bool TEST_VALID_IN_ZHITONG_TAKEALL;//先收后分
        public static bool TEST_VALID_IN_ZHITONG_TO_OUTDETAIL;//边收边分
        public static bool TEST_ONSHELF;
        public static bool TEST_CREATE_SALES_OUT;
        public static bool TEST_PICK_OUT;
        public static bool TEST_PICK_OUT_SEEDS;
        public static bool TEST_PLATE_OUT;
        public static bool TEST_PLATE_OUT_CUSTOMER;
        public static bool TEST_PLATE_OUT_LINE;
        public static bool TEST_PLATE_OUT_VC;
        public static bool TEST_PLATE_OUT_LOAD_TRUCK;
        public static bool TEST_PLATE_OUT_START_TRAN;
        public static bool TEST_PANDIAN_PROCESS;
        public static int TEST_VALID_IN_ORDER_CNT = 50;
        public static int TEST_VALID_IN_ITEM_CNT=500;
        public static int TEST_PICK_OUT_ITEM_CNT = 500;
        public static int MAX_JOBS_IN_A_WAVE = 100; //生成出货波次任务时,单个波次包含的最大任务数
        public static string PDA_MENU_UTILS= "库管工具";
        public static string PDA_MENU_STK_OUT= "入库收货";
        public static string PDA_MENU_STK_IN= "出库拣货";
        public static string PDA_MENU_PLATE= "集货管理";
        public static int   ERP_TRANS_DATA_AT_CLOCK1;
        public static int   ERP_TRANS_DATA_SLEEP_MINUES1;
        public static int ERP_TRANS_DATA_AT_CLOCK2;
        public static int ERP_TRANS_DATA_SLEEP_MINUES2;
        public static bool SEEDS_PICK_ALL=true;
        public static List GOODS_WEIGHT_UNITS =new List();
        public static string PLATE_TMP_PREFIX="L";
        public static string PLATE_BOX_PREFIX="X";
        public static string PLATE_CUST_PREFIX="G";
        public static string PLATE_LINE_PREFIX="M";
        public static string PLATE_TRUCK_PREFIX="C";
        public static bool SEEDS_OUT_NOT_WITH_WEIGHT = true; //称重出库的不进行总拣
        public static bool JIHUO_CHECK_PRE_STATE=true; //集货时是不是检查前置集货是否完成
        public static bool PANDIAN_WEIGHT_SUM = true; //盘点时,称重sku 可多次称重,结果累加,skuId 需一致
        public static bool PANDIAN_SHOW_CNT = true; //盘点时,是否显显示原始数量
        public static bool IS_PLATE_IN_LINE; //是否启用线路码头集货,否则客户容器直接装车
        public static bool IS_CHECK_LINE_ON_LOAD;//是否装车时限制同线路客户
        public static bool UP_DOWN_SELF_RECS=false; //是否只能上架自己下架的货品
        public static bool AUTO_LOAD_TRUCK = true; //客户订单的容器自动装车 
        public static int STOCK_HIS_KEEP_DAYS = 31;
        public static bool OUT_SEEDS_CAN_OVER_REQ;  //集货播种时,可否比原来的需求多发 
        public static bool OUT_SEEDS_PICK_TASK_AUTO_ASSIGN =true;  //只许抢集中拣货的任务,其他按单发
        public static bool OUT_TASK_ASSIGN_ZHAIGUO_TYPE = false; //按单摘果分拣的任务是否可以自动获取
        public static int SEEDS_START_HOUR=14;
        public static int SEEDS_END_HOUR=14;
        public static int SEEDS_END_MINUTES=35;
        public static int SEEDS_START_MINUTES=20;
        public static int SEEDS_CONTINIU_MINUTES = 30;
        public static int SEEDS_TASK_FETCH_START_HOUR = 14;
        public static int SEEDS_TASK_FETCH_END_HOUR = 14;   
        public static int SEEDS_TASK_FETCH_START_MINUTES = 20;
        public static int SEEDS_TASK_FETCH_END_MINUTES = 35;
        public static string CURRENT_PANDIAN_ORDER="";
        public static bool ERP_NOTICE_STOCK_OUT_DOING;
        //----light seeds
        public static Dictionary SEEDS_PORT_USERID_ID = new Dictionary();
        public static Dictionary> SEEDS_LABEL_ID = new Dictionary>(); 
    
        public static Dictionary> SEEDS_CURRENT_LIGHTS_STATUS = new Dictionary>();
        public static Dictionary> EPICK_SEEDS_CURRENT_PICK_STATUS = new Dictionary>();
        public static Dictionary WAVE_CURRENT_LIGHTS_PORT_STATUS = new Dictionary();
        
    }
}