using DBHelper; using System; using System.Linq; using WCS.Core; using WCS.Entity; using WCS.Entity.Protocol; using WCS.Service.Helpers; namespace WCS.Service.Works.Stations { [WorkTitle(typeof(ProductHandler), "组盘位", true)] internal class 组盘位 : DeviceWork> { protected override bool SelectDevice(WCS_DEVICE obj) { return obj.Is(DF.组盘); } protected override void Do(Device dev) { var dev1 = Device.Find(dev.Entity.CODE).Device(); if (dev.Data.RES4 && dev.Data3.Qty > 0) { GeneralHelper.DischargeOfTray(dev); LogHelper.AddWCS_EXCEPTION($"{dev.Entity.CODE}单号不符,托盘有货,自动排出26"); return; } //断电复位校验 if (dev.Data.TASKNUM > 10000 && dev.Data.PH_STATUS && !dev1.Data.Status.HasFlag(StationStatus.自动)) //有任务有光电,代表当前有货 { if (dev.Data.GOODSCODE != dev.Data3.DocId) dev.Data3.DocId = dev.Data.GOODSCODE; if (dev.Data.GOODSTYPE != dev.Data3.PalletType) dev.Data3.PalletType = dev.Data.GOODSTYPE; if (dev.Data.GOODSSIZE != dev.Data3.MaxQty) dev.Data3.MaxQty = dev.Data.GOODSSIZE; } if (!dev1.Data.Status.HasFlag(StationStatus.自动)) return; if (Ltc.Do(dev, v => v.Data2.CONFIRM == true)) return; if (Ltc.Do(dev, v => v.Data.REQUEST == true)) return;//避免与RGVPut逻辑线程冲突 var pline = dev.Entity.ProductLine(); var task = DB.Do(db => { return db.Default.Set() .Where(v => v.TYPE == TaskType.组盘 && v.STATUS < WCS.Entity.TaskStatus.已完成) .Where(v => v.PRODLINE == pline) .Where(v => v.ADDRTO == "2153") .OrderBy(v => v.CREATETIME).FirstOrDefault(); }); if (Ltc.Do(dev, v => v.Data.TASKNUM == 0)) { if (task == null) { if (dev.Data3.DocId != 0) dev.Data3.DocId = 0; if (dev.Data3.MaxQty != 0) dev.Data3.MaxQty = 0; if (dev.Data3.PalletType != 0) dev.Data3.PalletType = 0; } else { if (dev.Data3.DocId != task.DOCID) dev.Data3.DocId = task.DOCID; if (dev.Data3.MaxQty != task.FULLQTY) dev.Data3.MaxQty = task.FULLQTY; if (dev.Data3.PalletType != task.PALLETTYPE) dev.Data3.PalletType = task.PALLETTYPE; } } else if (Ltc.Do(dev, v => v.Data.GOODSCODE > 0)) { if (Ltc.Do(dev, v => v.Data.GOODSSIZE == 0)) return; if (Ltc.Do(dev, v => v.Data.GOODSTYPE == 0)) return; if (Ltc.Do(dev, v => v.Data.GOODSEND != v.Entity.Code())) return; if (Ltc.Do(dev, v => v.Data3.Qty == v.Data.GOODSSIZE)) { //入库 //if (Ltc.Do(dev, v => !v.Entity.WakeupOn(5000,"组盘"))) // return; bool move = false; //if (task == null) { if (Ltc.Do(dev, v => v.Data.RES)) { move = true; } } if (move) { GeneralHelper.DischargeOfTray(dev); LogHelper.AddWCS_EXCEPTION($"{dev.Entity.CODE}强制排出175"); return; } var taskid = dev.Data.TASKNUM; DB.Do(db => { var task = db.Default.Set().Find(taskid); if (task == null) throw new Exception("空托盘任务号" + taskid + "不存在"); var qty = db.Default.Set().Where(v => v.TYPE == TaskType.组盘 && v.GROUPTASK == taskid).Count(); if (Ltc.Do(dev, v => qty < v.Data3.MaxQty)) return; var res = WMS.InBound(task.BARCODE, dev.Entity.CODE); //if (Ltc.Do(res, v => v.ResType == false)) // throw new Exception(res.ResMessage); //var target = res.TunnelNum.Split(',').Select(v => endStations.FirstOrDefault(d => d.Entity.Tunnel().ToString() == v)) // .Where(v => v != null).FirstOrDefault(); task = new WCS_TASK { TYPE = TaskType.入库, STATUS = WCS.Entity.TaskStatus.执行中, ADDRFROM = dev.Entity.CODE, ADDRTO = "2181", FLOOR = 2, FULLQTY = dev.Data3.MaxQty, BARCODE = task.BARCODE, PALLETTYPE = 99, UPDATETIME = DateTime.Now, UPDATEUSER = "WCS", WMSTASK = int.Parse(res.WMSTaskNum), HEIGHT = dev.Data3.MaxQty, DOCID = task.DOCID, //ADDRCURRENT = dev.Entity.CODE }; switch (dev.Data3.MaxQty) { case 2: task.HEIGHT = 6; break; case 4: task.HEIGHT = 1; break; default: task.HEIGHT = 2; break; } db.Default.Set().Add(task); db.Default.SaveChanges(); dev.Data3.PalletType = 0; dev.Data3.MaxQty = 0; dev.Data3.DocId = 0; dev.Data2.TASKNUM = task.ID; dev.Data2.GOODSEND = 2187; dev.Data2.GOODSTYPE = 99; dev.Data2.CONFIRM = true; }); } else { bool move = false; //if (task == null) { if (Ltc.Do(dev, v => v.Data.RES)) { move = true; } } //else //if (!move && task != null) //{ // if (Ltc.Do(dev, task, (v, task) => v.Data.GOODSCODE != task.DOCID)) // {//托盘类型不匹配,挪走 // move = true; // } //} if (move) { GeneralHelper.DischargeOfTray(dev); LogHelper.AddWCS_EXCEPTION($"{dev.Entity.CODE}强制排出175"); } } } } } }