using PlcSiemens.Core.Extension;
using ServiceCenter.Extensions;
using ServiceCenter.SqlSugars;
using System.ComponentModel;
using WCS.Core;
using WCS.Entity;
using WCS.WorkEngineering.Protocol.Station;
using WCS.WorkEngineering.Worlds;
using TaskStatus = WCS.Entity.TaskStatus;
namespace WCS.WorkEngineering.Systems
{
///
/// 码垛区补空托盘任务生成
///
[BelongTo(typeof(MainWorld))]
[Description("码垛区补空托盘任务生成")]
public class 码垛区补空托盘任务生成 : DeviceSystem>
{
protected override bool ParallelDo => true;
protected override bool SaveLogsToFile => true;
public override void Do(Device obj)
{
WCS_Palletizing palletizing = null;
SqlSugarHelper.Do(_db =>
{
var db = _db.Default;
//取一个时间最靠前的,没有绑定码垛工位的码垛记录
var palletizingInfo = db.Queryable().First(x => x.PalletizingStation == null);
if (palletizingInfo == null) return;
var palleTask = db.Queryable().First(x => x.ID == palletizingInfo.TaskId && (x.Status == TaskStatus.FinishOfShunt || x.Status == TaskStatus.ConveyorExecution));
if (palleTask == null) return;
//获取可以使用的放货站台信息
var taskAddNext = Device.All.FirstOrDefault(x => x.Code == palleTask.AddrNext).Targets.FirstOrDefault().Targets.FirstOrDefault().Targets;
if (taskAddNext == null) return;
var devs = Device.All.Where(x => taskAddNext.Contains(x)).Select(x => new Device(x, World)).ToList();
//取一个可用用于码垛的地方
var dev = devs.FirstOrDefault(x => !x.Data3.Status.HasFlag(StationStatus.PH_Status));
if (dev == null) return;
palletizingInfo.PalletizingStation = dev.Entity.Code;
db.Updateable(palletizingInfo).ExecuteCommand();
palletizing = palletizingInfo;
});
if (palletizing == null) return;
//TODO:取货地址暂时写死,后续依靠任务进行计算
var dev = Device.All.Where(x => x.Code == "1606").Select(x => new Device(x, World)).FirstOrDefault();
dev.Data.TaskNumber = palletizing.Id;
dev.Data.GoodsEnd = palletizing.PalletizingStation!.ToShort();
}
public override bool Select(Device dev)
{
return dev.Code == nameof(码垛区补空托盘任务生成);
}
}
}