From 406c7a973355be235557d2c7b8b80a210ab824ac Mon Sep 17 00:00:00 2001 From: jl Date: Fri, 21 Apr 2023 17:29:50 +0800 Subject: [PATCH] --- Epost.BLL/AddressstorageBLL.cs | 12 +- Epost.BLL/CommandBLL.cs | 97 +-- Epost.BLL/Epost.BLL.csproj | 2 + Epost.BLL/OrderBLL.cs | 72 +- Epost.BLL/OrderControlBLL.cs | 1043 +-------------------------- Epost.BLL/Work_DisplayJobThread.cs | 229 ++++++ Epost.BLL/Work_JobDownThread.cs | 1074 ++++++++++++++++++++++++++++ Epost.DAL/AddressstorageDAL.cs | 26 +- Epost.DAL/Cache/WorkIngCacheDAL.cs | 94 +++ Epost.DAL/Epost.DAL.csproj | 1 + 10 files changed, 1484 insertions(+), 1166 deletions(-) create mode 100644 Epost.BLL/Work_DisplayJobThread.cs create mode 100644 Epost.BLL/Work_JobDownThread.cs create mode 100644 Epost.DAL/Cache/WorkIngCacheDAL.cs diff --git a/Epost.BLL/AddressstorageBLL.cs b/Epost.BLL/AddressstorageBLL.cs index 324dde2..047258d 100644 --- a/Epost.BLL/AddressstorageBLL.cs +++ b/Epost.BLL/AddressstorageBLL.cs @@ -182,10 +182,18 @@ namespace Epost.BLL return dal.GetAreaList(); } #endregion + #region 获取所有小区 - public List GetAreaList(string block = "") + public List GetAreaList(string block = "", string shelfid = "") { - return dal.GetAreaList(block); + return dal.GetAreaList(block, shelfid); + } + #endregion + + #region 获取所有小区 + public List GetshelfidList(string block = "") + { + return dal.GetshelfidList(block); } #endregion #region 获取所有通道 diff --git a/Epost.BLL/CommandBLL.cs b/Epost.BLL/CommandBLL.cs index d25784d..7d6971d 100644 --- a/Epost.BLL/CommandBLL.cs +++ b/Epost.BLL/CommandBLL.cs @@ -19,13 +19,11 @@ namespace Epost.BLL public class CommandBLL { CommandDAL dal = new CommandDAL(); - XgateCacheDAL xageDAL = new XgateCacheDAL(); + AddressstorageBLL addrBLL = new AddressstorageBLL(); public static DataTable Controls = new DataTable(); public static DataTable Labels = new DataTable(); - JobDownCacheDAL JobCache = new JobDownCacheDAL(); - OrdersDAL orderDal = new OrdersDAL(); - ConfigurationOperator txtbll = new ConfigurationOperator(); + string IP = ConfigurationManager.AppSettings["WebAPIUrl"]; #region 初始化数据 @@ -151,23 +149,7 @@ namespace Epost.BLL } } - #endregion - - #region 获取参数中文 - public string GETDISPLAYJOBPAR_CN(string no,string Lightcolor,string IsTwinkle,string Title,string BigQuantity, string BigUnit,string Quantity, string Unit,string Content,string Rfcode) - { - string parar = no+"00" + Lightcolor + IsTwinkle+"30CQ" + Title + "\n\n" + BigQuantity + "\n" + BigUnit + "\n" + Quantity + "\n" + Unit + "\n" + Content + "\n00\n\n" + Rfcode + "\n"; ; - return parar; - } - #endregion - - #region 获取参数数字 - public string GETDISPLAYJOBPAR(string no, string Lightcolor, string IsTwinkle, string location, string Quantity, string Rfcode) - { - string parar = no + Lightcolor + IsTwinkle + "30NQ" + location + "\n" + Quantity + "\n" + Rfcode + "\n"; - return parar; - } - #endregion + #endregion #region 清除 public void clearALL_M() @@ -188,10 +170,7 @@ namespace Epost.BLL } - #endregion - - - #region M系列 + #endregion #region 格式化任务数据 public bool FORMATE_JOB_DATA(LabelParamModel model) @@ -214,37 +193,6 @@ namespace Epost.BLL } #endregion - #region 进入设置模式 - public bool ENTER_CONFIG_MODE(LabelParamModel model) - { - - - return dal.ENTER_CONFIG_MODE(model); - } - #endregion - - #region 设置地址 (传参地址 内容) - public bool SET_ADDRESS(LabelParamModel model) - { - return dal.SET_ADDRESS(model); - } - #endregion - - #region 删除地址 (传参地址 内容) - public bool DELETE_ADDRESS(LabelParamModel model) - { - return dal.DELETE_ADDRESS(model); - } - #endregion - - #region 退出设置模式 - public bool EXIT_CONFIG_MODE(LabelParamModel model) - { - - return dal.EXIT_CONFIG_MODE(model); - } - #endregion - #region 任务指令(传参地址) public void DISPLAY_JOB_M(LabelParamModel model, bool clear = false, bool islock = false ) { @@ -307,7 +255,6 @@ namespace Epost.BLL } #endregion - #region 任务指令(传参地址) public void LED_ON_M(LabelParamModel model, bool islock = false) { @@ -353,6 +300,7 @@ namespace Epost.BLL dal.DISPLAY_JOBALL(list); } #endregion + #region LED_OFF(传参地址) public void LED_OFF_M(List list) { @@ -371,8 +319,6 @@ namespace Epost.BLL } #endregion - - #region LED_OFF(传参地址) public void LED_OFF_CLEAR(string ip) { @@ -385,6 +331,7 @@ namespace Epost.BLL dal.Send(clearModel); } #endregion + #region LED_OFF(传参地址) public void LED_OFF_CLEAR(List offList) { @@ -407,7 +354,6 @@ namespace Epost.BLL dal.SendALL(list); } #endregion - #region 任务指令(传参地址) public bool DISPLAY_JOB(LabelParamModel model) @@ -424,6 +370,7 @@ namespace Epost.BLL dal.DISPLAY_JOBALL(model); } #endregion + #region 初始化 public ResultModel SendALL_Init(List model) { @@ -439,6 +386,7 @@ namespace Epost.BLL return dal.REMOVE_JOB(model); } #endregion + #region 通道灯命令 public bool DISPLAY_LIGHT(LabelParamModel model) { @@ -455,8 +403,6 @@ namespace Epost.BLL } #endregion - - #region 终端解锁指令 public bool UNLOCK(LabelParamModel model) { @@ -465,30 +411,6 @@ namespace Epost.BLL } #endregion - #region 扫描枪使能 - public bool SET_SCANDEVICE_ON(LabelParamModel model) - { - - return dal.SET_SCANDEVICE_ON(model); - } - #endregion - - #region 扫描枪不使能 - public bool SET_SCANDEVICE_OFF(LabelParamModel model) - { - - return dal.SET_SCANDEVICE_OFF(model); - } - #endregion - - #region 清除扫描枪 - public bool SET_SCANDEVICE_CLEAR(LabelParamModel model) - { - - return dal.SET_SCANDEVICE_CLEAR(model); - } - #endregion - #region 休眠 public bool SLEEP(LabelParamModel model) { @@ -612,6 +534,7 @@ namespace Epost.BLL } #endregion + #region 点亮显示标签 public void ShowBoxMessage_M(ShowMessageModel_M show) { @@ -734,7 +657,7 @@ namespace Epost.BLL #endregion - #endregion + diff --git a/Epost.BLL/Epost.BLL.csproj b/Epost.BLL/Epost.BLL.csproj index 824acb5..5406060 100644 --- a/Epost.BLL/Epost.BLL.csproj +++ b/Epost.BLL/Epost.BLL.csproj @@ -115,6 +115,8 @@ + + diff --git a/Epost.BLL/OrderBLL.cs b/Epost.BLL/OrderBLL.cs index 8fb93a2..fd941c7 100644 --- a/Epost.BLL/OrderBLL.cs +++ b/Epost.BLL/OrderBLL.cs @@ -30,44 +30,7 @@ namespace Epost.BLL UserModelCacheDAL UserCacheDAL = new UserModelCacheDAL(); private static object lockbox = new object(); - #region 绑定箱号 - public void BindBoxCode() - { - lock (lockbox) - { - - try - { - - //查询待绑定的订单/设备 - DataTable qudt = queueboxBLL.getQueuesbyState(); - if (qudt != null && qudt.Rows.Count > 0) - { - foreach (DataRow item in qudt.Rows) - { - LabelParamModel model = new LabelParamModel(); - string address = item["address"].ToString(); - model.Address = address; - model.ControlIP = item["controlip"].ToString(); - // model.Parameter = "0100000100030CQ请扫描箱号/托盘号\n\n\n\n\n\n门店编号:" + item["shopid"].ToString() + "\n\n\n\n"; - model.Parameter = comBLL.GETDISPLAYJOBPAR_CN("01", "001000", "0", "请扫描箱号/托盘号", "", "", "", "", "门店编号:" + item["shopid"].ToString(), ""); - comBLL.DISPLAY_JOB_M(model, true, true); - queueboxBLL.UpdateQueueState(item["id"].ToString(), "1"); - } - - } - //点亮设备 - - - } - catch (Exception ex) - { - LogHelper.WriteLogInfo("绑定箱号异常:" + ex.Message); - - } - } - } - #endregion + #region 查询控制器列表 public DataTable getControlList(int type = 0) @@ -499,27 +462,14 @@ namespace Epost.BLL //点亮当前货位对应设备提示扫箱号 LabelParamModel model = new LabelParamModel(); model.Address = address; - model.ControlIP = controlip; - // model.Parameter = "0700000100330CQ请扫描箱号!\n\n\n\n\n\n\n\n\n\n"; - model.Parameter = comBLL.GETDISPLAYJOBPAR_CN("07", "000100", "3", "请扫描箱号!", "", "", "", "", "门店号:" + shopid + "\r箱 号:" + boxcode + "\r托盘号:" + traycode, ""); + model.ControlIP = controlip; + // model.Parameter = comBLL.GETDISPLAYJOBPAR_CN("07", "000100", "3", "请扫描箱号!", "", "", "", "", "门店号:" + shopid + "\r箱 号:" + boxcode + "\r托盘号:" + traycode, ""); comBLL.DISPLAY_JOB_M(model, true, true); } #endregion - #region 修改数量异常提示 - public void changeNumErr(string address, string controlip) - { - //点亮当前货位对应设备提示扫箱号 - LabelParamModel model = new LabelParamModel(); - model.Address = address; - model.ControlIP = controlip; - model.Parameter = comBLL.GETDISPLAYJOBPAR_CN("05", "000100", "3", "修改数量超出需求数量!", "", "", "", "", "", ""); - comBLL.DISPLAY_JOB_M(model, true, false); - - - } - #endregion + #region 恢复当前标签拣货 public void displayJob_err(string address, string controlip, JobModel job) @@ -530,15 +480,9 @@ namespace Epost.BLL lamodel.ControlIP = controlip; lamodel.Command = "DISPLAY_JOB"; string qty = ConvertHexHelper.ConvertString(job.Quantity.ToString(), 10, 16); //拣货数量 - string CheckQuantity = ConvertHexHelper.ConvertString(job.CheckQuantity.ToString(), 10, 16); //拣货数量 - // lamodel.Parameter = "01" + EnumHelper.EMToDescriptionString(LightColor.Color.Green) + "030NQ" +item.Zone +"\n" + qty; - //lamodel.Parameter = "0100" + queueDT.Rows[0]["lightcolor"].ToString() + "030CQ" + item.GoodsName + "\n\n" + CheckQuantity + "\n" + item.WholeUnit + "\n" + qty + "\n" + item.Unit + "\n" + item.Sku + "\n\n\n\n"; - lamodel.Parameter = comBLL.GETDISPLAYJOBPAR_CN("01", job.ColorCode, "0", job.GoodsName, CheckQuantity, job.WholeUnit, qty, job.Unit, job.Sku, job.UserCode);//item.UserCode - - + string CheckQuantity = ConvertHexHelper.ConvertString(job.CheckQuantity.ToString(), 10, 16); //拣货数量 + // lamodel.Parameter = comBLL.GETDISPLAYJOBPAR_CN("01", job.ColorCode, "0", job.GoodsName, CheckQuantity, job.WholeUnit, qty, job.Unit, job.Sku, job.UserCode);//item.UserCode comBLL.DISPLAY_JOB_M(lamodel, true, false); - - } #endregion public void BindJobListBySku(string sku) @@ -556,13 +500,11 @@ namespace Epost.BLL LocCacheDAL.UpdateLocModelList(new List { data }, ELCommend.Update); } } - } catch (Exception ex) { LogHelper.WriteLogInfo("绑定任务异常:" + ex.Message); } - } public bool bindOrder(string sku, string block, string matchid = "", string usercode = "", string area = "", int sort = 0, string lightColor = "010000") { @@ -581,8 +523,6 @@ namespace Epost.BLL bool qubo = queueBLL.insertQueueOrders(unmodel); return qubo; } - - public void bindShop(string shopcode, string usercode, List list, ResultMessageModel data) { diff --git a/Epost.BLL/OrderControlBLL.cs b/Epost.BLL/OrderControlBLL.cs index 7ee3e34..e875097 100644 --- a/Epost.BLL/OrderControlBLL.cs +++ b/Epost.BLL/OrderControlBLL.cs @@ -22,19 +22,13 @@ namespace Epost.BLL ScanModelCacheDAL scanCacheDAL = new ScanModelCacheDAL(); JobDownCacheDAL downCacheDAL = new JobDownCacheDAL(); AddressstorageBLL addrBLL = new AddressstorageBLL(); - UserModelCacheDAL UserCacheDAL = new UserModelCacheDAL(); - BoxQueueBLL queueboxBLL = new BoxQueueBLL(); - SkuInfoBLL skuBLL = new SkuInfoBLL(); + UserModelCacheDAL UserCacheDAL = new UserModelCacheDAL(); ShowMesCacheDAL msgCache = new ShowMesCacheDAL(); LocationCacheDAL locCache = new LocationCacheDAL(); BoxCodeCacheDAL boxcache = new BoxCodeCacheDAL(); - - - private static object lockobj = new object(); - private static object lockJobDown = new object(); private static object showmes = new object(); public static bool OrisShow = false; - + WorkIngCacheDAL workbll = new WorkIngCacheDAL(); #region 设备控制 #region 初始化 @@ -56,11 +50,7 @@ namespace Epost.BLL boxcache.ClearBoxList(); ResultModel resultModel = comBLL.Initialization_M(); GetOrderQueue(); //加载任务显示器信息 - LogHelper.WriteLogInfo("初始化@@@@@@@@@@@@!----V20200727-1---"); - - - - + return resultModel; } catch (Exception ex) @@ -82,18 +72,32 @@ namespace Epost.BLL if (!OrisShow) { OrisShow = true; + workbll.UpdateWorkModel(WorkEcommendType.Create); //【多少个大区多少个线程】 - List Arealist = addrBLL.GetAreaList(); + List Arealist = addrBLL.GetshelfidList(); if (Arealist.Any()) { + Work_JobDownThread downthread = new Work_JobDownThread(); + downthread.tblock = "01|01"; + Work_DisplayJobThread jobthread = new Work_DisplayJobThread(); + jobthread.tblock = "01|01"; foreach (AddressstorageModel item in Arealist) { - string block = item.block + "-" + item.area; - Thread timerThread = new Thread(new ParameterizedThreadStart(GetWorkList)); - timerThread.Start(block); + string block = item.block + "|" + item.shelfid; + jobthread = new Work_DisplayJobThread(); + jobthread.id = block; + jobthread.tblock = block; + jobthread.OrisShow = OrisShow; + Thread disthread = new Thread(new ThreadStart(jobthread.Displayjob)); + disthread.Start(); - Thread timerThreadBack = new Thread(new ParameterizedThreadStart(BackWorkList)); - timerThreadBack.Start(block); + + downthread = new Work_JobDownThread(); + downthread.id = block; + downthread.tblock = block; + downthread.OrisShow = OrisShow; + Thread thread = new Thread(new ThreadStart(downthread.Work)); + thread.Start(); } } } @@ -101,65 +105,9 @@ namespace Epost.BLL } #endregion - #region 获取订单信息 - private void GetWorkList(object block) - { - string job = ""; - job = "lockDisplayJob" + block; - object cJob = (object)job; - lock (cJob) - { - while (OrisShow) - { + - try - { - - DisplayJob_M(block.ToString()); - Thread.Sleep(120); - - } - catch (Exception ex) - { - LogHelper.WriteLogInfo(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":程序异常!\r\n" + ex.Message); - - } - - } - } - - } - #endregion - - #region 获取订单信息 - private void BackWorkList(object block) - { - string cm = ""; - cm = "lockJobDown" + block; - object c = (Object)cm; - lock (c) - { - - while (OrisShow) - { - try - { - - Job_Down(block.ToString()); - Thread.Sleep(120); - } - - catch (Exception ex) - { - LogHelper.WriteLogInfo(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":程序异常!\r\n" + ex.Message); - - } - } - } - - } - - #endregion + #region 设备检测 public ResultModel TestStart() @@ -184,6 +132,7 @@ namespace Epost.BLL { try { + workbll.UpdateWorkModel(WorkEcommendType.Complete); LogHelper.WriteLogInfo("结束作业!"); OrisShow = false; @@ -230,808 +179,7 @@ namespace Epost.BLL } #endregion - #region 标签拍下 - public ResultModel Job_Down(string tblock) - { - - lock (lockJobDown) - { - string[] nlist = tblock.Split('-'); - string nblock = nlist[0]; - string narea = nlist[1]; - ResultModel resmodel = new ResultModel(); - resmodel.result = "0"; - try - { - - List downList = downCacheDAL.GetPlanJobDownList().FindAll(m => m.Status == "0" && m.Block == nblock && m.Area == narea); - List jobList = JobCache.GetPlanJobList().FindAll(p => p.Block == nblock && p.Area == narea); - // LogHelper.WriteLogInfo("****************************"+ downList.Count); - if (downList != null && downList.Count > 0) - { - foreach (ResultMessageModel data in downList.ToArray()) - { - LogHelper.WriteLogInfo("完成绑定箱号开始作业=============="); - Work_JobDown(data, jobList); - } - - - } - - return resmodel; - } - catch (Exception ex) - { - resmodel.result = "-1"; - resmodel.msg = "标签拍下异常"; - LogHelper.WriteLogInfo("标签拍下异常:" + ex.Message); - return resmodel; - - } - } - } - - //作业中 - public void Work_JobDown(ResultMessageModel data, List jobList) - { - lock (lockJobDown) - { - try - { - - switch (data.Command) - { - case "QUERY_SPECIAL_STATUS": - BindJobList(data); - // BindJobByLocation(data); - break; - case "JOB_DONE": - JobDown_M(data, jobList); - break; - - - default: - break; - } - } - catch (Exception ex) - { - LogHelper.WriteLogInfo("Work_JobDown标签拍下异常:" + ex.Message); - - - } - } - } - //绑箱中 - - #endregion - - #region 设备拍下处理 - public void JobDown_M(ResultMessageModel data, List jobList) - { - - //获取标签所在区 - OrdersQueueModel qmodel = new OrdersQueueModel(); - string area = data.Area; - string block = data.Block; - string way = data.Way; - string type = data.Type; - string orderid = string.Empty; - string skulist = string.Empty; - qmodel.Taskarea = area; - qmodel.Taskblock = block; - List endjoblist = jobList.FindAll(m => m.Block == block && m.Area == area && (m.State == 1 || m.State == 0)); - List job = jobList.FindAll(m => m.Block == block && m.Area == area && (m.State == 1 || m.State == 0) && m.Address == data.Address && m.ControlIP == data.IP); - List finjob = jobList.FindAll(m => m.Block == block && m.Area == area && (m.State == 3) && m.Address == data.Address && m.ControlIP == data.IP); - - if (finjob.Any()) - { - JobModel finmodel = finjob.FirstOrDefault(); - qmodel.UserCode = finmodel.UserCode; - qmodel.Sku = finmodel.Sku; - qmodel.Matchid = finmodel.Matchid; - - } - DataTable queueDT = queueBLL.getQueueOrderState(qmodel); - if (queueDT != null && queueDT.Rows.Count > 0) - { - skulist = queueDT.Rows[0]["sku"].ToString(); - LogHelper.WriteLogInfo("=======" + qmodel.UserCode + "=====" + area + "区===sku=" + skulist); - } - - if (data.Loc == "check")//任意回显标签拍下 熄灭回显设备 - { - List rejob = jobList.FindAll(m => m.Block == block && m.Area == area && m.State == 1 && m.Sku == queueDT.Rows[0]["sku"].ToString()); - if (rejob.Any()) - { - JobModel model = rejob.FirstOrDefault(); - comBLL.ClearArea_M(rejob); - //熄灭通道灯 - comBLL.DISPLAY_LIGHT_BLOCK(block, area, "0"); - // comBLL.UNLOCK_M(rejob); - #region 修改任务队列状态 - OrdersQueueModel qumodel = new OrdersQueueModel(); - qumodel.State = 3; - qumodel.Taskblock = block; - qumodel.Taskarea = area; - qumodel.Sku = model.Sku; - qumodel.Matchid = model.Matchid; - qumodel.UserCode = model.UserCode; - queueBLL.UpdateQueueTaskArea_Car(qumodel); - - #endregion - } - #region 清除当前区已做完的sku - JobCache.UpdateJobModelList(rejob, EcommendType.Execute); - #endregion - } - else if (data.Result == "4")//■按键拍下 - { - data.Parameter = "0"; - jobdown_start(data, job, block, area, jobList); - } - else - { - LogHelper.WriteLogInfo("JOB_DOWN开始~~~~~~~~~~~~~~~~"); - if (type != "2" && type != "8")//非显示器拍下 - { - jobdown_start(data, job, block, area, jobList); - } - } - downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); - } - #endregion - - #region 标签拍下 - - public void jobdown_start(ResultMessageModel data, List job, string block, string area, List jobList) - { - int truequantity = 0; - int checkquantity = 0; - string scanstr = data.Parameter; - if (!string.IsNullOrEmpty(scanstr)) - { - truequantity = Convert.ToInt32(scanstr); - } - if (job.Any()) - { - List downlist = new List(); - JobModel model = job.FirstOrDefault(); - - //List manyList = job.FindAll(m => m.ManyState == 1 && m.Tolocation == model.Tolocation); - //if (manyList.Any())//合并显示数据 - //{ - - // downlist.AddRange(manyList); - // LogHelper.WriteLogInfo("合并显示数据=========="+ manyList .Count+ "=================="); - //} - //else - //{ - downlist.Add(model); - // } - //修改订单状态 - orderbll.UpdateOrderState_Car(downlist, model, truequantity, checkquantity); - LogHelper.WriteLogInfo(data.Address + "=========------------------" + data.Parameter); - bool skuInish = orderbll.IsFinishWork(1, block, "", area, model.Sku); - model.State = 3; - if (skuInish) - { - LogHelper.WriteLogInfo("区SKU拣选完成--------------"); - //删除sku缓存信息 - List scanlist = downCacheDAL.GetPlanJobDownList().FindAll(p => p.Parameter == model.Sku && p.Command == "QUERY_SPECIAL_STATUS" && p.Area == area); - downCacheDAL.UpdateJobDownModelList(scanlist, EdownCommend.Execute); - //熄灭通道灯 - comBLL.DISPLAY_LIGHT_BLOCK(block, area, "0"); - - #region 熄灭当前区显示屏 - List offList = jobList.FindAll(m => m.Block == block && m.Area == area && m.State == 3 && m.Sku == model.Sku); - if (offList.Any()) - { - comBLL.LED_OFF_CLEAR(offList); - } - #endregion - - #region 修改任务队列状态 - OrdersQueueModel qumodel = new OrdersQueueModel(); - qumodel.State = 3; - qumodel.Taskblock = block; - qumodel.Taskarea = area; - qumodel.Sku = model.Sku; - qumodel.Matchid = model.Matchid; - qumodel.UserCode = model.UserCode; - queueBLL.UpdateQueueTaskArea_Car(qumodel); - #endregion - - #region 刷新波次信息 - showSummaryMes(model.Sku, block, area, Convert.ToInt32(block), null, model.Tolocation, model.Matchid); - #endregion - - Thread.Sleep(30); - #region 整条通道当前用户所有任务分播结束 - bool blockfinish = orderbll.IsFinishWorkByCar(1, model.Matchid, block); - if (blockfinish) - { - #region 点亮显示器 - ShowMessageModel_M show = new ShowMessageModel_M(); - show.Title = "当前波次分播完成"; - show.Contents = "拍下熄灭所有设备\r请扫描继续作业"; - show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Green); - show.Qty = "0"; - show.Type = 8; - show.Block = block; - show.Islock = false; - show.IsTwinkle = 1; - show.No = "01"; - comBLL.ShowBoxMessage_M(show); - #endregion - - bool allfinish = orderbll.IsFinishWorkByCar(1, model.Matchid); - if (allfinish)//判断整个波次是否已完成 - { //更新state状态为已完成 - orderbll.UpdateStateByCar(model.Matchid); - } - //删除波次信息 - List ulist = UserCacheDAL.GetUserCodeList().FindAll(m => m.Block == block); - UserCacheDAL.UpdateUserCodeList(ulist, EUserCommend.Execute); - - } - #endregion - - #region 区内sku播完回传 - // orderbll.UpdateStateByCar(model.Matchid, "", model.Sku); - - #endregion - - #region 清除当前区已做完的sku - JobCache.UpdateJobModelList(offList, EcommendType.Execute); - #endregion - - } - - } - - - } - #endregion - - #region 标签控制M系列 - public void DisplayJob_M(string tblock) - { - - - lock (lockobj) - { - - try - { - string[] nlist = tblock.Split('-'); - string nblock = nlist[0]; - string narea = nlist[1]; - List list = new List(); - OrdersQueueModel model = new OrdersQueueModel(); ; - model.Taskarea = narea; - model.Taskblock = nblock; - - #region 开始作业 - DataTable queueDT = queueBLL.getQueueOrderState(model); - if (queueDT != null && queueDT.Rows.Count > 0) - { - //当前区没有作业 - if (queueDT.Rows[0]["state"].ToString() == "0") - { - displayOrder(queueDT, nblock, narea, list, model); - } - } - #endregion - - } - catch (Exception ex) - { - LogHelper.WriteLogInfo("标签控制异常:" + ex.Message); - - } - } - } - - - - #endregion - - #region 点亮设备 - public void displayOrder(DataTable queueDT, string nblock, string narea, List list, OrdersQueueModel model) - { - model.Id = Convert.ToInt32(queueDT.Rows[0]["id"].ToString()); - #region 点亮任务 - List jobList = JobCache.GetPlanJobList(); - List isJobList = jobList.FindAll(p => p.Block == nblock && p.Area == narea && p.State != 3); - ShowMessageModel showmodel = new ShowMessageModel(); - //获取当前区任务并加入缓存 - if (!isJobList.Any()) - { - model.State = 1; - orderbll.GetOrderList(queueDT.Rows[0]["matchid"].ToString(), nblock, queueDT.Rows[0]["sku"].ToString(), narea, queueDT.Rows[0]["usercode"].ToString()); - List nowJoblist = jobList.FindAll(p => p.State == 0 && p.Block == model.Taskblock && p.Area == model.Taskarea); - if (nowJoblist.Any()) - { - var nowmodel = nowJoblist.FirstOrDefault(); - - LogHelper.WriteLogInfo("进入任务点亮=====matchid=" + nowmodel.Matchid + "===orderid===" + nowmodel.OrderID + "=====sku==" + nowmodel.Sku + "========"); - #region 点亮任务标签 - foreach (JobModel item in nowJoblist.ToArray()) - { - - #region 回显设备锁定 - if (queueDT.Rows[0]["lightcolor"].ToString() == EnumHelper.EMToDescriptionString(LightColor.Color.Blue)) - { - - LabelParamModel locklamodel = new LabelParamModel(); - locklamodel.Address = item.Address.ToString(); - locklamodel.ControlIP = item.ControlIP.ToString(); - locklamodel.Command = "LOCK"; - locklamodel.Parameter = "11111000"; - locklamodel.Type = "N"; - list.Add(locklamodel); - - } - #endregion - // else - //{ - - List manyJoblist = nowJoblist.FindAll(m => m.Tolocation == item.Tolocation); - int quantity = item.Quantity; - - LabelParamModel lamodel = new LabelParamModel(); - - lamodel.Address = item.Address.ToString(); - lamodel.ControlIP = item.ControlIP.ToString(); - lamodel.Command = "DISPLAY_JOB"; - - #region 同一个货位的数据合并显示 - //if (manyJoblist.Count > 1) - //{ - // if (manyJoblist.FindAll(m => m.State == 0).Any()) - // { - // foreach (JobModel mitem in manyJoblist) - // { - // quantity += mitem.Quantity; - // mitem.State = 1; - // mitem.ManyState = 1; - // } - - // } - //} - #endregion - - lamodel.Uid = item.ID; - lamodel.Type = "N"; - lamodel.Quantity = quantity.ToString(); - lamodel.Uid = item.ID; - lamodel.Mode = queueDT.Rows[0]["lightcolor"].ToString() + "0"; - - list.Add(lamodel); - //} - - item.State = 1; - item.ColorCode = queueDT.Rows[0]["lightcolor"].ToString(); - item.DisplayTime = DateTime.Now; - } - #endregion - #region 点亮通道灯 - comBLL.DISPLAY_LIGHT_BLOCK(model.Taskblock, model.Taskarea, "1"); - #endregion - if (list != null && list.Count > 0) - { - LogHelper.WriteLogInfo("添加到点亮的list————————————————————:" + list.Count); - comBLL.DISPLAY_JOBALL(list); - } - } - else - {//无任务 - LogHelper.WriteLogInfo("点亮====无任务======================="); - model.State = 3; - } - #endregion - if (jobList.Any()) - { - - var finishList = jobList.FindAll(p => p.State == 0); - if (!finishList.Any()) - { - queueBLL.UpdateQueueOrderState(model);//缓存队列状态修改 - } - } - } - else { - - LogHelper.WriteLogInfo("还有未完成任务" + isJobList.Count); - foreach (JobModel item in isJobList) - { - LogHelper.WriteLogInfo("还有未完成任务"+item.Address+item.ID); - } - } - } - #endregion - - #region 处理扫描条码 - public ResultModel BindJobList(ResultMessageModel data) - { - ResultModel res = new ResultModel(); - res.result = "0"; - try - { - string sblock = data.Block; - string scanStr = data.Parameter.Trim(); - string sarea = data.Area; - string name = string.Empty; - string matchid = string.Empty; - #region 提示请扫描波次号 - List ulist = UserCacheDAL.GetUserCodeList().FindAll(m => m.Block == sblock && m.Area == sarea);// - bool isnum = ConvertHexHelper.IsNum(scanStr.Substring(0, 1));//判断扫描首字母是否是数字 - - if (!ulist.Any()) - { - //手动加波次信息 - DataTable matdt = orderbll.GetMatchOrderList(); - if (matdt != null && matdt.Rows.Count > 0) - { - UserCodeModel umodel = new UserCodeModel(); - umodel.Matchid = matdt.Rows[0]["matchid"].ToString(); - umodel.Block = sblock; - umodel.Area = sarea; - UserCacheDAL.UpdateUserCodeList(new List { umodel }, EUserCommend.Create); - } - } - ulist = UserCacheDAL.GetUserCodeList().FindAll(m => m.Block == sblock && m.Area == sarea); - if (ulist.Any()) - { matchid = ulist.FirstOrDefault().Matchid; } - - #endregion - if (data.Type == "5")//中分扫描枪 - { - - zhongfenBind(ulist, scanStr, data); - downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); - } - else if (data.Type == "6")//播种扫描枪 - { - - xifenBind(ulist, scanStr, data, matchid, isnum); - - downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); - } - - - return res; - } - catch (Exception ex) - { - res.result = "-1"; - res.msg = "绑定任务异常"; - LogHelper.WriteLogInfo("绑定任务异常:" + ex.Message); - return res; - } - - } - #endregion - - #region 中分 - - public void zhongfenBind(List ulist, string scanStr, ResultMessageModel data) - { - - //if (ulist.Any()) - //{ - // UserCodeModel usermodel = ulist.FirstOrDefault(); - //if (string.IsNullOrEmpty(usermodel.ZfCode) && scanStr.Substring(0, 1) != "U")// - //{ - // #region 提示先扫描工号 - // ShowMessageModel_M show = new ShowMessageModel_M(); - // show.Title = "请先扫描工号!"; - // show.Contents = ""; - // show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); - // show.Block = sblock; - // show.Type =2; - // show.Area = sarea; - // show.Islock = true; - // comBLL.ShowBoxMessage_M(show); - // downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); - // #endregion - //} - //else { - - if (scanStr.Substring(0, 1) == "U") - { - #region 扫描工号 - if (ulist.Any()) - { - UserCodeModel umodel = ulist.FirstOrDefault(); - umodel.ZfCode = scanStr; - #region 扫描工号 - ShowMessageModel_M show = new ShowMessageModel_M(); - show.Title = "请扫描sku开始作业!"; - show.Contents = ""; - show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); - show.Block = data.Block; - show.Area = data.Area; - show.Type = 2; - show.Islock = true; - comBLL.ShowBoxMessage_M(show); - #endregion - } - downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); - #endregion - } - else - { - #region 中分扫描sku - - DataTable sinfodt = skuBLL.GetSkuInfoList(data.Parameter); - //string location = string.Empty; - if (sinfodt != null && sinfodt.Rows.Count > 0) - { - scanStr = sinfodt.Rows[0]["sku"].ToString(); - // location = data.Parameter;// sinfodt.Rows[0]["tolocation"].ToString(); - } - LogHelper.WriteLogInfo("中分" + data.Parameter + "===SKU" + scanStr); - List Arealist = addrBLL.GetAreaList(); - if (Arealist.Any()) - { - foreach (AddressstorageModel item in Arealist) - { - DataTable skudt = orderbll.GetSumList("", scanStr, item.block,item.area); - if (skudt != null && skudt.Rows.Count > 0) - { - //规格 - int discount = Convert.ToInt32(skudt.Rows[0]["discount"].ToString()); - //整件总数 - int SumCkQuantity = 0;//= Convert.ToInt32(skudt.Rows[0]["SumCkQuantity"].ToString()); - //散件总数 - int SumQuantity = Convert.ToInt32(skudt.Rows[0]["SumQuantity"].ToString()); - //if (discount != 1) - //{ - // if (SumQuantity >= discount) - // { - - // SumCkQuantity = SumQuantity / discount; - // SumQuantity = SumQuantity % discount; - // } - //} - - - - ShowMessageModel_M show = new ShowMessageModel_M(); - show.Title = skudt.Rows[0]["goodsname"].ToString(); - show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); - show.Block = item.block; - show.Islock = true; - show.Contents = data.Parameter + "(" + scanStr + ")\r";// + "规格:" + discount; - show.Qty = SumQuantity.ToString(); - show.Wholeqty = SumCkQuantity; - show.Unit = "件"; - show.Wholeunit = "箱"; - show.Type = 2; - comBLL.ShowBoxMessage_M(show); - } - else - { - ShowMessageModel_M show = new ShowMessageModel_M(); - show.Title = "SKU" + scanStr + "无任务!"; - show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); - show.Block = item.block; - show.Islock = true; - show.Contents = "请扫描其他商品!"; - show.Type = 2; - comBLL.ShowBoxMessage_M(show); - } - } - } - - #endregion - } - - - } - #endregion - - #region 细分播种 - public void xifenBind(List ulist, string scanStr, ResultMessageModel data, string matchid, bool isnum) - { - //if (ulist.Any()) - //{ - // UserCodeModel usermodel = ulist.FirstOrDefault(); - //if (string.IsNullOrEmpty(usermodel.UserCode) && scanStr.Substring(0, 1) != "U")// - //{ - // #region 提示先扫描工号 - // ShowMessageModel_M show = new ShowMessageModel_M(); - // show.Title = "请先扫描工号!"; - // show.Contents = ""; - // show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); - // show.Block = sblock; - // show.Area = sarea; - // show.Type = 8; - // show.Islock = true; - // comBLL.ShowBoxMessage_M(show); - // downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); - // #endregion - //} - //else - //{ - - if (scanStr.Substring(0, 1) == "U") - { - #region 扫描工号 - if (ulist.Any()) - { - UserCodeModel umodel = ulist.FirstOrDefault(); - umodel.UserCode = scanStr; - #region 扫描工号 - ShowMessageModel_M show = new ShowMessageModel_M(); - show.Title = "请扫描sku开始作业!"; - show.Contents = ""; - show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); - show.Block = data.Block; - show.Area = data.Area; - show.Type = 8; - show.Islock = true; - - comBLL.ShowBoxMessage_M(show); - #endregion - } - downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); - #endregion - } - else - { - - #region 扫描商品 - - List hangList = downCacheDAL.GetPlanJobDownList().FindAll(m => m.Parameter == "888888"); - - if (hangList.Any()) - { - - #region 挂起 - LogHelper.WriteLogInfo("挂起" + data.Parameter + "-------通道" + data.Block); - LabelParamModel FORMATEModel = new LabelParamModel(); - FORMATEModel.ControlIP = data.IP; - comBLL.FORMATE_JOB_DATA(FORMATEModel); - - - DataTable qdt = queueBLL.getQueuesOrderbyState(data.Block, data.Area, "1"); - if (qdt != null && qdt.Rows.Count > 0) - { - scanStr = qdt.Rows[0]["sku"].ToString(); - - // data.Parameter = scanStr; - Hangup_SKU(scanStr, data.Block, data.Area); - //删除sku对应缓存 - List sdown = downCacheDAL.GetPlanJobDownList().FindAll(p => p.Parameter == scanStr || p.Parameter == qdt.Rows[0]["location"].ToString()); - downCacheDAL.UpdateJobDownModelList(sdown, EdownCommend.Execute); - } - downCacheDAL.UpdateJobDownModelList(hangList, EdownCommend.Execute); - //刷新波次 - GetMatchOrder(); - #endregion - - } - else if (isnum)//sku - { - #region 扫描SKU - //根据扫描商品内码获取商品码 - data.ScanCode = data.Parameter; - DataTable sinfodt = skuBLL.GetSkuInfoList(data.Parameter); - string location = string.Empty; - if (sinfodt != null && sinfodt.Rows.Count > 0) - { - scanStr = sinfodt.Rows[0]["sku"].ToString(); - location = data.Parameter;// sinfodt.Rows[0]["tolocation"].ToString(); - } - data.Parameter = scanStr; - DataTable skudt = queueBLL.GetOrderQueue(data.Block, data.Area, "3"); - List scanlist = downCacheDAL.GetPlanJobDownList().FindAll(m => m.Address == data.Address && m.Parameter == scanStr && m.Parameter != "888888" && m.Block == data.Block && m.Area == data.Area); - - if (scanlist.Count > 1 || (skudt != null && skudt.Rows.Count > 0)) - { //重复扫描 - //ShowMessageModel_M show = new ShowMessageModel_M(); - //show.Title = scanStr + "重复扫描/已拣配!"; - //show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); - //show.Block = sblock; - //show.Area = sarea; - //show.Type = 8; - //comBLL.ShowBoxMessage_M(show); - downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); - - } - else - { - - DataTable OrderDt = orderbll.GetOrderList_Car(matchid, scanStr, data.Area, data.Block); - if (OrderDt != null && OrderDt.Rows.Count > 0) - { - - if (ulist.Any()) - { - UserCodeModel umodel = ulist.FirstOrDefault(); - data.Port = OrderDt.Rows[0]["matchid"].ToString(); - OrdersQueueModel qmodel = new OrdersQueueModel(); - qmodel.Sku = scanStr; - qmodel.Taskblock = data.Block; - qmodel.Taskarea = data.Area; - qmodel.UserCode = umodel.UserCode; - qmodel.Matchid = umodel.Matchid; - qmodel.Location = location; - qmodel.Lightcolor = EnumHelper.EMToDescriptionString(LightColor.Color.Red); - queueBLL.insertQueueOrders(qmodel); - //提示需要拣货总量/商品名称 - showSummaryMes(scanStr, data.Block, data.Area, 1, data, "", OrderDt.Rows[0]["matchid"].ToString()); - - } - else - { - LogHelper.WriteLogInfo("未扫描波次信息", LogHelper.Log_Type.ERROR); - } - - } - else - { - #region 回显 - DataTable echoDt = orderbll.GetOrderList_echo(matchid, scanStr, data.Area, data.Block); - if (echoDt != null && echoDt.Rows.Count > 0) - { - - if (ulist.Any()) - { - UserCodeModel umodel = ulist.FirstOrDefault(); - data.Port = echoDt.Rows[0]["matchid"].ToString(); - OrdersQueueModel qmodel = new OrdersQueueModel(); - qmodel.Sku = scanStr; - qmodel.Taskblock = data.Block; - qmodel.Taskarea = data.Area; - qmodel.UserCode = umodel.UserCode; - qmodel.Matchid = umodel.Matchid; - // qmodel.Location = location; - qmodel.Lightcolor = EnumHelper.EMToDescriptionString(LightColor.Color.Blue); - queueBLL.insertQueueOrders(qmodel); - //提示需要拣货总量/商品名称 - Mes_Echo(scanStr, data.Block, data.Area, 1, data, "", echoDt.Rows[0]["matchid"].ToString(), false); - - } - else - { - LogHelper.WriteLogInfo("未扫描波次信息", LogHelper.Log_Type.ERROR); - } - - } - else - { - - //提示无任务 - ShowMessageModel_M show = new ShowMessageModel_M(); - show.Title = "商品:" + scanStr + "当前区无任务!"; - show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); - show.Block = data.Block; - show.Area = data.Area; - show.Type = 8; - show.Islock = false; - comBLL.ShowBoxMessage_M(show); - downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); - } - - #endregion - } - - } - - - #endregion - - } - #endregion - } - - } - #endregion - + #region 复核显示 public void Mes_Echo(string scanStr, string sblock, string sarea, int type, ResultMessageModel data = null, string location = "", string matchid = "", bool islock = true) { @@ -1057,10 +205,10 @@ namespace Epost.BLL } //规格 - int discount = Convert.ToInt32(sudt.Rows[0]["discount"].ToString()); + // int discount = Convert.ToInt32(sudt.Rows[0]["discount"].ToString()); //整件总数 int SumCkQuantity = 0;// Convert.ToInt32(sudt.Rows[0]["SumCkQuantity"].ToString()); - //散件总数 + //散件总数 int SumQuantity = Convert.ToInt32(sudt.Rows[0]["SumQuantity"].ToString()); //if (discount != 1) //{ @@ -1080,7 +228,7 @@ namespace Epost.BLL if (qdt != null && qdt.Rows.Count > 0) { - show.Contents = qdt.Rows[0]["location"].ToString() + "(" + scanStr + ")" + "\r" + mes;//sudt.Rows[0]["goodscode"].ToString().Replace(';','\r'); + show.Contents = qdt.Rows[0]["location"].ToString() + "(" + scanStr + ")" + "\r" + mes; } if (data != null) { @@ -1097,15 +245,7 @@ namespace Epost.BLL show.Block = sblock; show.Area = sarea; show.Islock = islock; - show.Location = "check"; - //ShowMesModel megmodel = new ShowMesModel(); - //megmodel.Qty = sudt.Rows[0]["SumQuantity"].ToString(); - //megmodel.Sku = sku; - //megmodel.Area = sarea; - //megmodel.Block = sblock; - //megmodel.Matchid = matchid; - - // msgCache.UpdateMsgModelList(new List { megmodel }, EmsgCommend.Create); + show.Location = "check"; comBLL.ShowBoxMessage_M(show); if (data != null) @@ -1135,53 +275,7 @@ namespace Epost.BLL comBLL.ShowBoxMessage_M(show); } } - #endregion - - #region 显示波次信息 - public void ShowMatchMessage(string scanStr, string sblock) - { - DataTable areadt = orderbll.GetAreaByMatch(scanStr, sblock); - if (areadt != null && areadt.Rows.Count > 0) - { - foreach (DataRow item in areadt.Rows) - { - UserCodeModel umodel = new UserCodeModel(); - umodel.Matchid = scanStr; - umodel.Block = item["block"].ToString(); - umodel.Area = item["area"].ToString(); - UserCacheDAL.UpdateUserCodeList(new List { umodel }, EUserCommend.Create); - - //提示扫工号 - ShowMessageModel_M xshow = new ShowMessageModel_M(); - xshow.Title = "请扫描工号/SKU开始作业"; - xshow.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); - xshow.Block = item["block"].ToString(); - xshow.Area = item["area"].ToString(); - // xshow.Area = sarea; - xshow.Type = 8; - xshow.Islock = true; - comBLL.ShowBoxMessage_M(xshow); - } - } - DataTable sumlist = orderbll.GetMatchSumList(scanStr, sblock); - if (sumlist != null && sumlist.Rows.Count > 0) - { - ShowMessageModel_M show = new ShowMessageModel_M(); - show.Title = "波次号:" + scanStr; - show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); - show.Block = sblock; - show.Type = 2; - show.Islock = true; - // string qty = ConvertHexHelper.ConvertString(sumlist.Rows[0]["incompleteCount"].ToString(), 10, 16); //拣货数量 - show.Qty = sumlist.Rows[0]["incompleteCount"].ToString(); - show.Location = sumlist.Rows[0]["completeCount"].ToString(); - show.Contents = "SKU总数:" + sumlist.Rows[0]["completeCount"].ToString() + "\rSKU待播数:" + sumlist.Rows[0]["incompleteCount"].ToString(); - comBLL.ShowBoxMessage_M(show); - - // downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); - } - } - #endregion + #endregion #region 订单显示器中分提示 /// @@ -1342,77 +436,8 @@ namespace Epost.BLL } #endregion - #region SKU挂起/缺货 - public void Hangup_SKU(string sku, string block, string area, ResultMessageModel data = null) - { - List list = new List(); - //查询当前通道sku是否有任务 - DataTable dt = orderbll.getOrderListBysku(block, sku); - if (dt != null && dt.Rows.Count > 0) - { - // 将当前通道所有sku正在亮的设备熄灭 - foreach (DataRow item in dt.Rows) - { - if (item["oprationstate"].ToString() == "1") - { - LabelParamModel lamodel = new LabelParamModel(); - lamodel.Address = item["address"].ToString(); ; - lamodel.ControlIP = item["ControlIP"].ToString(); - lamodel.Command = "REMOVE_JOB"; - lamodel.Parameter = "01"; - list.Add(lamodel); - orderbll.UpOrderStateBybat(item["batchid"].ToString()); - } - } - if (list != null && list.Count > 0) - { - LogHelper.WriteLogInfo("挂起list——" + sku + "——————————————————:" + list.Count); - comBLL.DISPLAY_JOBALL(list); - } - } + - - //删除缓存中sku记录 - List jobList = JobCache.GetPlanJobList(); - List relist = jobList.FindAll(m => m.Sku == sku && m.Block == block); - JobModel model = new JobModel(); - if (relist.Any()) - { - model = relist.FirstOrDefault(); - JobCache.UpdateJobModelList(relist, EcommendType.Complete); - //删除Orderqueue中sku的记录 - bool bo = queueBLL.DelQueueOrder(sku, block); - LogHelper.WriteLogInfo("删除queue返回" + bo); - } - else - { - ShowMessageModel_M show = new ShowMessageModel_M(); - show.Title = "挂起商品:" + sku + "错误!"; - show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); - show.Block = block; - show.Area = area; - show.Type = 8; - show.Islock = true; - comBLL.ShowBoxMessage_M(show); - } - //downCacheDAL.GetPlanJobDownList().FindAll(p => p.Parameter == sku && p.Block == block); - } - - #endregion - - #region 查询波次通道列表 - public void GetMatchOrder() - { - DataTable dt = orderbll.GetMatchOrder(); - if (dt != null && dt.Rows.Count > 0) - { - foreach (DataRow item in dt.Rows) - { - ShowMatchMessage(item["matchid"].ToString(), item["workblock"].ToString()); - } - } - - } - #endregion + } } diff --git a/Epost.BLL/Work_DisplayJobThread.cs b/Epost.BLL/Work_DisplayJobThread.cs new file mode 100644 index 0000000..313eb0b --- /dev/null +++ b/Epost.BLL/Work_DisplayJobThread.cs @@ -0,0 +1,229 @@ +using Epost.Common; +using Epost.DAL.Cache; +using Epost.DAL.Enum; +using Epost.Model; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Threading; + + +namespace Epost.BLL +{ + public class Work_DisplayJobThread + { + public string tblock, id; + public bool OrisShow = false; + OrderBLL orderbll = new OrderBLL(); + OrdersQueueBLL queueBLL = new OrdersQueueBLL(); + CommandBLL comBLL = new CommandBLL(); + JobModelCacheDAL JobCache = new JobModelCacheDAL(); + private static object lockobj = new object(); + AddressstorageBLL addrBLL = new AddressstorageBLL(); + WorkIngCacheDAL workbll = new WorkIngCacheDAL(); + public void Displayjob() + { + GetWorkList(tblock); + } + + + #region 获取订单信息 + private void GetWorkList(object block) + { + + lock (lockobj) + { + while (OrisShow) + { + + try + { + + string workstate = workbll.GetWorkState(); + if (!string.IsNullOrEmpty(workstate)) + { + OrisShow = true; + DisplayJob_M(block.ToString()); + Thread.Sleep(50); + } + else + { + OrisShow = false; + } + + } + catch (Exception ex) + { + LogHelper.WriteLogInfo(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":程序异常!\r\n" + ex.Message); + + } + + } + } + + } + #endregion + + + + + #region 标签控制M系列 + public void DisplayJob_M(string tblock) + { + + + try + { + string[] nlist = tblock.Split('|'); + string nblock = nlist[0]; + string shelfid = nlist[1]; + List Arealist = addrBLL.GetAreaList(nblock, shelfid); + foreach (AddressstorageModel item in Arealist) + { + OrdersQueueModel model = new OrdersQueueModel(); ; + model.Taskarea = item.area; + model.Taskblock = nblock; + #region 开始作业 + DataTable queueDT = queueBLL.getQueueOrderState(model); + if (queueDT != null && queueDT.Rows.Count > 0) + { + //当前区没有作业 + if (queueDT.Rows[0]["state"].ToString() == "0") + { + displayOrder(queueDT, nblock, item.area, model); + } + } + #endregion + } + + } + catch (Exception ex) + { + LogHelper.WriteLogInfo("标签控制异常:" + ex.Message); + + } + + } + + + + #endregion + + #region 点亮设备 + public void displayOrder(DataTable queueDT, string nblock, string narea, OrdersQueueModel model) + { + List list = new List(); + model.Id = Convert.ToInt32(queueDT.Rows[0]["id"].ToString()); + #region 点亮任务 + List jobList = JobCache.GetPlanJobList(); + List isJobList = jobList.FindAll(p => p.Block == nblock && p.Area == narea && p.State != 3); + ShowMessageModel showmodel = new ShowMessageModel(); + //获取当前区任务并加入缓存 + if (!isJobList.Any()) + { + model.State = 1; + orderbll.GetOrderList(queueDT.Rows[0]["matchid"].ToString(), nblock, queueDT.Rows[0]["sku"].ToString(), narea, queueDT.Rows[0]["usercode"].ToString()); + List nowJoblist = jobList.FindAll(p => p.State == 0 && p.Block == model.Taskblock && p.Area == model.Taskarea); + if (nowJoblist.Any()) + { + var nowmodel = nowJoblist.FirstOrDefault(); + + LogHelper.WriteLogInfo("进入任务点亮=====matchid=" + nowmodel.Matchid + "===orderid===" + nowmodel.OrderID + "=====sku==" + nowmodel.Sku + "========"); + #region 点亮任务标签 + foreach (JobModel item in nowJoblist.ToArray()) + { + + #region 回显设备锁定 + if (queueDT.Rows[0]["lightcolor"].ToString() == EnumHelper.EMToDescriptionString(LightColor.Color.Blue)) + { + + LabelParamModel locklamodel = new LabelParamModel(); + locklamodel.Address = item.Address.ToString(); + locklamodel.ControlIP = item.ControlIP.ToString(); + locklamodel.Command = "LOCK"; + locklamodel.Parameter = "11111000"; + locklamodel.Type = "N"; + list.Add(locklamodel); + + } + #endregion + // else + //{ + + List manyJoblist = nowJoblist.FindAll(m => m.Tolocation == item.Tolocation); + int quantity = item.Quantity; + + LabelParamModel lamodel = new LabelParamModel(); + + lamodel.Address = item.Address.ToString(); + lamodel.ControlIP = item.ControlIP.ToString(); + lamodel.Command = "DISPLAY_JOB"; + + #region 同一个货位的数据合并显示 + //if (manyJoblist.Count > 1) + //{ + // if (manyJoblist.FindAll(m => m.State == 0).Any()) + // { + // foreach (JobModel mitem in manyJoblist) + // { + // quantity += mitem.Quantity; + // mitem.State = 1; + // mitem.ManyState = 1; + // } + + // } + //} + #endregion + + lamodel.Type = "N"; + lamodel.Quantity = quantity.ToString(); + lamodel.Uid = "U" + item.ID; + lamodel.Mode = queueDT.Rows[0]["lightcolor"].ToString() + "0"; + + list.Add(lamodel); + //} + + item.State = 1; + item.ColorCode = queueDT.Rows[0]["lightcolor"].ToString(); + item.DisplayTime = DateTime.Now; + } + #endregion + #region 点亮通道灯 + comBLL.DISPLAY_LIGHT_BLOCK(model.Taskblock, model.Taskarea, "1"); + #endregion + if (list != null && list.Count > 0) + { + LogHelper.WriteLogInfo("添加到点亮的list————————————————————:" + list.Count); + comBLL.DISPLAY_JOBALL(list); + } + } + else + {//无任务 + LogHelper.WriteLogInfo("点亮====无任务======================="); + model.State = 3; + } + #endregion + if (jobList.Any()) + { + + var finishList = jobList.FindAll(p => p.State == 0); + if (!finishList.Any()) + { + queueBLL.UpdateQueueOrderState(model);//缓存队列状态修改 + } + } + } + else + { + + LogHelper.WriteLogInfo("还有未完成任务" + isJobList.Count); + foreach (JobModel item in isJobList) + { + LogHelper.WriteLogInfo("还有未完成任务" + item.Address + item.ID); + } + } + } + #endregion + } +} diff --git a/Epost.BLL/Work_JobDownThread.cs b/Epost.BLL/Work_JobDownThread.cs new file mode 100644 index 0000000..3c7a6d3 --- /dev/null +++ b/Epost.BLL/Work_JobDownThread.cs @@ -0,0 +1,1074 @@ +using Epost.Common; +using Epost.DAL.Cache; +using Epost.DAL.Enum; +using Epost.Model; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Epost.BLL +{ + public class Work_JobDownThread + { + public string tblock, id; + public bool OrisShow = false; + OrderBLL orderbll = new OrderBLL(); + OrdersQueueBLL queueBLL = new OrdersQueueBLL(); + CommandBLL comBLL = new CommandBLL(); + JobModelCacheDAL JobCache = new JobModelCacheDAL(); + JobDownCacheDAL downCacheDAL = new JobDownCacheDAL(); + AddressstorageBLL addrBLL = new AddressstorageBLL(); + UserModelCacheDAL UserCacheDAL = new UserModelCacheDAL(); + SkuInfoBLL skuBLL = new SkuInfoBLL(); + ShowMesCacheDAL msgCache = new ShowMesCacheDAL(); + private static object lockJobDown = new object(); + private static object showmes = new object(); + + WorkIngCacheDAL workbll = new WorkIngCacheDAL(); + public void Work() + { + BackWorkList(tblock); + } + + #region 获取订单信息 + private void BackWorkList(object block) + { + + lock (lockJobDown) + { + + while (OrisShow) + { + try + { + + string workstate = workbll.GetWorkState(); + if (!string.IsNullOrEmpty(workstate)) + { + OrisShow = true; + Job_Down(block.ToString()); + Thread.Sleep(100); + } + else + { + OrisShow = false; + } + } + + catch (Exception ex) + { + LogHelper.WriteLogInfo(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":程序异常!\r\n" + ex.Message); + + } + } + } + + } + + #endregion + #region 标签拍下 + public void Job_Down(string tblock) + { + try + { + string[] nlist = tblock.Split('-'); + string nblock = nlist[0]; + string shelfid = nlist[1]; + List Arealist = addrBLL.GetAreaList(nblock, shelfid); + foreach (AddressstorageModel item in Arealist) + { + List downList = downCacheDAL.GetPlanJobDownList().FindAll(m => m.Status == "0" && m.Block == nblock && m.Area == item.area); + List jobList = JobCache.GetPlanJobList().FindAll(p => p.Block == nblock && p.Area == item.area); + + if (downList != null && downList.Count > 0) + { + foreach (ResultMessageModel data in downList.ToArray()) + { + LogHelper.WriteLogInfo("完成绑定箱号开始作业=============="); + Work_JobDown(data, jobList); + } + } + + + } + + } + catch (Exception ex) + { + LogHelper.WriteLogInfo("标签拍下异常:" + ex.Message); + + } + + } + + //作业中 + public void Work_JobDown(ResultMessageModel data, List jobList) + { + lock (lockJobDown) + { + try + { + + switch (data.Command) + { + case "QUERY_SPECIAL_STATUS": + BindJobList(data); + break; + case "JOB_DONE": + JobDown_M(data, jobList); + break; + + + default: + break; + } + } + catch (Exception ex) + { + LogHelper.WriteLogInfo("Work_JobDown标签拍下异常:" + ex.Message); + + + } + } + } + //绑箱中 + + #endregion + + #region 设备拍下处理 + public void JobDown_M(ResultMessageModel data, List jobList) + { + + //获取标签所在区 + OrdersQueueModel qmodel = new OrdersQueueModel(); + string area = data.Area; + string block = data.Block; + string way = data.Way; + string type = data.Type; + string orderid = string.Empty; + string skulist = string.Empty; + qmodel.Taskarea = area; + qmodel.Taskblock = block; + List endjoblist = jobList.FindAll(m => m.Block == block && m.Area == area && (m.State == 1 || m.State == 0)); + List job = jobList.FindAll(m => m.Block == block && m.Area == area && (m.State == 1 || m.State == 0) && m.Address == data.Address && m.ControlIP == data.IP); + List finjob = jobList.FindAll(m => m.Block == block && m.Area == area && (m.State == 3) && m.Address == data.Address && m.ControlIP == data.IP); + + if (finjob.Any()) + { + JobModel finmodel = finjob.FirstOrDefault(); + qmodel.UserCode = finmodel.UserCode; + qmodel.Sku = finmodel.Sku; + qmodel.Matchid = finmodel.Matchid; + + } + DataTable queueDT = queueBLL.getQueueOrderState(qmodel); + if (queueDT != null && queueDT.Rows.Count > 0) + { + skulist = queueDT.Rows[0]["sku"].ToString(); + LogHelper.WriteLogInfo("=======" + qmodel.UserCode + "=====" + area + "区===sku=" + skulist); + } + + if (data.Loc == "check")//任意回显标签拍下 熄灭回显设备 + { + List rejob = jobList.FindAll(m => m.Block == block && m.Area == area && m.State == 1 && m.Sku == queueDT.Rows[0]["sku"].ToString()); + if (rejob.Any()) + { + JobModel model = rejob.FirstOrDefault(); + comBLL.ClearArea_M(rejob); + //熄灭通道灯 + comBLL.DISPLAY_LIGHT_BLOCK(block, area, "0"); + // comBLL.UNLOCK_M(rejob); + #region 修改任务队列状态 + OrdersQueueModel qumodel = new OrdersQueueModel(); + qumodel.State = 3; + qumodel.Taskblock = block; + qumodel.Taskarea = area; + qumodel.Sku = model.Sku; + qumodel.Matchid = model.Matchid; + qumodel.UserCode = model.UserCode; + queueBLL.UpdateQueueTaskArea_Car(qumodel); + + #endregion + } + #region 清除当前区已做完的sku + JobCache.UpdateJobModelList(rejob, EcommendType.Execute); + #endregion + } + else if (data.Result == "4")//■按键拍下 + { + data.Parameter = "0"; + jobdown_start(data, job, block, area, jobList); + } + else + { + LogHelper.WriteLogInfo("JOB_DOWN开始~~~~~~~~~~~~~~~~"); + if (type != "2" && type != "8")//非显示器拍下 + { + jobdown_start(data, job, block, area, jobList); + } + } + downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); + } + #endregion + + #region 标签拍下 + + public void jobdown_start(ResultMessageModel data, List job, string block, string area, List jobList) + { + int truequantity = 0; + int checkquantity = 0; + string scanstr = data.Parameter; + if (!string.IsNullOrEmpty(scanstr)) + { + truequantity = Convert.ToInt32(scanstr); + } + if (job.Any()) + { + List downlist = new List(); + JobModel model = job.FirstOrDefault(); + + //List manyList = job.FindAll(m => m.ManyState == 1 && m.Tolocation == model.Tolocation); + //if (manyList.Any())//合并显示数据 + //{ + + // downlist.AddRange(manyList); + // LogHelper.WriteLogInfo("合并显示数据=========="+ manyList .Count+ "=================="); + //} + //else + //{ + downlist.Add(model); + // } + //修改订单状态 + orderbll.UpdateOrderState_Car(downlist, model, truequantity, checkquantity); + LogHelper.WriteLogInfo(data.Address + "=========------------------" + data.Parameter); + bool skuInish = orderbll.IsFinishWork(1, block, "", area, model.Sku); + model.State = 3; + if (skuInish) + { + LogHelper.WriteLogInfo("区SKU拣选完成--------------"); + //删除sku缓存信息 + List scanlist = downCacheDAL.GetPlanJobDownList().FindAll(p => p.Parameter == model.Sku && p.Command == "QUERY_SPECIAL_STATUS" && p.Area == area); + downCacheDAL.UpdateJobDownModelList(scanlist, EdownCommend.Execute); + //熄灭通道灯 + comBLL.DISPLAY_LIGHT_BLOCK(block, area, "0"); + + #region 熄灭当前区显示屏 + List offList = jobList.FindAll(m => m.Block == block && m.Area == area && m.State == 3 && m.Sku == model.Sku); + if (offList.Any()) + { + comBLL.LED_OFF_CLEAR(offList); + } + #endregion + + #region 修改任务队列状态 + OrdersQueueModel qumodel = new OrdersQueueModel(); + qumodel.State = 3; + qumodel.Taskblock = block; + qumodel.Taskarea = area; + qumodel.Sku = model.Sku; + qumodel.Matchid = model.Matchid; + qumodel.UserCode = model.UserCode; + queueBLL.UpdateQueueTaskArea_Car(qumodel); + #endregion + + #region 刷新波次信息 + showSummaryMes(model.Sku, block, area, Convert.ToInt32(block), null, model.Tolocation, model.Matchid); + #endregion + + Thread.Sleep(30); + #region 整条通道当前用户所有任务分播结束 + bool blockfinish = orderbll.IsFinishWorkByCar(1, model.Matchid, block); + if (blockfinish) + { + #region 点亮显示器 + ShowMessageModel_M show = new ShowMessageModel_M(); + show.Title = "当前波次分播完成"; + show.Contents = "拍下熄灭所有设备\r请扫描继续作业"; + show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Green); + show.Qty = "0"; + show.Type = 8; + show.Block = block; + show.Islock = false; + show.IsTwinkle = 1; + show.No = "01"; + comBLL.ShowBoxMessage_M(show); + #endregion + + bool allfinish = orderbll.IsFinishWorkByCar(1, model.Matchid); + if (allfinish)//判断整个波次是否已完成 + { //更新state状态为已完成 + orderbll.UpdateStateByCar(model.Matchid); + } + //删除波次信息 + List ulist = UserCacheDAL.GetUserCodeList().FindAll(m => m.Block == block); + UserCacheDAL.UpdateUserCodeList(ulist, EUserCommend.Execute); + + } + #endregion + + #region 区内sku播完回传 + // orderbll.UpdateStateByCar(model.Matchid, "", model.Sku); + + #endregion + + #region 清除当前区已做完的sku + JobCache.UpdateJobModelList(offList, EcommendType.Execute); + #endregion + + } + + } + + + } + #endregion + + + + #region 处理扫描条码 + public ResultModel BindJobList(ResultMessageModel data) + { + ResultModel res = new ResultModel(); + res.result = "0"; + try + { + string sblock = data.Block; + string scanStr = data.Parameter.Trim(); + string sarea = data.Area; + string name = string.Empty; + string matchid = string.Empty; + #region 提示请扫描波次号 + List ulist = UserCacheDAL.GetUserCodeList().FindAll(m => m.Block == sblock && m.Area == sarea);// + bool isnum = ConvertHexHelper.IsNum(scanStr.Substring(0, 1));//判断扫描首字母是否是数字 + + if (!ulist.Any()) + { + //手动加波次信息 + DataTable matdt = orderbll.GetMatchOrderList(); + if (matdt != null && matdt.Rows.Count > 0) + { + UserCodeModel umodel = new UserCodeModel(); + umodel.Matchid = matdt.Rows[0]["matchid"].ToString(); + umodel.Block = sblock; + umodel.Area = sarea; + UserCacheDAL.UpdateUserCodeList(new List { umodel }, EUserCommend.Create); + } + } + ulist = UserCacheDAL.GetUserCodeList().FindAll(m => m.Block == sblock && m.Area == sarea); + if (ulist.Any()) + { matchid = ulist.FirstOrDefault().Matchid; } + + #endregion + if (data.Type == "5")//中分扫描枪 + { + + zhongfenBind(ulist, scanStr, data); + downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); + } + else if (data.Type == "6")//播种扫描枪 + { + + xifenBind(ulist, scanStr, data, matchid, isnum); + + downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); + } + + + return res; + } + catch (Exception ex) + { + res.result = "-1"; + res.msg = "绑定任务异常"; + LogHelper.WriteLogInfo("绑定任务异常:" + ex.Message); + return res; + } + + } + #endregion + + #region 中分 + + public void zhongfenBind(List ulist, string scanStr, ResultMessageModel data) + { + + //if (ulist.Any()) + //{ + // UserCodeModel usermodel = ulist.FirstOrDefault(); + //if (string.IsNullOrEmpty(usermodel.ZfCode) && scanStr.Substring(0, 1) != "U")// + //{ + // #region 提示先扫描工号 + // ShowMessageModel_M show = new ShowMessageModel_M(); + // show.Title = "请先扫描工号!"; + // show.Contents = ""; + // show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); + // show.Block = sblock; + // show.Type =2; + // show.Area = sarea; + // show.Islock = true; + // comBLL.ShowBoxMessage_M(show); + // downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); + // #endregion + //} + //else { + + if (scanStr.Substring(0, 1) == "U") + { + #region 扫描工号 + if (ulist.Any()) + { + UserCodeModel umodel = ulist.FirstOrDefault(); + umodel.ZfCode = scanStr; + #region 扫描工号 + ShowMessageModel_M show = new ShowMessageModel_M(); + show.Title = "请扫描sku开始作业!"; + show.Contents = ""; + show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); + show.Block = data.Block; + show.Area = data.Area; + show.Type = 2; + show.Islock = true; + comBLL.ShowBoxMessage_M(show); + #endregion + } + downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); + #endregion + } + else + { + #region 中分扫描sku + + DataTable sinfodt = skuBLL.GetSkuInfoList(data.Parameter); + //string location = string.Empty; + if (sinfodt != null && sinfodt.Rows.Count > 0) + { + scanStr = sinfodt.Rows[0]["sku"].ToString(); + // location = data.Parameter;// sinfodt.Rows[0]["tolocation"].ToString(); + } + LogHelper.WriteLogInfo("中分" + data.Parameter + "===SKU" + scanStr); + List Arealist = addrBLL.GetAreaList(); + if (Arealist.Any()) + { + foreach (AddressstorageModel item in Arealist) + { + DataTable skudt = orderbll.GetSumList("", scanStr, item.block, item.area); + if (skudt != null && skudt.Rows.Count > 0) + { + //规格 + int discount = Convert.ToInt32(skudt.Rows[0]["discount"].ToString()); + //整件总数 + int SumCkQuantity = 0;//= Convert.ToInt32(skudt.Rows[0]["SumCkQuantity"].ToString()); + //散件总数 + int SumQuantity = Convert.ToInt32(skudt.Rows[0]["SumQuantity"].ToString()); + //if (discount != 1) + //{ + // if (SumQuantity >= discount) + // { + + // SumCkQuantity = SumQuantity / discount; + // SumQuantity = SumQuantity % discount; + // } + //} + + + + ShowMessageModel_M show = new ShowMessageModel_M(); + show.Title = skudt.Rows[0]["goodsname"].ToString(); + show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); + show.Block = item.block; + show.Islock = true; + show.Contents = data.Parameter + "(" + scanStr + ")\r";// + "规格:" + discount; + show.Qty = SumQuantity.ToString(); + show.Wholeqty = SumCkQuantity; + show.Unit = "件"; + show.Wholeunit = "箱"; + show.Type = 2; + comBLL.ShowBoxMessage_M(show); + } + else + { + ShowMessageModel_M show = new ShowMessageModel_M(); + show.Title = "SKU" + scanStr + "无任务!"; + show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); + show.Block = item.block; + show.Islock = true; + show.Contents = "请扫描其他商品!"; + show.Type = 2; + comBLL.ShowBoxMessage_M(show); + } + } + } + + #endregion + } + + + } + #endregion + + #region 细分播种 + public void xifenBind(List ulist, string scanStr, ResultMessageModel data, string matchid, bool isnum) + { + //if (ulist.Any()) + //{ + // UserCodeModel usermodel = ulist.FirstOrDefault(); + //if (string.IsNullOrEmpty(usermodel.UserCode) && scanStr.Substring(0, 1) != "U")// + //{ + // #region 提示先扫描工号 + // ShowMessageModel_M show = new ShowMessageModel_M(); + // show.Title = "请先扫描工号!"; + // show.Contents = ""; + // show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); + // show.Block = sblock; + // show.Area = sarea; + // show.Type = 8; + // show.Islock = true; + // comBLL.ShowBoxMessage_M(show); + // downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); + // #endregion + //} + //else + //{ + + if (scanStr.Substring(0, 1) == "U") + { + #region 扫描工号 + if (ulist.Any()) + { + UserCodeModel umodel = ulist.FirstOrDefault(); + umodel.UserCode = scanStr; + #region 扫描工号 + ShowMessageModel_M show = new ShowMessageModel_M(); + show.Title = "请扫描sku开始作业!"; + show.Contents = ""; + show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); + show.Block = data.Block; + show.Area = data.Area; + show.Type = 8; + show.Islock = true; + + comBLL.ShowBoxMessage_M(show); + #endregion + } + downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); + #endregion + } + else + { + + #region 扫描商品 + + List hangList = downCacheDAL.GetPlanJobDownList().FindAll(m => m.Parameter == "888888"); + + if (hangList.Any()) + { + + #region 挂起 + LogHelper.WriteLogInfo("挂起" + data.Parameter + "-------通道" + data.Block); + LabelParamModel FORMATEModel = new LabelParamModel(); + FORMATEModel.ControlIP = data.IP; + comBLL.FORMATE_JOB_DATA(FORMATEModel); + + + DataTable qdt = queueBLL.getQueuesOrderbyState(data.Block, data.Area, "1"); + if (qdt != null && qdt.Rows.Count > 0) + { + scanStr = qdt.Rows[0]["sku"].ToString(); + + // data.Parameter = scanStr; + Hangup_SKU(scanStr, data.Block, data.Area); + //删除sku对应缓存 + List sdown = downCacheDAL.GetPlanJobDownList().FindAll(p => p.Parameter == scanStr || p.Parameter == qdt.Rows[0]["location"].ToString()); + downCacheDAL.UpdateJobDownModelList(sdown, EdownCommend.Execute); + } + downCacheDAL.UpdateJobDownModelList(hangList, EdownCommend.Execute); + //刷新波次 + GetMatchOrder(); + #endregion + + } + else if (isnum)//sku + { + #region 扫描SKU + //根据扫描商品内码获取商品码 + data.ScanCode = data.Parameter; + DataTable sinfodt = skuBLL.GetSkuInfoList(data.Parameter); + string location = string.Empty; + if (sinfodt != null && sinfodt.Rows.Count > 0) + { + scanStr = sinfodt.Rows[0]["sku"].ToString(); + location = data.Parameter;// sinfodt.Rows[0]["tolocation"].ToString(); + } + data.Parameter = scanStr; + DataTable skudt = queueBLL.GetOrderQueue(data.Block, data.Area, "3"); + List scanlist = downCacheDAL.GetPlanJobDownList().FindAll(m => m.Address == data.Address && m.Parameter == scanStr && m.Parameter != "888888" && m.Block == data.Block && m.Area == data.Area); + + if (scanlist.Count > 1 || (skudt != null && skudt.Rows.Count > 0)) + { //重复扫描 + //ShowMessageModel_M show = new ShowMessageModel_M(); + //show.Title = scanStr + "重复扫描/已拣配!"; + //show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); + //show.Block = sblock; + //show.Area = sarea; + //show.Type = 8; + //comBLL.ShowBoxMessage_M(show); + downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); + + } + else + { + + DataTable OrderDt = orderbll.GetOrderList_Car(matchid, scanStr, data.Area, data.Block); + if (OrderDt != null && OrderDt.Rows.Count > 0) + { + + if (ulist.Any()) + { + UserCodeModel umodel = ulist.FirstOrDefault(); + data.Port = OrderDt.Rows[0]["matchid"].ToString(); + OrdersQueueModel qmodel = new OrdersQueueModel(); + qmodel.Sku = scanStr; + qmodel.Taskblock = data.Block; + qmodel.Taskarea = data.Area; + qmodel.UserCode = umodel.UserCode; + qmodel.Matchid = umodel.Matchid; + qmodel.Location = location; + qmodel.Lightcolor = EnumHelper.EMToDescriptionString(LightColor.Color.Red); + queueBLL.insertQueueOrders(qmodel); + //提示需要拣货总量/商品名称 + showSummaryMes(scanStr, data.Block, data.Area, 1, data, "", OrderDt.Rows[0]["matchid"].ToString()); + + } + else + { + LogHelper.WriteLogInfo("未扫描波次信息", LogHelper.Log_Type.ERROR); + } + + } + else + { + #region 回显 + DataTable echoDt = orderbll.GetOrderList_echo(matchid, scanStr, data.Area, data.Block); + if (echoDt != null && echoDt.Rows.Count > 0) + { + + if (ulist.Any()) + { + UserCodeModel umodel = ulist.FirstOrDefault(); + data.Port = echoDt.Rows[0]["matchid"].ToString(); + OrdersQueueModel qmodel = new OrdersQueueModel(); + qmodel.Sku = scanStr; + qmodel.Taskblock = data.Block; + qmodel.Taskarea = data.Area; + qmodel.UserCode = umodel.UserCode; + qmodel.Matchid = umodel.Matchid; + // qmodel.Location = location; + qmodel.Lightcolor = EnumHelper.EMToDescriptionString(LightColor.Color.Blue); + queueBLL.insertQueueOrders(qmodel); + //提示需要拣货总量/商品名称 + Mes_Echo(scanStr, data.Block, data.Area, 1, data, "", echoDt.Rows[0]["matchid"].ToString(), false); + + } + else + { + LogHelper.WriteLogInfo("未扫描波次信息", LogHelper.Log_Type.ERROR); + } + + } + else + { + + //提示无任务 + ShowMessageModel_M show = new ShowMessageModel_M(); + show.Title = "商品:" + scanStr + "当前区无任务!"; + show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); + show.Block = data.Block; + show.Area = data.Area; + show.Type = 8; + show.Islock = false; + comBLL.ShowBoxMessage_M(show); + downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); + } + + #endregion + } + + } + + + #endregion + + } + #endregion + } + + } + #endregion + #region 复核显示 + public void Mes_Echo(string scanStr, string sblock, string sarea, int type, ResultMessageModel data = null, string location = "", string matchid = "", bool islock = true) + { + + DataTable sudt = orderbll.GetSumList_Echo("", scanStr, sblock); + if (type == 2) + { + sudt = orderbll.GetSumList_Echo("", scanStr, sblock, sarea); + } + //查询当前区任务队列 + DataTable qdt = queueBLL.getQueuesOrderbyState(sblock, sarea, "1"); + if (sudt != null && sudt.Rows.Count > 0) + { + matchid = sudt.Rows[0]["matchid"].ToString(); + string sku = string.Empty; + string qty = string.Empty; + string color = string.Empty; + if (qdt != null && qdt.Rows.Count > 0) + { + sku = qdt.Rows[0]["sku"].ToString(); + qty = sudt.Rows[0]["SumQuantity"].ToString(); + color = qdt.Rows[0]["LightColor"].ToString(); + } + + //规格 + int discount = Convert.ToInt32(sudt.Rows[0]["discount"].ToString()); + //整件总数 + int SumCkQuantity = 0;// Convert.ToInt32(sudt.Rows[0]["SumCkQuantity"].ToString()); + //散件总数 + int SumQuantity = Convert.ToInt32(sudt.Rows[0]["SumQuantity"].ToString()); + //if (discount != 1) + //{ + // if (SumQuantity >= discount) + // { + + // SumCkQuantity = SumQuantity / discount; + // SumQuantity = SumQuantity % discount; + // } + //} + + + ShowMessageModel_M show = new ShowMessageModel_M(); + show.Title = sudt.Rows[0]["goodsname"].ToString(); + string mes = "复核显示"; + islock = false; + + if (qdt != null && qdt.Rows.Count > 0) + { + show.Contents = qdt.Rows[0]["location"].ToString() + "(" + scanStr + ")" + "\r" + mes;//sudt.Rows[0]["goodscode"].ToString().Replace(';','\r'); + } + if (data != null) + { + + show.Contents = data.ScanCode + "(" + scanStr + ")" + "\r" + mes; + sku = data.Parameter; + } + show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Blue); + show.Qty = SumQuantity.ToString(); + show.Wholeqty = SumCkQuantity; + show.Unit = "件"; + show.Type = 8; + show.Wholeunit = "箱"; + show.Block = sblock; + show.Area = sarea; + show.Islock = islock; + show.Location = "check"; + //ShowMesModel megmodel = new ShowMesModel(); + //megmodel.Qty = sudt.Rows[0]["SumQuantity"].ToString(); + //megmodel.Sku = sku; + //megmodel.Area = sarea; + //megmodel.Block = sblock; + //megmodel.Matchid = matchid; + + // msgCache.UpdateMsgModelList(new List { megmodel }, EmsgCommend.Create); + comBLL.ShowBoxMessage_M(show); + + if (data != null) + { + + data.Status = "1"; + } + + + } + else + { + + //查询当前区任务队列 + DataTable finshqdt = queueBLL.getQueuesOrderbyState(sblock, sarea, "3"); + ShowMessageModel_M show = new ShowMessageModel_M(); + //根据sku获取商品名称 + string goodsname = orderbll.GetGoodsname(location); + show.Title = goodsname + "分播完成"; + show.Contents = scanStr + "\r请扫描继续作业"; + show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); + show.Qty = "0"; + show.Type = 8; + show.Block = sblock; + show.Area = sarea; + show.Islock = true; + comBLL.ShowBoxMessage_M(show); + } + } + #endregion + + #region 订单显示器中分提示 + /// + /// 订单显示器中分提示 + /// + /// + /// + /// + /// type=1查询整个通道block的汇总数量,type=2查询当前通道下某 一区area的汇总数量 + /// + public void showSummaryMes(string scanStr, string sblock, string sarea, int type, ResultMessageModel data = null, string location = "", string matchid = "", bool islock = true) + { + try + { + + lock (showmes) + { + bool bo = orderbll.isTask(sblock, sarea); + string msg = string.Empty; + if (!bo) + { + msg = "当前商品无任务\r请送至下一区"; + } + DataTable sudt = orderbll.GetSumList("", scanStr, sblock); + if (type == 2) + { + sudt = orderbll.GetSumList("", scanStr, sblock, sarea); + } + //查询当前区任务队列 + DataTable qdt = queueBLL.getQueuesOrderbyState(sblock, sarea, "1"); + + + if (sudt != null && sudt.Rows.Count > 0) + { + matchid = sudt.Rows[0]["matchid"].ToString(); + string showqty = string.Empty; + string showsku = string.Empty; + List msglist = msgCache.GetMsgList().FindAll(p => p.Block == sblock && p.Area == sarea && p.Matchid == matchid && p.Sku == scanStr); + if (msglist.Any()) + { + ShowMesModel showmodel = msglist.FirstOrDefault(); + showqty = showmodel.Qty; + showsku = showmodel.Sku; + } + //////qdt.Rows[0]["sku"].ToString() 为null data.ScanCode + + string sku = string.Empty; + string qty = string.Empty; + string color = string.Empty; + if (qdt != null && qdt.Rows.Count > 0) + { + sku = qdt.Rows[0]["sku"].ToString(); + qty = sudt.Rows[0]["SumQuantity"].ToString(); + color = qdt.Rows[0]["LightColor"].ToString(); + + } + //规格 + int discount = Convert.ToInt32(sudt.Rows[0]["discount"].ToString()); + //整件总数 + int SumCkQuantity = 0; //Convert.ToInt32(sudt.Rows[0]["SumCkQuantity"].ToString()); + //散件总数 + int SumQuantity = Convert.ToInt32(sudt.Rows[0]["SumQuantity"].ToString()); + //if (discount != 1) + //{ + // if (SumQuantity >= discount) + // { + // SumCkQuantity = SumQuantity / discount; + // SumQuantity = SumQuantity % discount; + // } + //} + + ShowMessageModel_M show = new ShowMessageModel_M(); + show.Title = sudt.Rows[0]["goodsname"].ToString(); + string mes = "拣货任务"; + + if (qdt != null && qdt.Rows.Count > 0) + { + show.Contents = qdt.Rows[0]["location"].ToString() + "(" + scanStr + ")" + "\r" + mes;//sudt.Rows[0]["goodscode"].ToString().Replace(';','\r'); + } + if (data != null) + { + show.Contents = data.ScanCode + "(" + scanStr + ")" + "\r" + mes;// sudt.Rows[0]["goodscode"].ToString().Replace(';', '\r'); + sku = data.Parameter; + } + show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Green); + show.Qty = SumQuantity.ToString(); + + show.Wholeqty = SumCkQuantity; + show.Unit = "件"; + show.Type = 8; + show.Wholeunit = "箱"; + show.Block = sblock; + show.Area = sarea; + show.Islock = islock; + ShowMesModel megmodel = new ShowMesModel(); + megmodel.Qty = sudt.Rows[0]["SumQuantity"].ToString(); + megmodel.Sku = sku; + megmodel.Area = sarea; + megmodel.Block = sblock; + megmodel.Matchid = matchid; + + msgCache.UpdateMsgModelList(new List { megmodel }, EmsgCommend.Create); + comBLL.ShowBoxMessage_M(show); + + if (data != null) + { + + data.Status = "1"; + } + + + } + else + { + + //查询当前区任务队列 + DataTable finshqdt = queueBLL.getQueuesOrderbyState(sblock, sarea, "3"); + ShowMessageModel_M show = new ShowMessageModel_M(); + //根据sku获取商品名称 + string goodsname = orderbll.GetGoodsname(location); + show.Title = goodsname + "分播完成"; + show.Contents = scanStr + "\r请扫描继续作业"; + show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Green); + show.Qty = "0"; + show.Type = 8; + show.Block = sblock; + show.Area = sarea; + show.Islock = true; + comBLL.ShowBoxMessage_M(show); + } + } + } + catch (Exception ex) + { + LogHelper.WriteLogInfo("刷新显示器异常:" + ex.Message); + + } + } + #endregion + + #region SKU挂起/缺货 + public void Hangup_SKU(string sku, string block, string area, ResultMessageModel data = null) + { + List list = new List(); + //查询当前通道sku是否有任务 + DataTable dt = orderbll.getOrderListBysku(block, sku); + if (dt != null && dt.Rows.Count > 0) + { + // 将当前通道所有sku正在亮的设备熄灭 + foreach (DataRow item in dt.Rows) + { + if (item["oprationstate"].ToString() == "1") + { + LabelParamModel lamodel = new LabelParamModel(); + lamodel.Address = item["address"].ToString(); ; + lamodel.ControlIP = item["ControlIP"].ToString(); + lamodel.Command = "REMOVE_JOB"; + lamodel.Parameter = "01"; + list.Add(lamodel); + orderbll.UpOrderStateBybat(item["batchid"].ToString()); + } + } + if (list != null && list.Count > 0) + { + LogHelper.WriteLogInfo("挂起list——" + sku + "——————————————————:" + list.Count); + comBLL.DISPLAY_JOBALL(list); + } + } + + + //删除缓存中sku记录 + List jobList = JobCache.GetPlanJobList(); + List relist = jobList.FindAll(m => m.Sku == sku && m.Block == block); + JobModel model = new JobModel(); + if (relist.Any()) + { + model = relist.FirstOrDefault(); + JobCache.UpdateJobModelList(relist, EcommendType.Complete); + //删除Orderqueue中sku的记录 + bool bo = queueBLL.DelQueueOrder(sku, block); + LogHelper.WriteLogInfo("删除queue返回" + bo); + } + else + { + ShowMessageModel_M show = new ShowMessageModel_M(); + show.Title = "挂起商品:" + sku + "错误!"; + show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); + show.Block = block; + show.Area = area; + show.Type = 8; + show.Islock = true; + comBLL.ShowBoxMessage_M(show); + } + //downCacheDAL.GetPlanJobDownList().FindAll(p => p.Parameter == sku && p.Block == block); + } + + #endregion + + #region 查询波次通道列表 + public void GetMatchOrder() + { + DataTable dt = orderbll.GetMatchOrder(); + if (dt != null && dt.Rows.Count > 0) + { + foreach (DataRow item in dt.Rows) + { + ShowMatchMessage(item["matchid"].ToString(), item["workblock"].ToString()); + } + } + + } + #endregion + + #region 显示波次信息 + public void ShowMatchMessage(string scanStr, string sblock) + { + DataTable areadt = orderbll.GetAreaByMatch(scanStr, sblock); + if (areadt != null && areadt.Rows.Count > 0) + { + foreach (DataRow item in areadt.Rows) + { + UserCodeModel umodel = new UserCodeModel(); + umodel.Matchid = scanStr; + umodel.Block = item["block"].ToString(); + umodel.Area = item["area"].ToString(); + UserCacheDAL.UpdateUserCodeList(new List { umodel }, EUserCommend.Create); + + //提示扫工号 + ShowMessageModel_M xshow = new ShowMessageModel_M(); + xshow.Title = "请扫描工号/SKU开始作业"; + xshow.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); + xshow.Block = item["block"].ToString(); + xshow.Area = item["area"].ToString(); + // xshow.Area = sarea; + xshow.Type = 8; + xshow.Islock = true; + comBLL.ShowBoxMessage_M(xshow); + } + } + DataTable sumlist = orderbll.GetMatchSumList(scanStr, sblock); + if (sumlist != null && sumlist.Rows.Count > 0) + { + ShowMessageModel_M show = new ShowMessageModel_M(); + show.Title = "波次号:" + scanStr; + show.Color = EnumHelper.EMToDescriptionString(LightColor.Color.Red); + show.Block = sblock; + show.Type = 2; + show.Islock = true; + // string qty = ConvertHexHelper.ConvertString(sumlist.Rows[0]["incompleteCount"].ToString(), 10, 16); //拣货数量 + show.Qty = sumlist.Rows[0]["incompleteCount"].ToString(); + show.Location = sumlist.Rows[0]["completeCount"].ToString(); + show.Contents = "SKU总数:" + sumlist.Rows[0]["completeCount"].ToString() + "\rSKU待播数:" + sumlist.Rows[0]["incompleteCount"].ToString(); + comBLL.ShowBoxMessage_M(show); + + // downCacheDAL.UpdateJobDownModelList(new List { data }, EdownCommend.Execute); + } + } + #endregion + } +} diff --git a/Epost.DAL/AddressstorageDAL.cs b/Epost.DAL/AddressstorageDAL.cs index 95af696..f7f20a5 100644 --- a/Epost.DAL/AddressstorageDAL.cs +++ b/Epost.DAL/AddressstorageDAL.cs @@ -257,13 +257,19 @@ namespace Epost.DAL return db.GetsqlForDT(sql); } #endregion + #region 获取所有小区 - public List GetAreaList(string block = "") + public List GetAreaList(string block, string shelfid) { string strwhere = string.Empty; if (!string.IsNullOrEmpty(block)) { - strwhere = "and block ='" + block + "'"; + strwhere += "and block ='" + block + "'"; + } + + if (!string.IsNullOrEmpty(shelfid)) + { + strwhere += "and shelfid ='" + shelfid + "'"; } string sql = string.Format("select area,block from Addressstorage where type=1 " + strwhere + " group by area,block"); DataTable dt = db.GetsqlForDT(sql); @@ -271,6 +277,22 @@ namespace Epost.DAL return ModelConvertHelper.ConvertToList(dt); } #endregion + + #region 获取所有小区 + public List GetshelfidList(string block) + { + string strwhere = string.Empty; + if (!string.IsNullOrEmpty(block)) + { + strwhere += "and block ='" + block + "'"; + } + + string sql = string.Format("select shelfid,block from Addressstorage where type=1 " + strwhere + " group by shelfid,block"); + DataTable dt = db.GetsqlForDT(sql); + + return ModelConvertHelper.ConvertToList(dt); + } + #endregion #region 获取所有通道 public DataTable GetWayList() { diff --git a/Epost.DAL/Cache/WorkIngCacheDAL.cs b/Epost.DAL/Cache/WorkIngCacheDAL.cs new file mode 100644 index 0000000..69e7ce4 --- /dev/null +++ b/Epost.DAL/Cache/WorkIngCacheDAL.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Epost.DAL.Cache +{ + public class WorkIngCacheDAL + { + private static object lockobj = new object(); + public static string workingstate = string.Empty; + + + #region 获取计划任务列表 + public string GetWorkState() + { + + + + //读取数据库 处理异常断电等情况------待开发 + return workingstate; + + } + #endregion + + + + #region 初始化任务列表 + public void ClearWork() + { + + + workingstate = ""; + + } + #endregion + + + + #region Job缓存处理方法 + /// + /// Job缓存处理方法 + /// + /// + /// + /// + public bool UpdateWorkModel(WorkEcommendType CommendType) + { + + lock (lockobj) + { + + if (CommendType.Equals(WorkEcommendType.Create)) + { + workingstate = "Start"; + } + + else if (CommendType.Equals(WorkEcommendType.Complete)) + { + + workingstate = ""; + + + } + + return true; + } + } + #endregion + + + + + } + public enum WorkEcommendType + { + /// + /// 开始作业 + /// + [Description("开始作业")] + Create, + + + /// + /// 结束作业 + /// + [Description("结束作业")] + Complete + + + } +} diff --git a/Epost.DAL/Epost.DAL.csproj b/Epost.DAL/Epost.DAL.csproj index ecc522b..fba6c4e 100644 --- a/Epost.DAL/Epost.DAL.csproj +++ b/Epost.DAL/Epost.DAL.csproj @@ -111,6 +111,7 @@ +