using iWareCc.Cache.Entity; using iWareCc.DecomposeTask.Entity; using iWareCc.Properties; using iWareCc.Srm.Entity; using iWareCommon.Common.Entity; using iWareCommon.Common.EnumType; using iWareCommon.Utils; using iWareDataCore.BASE.EnumType; using iWareDataCore.ORM; using iWareDataCore.TASK.EnumType; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace iWareCc.DoStackerTaskAuto.Chain { public class 发送堆垛机任务 : IHandler { /// /// 该节点的下一个节点 /// private IHandler nextHandler = null; public IHandler NextHandler { set { nextHandler = value; } } /// /// 任务容器 /// private PartTaskContainer DecompositionTaskContainer; /// /// 需要执行任务的堆垛机 /// private StackerEntity Stacker; /// /// 构造函数 /// /// 结果容器 /// WIP任务容器 public 发送堆垛机任务(StackerEntity stacker, PartTaskContainer decompositionTaskContainer) { this.Stacker = stacker; this.DecompositionTaskContainer = decompositionTaskContainer; } public void Handle() { using (var dbModel = new DbModelCore()) { try { var task = DecompositionTaskContainer.PartTask; var dTask = dbModel.TASKPartTasks.FirstOrDefault(x => x.id == task.Id); if (dTask.maintasktype != 4)//不是仅移动任务的任务需要判断物料库位,其余不用 { var placeMaterial = dbModel.BASEPlaceMaterialViews.FirstOrDefault(x => x.materialcode == dTask.materialcode && x.placeid == dTask.sourceplaceid); if (placeMaterial == null) { LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行堆垛机任务流程/" + Stacker.Equipment.EquipName, "发送堆垛机任务:{0},{1}", task.Id, "未找到指定的物料的库位信息"); return; } placeMaterial.updatetime = DateTime.Now; } var toPlace = dbModel.BASEPlaces.FirstOrDefault(x => x.id == dTask.toplaceid); if (toPlace == null) { LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行堆垛机任务流程/" + Stacker.Equipment.EquipName, "发送堆垛机任务:{0},{1}", task.Id, "未找到指定的目标库位"); return; } int SourcePosx = task.SourcePosx; int SourcePosy = task.SourcePosy; int SourcePosz = task.SourcePosz; if (task.SourcePlace == "100105")//入库口 { SourcePosx = 801; SourcePosy = 0; SourcePosz = 0; } else { if (SourcePosz % 2 == 0) { SourcePosz = 1; } else { SourcePosz = 2; } } int ToPosx = task.ToPosx; int ToPosy = task.ToPosy; int ToPosz = task.ToPosz; if (task.ToPlace == "100201") { ToPosx = 901; ToPosy = 0; ToPosz = 0; } else { if (ToPosz % 2 == 0) { ToPosz = 1; } else { ToPosz = 2; } } int lots = task.IsLots; if (CacheEntity.IsLots && task.MainTaskType == (int)EMainTaskType.入库任务)//如果设置批次入库按钮也是可以执行的 { lots = 1; } string stackerCnName = Enum.GetName(typeof(iWareDataCore.DEV.EnumType.EEquipmentCnName), iWareDataCore.DEV.EnumType.EEquipmentCnName.stacker1); var flag = Stacker.SendTask(task.Id, Stacker.Equipment.EquipName == stackerCnName ? 1 : 2, SourcePosx, SourcePosy, SourcePosz, ToPosx, ToPosy, ToPosz, task.MainTaskType, lots);//x列,y层,z排 if (flag) { dTask.isreleased = (int)EYesOrNo.是; dTask.status = (int)EPartTaskStatus.执行中; dTask.iscurrent = (int)EYesOrNo.是; dTask.updatetime = DateTime.Now; if (task.MainTaskType != 4) { toPlace.isexecute = (int)EYesOrNo.是; toPlace.islock = (int)EYesOrNo.是; toPlace.status = (int)EPlaceStatus.执行中; } dbModel.SaveChanges(); LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行堆垛机任务流程/" + Stacker.Equipment.EquipName, "发送堆垛机机任务:{0},{1},{2}", task.Id, flag, lots); } else { LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行堆垛机任务流程/" + Stacker.Equipment.EquipName, "发送堆垛机机任务:{0},{1},{2}", task.Id, flag, lots); return; } if (nextHandler != null) { nextHandler.Handle(); } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行堆垛机任务流程/" + Stacker.Equipment.EquipName, "发送堆垛机机任务:{0}", ex.Message); LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Handle", ex.Message); } } } } }