| 
					
				 | 
			
			
				@@ -155,7 +155,8 @@ namespace WCS.WorkEngineering.Systems 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (taskInfo.Status == TaskStatus.Finish) WmsApi.CompleteTask(taskInfo.ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (taskInfo.Type == TaskType.OutDepot && taskInfo.Status == TaskStatus.ConveyorExecution) WmsApi.SrmPickOutCompleted(taskInfo.ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                World.Log($"堆垛机任务处理:结束--完成任务{obj.Data2.TaskFinishiId}", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             #endregion 处理完成任务 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -179,6 +180,9 @@ namespace WCS.WorkEngineering.Systems 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //任务集合是否有处于堆垛机执行状态的任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (tasks.Any(v => v.Status == Entity.TaskStatus.StackerExecution)) throw new KnownException($"有任务处于堆垛机执行状态", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ////判断是否存在调整优先级任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //if (!tasks.Any(v => v.Type != TaskType.TransferDepot && v.Status < Entity.TaskStatus.StackerExecution && v.Priority > 0)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //不存在调整优先级任务,判断是否存在移库任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 isTransfer = tasks.Any(v => v.Type == TaskType.TransferDepot && v.Status == Entity.TaskStatus.NewBuild); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -195,207 +199,214 @@ namespace WCS.WorkEngineering.Systems 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         enterOrOut = enterPriority > outPriorityNewBuild ? 2 : 3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            #region 移库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                #region 移库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (isTransfer) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                WCS_TaskInfo taskInfo = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SqlSugarHelper.Do(db => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                       //获取一条当前堆垛机优先级最高的新建移库任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                       var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Device == obj.Entity.Code && v.Type == TaskType.TransferDepot && v.Status == Entity.TaskStatus.NewBuild) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                                      .OrderByDescending(v => v.Priority) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                                      .First() ?? throw new KnownException("未找到移库任务", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                       //任务状态改为堆垛机执行中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                       task.Status = Entity.TaskStatus.StackerExecution; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                       task.StartTime = DateTime.Now; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                       db.Default.Updateable(task).ExecuteCommand(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                       task.AddWCS_TASK_DTL(db, task.AddrFrom, task.Device, $"堆垛机{obj.Entity.Code}开始执行任务"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                       taskInfo = task; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (taskInfo == null) throw new KnownException("数据更新错误", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var addrFrom = taskInfo.AddrFrom.Split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var addrTo = taskInfo.AddrTo.Split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                World.Log($"堆垛机任务处理:开始--下发移库任务[{obj.Data.TaskNumber}][{obj.Data.SLine}][{obj.Data.SCol}][{obj.Data.SLayer}][{obj.Data.ELine}][{obj.Data.ECol}][{obj.Data.ELayer}][{obj.Data.TaskType}][{obj.Data.VoucherNo}]", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //下发任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.TaskNumber = taskInfo.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.SLine = addrFrom[0].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.SCol = addrFrom[1].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.SLayer = addrFrom[2].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.ELine = addrTo[0].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.ECol = addrTo[1].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.ELayer = addrTo[2].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.TaskType = SrmTaskTypeEnum.MoveGoods; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.VoucherNo++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                World.Log($"堆垛机任务处理:结束---下发移库任务[{obj.Data.TaskNumber}][{obj.Data.SLine}][{obj.Data.SCol}][{obj.Data.SLayer}][{obj.Data.ELine}][{obj.Data.ECol}][{obj.Data.ELayer}][{obj.Data.TaskType}][{obj.Data.VoucherNo}]", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (isTransfer) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    WCS_TaskInfo taskInfo = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SqlSugarHelper.Do(db => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //获取一条当前堆垛机优先级最高的新建移库任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Device == obj.Entity.Code && v.Type == TaskType.TransferDepot && v.Status == Entity.TaskStatus.NewBuild) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                                       .OrderByDescending(v => v.Priority) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                                       .First() ?? throw new KnownException("未找到移库任务", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //任务状态改为堆垛机执行中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.Status = Entity.TaskStatus.StackerExecution; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.StartTime = DateTime.Now; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        db.Default.Updateable(task).ExecuteCommand(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.AddWCS_TASK_DTL(db, task.AddrFrom, task.Device, $"堆垛机{obj.Entity.Code}开始执行任务"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        taskInfo = task; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (taskInfo == null) throw new KnownException("数据更新错误", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var addrFrom = taskInfo.AddrFrom.Split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var addrTo = taskInfo.AddrTo.Split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    World.Log($"堆垛机任务处理:开始--下发移库任务[{obj.Data.TaskNumber}][{obj.Data.SLine}][{obj.Data.SCol}][{obj.Data.SLayer}][{obj.Data.ELine}][{obj.Data.ECol}][{obj.Data.ELayer}][{obj.Data.TaskType}][{obj.Data.VoucherNo}]", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //下发任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.TaskNumber = taskInfo.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.SLine = addrFrom[0].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.SCol = addrFrom[1].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.SLayer = addrFrom[2].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.ELine = addrTo[0].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.ECol = addrTo[1].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.ELayer = addrTo[2].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.TaskType = SrmTaskTypeEnum.MoveGoods; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.VoucherNo++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    World.Log($"堆垛机任务处理:结束---下发移库任务[{obj.Data.TaskNumber}][{obj.Data.SLine}][{obj.Data.SCol}][{obj.Data.SLayer}][{obj.Data.ELine}][{obj.Data.ECol}][{obj.Data.ELayer}][{obj.Data.TaskType}][{obj.Data.VoucherNo}]", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            #endregion 移库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                #endregion 移库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            #region 出入库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                #region 出入库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //上一个周期是不是出库任务 第一次获取返回结果会是false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var lastIsOut = obj.Entity.GetFlag<bool>("LastIsOut"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            obj.Entity.SetFlag("LastIsOut", !lastIsOut); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //上一个周期是不是出库任务 第一次获取返回结果会是false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var lastIsOut = obj.Entity.GetFlag<bool>("LastIsOut"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                obj.Entity.SetFlag("LastIsOut", !lastIsOut); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //入库任务优先 或 上一个周期是出库任务并且出库任务无优先 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (enterOrOut == 2 || (lastIsOut && enterOrOut == 1)) //入库任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //判断本次优先执行楼层,并设置下次执行时优先楼层 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var floor = obj.Entity.GetFlag<int>("FloorIn"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                floor = floor % 2 + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Entity.SetFlag("FloorIn", floor); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //获取当前堆垛机所有的取货站台 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var arrIn = PickUpDevices.First(v => v.Key == obj.Entity.Code).Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!arrIn.Any()) throw new KnownException($"堆垛机{obj.Entity.Code}无取货路径点", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //获取有货的设备 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                arrIn = arrIn.Where(v => v.Data.TaskNumber > 0 && v.Data3.Status.HasFlag(StatusEunm.PH_Status) && !v.Data3.Status.HasFlag(StatusEunm.Run)).ToList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!arrIn.Any()) throw new KnownException($"[{obj.Entity.Code}]等待入库任务输送到位", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                WCS_TaskInfo taskInfo = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Station station = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SqlSugarHelper.Do(db => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //入库任务优先 或 上一个周期是出库任务并且出库任务无优先 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (enterOrOut == 2 || (lastIsOut && enterOrOut == 1)) //入库任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    //根据有货设备的任务号获取所有类型为入库状态为输送机执行中的任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(v => (v.Type == TaskType.EnterDepot || v.Type == TaskType.EmptyInit) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                                              && v.Status == TaskStatus.ConveyorExecution 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                                              && arrIn.Select(p => p.Data.TaskNumber).Contains(v.ID) && v.Device == obj.Entity.Code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    //按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层 TODO:待验证排序结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var task = tasks.OrderByDescending(v => v.Priority).OrderByDescending(v => v.Floor == floor ? 1 : 0).First() ?? throw new KnownException($"{obj.Entity.Code}未找到入库任务", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    //获取任务所有设备 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    station = arrIn.First(v => v.Data.TaskNumber == task.ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    //获取当前货物巷道 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var res = WmsApi.GetLocalIn(task.ID, task.Device, station.Entity.Code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var loc = res.ResData.CellNo.Split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    task.Status = TaskStatus.StackerExecution; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    task.AddrTo = $"{loc[0]}-{loc[1]}-{loc[2]}"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    task.LastInteractionPoint = station.Entity.Code; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    task.EditWho = "WCS"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    db.Default.Updateable(task).ExecuteCommand(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    task.AddWCS_TASK_DTL(db, station.Entity.Code, task.AddrTo, "任务下发堆垛机执行"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //判断本次优先执行楼层,并设置下次执行时优先楼层 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var floor = obj.Entity.GetFlag<int>("FloorIn"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    floor = floor % 2 + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Entity.SetFlag("FloorIn", floor); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //获取当前堆垛机所有的取货站台 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var arrIn = PickUpDevices.First(v => v.Key == obj.Entity.Code).Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (!arrIn.Any()) throw new KnownException($"堆垛机{obj.Entity.Code}无取货路径点", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //获取有货的设备 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    arrIn = arrIn.Where(v => v.Data.TaskNumber > 0 && v.Data3.Status.HasFlag(StatusEunm.PH_Status) && !v.Data3.Status.HasFlag(StatusEunm.Run)).ToList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (!arrIn.Any()) throw new KnownException($"[{obj.Entity.Code}]等待入库任务输送到位", LogLevelEnum.Low); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    WCS_TaskInfo taskInfo = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Station station = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SqlSugarHelper.Do(db => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //根据有货设备的任务号获取所有类型为入库状态为输送机执行中的任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(v => (v.Type == TaskType.EnterDepot || v.Type == TaskType.EmptyInit) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                                                  && v.Status == TaskStatus.ConveyorExecution 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                                                  && arrIn.Select(p => p.Data.TaskNumber).Contains(v.ID) && v.Device == obj.Entity.Code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层 TODO:待验证排序结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        var task = tasks.OrderByDescending(v => v.Priority).OrderByDescending(v => v.Floor == floor ? 1 : 0).First() ?? throw new KnownException($"{obj.Entity.Code}未找到入库任务", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //获取任务所有设备 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        station = arrIn.First(v => v.Data.TaskNumber == task.ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //获取当前货物巷道 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        var res = WmsApi.GetLocalIn(task.ID, task.Device, station.Entity.Code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        var loc = res.ResData.CellNo.Split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.Status = TaskStatus.StackerExecution; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.AddrTo = $"{loc[0]}-{loc[1]}-{loc[2]}"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.LastInteractionPoint = station.Entity.Code; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.EditWho = "WCS"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        db.Default.Updateable(task).ExecuteCommand(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.AddWCS_TASK_DTL(db, station.Entity.Code, task.AddrTo, "任务下发堆垛机执行"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        taskInfo = task; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (taskInfo == null) throw new KnownException("数据更新错误", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var addrTo = taskInfo.AddrTo.Split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    World.Log($"堆垛机任务处理:开始--下发入库任务[{obj.Data.TaskNumber}][{obj.Data.SLine}][{obj.Data.SCol}][{obj.Data.SLayer}][{obj.Data.ELine}][{obj.Data.ECol}][{obj.Data.ELayer}][{obj.Data.TaskType}][{obj.Data.VoucherNo}]", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //下发任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.TaskNumber = taskInfo.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.TaskType = SrmTaskTypeEnum.Default; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.SLine = station.Entity.Code.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.SCol = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.SLayer = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.ELine = addrTo[0].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.ECol = addrTo[1].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.ELayer = addrTo[2].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.VoucherNo++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    World.Log($"堆垛机任务处理:结束---下发入库任务[{obj.Data.TaskNumber}][{obj.Data.SLine}][{obj.Data.SCol}][{obj.Data.SLayer}][{obj.Data.ELine}][{obj.Data.ECol}][{obj.Data.ELayer}][{obj.Data.TaskType}][{obj.Data.VoucherNo}]", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else if (enterOrOut == 3 || !lastIsOut) //出库任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //判断本次优先执行楼层,并设置下次执行时优先楼层 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    taskInfo = task; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var floor = obj.Entity.GetFlag<int>("FloorOut"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (taskInfo == null) throw new KnownException("数据更新错误", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var addrTo = taskInfo.AddrTo.Split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                World.Log($"堆垛机任务处理:开始--下发入库任务[{obj.Data.TaskNumber}][{obj.Data.SLine}][{obj.Data.SCol}][{obj.Data.SLayer}][{obj.Data.ELine}][{obj.Data.ECol}][{obj.Data.ELayer}][{obj.Data.TaskType}][{obj.Data.VoucherNo}]", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //下发任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.TaskNumber = taskInfo.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.TaskType = SrmTaskTypeEnum.Default; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.SLine = station.Entity.Code.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.SCol = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.SLayer = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.ELine = addrTo[0].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.ECol = addrTo[1].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.ELayer = addrTo[2].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.VoucherNo++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                World.Log($"堆垛机任务处理:结束---下发入库任务[{obj.Data.TaskNumber}][{obj.Data.SLine}][{obj.Data.SCol}][{obj.Data.SLayer}][{obj.Data.ELine}][{obj.Data.ECol}][{obj.Data.ELayer}][{obj.Data.TaskType}][{obj.Data.VoucherNo}]", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else if (enterOrOut == 3 || !lastIsOut) //出库任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //判断本次优先执行楼层,并设置下次执行时优先楼层 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    floor = floor % 2 + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Entity.SetFlag("FloorOut", floor); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var floor = obj.Entity.GetFlag<int>("FloorOut"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //获取当前堆垛机所有的取货站台 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var arrOut = PutDevices.First(v => v.Key == obj.Entity.Code).Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                floor = floor % 2 + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Entity.SetFlag("FloorOut", floor); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (!arrOut.Any()) throw new KnownException($"堆垛机{obj.Entity.Code}无放货路径点", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //获取当前堆垛机所有的取货站台 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var arrOut = PutDevices.First(v => v.Key == obj.Entity.Code).Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //获取可以放货的设备集合 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    arrOut = arrOut.Where(v => !v.Data3.Status.HasFlag(StatusEunm.PH_Status) //无光电 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                    && !v.Data3.Status.HasFlag(StatusEunm.Run) //未运行 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                    && !v.Data3.Status.HasFlag(StatusEunm.OT_Status) //无任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                    && !v.Data3.Status.HasFlag(StatusEunm.UnassignedTask) //未分配任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                    && v.Data3.Status.HasFlag(StatusEunm.Auto)).ToList(); //自动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!arrOut.Any()) throw new KnownException($"堆垛机{obj.Entity.Code}无放货路径点", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //var devs = Device.All.Where(v => v.HasFlag(DeviceFlags.出库, DeviceFlags.巷道口)).Select(v => new Station(v, this.World)).ToList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //var dev = devs.Find(v => v.Entity.Code == "1026"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //获取可以放货的设备集合 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                arrOut = arrOut.Where(v => !v.Data3.Status.HasFlag(StatusEunm.PH_Status) //无光电 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                && !v.Data3.Status.HasFlag(StatusEunm.Run) //未运行 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                && !v.Data3.Status.HasFlag(StatusEunm.OT_Status) //无任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                && !v.Data3.Status.HasFlag(StatusEunm.UnassignedTask) //未分配任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                && v.Data3.Status.HasFlag(StatusEunm.Auto)).ToList(); //自动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //var devs = Device.All.Where(v => v.HasFlag(DeviceFlags.出库, DeviceFlags.巷道口)).Select(v => new Station(v, this.World)).ToList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //var dev = devs.Find(v => v.Entity.Code == "1026"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (!arrOut.Any()) throw new KnownException($"[{obj.Entity.Code}]等待出库任务输送到位", LogLevelEnum.Low); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!arrOut.Any()) throw new KnownException($"[{obj.Entity.Code}]等待出库任务输送到位", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    WCS_TaskInfo taskInfo = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                WCS_TaskInfo taskInfo = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SqlSugarHelper.Do(db => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        var allOutCode = arrOut.Select(v => v.Entity.Code).ToList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute && v.Device == obj.Entity.Code) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                                       .Where(v => allOutCode.Contains(v.SrmStation)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                                       .OrderByDescending(v => v.Priority) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                                       .OrderByDescending(v => v.Floor == floor ? 1 : 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                                       .OrderBy(v => v.AddTime) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                                       .First(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (task == null) return;//throw new KnownException($"{obj.Entity.Code}未找到出库任务", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        string addrTo = task.SrmStation; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (db.Default.Queryable<WCS_TaskInfo>().Any(v => v.AddrTo == task.AddrTo && v.Status == TaskStatus.ConveyorExecution)) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        var taskId = task.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //判断是否是二深位任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        var addrFrom = task.AddrFrom.Split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (addrFrom[4] == "02") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            var res = WmsApi.AddWcsMoveTask(task.ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            switch (res.ResData.ResType) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                case WmsApiMoveTask.允许2升位执行: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SqlSugarHelper.Do(db => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   var allOutCode = arrOut.Select(v => v.Entity.Code).ToList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   //按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute && v.Device == obj.Entity.Code) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                                  .Where(v => allOutCode.Contains(v.SrmStation)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                                  .OrderByDescending(v => v.Priority) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                                  .OrderByDescending(v => v.Floor == floor ? 1 : 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                                  .OrderBy(v => v.AddTime) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                                  .First(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   if (task == null) throw new KnownException($"{obj.Entity.Code}未找到出库任务", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   var taskId = task.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   //判断是否是二深位任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   var addrFrom = task.AddrFrom.Split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   if (addrFrom[4] == "02") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                       var res = WmsApi.AddWcsMoveTask(task.ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                       switch (res.ResData.ResType) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                       { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                           case WmsApiMoveTask.允许2升位执行: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                               break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                           case WmsApiMoveTask.执行移库任务: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                               throw new KnownException($"堆垛机{obj.Entity.Code}需要先执行移库任务", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                           case WmsApiMoveTask.一深位有出库任务: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                               task = db.Default.Queryable<WCS_TaskInfo>() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                .Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                .Where(v => allOutCode.Contains(v.SrmStation) && v.AddrFrom == res.ResData.CellNo) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                .First() ?? throw new KnownException($"请尽快搬离{obj.Entity.Code}二楼出库口满轮,当前堆垛机出库任务呗阻塞", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                               break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                       }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                       if (res.ResData.ResType == WmsApiMoveTask.执行移库任务) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                       if (res.ResData.ResType == WmsApiMoveTask.一深位有出库任务 && res.ResData.CellNo != task.AddrFrom) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   task.Status = TaskStatus.StackerExecution; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   task.LastInteractionPoint = task.Device; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   task.EditWho = "WCS"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   db.Default.Updateable(task).ExecuteCommand(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   task.AddWCS_TASK_DTL(db, task.Device, task.SrmStation, "任务下发堆垛机执行"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   taskInfo = task; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (taskInfo == null) throw new KnownException("数据更新错误", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var addrFrom = taskInfo.AddrFrom.Split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                World.Log($"堆垛机任务处理:开始--下发出库任务[{obj.Data.TaskNumber}][{obj.Data.SLine}][{obj.Data.SCol}][{obj.Data.SLayer}][{obj.Data.ELine}][{obj.Data.ECol}][{obj.Data.ELayer}][{obj.Data.TaskType}][{obj.Data.VoucherNo}]", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.TaskNumber = taskInfo.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.SLine = addrFrom[0].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.SCol = addrFrom[1].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.SLayer = addrFrom[2].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.ELine = taskInfo.SrmStation.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.ECol = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.ELayer = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.TaskType = SrmTaskTypeEnum.Default; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                obj.Data.VoucherNo++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                World.Log($"堆垛机任务处理:结束---下发出库任务[{obj.Data.TaskNumber}][{obj.Data.SLine}][{obj.Data.SCol}][{obj.Data.SLayer}][{obj.Data.ELine}][{obj.Data.ECol}][{obj.Data.ELayer}][{obj.Data.TaskType}][{obj.Data.VoucherNo}]", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                case WmsApiMoveTask.执行移库任务: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    throw new KnownException($"堆垛机{obj.Entity.Code}需要先执行移库任务", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                case WmsApiMoveTask.一深位有出库任务: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    task = db.Default.Queryable<WCS_TaskInfo>() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                     .Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                     .Where(v => allOutCode.Contains(v.SrmStation) && v.AddrFrom == res.ResData.CellNo) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                     .First() ?? throw new KnownException($"请尽快搬离{obj.Entity.Code}二楼出库口满轮,当前堆垛机出库任务呗阻塞", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (res.ResData.ResType == WmsApiMoveTask.执行移库任务) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (res.ResData.ResType == WmsApiMoveTask.一深位有出库任务 && res.ResData.CellNo != task.AddrFrom) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.Status = TaskStatus.StackerExecution; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.LastInteractionPoint = task.Device; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.EditWho = "WCS"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        db.Default.Updateable(task).ExecuteCommand(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.AddWCS_TASK_DTL(db, task.Device, task.SrmStation, "任务下发堆垛机执行"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        taskInfo = task; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (taskInfo == null) return;//throw new KnownException("数据更新错误", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var addrFrom = taskInfo.AddrFrom.Split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    World.Log($"堆垛机任务处理:开始--下发出库任务[{obj.Data.TaskNumber}][{obj.Data.SLine}][{obj.Data.SCol}][{obj.Data.SLayer}][{obj.Data.ELine}][{obj.Data.ECol}][{obj.Data.ELayer}][{obj.Data.TaskType}][{obj.Data.VoucherNo}]", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.TaskNumber = taskInfo.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.SLine = addrFrom[0].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.SCol = addrFrom[1].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.SLayer = addrFrom[2].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.ELine = taskInfo.SrmStation.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.ECol = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.ELayer = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.TaskType = SrmTaskTypeEnum.Default; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    obj.Data.VoucherNo++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    World.Log($"堆垛机任务处理:结束---下发出库任务[{obj.Data.TaskNumber}][{obj.Data.SLine}][{obj.Data.SCol}][{obj.Data.SLayer}][{obj.Data.ELine}][{obj.Data.ECol}][{obj.Data.ELayer}][{obj.Data.TaskType}][{obj.Data.VoucherNo}]", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                #endregion 出入库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            #endregion 出入库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public override bool Select(Device dev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //return dev.Code == "SRM2"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return dev.HasFlag(DeviceFlags.堆垛机); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return dev.Code is "SRM1" or "SRM2" or "SRM3"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |