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";
}
}
}