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), "_22车间入库", true)] public class _22车间入库 : DeviceWork> { protected override void Do(Device dev) { if (!SystemConfigHelpers.GetDeviceConfig(dev.Entity.CODE)) throw new Exception($"已禁止[{dev.Entity.CODE}]入库,请联系机修确认"); if (Ltc.Do(dev, v => v.Data2.CONFIRM == true)) throw new Exception($"设备[{dev.Entity.CODE}]确认信号未清除,请检查PLC中上一个任务是否完成状态异常"); if (Ltc.Do(dev, v => !v.Data.REQUEST)) return; var bcr = dev.Entity.BCR(); var barcode = bcr.CONTENT.Trim('\r'); if (barcode == "") throw new Exception($"[{dev.Entity.CODE}]扫码失败"); var addr = 3013; var next = dev.Entity.GetNext(addr.ToString()); if (next == null) throw new Exception($"缺少[{dev.Entity.CODE}]-[{addr}]路径信息,请检查路径配置"); var station = dev.Entity.CODE; short outTemp = 0, inTemp = 0; bool flag = false; Device[] arr = null; string trafficControl = ""; outTemp = 3001; inTemp = 3005; trafficControl = "3012-3060-3006-3004"; arr = Device.Find("3012", "3060", "3006", "3004").Select(v => v.Device()).ToArray(); var rgv = Device.Find("RGV8").Device(); if (rgv.Data2.Trigger != 0) throw new Exception("RGV8任务触发中"); if (rgv.Data.DestPosition == 3006 && rgv.Data.SystemStatus != RGVRunStatus.空闲) flag = true; if (arr.Any(v => v.Data2.CONFIRM)) throw new Exception($"设备集[{trafficControl}]存在确认信号,请检查是否为异常状况"); flag = arr.Where(v => v.Data.GOODSEND == outTemp).Any() || flag; var nextcode = next.Code(); if (flag) nextcode = inTemp; DB.Do(db => { var flag = db.Default.Set().Where(v => v.TaskType == AGVTaskType.入库).Where(v => v.Station == station) .Where(v => (v.Status == AGVTaskStatus.完成)).Any(); if (!flag && !dev.Data.RES1) throw new Exception($"[{dev.Entity.CODE}]已扫码等待AGV交互完成"); var arr = db.Default.Set().Where(v => v.TaskType == AGVTaskType.入库 && v.Status == AGVTaskStatus.完成) .Where(v => v.Station == station).ToArray(); foreach (var t in arr) { t.Status = AGVTaskStatus.完成扫码; t.UpdateTime = DateTime.Now; } db.Default.SaveChanges(); var info = WMS.InBound(barcode, dev.Entity.CODE); var task = new WCS_TASK(); task.BARCODE = info.ContainerCode; task.WMSTASK = int.Parse(info.WMSTaskNum); task.TYPE = TaskType.入库; task.STATUS = WCS.Entity.TaskStatus.执行中; task.ADDRFROM = dev.Entity.CODE; task.ADDRTO = addr.ToString(); task.STARTTIME = DateTime.Now; task.UPDATEUSER = "WCS"; task.UPDATETIME = DateTime.Now; task.FLOOR = 2; task.ADDRNEXT = nextcode.ToString(); db.Default.Set().Add(task); db.Default.SaveChanges(); dev.Data2.TASKNUM = task.ID; dev.Data2.GOODSEND = nextcode; dev.Data2.CONFIRM = true; }); } protected override bool SelectDevice(WCS_DEVICE dev) { return new string[] { "3001" }.Contains(dev.CODE); } } [WorkTitle(typeof(ProductHandler), "_22车间入库缓存", true)] public class _22车间入库缓存 : DeviceWork> { protected override void Do(Device dev) { if (Ltc.Do(dev, v => v.Data2.CONFIRM == true)) { return; } if (Ltc.Do(dev, v => v.Data.TASKNUM == 0)) return; if (Ltc.Do(dev, v => v.Data.PH_STATUS == false)) return; short inTemp = 0, outTemp = 0; short addrTo = 0; Device[] arr = null; outTemp = 3001; inTemp = 3005; addrTo = 3001; arr = Device.Find("3060", "3006", "3004", "3001", "3012").Select(v => v.Device()).ToArray(); var rgv = Device.Find("RGV8").Device(); if (rgv.Data2.Trigger != 0) throw new Exception("RGV8任务触发中"); if (rgv.Data.DestPosition == 3006 && rgv.Data.SystemStatus != RGVRunStatus.空闲 && rgv.Data.PH_Status) throw new Exception("交通管制,RGV8正在出库"); if (Ltc.Do(dev, v => v.Data.GOODSEND != inTemp)) return; var inTempDev = Device.Find(inTemp.ToString()).Device(); if (inTempDev.Data.TASKNUM < 10000) return; if (!inTempDev.Data.PH_STATUS) return; if (arr.Any(v => v.Data2.CONFIRM)) return; var toDev = Device.Find(addrTo.ToString()).Device(); if (toDev.Data.PH_STATUS) { if (toDev.Data.TASKNUM < 10000) return; if (toDev.Data.GOODSEND != toDev.Entity.Code()) return; } if (arr.Where(v => v.Data.GOODSEND == outTemp || v.Data.GOODSEND == addrTo).Any()) throw new Exception("交通管制"); var station = dev.Entity.CODE; DB.Do(db => { var task = db.Default.Set().Find(dev.Data.TASKNUM); if (task == null) throw new Exception($"任务号{dev.Data.TASKNUM}不存在"); var next = Device.Find(addrTo.ToString()).GetNext(task.ADDRTO); task.ADDRNEXT = next.CODE; task.UPDATETIME = DateTime.Now; db.Default.SaveChanges(); dev.Data2.TASKNUM = dev.Data.TASKNUM; dev.Data2.GOODSEND = next.Code(); dev.Data2.CONFIRM = true; }); } protected override bool SelectDevice(WCS_DEVICE dev) { return new string[] { "3005" }.Contains(dev.CODE); } } }