using iWareCc.Cache.Entity; using iWareCc.Conveyor.Entity; using iWareCc.DecomposeTask.Entity; using iWareCc.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 = CacheEntity.Conveyors.First(x => x.Equipment.EquipName == "conveyor1").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.status = (int)EPartTaskStatus.执行中; dTask.iscurrent = (int)EYesOrNo.是; dTask.updatetime = DateTime.Now; //if (!string.IsNullOrEmpty(materila.wide)) //{ // if (!sc.SendMaterialWindTask(materila.wide, materila.thick)) // { // sc.SendMaterialWindTask(materila.wide, materila.thick); // } //} //删除库位物料绑定信息 var placeMaterial = dbModel.BASEPlaceMaterials.FirstOrDefault(x => x.materialid == materila.id && x.placeid == task.SourcePlaceId); if (placeMaterial!=null) { dbModel.BASEPlaceMaterials.Remove(placeMaterial); } var inoutlistdetail = dbModel.BASEInOutListDetailViews.FirstOrDefault(x => x.isfinish == 0 && x.typename == "出库" && x.materialid == dTask.maintaskid); if (inoutlistdetail!=null) { var inout = dbModel.BASEInOutListDetails.FirstOrDefault(x => x.id == inoutlistdetail.id); if (inout!=null) { inout.isfinish = 1; } } 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(); if (gate.Place.PlaceTypeName == "gate21") { gate.Canceled = true;//临时用来标记给gate22用来发送一次收到到位的确认反馈 } 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); } } } } }