using ServiceCenter.Extensions; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using WCS.Core; using WCS.Entity.Protocol.Station; using WCS.WorkEngineering.Extensions; using WCS.WorkEngineering.Worlds; namespace WCS.WorkEngineering.Systems.重绕区 { /// /// 扫码位分配 /// [BelongTo(typeof(RewindWorld))] [Description("扫码位分配")] public class 扫码位分配 : DeviceSystem> { protected override bool ParallelDo => true; public override void Do(Device obj) { if (obj.Data.VoucherNo != obj.Data2.VoucherNo) { World.Log($"凭证号不一致,DB520:{obj.Data.VoucherNo}-DB521:{obj.Data2.VoucherNo}"); return; } if (obj.Data3.Status.HasFlag(StationStatus.Run)) { World.Log("设备运行中"); return; } ; if (!obj.Data3.Status.HasFlag(StationStatus.OT_Status)) { World.Log("站台货物信息与实际占用不一致"); return; } if (!obj.Data3.Status.HasFlag(StationStatus.PH_Status)) { World.Log("无光电"); return; } ; if (obj.Data2.Request != 1) { World.Log("无请求"); return; } List stations = new List {"9119","9120","9121","9122","9123","9124","9125","9130", "9131", "9132", "9133", "9134", "9135", "9136", "9141", "9142", "9143", "9144", "9145", "9146", "9147"}; List targetStations = new List { "9125", "9136", "9147" }; var devs = Device.All.Where(x => stations.Contains(x.Code)).Select(x => new Device(x, World)); devs = devs.Where(x => targetStations.Contains(x.Data2.GoodsEnd.ToString())).ToList(); short next = 9125;//9147; var num_9125 = devs.Count(x => x.Data2.GoodsEnd.ToString() == "9125"); var num_9136 = devs.Count(x => x.Data2.GoodsEnd.ToString() == "9136"); var num_9147 = devs.Count(x => x.Data2.GoodsEnd.ToString() == "9147"); //if (devs.Count() == 0) //{ // next = 9136; //} //else //{ // next = num_9136 <= num_9125 ? num_9136.ToShort() : num_9125.ToShort();//ComputeAddto(num_9125, num_9136, num_9147); //} obj.Data.TaskNumber = obj.Entity.Code.ToShort(); obj.Data.TaskNumber = obj.Entity.Code.ToShort(); obj.Data.GoodsStart = obj.Entity.Code.ToShort(); obj.Data.GoodsStart = obj.Entity.Code.ToShort(); obj.Data.GoodsEnd = next; obj.Data.GoodsEnd = next; obj.Data.SetVoucherNo(); } public short ComputeAddto(int num_9125, int num_9136, int num_9147) { if (num_9125 < num_9136 && num_9125 < num_9147) { return num_9125.ToShort(); } else if (num_9136 < num_9125 && num_9136 < num_9147) { return num_9136.ToShort(); } else { return num_9147.ToShort(); } } public override bool Select(Device dev) { return dev.Code is "9115" or "9021"; } } }