using System; using System.Collections.Generic; using System.Linq; using WCS.Core; using WCS.Entity; namespace WCS.Service.Extensions { /// /// 任务扩展 /// public static class TaskExtension { public static T Create(this WCS_TASK source) { return (T)Activator.CreateInstance(typeof(T), source); } /// /// 获取可用的出库任务 /// /// /// public static Task[] GetOutTask(this List tasks) { return tasks.Select(v => v.Create()) .OrderByDescending(v => v.Priority) .ThenBy(v => v.Line) .ThenBy(v => v.Layer) .ThenBy(v => v.Col) .Take(2) .DistinctBy(v => v.Col) .OrderBy(v => v.Col) .ToArray(); } /// /// 获取出库任务的站台号及下一个地址 /// /// 任务 /// 货叉 public static void GetSrmStationAndaddNext(this WCS_TASK task, SrmFork srmFork) { var a = Device.Where(v => v.DEVICEGROUP.Any(p => p.MEMBER == Device.Find(task.TUNNEL).GetPath(task.ADDRTO.Replace("G", "")))) .Select(v => v.Create()); //取任务巷道到达目标地址的下一个地址,即任务堆垛机的站台对应的设备组 var stations = Device.Where(v => v.DEVICEGROUP.Any(p => p.MEMBER == Device.Find(task.TUNNEL).GetPath(task.ADDRTO.Replace("G", "")))) .Select(v => v.Create()) .FirstOrDefault().Items .OrderByDescending(v => v.Entity.CODE) .ToArray(); //一工位放较大的站台号 switch (srmFork) { case SrmFork.货叉1: task.SRMSTATION = stations[0].Entity.CODE; task.ADDRNEXT = stations[0].Entity.GetPath(task.ADDRTO).CODE; break; case SrmFork.货叉2: task.SRMSTATION = stations[1].Entity.CODE; task.ADDRNEXT = stations[1].Entity.GetPath(task.ADDRTO).CODE; break; } } } public enum SrmIndex { 工位一 = 0, 工位二 = 1, } public class Task : WCS_TASK { /// /// 行 /// public short Line { get; set; } /// /// 列 /// public short Col { get; set; } /// /// 层 /// public short Layer { get; set; } public Task(WCS_TASK task) { var addrFrom = task.ADDRFROM.Split("-"); ADDRTO = task.ADDRTO; TUNNEL = task.TUNNEL; DEVICE = task.DEVICE; Priority = task.Priority; ID = task.ID; Line = addrFrom[0].ToShort(); Col = addrFrom[1].ToShort(); Layer = addrFrom[2].ToShort(); } } }