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 } }