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())
.OrderBy(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 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();
}
}
}