using iWareCc.Cache.Entity; using iWareCc.Conveyor.Entity; using iWareCc.DecomposeTask.Entity; using iWareCcTest.Properties; using iWareCommon.Common.Entity; using iWareCommon.Common.EnumType; using iWareCommon.Utils; using iWareDataCore.BASE.Entity; 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; using System.Threading.Tasks; namespace iWareCc.DoConveyorTaskAuto.Chain { public class 发送输送机任务 : IHandler { /// /// 该节点的下一个节点 /// private IHandler nextHandler = null; public IHandler NextHandler { set { nextHandler = value; } } /// /// 任务容器 /// private PartTaskContainer DecompositionTaskContainer; private ConveyorEntity Conveyor; /// /// 构造函数 /// /// 结果容器 /// WIP任务容器 public 发送输送机任务(ConveyorEntity conveyor, PartTaskContainer decompositionTaskContainer) { this.DecompositionTaskContainer = decompositionTaskContainer; this.Conveyor = conveyor; } public void Handle() { using (var dbModel = new DbModelCore()) { try { var task = DecompositionTaskContainer.PartTask; var gate = Conveyor.Gates.FirstOrDefault(x => x.Place.Id == task.SourcePlaceId); var dTask = dbModel.TASKPartTasks.FirstOrDefault(x => x.id == task.Id); if (gate.Place.PlaceTypeName == "gate21")//gate21-gate22的任务并不需要gate22反馈 { var sc = Conveyor.Gates.FirstOrDefault(x => x.Place.PlaceTypeName == "sc"); var materila = dbModel.BASEMaterials.FirstOrDefault(x => x.code == task.MaterialCode); dTask.isreleased = (int)EYesOrNo.是; dTask.ishandled = (int)EYesOrNo.是; dTask.voidlabel = (int)EYesOrNo.否; dTask.isfinished = (int)EYesOrNo.是; dTask.status = (int)EPartTaskStatus.已完成; dTask.iscurrent = (int)EYesOrNo.否; dTask.updatetime = DateTime.Now; if (!string.IsNullOrEmpty(materila.wide)) { sc.SendMaterialWindTask(materila.wide, materila.thick); } //删除库位物料绑定信息 var placeMaterial = dbModel.BASEPlaceMaterials.FirstOrDefault(x => x.materialid == materila.id && x.placeid == task.SourcePlaceId); dbModel.BASEPlaceMaterials.Remove(placeMaterial); var splace = dbModel.BASEPlaces.FirstOrDefault(x => x.id == task.SourcePlaceId); splace.status = 0; splace.isexecute = 0; splace.islock = 0; var tplace = dbModel.BASEPlaces.FirstOrDefault(x => x.id == task.ToPlaceId); tplace.status = 0; tplace.isexecute = 0; tplace.islock = 0; } else { dTask.isreleased = (int)EYesOrNo.是; dTask.status = (int)EPartTaskStatus.执行中; dTask.iscurrent = (int)EYesOrNo.是; dTask.updatetime = DateTime.Now; var toPlace = dbModel.BASEPlaces.FirstOrDefault(x => x.id == dTask.toplaceid); toPlace.isexecute = (int)EYesOrNo.是; toPlace.islock = (int)EYesOrNo.是; toPlace.status = (int)EPlaceStatus.执行中; } var flag=gate.SendGateTask(); if (!flag) { gate.WPutFinishSymbol = false; LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行输送机任务流程/" + Conveyor.Equipment.EquipName, "发送输送机任务:{0},{1}", task.Id, flag); return; } gate.TaskId = dTask.id.ToString(); ; // var flag1 = gate.SendTaskId(task.Id.ToString()); // LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行输送机任务流程/" + Conveyor.Equipment.EquipName, "发送输送机任务:{0},{1}", task.Id, "准备发放完成信号"); // Thread.Sleep(1000); // var flag2 = gate.SendOk(); // LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行输送机任务流程/" + Conveyor.Equipment.EquipName, "发送输送机任务:{0},{1}", task.Id, "完成信号发送完毕"); //if (!flag1 || !flag2) // { // gate.WPutFinishSymbol = false; // LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行输送机任务流程/" + Conveyor.Equipment.EquipName, "发送输送机任务:{0},{1}", task.Id, flag1 || flag2); // return; // } dbModel.SaveChanges(); gate.WPutFinishSymbol = false; LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行输送机任务流程/" + Conveyor.Equipment.EquipName, "发送输送机任务:{0}", task.Id); if (nextHandler != null) { nextHandler.Handle(); } } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Handle", ex.Message); } } } } }