| 
					
				 | 
			
			
				@@ -9,7 +9,6 @@ using WCS.Entity.Protocol; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using WCS.Entity.Protocol.SRM; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using WCS.Service.Extensions; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using WCS.Service.Handlers; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-using WCS.Service.Helpers; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using WCS.Service.Log; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 namespace WCS.Service.Works.SRM 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -41,9 +40,9 @@ namespace WCS.Service.Works.SRM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (obj.Data.FinishedACK_1 == 1 || obj.Data.FinishedACK_2 == 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    throw new Exception(LogHelper.SpliceLogMessage($"堆垛机完成任务WCS反馈信号未清除", deviceCode, WCS_EXCEPTIONTYPE.设备异常, GetType())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    throw new WarnException($"堆垛机完成任务WCS反馈信号未清除"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (obj.Data2.VoucherNo_1 != obj.Data.VoucherNo_1 || obj.Data2.VoucherNo_2 != obj.Data.VoucherNo_2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    throw new Exception(LogHelper.SpliceLogMessage($"等待执行{obj.Data.TaskID_1}-{obj.Data.TaskID_2}", deviceCode, WCS_EXCEPTIONTYPE.设备异常, GetType())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    throw new WarnException($"等待执行{obj.Data.TaskID_1}-{obj.Data.TaskID_2}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //处理堆垛机已完成的任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (obj.Data2.FinishedTask_1 != 0 || obj.Data2.FinishedTask_2 != 0) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -62,7 +61,7 @@ namespace WCS.Service.Works.SRM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 DB.Do(db => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     var task = db.Default.Set<WCS_TASK>().Where(v => v.DEVICE == obj.Entity.CODE).Where(v => v.STATUS == TaskStatus.堆垛机执行).FirstOrDefault(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (task != null) throw new Exception(LogHelper.SpliceLogMessage($"[{deviceCode}]有正在执行的任务:[{task.ID}]", obj.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (task != null) throw new WarnException($"[{deviceCode}]有正在执行的任务:[{task.ID}]"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //属于当前堆垛机未执行的移库任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     isTransfer = db.Default.Set<WCS_TASK>().AsNoTracking().Where(v => v.DEVICE == obj.Entity.CODE && v.TYPE == TaskType.移库 && v.STATUS < TaskStatus.堆垛机执行).ToList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //判断是否存在调整优先级任务,存在初始化isTransfer值 让本次执行优先任务 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -146,7 +145,7 @@ namespace WCS.Service.Works.SRM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //入库口设备信息 找一个有任务有光电且不在运行状态位的取货点 如果找不到代表任务还在输送途中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     var st = arrIn.OrderBy(v => v.Data2.Tasknum > 0 && v.Data2.Status.HasFlag(IstationStatus.光电状态) && !v.Data3.Status.HasFlag(StationStatus.运行状态位) ? 0 : 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                   .ThenBy(v => v.UpdateTime) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  .FirstOrDefault() ?? throw new Exception($"[{deviceCode}]等待入库任务输送到位"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  .FirstOrDefault() ?? throw new WarnException($"[{deviceCode}]等待入库任务输送到位"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //根据上述筛选条件筛选出来的入库任务 找到对应的设备组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     var item = Device.Where(v => v.DEVICEGROUP.Any(p => p.MEMBER.CODE == st.Entity.CODE)).Single(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -170,7 +169,7 @@ namespace WCS.Service.Works.SRM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             var tunnel = dev1.Entity.ROUTES.First().NEXT.CODE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             var task1 = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.STATUS < TaskStatus.堆垛机执行 && v.ID == dev1.Data2.Tasknum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             if (task1 == null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                throw new Exception(LogHelper.SpliceLogMessage($"设备有光电有任务且不在运行状态,但WCS找不到任务{dev1.Data2.Tasknum}", dev1.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常, GetType())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                throw new WarnException($"设备有光电有任务且不在运行状态,但WCS找不到任务{dev1.Data2.Tasknum}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             var loc = WMS.GetLocalIn(task1.WMSTASK, tunnel, dev1.Entity.CODE, Entity.WareCellForkNum.货叉1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             var locno = string.Format("{0}-{1}-{2}", loc.Row, loc.Colomn, loc.Layer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             var oldTask = task1.STATUS; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -196,7 +195,7 @@ namespace WCS.Service.Works.SRM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             var tunnel = dev2.Entity.ROUTES.First().NEXT.CODE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             var task2 = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.STATUS < TaskStatus.堆垛机执行 && v.ID == dev2.Data2.Tasknum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (task2 == null) throw new Exception(LogHelper.SpliceLogMessage($"设备有光电有任务且不在运行状态,但WCS找不到任务{dev2.Data2.Tasknum}", dev2.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常, GetType())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (task2 == null) throw new WarnException($"设备有光电有任务且不在运行状态,但WCS找不到任务{dev2.Data2.Tasknum}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             var loc = WMS.GetLocalIn(task2.WMSTASK, tunnel, dev2.Entity.CODE, Entity.WareCellForkNum.货叉2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             var locno = string.Format("{0}-{1}-{2}", loc.Row, loc.Colomn, loc.Layer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             var oldTask = task2.STATUS; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -287,7 +286,7 @@ namespace WCS.Service.Works.SRM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             //堆垛机当前是否有正在执行的任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             if (db.Default.Set<WCS_TASK>().Any(d => d.DEVICE == sc && d.STATUS == TaskStatus.堆垛机执行)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                throw new Exception(LogHelper.SpliceLogMessage($"[{deviceCode}]有正在执行的出库任务", deviceCode, WCS_EXCEPTIONTYPE.逻辑异常, GetType())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                throw new WarnException($"[{deviceCode}]有正在执行的出库任务"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             //找出等待执行的出库任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             var q = db.Default.Set<WCS_TASK>().Where(v => v.STATUS == TaskStatus.新建) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                               .Where(v => v.DEVICE == sc) 
			 |