using Epost.Common; using Epost.DAL.Cache; using Epost.DAL.Enum; using Epost.Model; using Epost.Model.resource; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; 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(); AddressstorageBLL addrBLL = new AddressstorageBLL(); WorkIngCacheDAL workbll = new WorkIngCacheDAL(); public void Displayjob() { GetWorkList(tblock); } #region 获取订单信息 private void GetWorkList(object block) { string cm = ""; cm = "lockdisJob" + block; object c = (Object)cm; lock (c) { 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(), queueDT.Rows[0]["lightcolor"].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 (item.ColorCode == EnumHelper.EMToDescriptionString(LightColor.Color.Pink)) { LabelParamModel locklamodel = new LabelParamModel(); locklamodel.Address = item.Address.ToString(); locklamodel.ControlIP = item.ControlIP.ToString(); locklamodel.Command = "LOCK"; locklamodel.Parameter = "11111000"; locklamodel.Type = "N"; locklamodel.Uid = "L" + item.Address; list.Add(locklamodel); } #endregion //判断设备当前有没有被点亮 List isshowList = jobList.FindAll(p => p.Address == item.Address && p.ControlIP == item.ControlIP && p.State == 1); if (!isshowList.Any()) { List manyJoblist = nowJoblist.FindAll(m => m.Tolocation == item.Tolocation && m.Address == item.Address); 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) { quantity = 0; 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 =item.ColorCode + "0"; list.Add(lamodel); //} item.State = 1; 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 } }