| 
					
				 | 
			
			
				@@ -17,7 +17,7 @@ namespace WCS.WorkEngineering.Systems 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /// <summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ///   机械臂 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /// </summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    [BelongTo(typeof(MainWorld))] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    [BelongTo(typeof(RingWorld))] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     [Description("机械臂")] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public class 机械臂 : DeviceSystem<Device<IRobot520, IRobot521, IRobot522>> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -45,7 +45,7 @@ namespace WCS.WorkEngineering.Systems 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //取货设备 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 PickUpDevices.Add(roobot.Code, roobot.Sources.Where(v => v.HasFlag(DeviceFlags.输送机)).Select(v => v).ToList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                PutDevices.Add(roobot.Code, roobot.Targets.Where(v => v.HasFlag(DeviceFlags.输送机)).Select(v => new Device<IStation520, IStation521, IStation523>(v, this.World)).ToList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                PutDevices.Add(roobot.Code, roobot.Targets.Where(v => v.HasFlag(DeviceFlags.输送机)).Select(v => new Device<IStation520, IStation521, IStation523>(v, World)).ToList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -148,18 +148,23 @@ namespace WCS.WorkEngineering.Systems 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (!arrIn.Any()) throw new KnownException($"[{obj.Entity.Code}]等待入库任务输送到位", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //等待下发的任务信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                List<Tuple<WCS_TaskInfo, Device<IStation523, IStation524>>> taskList = new List<Tuple<WCS_TaskInfo, Device<IStation523, IStation524>>>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var taskList = new List<Tuple<WCS_TaskInfo, Device<IStation523, IStation524>>>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 SqlSugarHelper.Do(db => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //跟据设备组中第一个设备任务号最小的一个先执行 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     var devGroup = arrIn.MinBy(x => x.Item2.OrderBy(o => o.Data2.TaskNumber)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    foreach (var dev in devGroup.Item2.OrderBy(x => x.Entity.Code.ToShort()).Take(2).OrderByDescending(x => x.Entity.Code.ToShort())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    foreach (var dev in devGroup.Item2.OrderBy(x => x.Entity.Code.ToShort()).Take(2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                             ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.Type == TaskType.SetPlate && v.Status == Entity.TaskStatus.FinishOfShunt && dev.Data2.TaskNumber == v.ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         if (task == null) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         var res = WmsApi.RingApplyStockInLoc(task.ID, task.Device, dev.Entity.Code, task.Height); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         task.Status = Entity.TaskStatus.StackerExecution; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         task.AddrTo = res.ResData.CellNo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.Line = res.ResData.Row; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.Col = res.ResData.Colomn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.Layer = res.ResData.Layer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.Depth = res.ResData.Row; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         task.LastInteractionPoint = dev.Entity.Code; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         task.SrmStation = dev.Entity.Code; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         task.EditWho = "WCS"; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -171,70 +176,71 @@ namespace WCS.WorkEngineering.Systems 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (!taskList.Any()) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (taskList.Count == 2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                switch (taskList.Count) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    //机械臂需要保证靠翻转机的设备(即设备号较大的设备)的取货任务一定是下发至一工位的,设备号较小的任务下发至二工位 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    //下发任务一 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var taskInfo = taskList.MaxBy(x => x.Item2.Entity.Code.ToShort()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var task = taskInfo.Item1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var dev = taskInfo.Item2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var addrTo = task.AddrTo.Split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.TaskNumber1 = task.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SLine1 = dev.Entity.Code.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SCol1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SLayer1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SDepth1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.ELine1 = addrTo[0].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.ECol1 = addrTo[1].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.ELayer1 = addrTo[2].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.EDepth1 = addrTo[3].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    //下发任务二 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    taskInfo = taskList.MinBy(x => x.Item2.Entity.Code.ToShort()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    task = taskInfo.Item1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    dev = taskInfo.Item2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    addrTo = task.AddrTo.Split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.TaskNumber2 = task.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SLine2 = dev.Entity.Code.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SCol2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SLayer2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SDepth2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.ELine2 = addrTo[0].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.ECol2 = addrTo[1].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.ELayer2 = addrTo[2].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.EDepth2 = addrTo[3].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.TaskSum = taskList.Count.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.GoodsType = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.TaskType = 3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.VoucherNo++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else  //如果只有一个任务,固定下发至一号工位 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var task = taskList.FirstOrDefault().Item1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var dev = taskList.FirstOrDefault().Item2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var addrTo = task.AddrTo.Split("-"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    //下发任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.TaskNumber1 = task.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SLine1 = dev.Entity.Code.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SCol1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SLayer1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SDepth1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.ELine1 = addrTo[0].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.ECol1 = addrTo[1].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.ELayer1 = addrTo[2].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.EDepth1 = addrTo[3].ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.TaskNumber2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SLine2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SCol2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SLayer2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.SDepth2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.ELine2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.ECol2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.ELayer2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.EDepth2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.TaskSum = taskList.Count.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.GoodsType = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.TaskType = 3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    obj.Data.VoucherNo++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    case 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        var task = taskList.FirstOrDefault().Item1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        var dev = taskList.FirstOrDefault().Item2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //下发任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.TaskNumber1 = task.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SLine1 = dev.Entity.Code.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SCol1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SLayer1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SDepth1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.ELine1 = task.Line.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.ECol1 = task.Col.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.ELayer1 = task.Layer.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.EDepth1 = task.Depth.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.TaskNumber2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SLine2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SCol2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SLayer2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SDepth2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.ELine2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.ECol2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.ELayer2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.EDepth2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.TaskSum = taskList.Count.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.GoodsType = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.TaskType = 3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.VoucherNo++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    case 2: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //一工位取深度较大的任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        var taskInfo = taskList.MaxBy(x => x.Item1.Depth); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task = taskInfo.Item1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        dev = taskInfo.Item2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.TaskNumber1 = task.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SLine1 = dev.Entity.Code.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SCol1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SLayer1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SDepth1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.ELine1 = task.Line.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.ECol1 = task.Col.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.ELayer1 = task.Layer.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.EDepth1 = task.Depth.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //二工位取深度较少的值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        taskInfo = taskList.MinBy(x => x.Item1.Depth); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task = taskInfo.Item1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        dev = taskInfo.Item2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.TaskNumber2 = task.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SLine2 = dev.Entity.Code.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SCol2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SLayer2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.SDepth2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.ELine2 = task.Line.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.ECol2 = task.Col.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.ELayer2 = task.Layer.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.EDepth2 = task.Depth.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.TaskSum = taskList.Count.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.GoodsType = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.TaskType = 3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        obj.Data.VoucherNo++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        throw new KnownException($"无法执行多个任务", LogLevelEnum.Mid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             else if (!lastIsOut) //出库任务 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -261,11 +267,10 @@ namespace WCS.WorkEngineering.Systems 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 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 == Entity.TaskStatus.WaitingToExecute) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                                          .Where(v => allOutCode.Contains(v.SrmStation)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                                          .OrderByDescending(v => v.Priority) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                                         .OrderByDescending(v => v.Floor == floor ? 1 : 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                                          .OrderBy(v => v.AddTime) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                                          .First() ?? throw new KnownException($"{obj.Entity.Code}未找到出库任务", LogLevelEnum.High); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |