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.Robots { [WorkTitle(typeof(ProductHandler), "机器人")] public class RobotWork : DeviceWork> { private Device C2153; public RobotWork() { C2153 = Device.Find("2153").Device(); } protected override bool SelectDevice(WCS_DEVICE dev) { return true; } protected override void Do(Device dev) { //dev.Data.Trigger = 0; //dev.Data.TaskID = 0; //dev.Data.Target = 0; if (Ltc.Do(dev, v => v.Data.Trigger != 0)) { return; } if (Ltc.Do(dev, v => v.Data.FinishedTask != 0)) { var fTaskId = dev.Data.FinishedTask; var fTarget = dev.Entity.ROUTES.Where(v => v.NEXT.ProductLine() == dev.Data.Target).Select(v => v.NEXT.Device()).FirstOrDefault(); if (fTarget == null) { var msg = "目标位置" + dev.Data.Target + "有误"; throw new Exception(msg); } DB.Do(db => { var task = db.Default.Set().Find(fTaskId); if (task == null) throw new Exception("已完成任务号" + fTaskId + "不存在"); var taskPallet = db.Default.Set().Find(fTarget.Data.TASKNUM); if (taskPallet == null) throw new Exception("空托盘任务号" + fTarget.Data.TASKNUM + "不存在"); var container = taskPallet.BARCODE; task.STATUS = WCS.Entity.TaskStatus.已完成; task.ENDTIME = DateTime.Now; task.UPDATETIME = DateTime.Now; task.UPDATEUSER = "WCS"; task.GROUPTASK = taskPallet.ID; //task.ADDRCURRENT = fTarget.Entity.CODE; db.Default.SaveChanges(); var res = WMS.AutoBuildUpGroupStock(container, task.BARCODE, dev.Entity.CODE); if (Ltc.Do(res, v => v.ResType == false)) throw new Exception(res.ResMessage); dev.Data.FinishedTask = 0; }); return; } //if (Ltc.Do(dev, v => v.Data.Mode != RobotMode.自动)) // return; if (Ltc.Do(dev, v => v.Data.Status != RobotStatus.空闲)) return; if (Ltc.Do(C2153, C2153 => C2153.Data.TASKNUM == 0)) return; if (Ltc.Do(C2153, C2153 => C2153.Data.GOODSEND == 2153)) return; if (Ltc.Do(C2153, C2153 => C2153.Data.GOODSEND == 0)) return; if (Ltc.Do(C2153, C2153 => C2153.Data.GOODSCODE == 0)) return; if (Ltc.Do(C2153, C2153 => C2153.Data.PH_STATUS == false)) { throw new Exception("有任务但无光电信号"); } var workShop = C2153.Data.GOODSEND; var target = dev.Entity.ROUTES.Where(v => v.NEXT.ProductLine() == workShop).Select(v => v.NEXT.Device()).FirstOrDefault(); if (target == null) throw new Exception("机器人目标位置" + workShop + "不存在"); //string tType = ""; //if (C2153.Data.GOODSTYPE == 4) //{ // tType = "母"; //} //else if (C2153.Data.GOODSTYPE == 3) //{ // tType = "T2"; //} //else if (C2153.Data.GOODSTYPE == 1) //{ // tType = "T9"; //} if (Ltc.Do(target, target => target.Data.PH_STATUS == false)) throw new Exception($"目标位置[{target}]托盘未到位"); if (Ltc.Do(target, C2153, (target, C2153) => target.Data.GOODSCODE != C2153.Data.GOODSCODE) && target.Data3.Qty != target.Data.GOODSSIZE) //单号不符 { if ((Ltc.Do(target, C2153, (target, C2153) => target.Data.GOODSTYPE != 0 && C2153.Data.GOODSTYPE != 0 && target.Data.GOODSTYPE != C2153.Data.GOODSTYPE))) //托盘类型不符 { GeneralHelper.DischargeOfTray(target); LogHelper.AddWCS_EXCEPTION($"2153:{C2153.Data.TASKNUM}与{target.Entity.CODE}单号不符,托盘有货,自动排出106"); return; } if (target.Data3.Qty > 0) //有托盘 { GeneralHelper.DischargeOfTray(target); LogHelper.AddWCS_EXCEPTION($"2153:{C2153.Data.TASKNUM}与{target.Entity.CODE}单号不符,托盘有货,自动排出112"); return; } if (target.Data3.Qty == 0) //无托盘 { target.Data.RES4 = true; LogHelper.AddWCS_EXCEPTION($"2153:{C2153.Data.TASKNUM}与{target.Entity.CODE}单号不符,托盘为空,允许组盘"); } } if (Ltc.Do(target, C2153, (target, C2153) => target.Data.GOODSTYPE != C2153.Data.GOODSTYPE)) return; if (Ltc.Do(target, target => target.Data3.MaxQty == 0 || target.Data3.PalletType == 0)) return; if (Ltc.Do(target, target => target.Data3.Qty >= target.Data.GOODSSIZE)) return; DB.Do(db => { var taskid = C2153.Data.TASKNUM; var task = db.Default.Set().Find(taskid); if (task == null) return; //task.ADDRCURRENT = dev.Entity.CODE; db.Default.SaveChanges(); dev.Data.TaskID = taskid; dev.Data.Target = workShop; dev.Data.Trigger = 1; }); } } }