using System; using System.Collections.Generic; using System.Linq; using System.Text; using DeiNiu.Data.BaseObject; using System.Data; using DeiNiu.wms.Data.Model; using DeiNiu.Utils; using System.Net; namespace DeiNiu.wms.Logical { public class lbase { protected static log4net.ILog log = log4net.LogManager.GetLogger("logCommon"); protected static log4net.ILog logOut = log4net.LogManager.GetLogger("logOut"); protected static log4net.ILog logERP = log4net.LogManager.GetLogger("logERP"); protected static log4net.ILog logIn = log4net.LogManager.GetLogger("logIn"); protected static log4net.ILog logSpec = log4net.LogManager.GetLogger("special"); protected static log4net.ILog logTest = log4net.LogManager.GetLogger("test"); protected static log4net.ILog logPlate = log4net.LogManager.GetLogger("logPlate"); protected static log4net.ILog logPandian = log4net.LogManager.GetLogger("pandian"); BaseModel _obj; public lbase() { } public lbase(int operId) { this._operId = operId; initialConstants(); LogHelper.debug(this.GetType(), "logic class initialized., operId is " + operId); } protected DateTime getValidDate(string sprdDate,string goodsId) { DateTime prdDate = Util.pareseDateString(sprdDate); WmsGoods wg = new WmsGoods(goodsId); if(wg.expiryDays>0) return prdDate.AddDays(wg.expiryDays); else return prdDate.AddYears(99); } protected string getDateStr(DateTime date) { return date.ToString(WmsConstants.GOODS_VALID_DATE_FORMAT); } protected bool isNearExpired(string sprdDate,string goodsId) { WmsGoods wg = new WmsGoods(goodsId); int leftDays = getLeftDays(sprdDate, goodsId); return leftDays < WmsConstants.IN_STOCK_LEFT_VALID_FACTOR * wg.expiryDays; } protected int getLeftDays(string sprdDate, string goodsId) { DateTime prdDate = Util.pareseDateString(sprdDate); DateTime validDate = getValidDate(sprdDate, goodsId); if (validDate < DateTime.Now) { return 0; } TimeSpan ts1 = new TimeSpan(validDate.Ticks); TimeSpan ts2 = new TimeSpan(prdDate.Ticks); TimeSpan ts = ts1.Subtract(ts2).Duration(); int expDays = ts.Days; ts = ts1.Subtract(new TimeSpan(DateTime.Now.Ticks)).Duration(); return ts.Days; } protected int getLeftDays(string endDateStr) { DateTime endDate = Util.pareseDateString(endDateStr); DateTime validDate = DateTime.Now; log.Debug(string.Format("endDate {0}, currentdate {1}", endDate, validDate)); if (endDate < validDate) { log.Debug(string.Format("expired ....")); return 0; } // TimeSpan ts1 = new TimeSpan(validDate.Ticks); TimeSpan ts2 = new TimeSpan(endDate.Ticks); // TimeSpan ts = ts1.Subtract(ts2).Duration(); // int expDays = ts.Days; TimeSpan ts = ts2.Subtract(new TimeSpan(DateTime.Now.Ticks)).Duration(); return ts.Days+1; } public void initialConstants() { if (WmsConstants.IS_INITIALED) { return; } WmsConstants.CURRENT_PANDIAN_ORDER = new WmsStockPandian().getCurrentPandian(); DataTable dtSetup; //dtSetup = new Node().QueryByFlag(1004); //偏好 dtSetup = new Node().QueryActived().Tables[0]; //偏好 DataView dv = dtSetup.DefaultView; dv.RowFilter = "parentId="+6284; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); switch (n.flag) { case 1: WmsConstants.LOG_SQL_ON = n.isOn; break; case 3: WmsConstants.IS_ONLINE_RESTRICT = n.isOn; break; default: break; } } dv.RowFilter = "parentId=" + 196; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); try { switch (n.flag) { case 6: WmsConstants.SYSTEM_VALID_DATE = Util.getShortDateString( n.value); WmsConstants.SYSTEM_VALID_LEFT_DAYS = getLeftDays(WmsConstants.SYSTEM_VALID_DATE); break; } } catch { continue; } } // dtSetup = new Node().QueryByFlag(1007); //JOBS dv.RowFilter = "parentId=" + 13373; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); int v = 1; try { v = Convert.ToInt32(n.value); } catch (Exception er) { log.Error(er); continue; } switch (n.flag) { case 1: WmsConstants.JOB_BASIC_INFO_SYNC_INTERVAL = v; break; case 2: WmsConstants.JOB_OUT_REQUEST_INTERVAL = v; break; case 3: WmsConstants.JOB_TEST_REQUEST_INTERVAL = v; break; case 4: WmsConstants.JOB_NOTICE_ERP = v; break; default: break; } } // dtSetup = new Node().QueryByFlag(2019); //货位编码格式 dv.RowFilter = "parentId=" + 14385; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); if (!n.isOn) { continue; } try { WmsConstants.LOC_NAME_FORMAT=n.description; } catch { continue; } } // dtSetup = new Node().QueryByFlag(2020); //货位编码格式 dv.RowFilter = "parentId=" + 16659; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); try { switch (n.flag) { case 1: WmsConstants.PDA_MENU_UTILS = n.value; break; case 2: WmsConstants.PDA_MENU_STK_IN = n.value; break; case 3: WmsConstants.PDA_MENU_STK_OUT = n.value; break; case 4: WmsConstants.PDA_MENU_PLATE = n.value; break; } } catch { continue; } } // dtSetup = new Node().QueryByFlag(2013);//系统货位库容设置 dv.RowFilter = "parentId=" + 260; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); decimal v = 1m; try { v = Convert.ToDecimal(n.value); } catch(Exception er) { log.Error(er); continue; } switch (n.flag) { case 1: WmsConstants.BULK_MAX_RATE = v; break; case 2: WmsConstants.BATCH1_MAX_RATE = v; break; case 3: WmsConstants.BATCH2_MAX_RATE = v; break; case 4: WmsConstants.BATCH3_MAX_RATE = v; break; } } //>-----出库设置开始-----> // dtSetup = new Node().QueryByFlag(6001); //偏好 dv.RowFilter = "parentId=" + 191; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); switch (n.flag) { case 7: WmsConstants.OUT_BULK_SEEDS_PICK_ON = n.isOn; break; case 11: WmsConstants.OUT_STOCK_DEDUCT = n.isOn; break; case 12: WmsConstants.OUT_STOCK_BULK_PDA_SCAN = n.isOn; break; case 13: WmsConstants.OUT_STOCK_BATCH_FIFO = n.isOn; break; case 14: WmsConstants.OUT_LIGHT_ENABLE = n.isOn; break; case 15: WmsConstants.AUTO_APPROVE_SALE_ORDER = n.isOn; break; case 16: WmsConstants.FENDIAN_IN_ONE_PICK_ORDER = n.isOn; break; case 17: WmsConstants.DPS_TASK_GENERATION = n.isOn; break; case 18: WmsConstants.OUT_BULK_DESK_CONTROLL = n.isOn; break; case 19: WmsConstants.OUT_TASK_ASSIGN_BATCH_ONLY = n.isOn; break; case 20: break; case 21: WmsConstants.OUT_STOCK_LACK_HOLD_ORDER = n.isOn; break; case 22: WmsConstants.SEEDS_PARTION_DESK_COLOR_MAP = n.isOn; break; case 23: WmsConstants.OUT_REQUEST_MERGE = n.isOn; break; case 24: WmsConstants.OUT_REQUEST_PROCESS_STOCK = n.isOn; break; case 25: WmsConstants.OUT_STOCK_LACK_VALIDATION = n.isOn; break; case 26: WmsConstants.OUT_STOCK_BULK_LACK_OUT = n.isOn; break; case 27: WmsConstants.OUT_STOCK_BULK_LACK_OUT_SEEDS = n.isOn; break; case 28: WmsConstants.OUT_STOCK_LACK_VIR_OUT = n.isOn; break; case 29: WmsConstants.OUT_STOCK_WHEN_NO_MORE_REQUEST = n.isOn; break; case 30: WmsConstants.OUT_ZHITONG_FROM_STORE = n.isOn; break; case 31: WmsConstants.SEEDS_PICK_ALL = n.isOn; break; case 32: WmsConstants.SEEDS_OUT_NOT_WITH_WEIGHT = n.isOn; break; case 33: WmsConstants.ERP_NOTICE_STOCK_OUT = n.isOn; break; case 34: WmsConstants.JIHUO_CHECK_PRE_STATE = n.isOn; break; case 35: WmsConstants.IS_PLATE_IN_LINE = n.isOn; break; case 36: WmsConstants.IS_CHECK_LINE_ON_LOAD = n.isOn; break; case 37: WmsConstants.OUT_STOCK_LACK_VIR_OUT_AUTO = n.isOn; break; case 38: WmsConstants.OUT_SEEDS_CAN_OVER_REQ = n.isOn; break; case 39: WmsConstants.OUT_TASK_ASSIGN_ZHAIGUO_TYPE = n.isOn; break; case 40: WmsConstants.OUT_SEEDS_PICK_TASK_AUTO_ASSIGN = n.isOn; break; default: break; } } dv.RowFilter = "parentId=" + 259; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); int v = 1; try { v = Convert.ToInt32(n.value); } catch (Exception er) { log.Error(er); // continue; } switch (n.flag) { case 1: WmsConstants.PAGER_SIZE = v; break; case 2: WmsConstants.DAYS_QUERY_BEFORE = v; break; case 3: WmsConstants.DAYS_QUERY_AFTER = v; break; case 4: WmsConstants.MAX_TASKS_OWN = v; break; case 5: WmsConstants.STOCK_HIS_KEEP_DAYS = v; break; case 6: WmsConstants.MAX_ONLINE_USERS = v; break; } } // dtSetup = new Node().QueryByFlag(6002); //数据参数 dv.RowFilter = "parentId=" + 3289; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); int v = 1; try { v = Convert.ToInt32(n.value); } catch(Exception er) { log.Error(er); continue; } switch (n.flag) { case 0: WmsConstants.MAX_PICK_DETAIL_CNT_IN_PICKORDER = v; break; case 1: WmsConstants.MAX_PICK_CNT_BULK = v; break; case 2: WmsConstants.OUT_MAX_SEEDS_GOODSTYPE_CNT = v; break; case 3: WmsConstants.OUT_MAX_SEEDS_BULK_CNT_SUM = v; break; case 4: WmsConstants.OUT_MAX_SEEDS_GOODSTYPE_CNT = v; break; case 5: WmsConstants.OUT_MAX_SEEDS_BULK_CNT_SUM = v; break; case 6: WmsConstants.OUT_MAX_SEEDS_WAIT_MINUES = v; break; case 7: WmsConstants.PART_ORDER_SIZE = v; break; case 8: WmsConstants.WAVE_ORDERS_CNT = v; break; case 9: WmsConstants.MAX_PICK_LOT_CNT = v; break; case 10: WmsConstants.MAX_PICK_BOX_CNT = v; break; case 11: WmsConstants.OUT_PROCESS_ORDERS_CNT = v; break; case 12: WmsConstants.DUE_DAYS_AUTO_PICK = v; break; case 13: WmsConstants.VALIDATION_KEEP_DAYS = v; break; case 14: WmsConstants.OUT_MIN_DAYS_VALIDTION_LEFT = v; break; case 15: WmsConstants.SEEDS_PART_LIGHT_DESK_CNT = v; break; case 16: WmsConstants.OUT_STOCK_PROCESS_MAX_TIME_MINUTE = v; break; case 17: WmsConstants.MAX_JOBS_IN_A_WAVE = v; break; case 18: WmsConstants.MAX_PICK_PERCENT = v; break; // case 19: // WmsConstants.SEEDS_WEIGHT_OUT_RATE = v; // break; case 20: WmsConstants.OVER_WEIGHT_PERCENT_ALLOW = v; break; case 21: WmsConstants.SEEDS_START_HOUR = v; break; case 22: WmsConstants.SEEDS_END_HOUR = v; break; case 23: WmsConstants.SEEDS_START_MINUTES = v; break; case 24: WmsConstants.SEEDS_END_MINUTES = v; break; case 25: WmsConstants.SEEDS_TASK_FETCH_START_HOUR = v; break; case 26: WmsConstants.SEEDS_TASK_FETCH_START_MINUTES = v; break; case 27: WmsConstants.SEEDS_TASK_FETCH_END_HOUR = v; break; case 28: WmsConstants.SEEDS_TASK_FETCH_END_MINUTES = v; break; default: break; } } // dtSetup = new Node().QueryByFlag(6003); //数据参数 dv.RowFilter = "parentId=" + 16676; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); int v = 1; try { v = Convert.ToInt32(n.value); } catch (Exception er) { log.Error(er); continue; } switch (n.flag) { case 1: WmsConstants.ERP_TRANS_DATA_AT_CLOCK = v; break; case 2: WmsConstants.ERP_TRANS_DATA_SLEEP_MINUES = v; break; } } dv.RowFilter = "parentId=" + 16669; WmsConstants.GOODS_WEIGHT_UNITS = new List(); foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); WmsConstants.GOODS_WEIGHT_UNITS.Add(n.name); } //--- 测试设置 dv.RowFilter = "parentId=" + 136; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); try { switch (n.flag) { case 1: WmsConstants.TEST_CREATE_PURCH_IN = n.isOn; break; case 2: WmsConstants.TEST_VALIDIN = n.isOn; break; case 3: WmsConstants.TEST_ONSHELF = n.isOn; if (n.isOn) { // WmsConstants.TEST_VALIDIN = n.isOn; } break; case 4: WmsConstants.TEST_CREATE_SALES_OUT = n.isOn; break; case 5: WmsConstants.TEST_PICK_OUT = n.isOn; break; case 6: WmsConstants.TEST_PLATE_OUT = n.isOn; break; case 7: WmsConstants.TEST_PLATE_OUT_CUSTOMER = n.isOn; break; case 8: WmsConstants.TEST_PLATE_OUT_LINE = n.isOn; break; case 9: WmsConstants.TEST_PLATE_OUT_VC = n.isOn; break; case 10: WmsConstants.TEST_PANDIAN_PROCESS = n.isOn; break; case 11: WmsConstants.TEST_PICK_OUT_SEEDS = n.isOn; break; case 12: WmsConstants.TEST_PLATE_OUT_LOAD_TRUCK = n.isOn; break; case 13: WmsConstants.TEST_PLATE_OUT_START_TRAN = n.isOn; break; case 14: WmsConstants.TEST_VALID_IN_ZHITONG_TAKEALL = n.isOn; break; case 15: WmsConstants.TEST_VALID_IN_ZHITONG_TO_OUTDETAIL = n.isOn; break; } } catch { continue; } } // dtSetup = new Node().QueryByFlag(8002); //测试参数 dv.RowFilter = "parentId=" + 273; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); int v = 1; try { v = Convert.ToInt32(n.value); } catch (Exception er) { log.Error(er); continue; } switch (n.flag) { case 1: WmsConstants.TEST_PICK_OUT_ITEM_CNT = v; break; case 2: WmsConstants.TEST_VALID_IN_ITEM_CNT = v; break; case 3: WmsConstants.TEST_VALID_IN_ORDER_CNT = v; break; } } //>-----入库设置开始-----> // dtSetup = new Node().QueryByFlag(5001);//bool类型参数设置 dv.RowFilter = "parentId=" + 3281; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); try { switch (n.flag) { case 1: WmsConstants.IN_STOCK_CHECK_DATE = n.isOn; break; case 2: WmsConstants.IN_STOCK_CHECK_BULK_FIRST = n.isOn; break; case 3: WmsConstants.IN_STOCK_NO_BATCH_LOCATION_IN_BULK = n.isOn; break; case 4: WmsConstants.IN_STOCK_BIG_LOCATION_FIRST = n.isOn; break; case 5: WmsConstants.IN_STOCK_PDA_SCAN = n.isOn; break; case 7: WmsConstants.IN_STOCK_ABC = n.isOn; break; case 8: WmsConstants.IN_STOCK_RECEIVE_VALID = n.isOn; break; case 9: WmsConstants.IN_STOCK_OVER_RECEIVE = n.isOn; break; case 10: WmsConstants.IN_STOCK_DIFF_PARTS = n.isOn; break; case 11: WmsConstants.PDA_LOC_GOODTYPE_VALIDATION = n.isOn; break; case 12: WmsConstants.NO_FREE_LOCATION_USE_TMP = n.isOn; break; case 13: WmsConstants.BOX_BULK_IN_SINGLE_LOC = n.isOn; break; case 14: WmsConstants.VALID_LOC_CAPICITY = n.isOn; break; case 15: WmsConstants.IN_STOCK_BAD_COUNTIN_VALID = n.isOn; break; case 16: WmsConstants.ERP_NOTICE_STOCK_IN = n.isOn; break; case 17: WmsConstants.IN_STOCK_ZHITONG_PREDONE_AUTO_VALIDATION = n.isOn; break; case 18: WmsConstants.OUT_STOCK_LACK_VIR_IN_AUTO = n.isOn; break; } } catch { continue; } } // dtSetup = new Node().QueryByFlag(5002);//字符类型参数设置 dv.RowFilter = "parentId=" + 3283; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); try { switch (n.flag) { case 1: WmsConstants.GOODS_VALID_DATE_FORMAT = n.value; break; } } catch { continue; } } // dtSetup = new Node().QueryByFlag(1003);//ORDER PREFIX dv.RowFilter = "parentId=" + 6282; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); try { switch (n.flag) { case 1: WmsConstants.ORDER_PRI_PICK = n.value; break; case 2: WmsConstants.ORDER_PRI_RPO = n.value; break; case 3: WmsConstants.ORDER_PRI_WAVE = n.value; break; case 4: WmsConstants.ORDER_PRI_TRAN = n.value; break; case 5: WmsConstants.ORDER_PRI_SEEDS = n.value; break; case 6: WmsConstants.ORDER_PRI_INORDER = n.value; break; case 7: WmsConstants.ORDER_PRI_PICK_OUT_INVOICE = n.value; break; } } catch { continue; } } //亮灯拣货 // dtSetup = new Node().QueryByFlag(1006);//系统设置 dv.RowFilter = "parentId=" + 7356; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); switch (n.flag) { case 1: try { WmsConstants.LIGHT_SVR_ADDRESS = n.value; } catch { continue; } break; case 3: WmsConstants.ERP_API_ORDER_NOTICE = n.value; break; case 4: WmsConstants.ERP_API_KEY = n.value; break; } } dv.RowFilter = "parentId=" + 16765; //容器prefix foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); switch (n.flag) { case 1: WmsConstants.PLATE_TMP_PREFIX = n.value; break; case 2: WmsConstants.PLATE_BOX_PREFIX = n.value; break; case 3: WmsConstants.PLATE_CUST_PREFIX = n.value; break; case 4: WmsConstants.PLATE_LINE_PREFIX = n.value; break; case 5: WmsConstants.PLATE_TRUCK_PREFIX = n.value; break; } } dv.RowFilter = "parentId=" + 16780; //偏好 foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); switch (n.flag) { case 1: WmsConstants.PANDIAN_WEIGHT_SUM = n.isOn; break; case 2: WmsConstants.PANDIAN_SHOW_CNT = n.isOn; break; case 3: WmsConstants.UP_DOWN_SELF_RECS = n.isOn; break; } } // dtSetup = client.getNodesByFlag(5004);//系统设置 dv.RowFilter = "parentId=" + 7324; foreach (DataRowView dr in dv) { Node n = new Node(dr.Row); decimal intValue; try { intValue = Convert.ToDecimal(n.value); } catch { continue; } switch (n.flag) { case 1: WmsConstants.GOODS_IN_VALID_SEEDS_BOXS_STEP_MIN = intValue; break; case 2: WmsConstants.GOODS_IN_VALID_SEEDS_BOXS_STEP = intValue; break; case 3: WmsConstants.GOODS_IN_VALID_SEEDS_BOXS_STEP_FACTOR = intValue; break; case 4: WmsConstants.IN_STOCK_LEFT_VALID_DAYS =Convert.ToInt32( intValue); break; case 5: WmsConstants.IN_STOCK_DEFAULT_WAREHOUSE = Convert.ToInt32(intValue); break; case 6: WmsConstants.IN_MAX_OVER_TIMES = Convert.ToInt32(intValue); break; } } WmsConstants.IS_INITIALED = true; } /// /// query with like, return talbe and record cnt. /// public DataSet Query(string querystr, int rownumStart, int rownumEnd) { _obj = getModel(); if (rownumEnd > rownumStart && rownumStart > 0) { _obj.rownumStart = rownumStart; _obj.rownumEnd = rownumEnd; } // DataSet ds = string.IsNullOrEmpty(querystr) ? _obj.Query() : _obj.Query(querystr); if (string.IsNullOrEmpty(querystr)) { return _obj.Query(""); } string condition = pareseCondition(querystr); // querystr = filtRiskChar(querystr); return _obj.Query(condition); } protected string pareseCondition(string querystr) { string condition = ""; string[] parameters = querystr.Split(";".ToCharArray()); foreach (string value in parameters) { if (string.IsNullOrEmpty(value)) { continue; } string[] par = value.Split("#".ToCharArray()); condition += par.Length == 0 ? "" : " and "; foreach (string p in par) { condition += p; } } return condition; } protected virtual BaseModel getModel() { return null; } int _operId = 0; public int operId { get { return _operId; } set { _operId = value; } } protected HttpWebRequest getErpRequest(string url) { // log.Debug(" erp request url: " + url); HttpWebRequest webReq; webReq = (HttpWebRequest)WebRequest.Create(new Uri(url)); webReq.Method = "GET"; webReq.Headers.Add(WmsConstants.ERP_API_KEY); return webReq; } protected bool havePermission(string permission) { return ConstAuthourity.havePermission(operId, permission); } } }