using DBHelper; using System; using System.Linq; using WCS.Core; using WCS.Entity; using WCS.Entity.Protocol; namespace WCS.Service.Works.Stations { [WorkTitle(typeof(ProductHandler), "成品外检")] public class 成品外检 : DeviceWork> { protected override bool SelectDevice(WCS_DEVICE dev) { return dev.CODE == "2181"; } protected override void Do(Device dev) { if (dev.Data2.CONFIRM) return; var code = dev.Entity.Code(); if (Ltc.Do(dev, v => v.Data.REQUEST == false && v.Data.GOODSEND != code)) return; var rgv = Device.Find("RGV2"); var arr = rgv.ROUTES.Select(v => v.NEXT).Where(v => v.ROUTES.Any(d => d.NEXT.IsTunnel())).ToArray(); var endStations = arr.Select(v => v.Device()).ToArray(); endStations = Ltc.Do(endStations, arr => arr.Where(v => v.Data.TASKNUM == 0 && v.Data.PH_STATUS == false).ToArray()); if (endStations.Length == 0) { return; } DB.Do(db => { var task = db.Default.Set().Find(dev.Data.TASKNUM); if (task == null) { Ltc.Log("任务号:" + dev.Data.TASKNUM + "不存在"); return; } //task.ADDRCURRENT = dev.Entity.CODE; task.UPDATETIME = DateTime.Now; db.Default.SaveChanges(); if (Ltc.Do(task, task => task.TYPE == TaskType.入库)) { if (Ltc.Do(task, task => string.IsNullOrEmpty(task.TUNNEL))) { var res = WMS.GetTunnelList(task.WMSTASK, 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.TunnelNum().ToString() == v)) .Where(v => v != null) .Select(v => new { Conv = v, SC = v.Entity.ROUTES.First().NEXT.ROUTES.Where(v => v.NEXT.IsSC()).First().NEXT.Device() }) .OrderBy(v => { try { return v.SC.Data.Tunnel == v.Conv.Entity.TunnelNum() ? 0 : 1; } catch { return 99; } }) .Select(v => v.Conv) .FirstOrDefault(); if (target == null) throw new Exception($"巷道分配失败,{res.TunnelNum}"); task.TUNNEL = target.Entity.Tunnel(); task.ADDRTO = target.Entity.CODE; task.UPDATETIME = DateTime.Now; db.Default.SaveChanges(); dev.Data2.TASKNUM = dev.Data.TASKNUM; dev.Data2.GOODSEND = target.Entity.Code(); dev.Data2.GOODSSIZE = task.FULLQTY; dev.Data2.GOODSTYPE = task.PALLETTYPE; dev.Data2.CONFIRM = true; } } }); } } }