| 
					
				 | 
			
			
				@@ -70,7 +70,7 @@ namespace WCS.Service.Works.Station 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         var msg = $"下达从{dev.Entity.CODE}移动至{next}的PLC指令。"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         msg += $"[{dev.Data.Tasknum}][{dev.Data.Goodsstart}][{dev.Data.Goodsend}][{dev.Data.VoucherNo}[{dev.Data2.VoucherNo}]"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        task.CreateStatusLog(db, msg, this.GetType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.CreateStatusLogAsync(msg, this.GetType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //两个任务一起创建 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     db.Default.SaveChanges(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -156,15 +156,14 @@ namespace WCS.Service.Works.Station 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                             rgvDeliveryPoint = Device.Where(v => v.IsConv() && v.ROUTES.Any(p => p.NEXT != null && turntable.Contains(p.NEXT.CODE))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      .Select(v => v.Create<StationDevice>()) //取所有可以到达取货点设备的信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      .Where(v => !v.Data3.Status.HasFlag(StationStatus.运行状态位) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                               && !v.Data2.Status.HasFlag(IstationStatus.光电状态) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                               && v.Data2.Tasknum < 10000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                               && v.Data3.Status.HasFlag(StationStatus.自动))//筛选出空闲的路径点,此处因输送机都是一个动力,因此可以先找路径点再找设备组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      .Distinct() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      .FirstOrDefault();//去一次重 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            rgvDeliveryPoint = Device.Where(v => v.IsConv() && v.ROUTES.Any(p => p.NEXT != null && turntable.Contains(p.NEXT.CODE))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     .Select(v => v.Create<StationDevice>()) //取所有可以到达取货点设备的信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     .Where(v => !v.Data3.Status.HasFlag(StationStatus.运行状态位) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                              && !v.Data2.Status.HasFlag(IstationStatus.光电状态) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                              && v.Data2.Tasknum < 10000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                              && v.Data3.Status.HasFlag(StationStatus.自动))//筛选出空闲的路径点,此处因输送机都是一个动力,因此可以先找路径点再找设备组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     .Distinct() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     .FirstOrDefault();//去一次重 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         if (rgvDeliveryPoint == null) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         var taskInStation = Device.Where(p => p.CODE.StartsWith("G") && p.DEVICEGROUP.Any(d => d.MEMBER == rgvDeliveryPoint.Entity)).MinBy(p => p.CODE); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -174,7 +173,7 @@ namespace WCS.Service.Works.Station 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         var rgvTaskCount = ProtocolProxy.YGWMS150Redis.Get("BoppRgvTaskCount").ToInt(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         if (rgvList.Count(v => (!v.Data2.SystemStatus.HasFlag(WCS.Entity.Protocol.RGV.RGVRunStatus.空闲) || !v.Data2.WorkMode.HasFlag(WCS.Entity.Protocol.RGV.RGVMode.自动)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                             && v.Data2.TaskType_1 == WCS.Entity.Protocol.RGV.RGVTaskType.放货 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                            && v.Data2.DestPosition_1 == taskInStation?.CODE.Replace("G", "").ToShort())>rgvTaskCount) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            && v.Data2.DestPosition_1 == taskInStation?.CODE.Replace("G", "").ToShort()) > rgvTaskCount) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         tunnelInfos.Add(new TunnelInfo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             Tunnel = item, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -201,7 +200,7 @@ namespace WCS.Service.Works.Station 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         task.ADDRTO = task.DEVICE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         var msg = $"下达从G23移动至{dev.Data.Goodsend}的PLC指令。同时将任务分配至[{task.TUNNEL}]-[{task.DEVICE}]"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         msg += $"[{dev.Data.Tasknum}][G23][{dev.Data.Goodsend}][{tunnelInfo.SRM.Entity.CODE}][{dev.Data.VoucherNo}[{dev.Data2.VoucherNo}]"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        task.CreateStatusLog(db, msg, this.GetType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.CreateStatusLogAsync(msg, this.GetType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         finishTaskList.Add(new FinishTaskList<int>(task.ID, item.Station)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     db.Default.SaveChanges(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -267,7 +266,6 @@ namespace WCS.Service.Works.Station 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     var setting = new JsonSerializerSettings(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     setting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     setting.PreserveReferencesHandling = PreserveReferencesHandling.Objects; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    code.infolog($"{res.WMSTaskGroupKey}第二次分配:WMS返回{JsonConvert.SerializeObject(tunnelNo, setting)}。"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     foreach (var item in tunnels) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         //当前巷道的取货点 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -275,16 +273,13 @@ namespace WCS.Service.Works.Station 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                           .Where(v => v.ROUTES.Any(p => p.NEXT.CODE == item.CODE)) //下一个点为当前巷道的取货点 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                           .Select(v => v.CODE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                           .ToList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        code.infolog($"allIn:{JsonConvert.SerializeObject(allIn, setting)};item:{item.CODE}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         //下一个目标地址包含取货点的设备,此时获得的数据是旋转台 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         var turntable = Device.Where(v => v.IsConv() && v.ROUTES.Any(p => p.NEXT != null && allIn.Contains(p.NEXT.CODE))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                               .Where(v => stationDeviceGroup.Items.Any(p => p.Entity == v))// 筛选出包含在当前设备组的设备 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                               .Distinct() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                               .FirstOrDefault();//去一次重 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         if (turntable == null) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        code.infolog($"turntable:{turntable.CODE};item:{item.CODE}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         var dev = Device.Where(p => p.CODE.StartsWith("G") && p.DEVICEGROUP.Any(d => allIn.Contains(d.MEMBER.CODE))).MinBy(p => p.CODE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        code.infolog($"dev:{dev.CODE};item:{item.CODE}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         tunnelInfos.Add(new TunnelInfo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             Tunnel = item, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -292,21 +287,16 @@ namespace WCS.Service.Works.Station 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             SRM = Device.Where(p => p.IsSC()).FirstOrDefault(p => item.ROUTES.Any(d => d.NEXT.CODE == p.CODE)).Create<SRMDevice>() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    code.infolog($"tunnelInfo:{JsonConvert.SerializeObject(tunnelInfos.Select(v => new { taskIN = v.taskIN.CODE, Tunnel = v.Tunnel.CODE, SRM = v.SRM.Entity.CODE }), setting)};"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //筛选出优先级最高的可用巷道 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     var tunnelInfo = tunnelInfos.Where(v => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            code.infolog($"SCAlarm:{v.SRM.Data3.SCAlarm};SRMMode:{v.SRM.Data2.SRMMode};SRMStatus:{v.SRM.Data2.SRMStatus};CODE:{v.SRM.Entity.CODE}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            return (v.SRM.Data3.SCAlarm == 0 && v.SRM.Data2.SRMMode == SCMode.远程 && v.SRM.Data2.SRMStatus == SCRunStatus.空闲)||v.SRM.Entity.CODE=="SRM1" || v.SRM.Entity.CODE == "SRM2"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            return (v.SRM.Data3.SCAlarm == 0 && v.SRM.Data2.SRMMode == SCMode.远程 && v.SRM.Data2.SRMStatus == SCRunStatus.空闲) || v.SRM.Entity.CODE == "SRM1" || v.SRM.Entity.CODE == "SRM2"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         catch { return false; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     }).MinBy(v => tunnelNo.IndexOf(v.Tunnel.CODE)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (tunnelInfo == null) throw new WarnException("无可用巷道"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    code.infolog($"tunnelNo:{JsonConvert.SerializeObject(tunnelNo, setting)}。"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    code.infolog($"tunnelInfo:{JsonConvert.SerializeObject(new { taskIN = tunnelInfo.taskIN.CODE, Tunnel = tunnelInfo.Tunnel.CODE, SRM = tunnelInfo.SRM.Entity.CODE }, setting)};"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    code.infolog($"{res.WMSTaskGroupKey}第二次分配:WCS选择{tunnelInfo.Tunnel.CODE}。"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //开始变更任务信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     foreach (var item in devise) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -322,7 +312,7 @@ namespace WCS.Service.Works.Station 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         task.ADDRTO = task.DEVICE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         var msg = $"下达从{stationDeviceGroup.Entity.CODE}移动至{dev.Data.Goodsend}的PLC指令。同时将任务分配至[{task.TUNNEL}]-[{task.DEVICE}]"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         msg += $"[{dev.Data.Tasknum}][{stationDeviceGroup.Entity.CODE}][{dev.Data.Goodsend}][{tunnelInfo.SRM.Entity.CODE}][{dev.Data.VoucherNo}[{dev.Data2.VoucherNo}]"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        task.CreateStatusLog(db, msg, GetType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        task.CreateStatusLogAsync(msg, GetType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         finishTaskList.Add(new FinishTaskList<int>(task.ID, item.Station)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     db.Default.SaveChanges(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -342,7 +332,6 @@ namespace WCS.Service.Works.Station 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         finishTask.Station.Data.Goodsnum = finishTaskList.Count.ToShort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         finishTask.Station.Data.CmdType = IstationCmdType.分配目标地址; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         finishTask.Station.Data.VoucherNo++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        code.infolog($"{task.TaskGroupKey}第二次分配:WCS目标地址{finishTask.Station.Data.Goodsend}。"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 |