using ServiceCenter.Extensions; using ServiceCenter.SqlSugars; using System.ComponentModel; using WCS.Core; using WCS.Entity; using WCS.Entity.Protocol.Station; using WCS.WorkEngineering.Extensions; using WCS.WorkEngineering.WebApi.Controllers; using WCS.WorkEngineering.Worlds; using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags; using TaskStatus = WCS.Entity.TaskStatus; namespace WCS.WorkEngineering.Systems { /// /// 环形库码垛区补空托盘任务生成 /// [BelongTo(typeof(RingWorld))] [Description("环形库码垛区补空托盘任务生成")] public class 环形库码垛区补空托盘任务生成 : DeviceSystem> { protected override bool ParallelDo => true; protected override bool SaveLogsToFile => true; public override void Do(Device obj) { if (obj.Data3.Status.HasFlag(StationStatus.PH_Status)) return; WCS_TaskInfo deliveryTask = null; SqlSugarHelper.Do(_db => { var db = _db.Default; //检查是否有待执行状态放货点是自己的出库任务 var ringTask = db.Queryable().First(x => x.Type == TaskType.OutDepot && x.Status == TaskStatus.WaitingToExecute && x.SrmStation == obj.Entity.Code); if (ringTask == null) { //开始申请码垛任务 WmsApi.ApplyPalletizingStockOut(obj.Entity.Code, obj.Entity.Sources.Single(x => x.HasFlag(DeviceFlags.Robot)).Code); return; } var task = db.Queryable().First(x => x.Type == TaskType.Delivery && x.AddrTo == obj.Entity.Code); if (task != null) return; //开始获取当前地址上个设备的上一个设备中的非零九托盘拆机 var addrFrom = obj.Entity.Sources.SelectMany(x => x.Sources).Single(x => x.HasFlag(DeviceFlags.拆盘机非09)); var dev = Device.All.Where(x => x.Code == addrFrom.Code).Select(x => new Device(x, World)).FirstOrDefault(); if (dev.Data.TaskNumber != 0 || dev.Data.GoodsEnd != 0) return; //开始创建搬运任务 task = new WCS_TaskInfo() { AddrFrom = addrFrom.Code, AddrTo = obj.Entity.Code, BarCode = "码垛托盘搬运-" + obj.Entity.Code, Status = Entity.TaskStatus.NewBuild, PalletType = ringTask.PalletType, FullQty = ringTask.FullQty, Type = TaskType.Delivery, AddWho = "WCS", AddTime = DateTime.Now }; var res = db.Insertable(task).ExecuteReturnEntity(); var taskOld = res.Mapper(); taskOld.Id = res.ID; taskOld.AddTime = DateTime.Now; ; db.Insertable(taskOld).SplitTable().ExecuteCommand(); res.AddWCS_TASK_DTL(db, obj.Entity.Code, task.AddrTo, "初始化码垛托盘搬运任务"); deliveryTask = res; }); if (deliveryTask == null) return; var dev = Device.All.Where(x => x.Code == deliveryTask.AddrFrom).Select(x => new Device(x, World)).FirstOrDefault(); dev.Data.TaskNumber = deliveryTask.ID; dev.Data.GoodsEnd = obj.Entity.Code.ToShort(); } public override bool Select(Device dev) { return dev.HasFlag(DeviceFlags.环形库码垛工位); } } }