桁架.cs 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. using ServiceCenter.Extensions;
  2. using ServiceCenter.Logs;
  3. using ServiceCenter.SqlSugars;
  4. using System.ComponentModel;
  5. using WCS.Core;
  6. using WCS.Entity;
  7. using WCS.Entity.Protocol.Station;
  8. using WCS.Entity.Protocol.Truss;
  9. using WCS.WorkEngineering.Extensions;
  10. using WCS.WorkEngineering.Worlds;
  11. using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
  12. namespace WCS.WorkEngineering.Systems
  13. {
  14. /// <summary>
  15. /// 桁架
  16. /// </summary>
  17. [BelongTo(typeof(SortingPalletizingWorld))]
  18. [Description("桁架")]
  19. public class 桁架 : DeviceSystem<Truss>
  20. {
  21. protected override bool ParallelDo => true;
  22. protected override bool SaveLogsToFile => true;
  23. /// <summary>
  24. /// 取货点设备集合
  25. /// </summary>
  26. private readonly Dictionary<Device<IStation524, IStation523>, List<Device<IStation524, IStation523>>> _pickUpDevices = new();
  27. public override void Do(Truss obj)
  28. {
  29. if (obj.Data.VoucherNo != obj.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{obj.Data.VoucherNo}-DB521:{obj.Data2.VoucherNo}", LogLevelEnum.High);
  30. if (obj.Data2.CmdType == 1)
  31. {
  32. SqlSugarHelper.Do(_db =>
  33. {
  34. var db = _db.Default;
  35. List<int> ids = new List<int>() { obj.Data2.PalletizingRowId1, obj.Data2.PalletizingRowId2 };
  36. var palletizingRow = db.Queryable<WCS_PalletizingRow>().Includes(x => x.CacheLine, c => c.Locations).Includes(x => x.Locs).Where(x => ids.Contains(x.Id)).ToList();
  37. //更新行数据
  38. foreach (var pr in palletizingRow)
  39. {
  40. var cacheLine = db.Queryable<WCS_CacheLine>().Includes(x => x.Locations).Single(x => x.Id == pr.CacheLine.Id);
  41. //先更新对应的位信息
  42. try
  43. {
  44. var index = 0;
  45. foreach (var loc in pr.Locs.Where(x => !x.IsEmpty).OrderBy(x => x.XYNo))
  46. {
  47. var cacheLoc = cacheLine.Locations[index];
  48. cacheLoc = db.Queryable<WCS_CacheLineLoc>().Single(x => x.Id == cacheLoc.Id);
  49. loc.TaskId = cacheLoc.TaskId;
  50. loc.Finish = true;
  51. db.Updateable(loc).ExecuteCommand();
  52. db.Deleteable(cacheLoc);
  53. index++;
  54. }
  55. }
  56. catch (Exception a)
  57. {
  58. Console.WriteLine(a);
  59. throw;
  60. }
  61. pr.Finish = true;
  62. db.Updateable(pr).ExecuteCommand();
  63. db.Deleteable(cacheLine).ExecuteCommand();
  64. }
  65. //更新层数据
  66. var layerId = palletizingRow.FirstOrDefault().PalletizingLayerId;
  67. var layer = db.Queryable<WCS_PalletizingLayer>().Includes(x => x.Rows).Single(x => x.Id == layerId);
  68. if (!layer.Rows.All(x => x.Finish)) return;
  69. layer.Finish = true;
  70. db.Updateable(layer).ExecuteCommand();
  71. });
  72. obj.Data.CmdType = 1;
  73. obj.Data.DestPosition_1 = 0;
  74. obj.Data.TargetPallte1 = 0;
  75. obj.Data.Task1_1 = 0;
  76. obj.Data.Dest1_1 = 0;
  77. obj.Data.Task1_2 = 0;
  78. obj.Data.Dest1_2 = 0;
  79. obj.Data.Task1_3 = 0;
  80. obj.Data.Dest1_3 = 0;
  81. obj.Data.Task1_4 = 0;
  82. obj.Data.Dest1_4 = 0;
  83. obj.Data.Task1_5 = 0;
  84. obj.Data.Dest1_5 = 0;
  85. obj.Data.TaskSum1 = 0;
  86. obj.Data.PalletizingRowId1 = 0;
  87. obj.Data.DestPosition_2 = 0;
  88. obj.Data.TargetPallte2 = 0;
  89. obj.Data.Task2_1 = 0;
  90. obj.Data.Dest2_1 = 0;
  91. obj.Data.Task2_2 = 0;
  92. obj.Data.Dest2_2 = 0;
  93. obj.Data.Task2_3 = 0;
  94. obj.Data.Dest2_3 = 0;
  95. obj.Data.Task2_4 = 0;
  96. obj.Data.Dest2_4 = 0;
  97. obj.Data.Task2_5 = 0;
  98. obj.Data.Dest2_5 = 0;
  99. obj.Data.TaskSum2 = 0;
  100. obj.Data.PalletizingRowId2 = 0;
  101. }
  102. if (obj.Data2.CmdType == 0) obj.Data.CmdType = 0;
  103. if (obj.Data2.CmdType != 0 || obj.Data.CmdType != 0) return;
  104. if (obj.Data2.Status != TrussStatus.Idle) throw new Exception($"桁架处于{obj.Data2.Status.GetDescription()}");
  105. //查找所有的可用开始搬运的线体
  106. var pickUpDevices = _pickUpDevices.Where(v => v.Value.All(x => !x.Data2.Status.HasFlag(StationStatus.Run) && x.Data2.Status.HasFlag(StationStatus.Auto)))
  107. .Select(x => new
  108. {
  109. key = x.Key.Entity.Code,
  110. Count = x.Value.Count(v => v.Data2.Status.HasFlag(StationStatus.PH_Status) && v.Data.TaskNumber > 0),
  111. Dev = x
  112. }).ToList();
  113. if (!pickUpDevices.Any()) throw new KnownException($"没有可用取货点,请在电控触摸屏检查实际可取货点是否每个位置都有光电与任务号", LogLevelEnum.Mid);
  114. List<WCS_PalletizingRow> palletizingRowList = null;
  115. WCS_Palletizing palletizing = null;
  116. SqlSugarHelper.Do(_db =>
  117. {
  118. var db = _db.Default;
  119. //找到当前桁架所属所有还有层没结束的码垛记录信息,有对应托盘
  120. var palletizingLsit = db.Queryable<WCS_Palletizing>().Includes(x => x.Layers, r => r.Rows, l => l.Locs)
  121. .Where(x => !x.Finish && x.DeviceCode == obj.Entity.Code)
  122. .Where(x => x.Layers.Any(l => !l.Finish) && x.PalletizingStation != null).ToList();
  123. //筛选出目标位置有光电的码垛记录信息
  124. var devCode = palletizingLsit.Select(x => x.PalletizingStation);
  125. var devList = Device.All.Where(x => devCode.Contains(x.Code)).Select(x => new Device<IStation520, IStation521, IStation523>(x, World)).ToList();
  126. devList = devList.Where(x => x.Data3.Status.HasFlag(StationStatus.PH_Status)).ToList();
  127. devCode = devList.Select(x => x.Entity.Code);
  128. if (!devCode.Any()) throw new KnownException($"无可用放货码垛位,请检查实际有货位置的光电是否正常", LogLevelEnum.Mid);
  129. palletizingLsit = palletizingLsit.Where(x => devCode.Contains(x.PalletizingStation)).ToList(); //可以放货的目标托盘
  130. //可以取货的码垛信息
  131. var pickUpCode = _pickUpDevices.Select(x => x.Key.Entity.Code.ToShort());
  132. //从缓存线信息找到可以取货的缓存线
  133. var cacheLines = db.Queryable<WCS_CacheLine>().Where(x => pickUpCode.Contains(x.LocationNo)).ToList().Where(
  134. x =>
  135. {
  136. return pickUpDevices.Any(p => p.key == x.LocationNo.ToString() && p.Count == x.Quantity);
  137. });
  138. //找到可用缓存线可以去的码垛信息
  139. palletizingLsit = palletizingLsit.Where(x => x.Layers
  140. .Where(w => !w.Finish)
  141. .SelectMany(w => w.Rows)
  142. .Where(v => !v.Finish).Any(w =>
  143. {
  144. return cacheLines.Any(a => a.MatCodeList == w.MatCodeList && a.Quantity == w.QtyMaxCount && a.WarehouseCode == w.WarehouseCode);
  145. })).ToList();
  146. if (!palletizingLsit.Any()) throw new KnownException($"没有可用取货点,码垛信息是否正常", LogLevelEnum.Mid);
  147. foreach (var palletizingInfo in palletizingLsit)
  148. {
  149. //已分配完成,或无信息。进入下一次迭代
  150. if (palletizingInfo == null || (palletizingRowList != null && palletizing != null)) continue;
  151. //筛选出已经预锁的行
  152. var palletizingRow = palletizingInfo.Layers
  153. .Where(x => x is { Finish: false, IsEmpty: false }) //不空且未结束的层
  154. .MinBy(x => x.LayerNo) //取最下层
  155. .Rows
  156. .Where(x => x is { Finish: false, IsEmpty: false, LineCode: null }) //不空且未结束的行
  157. .Where(x => cacheLines.Any(a => a.MatCodeList == x.MatCodeList && a.Quantity == x.QtyMaxCount && a.WarehouseCode == x.WarehouseCode)); //获取可以取货的码垛信息行
  158. //无可用行,进入下一次迭代
  159. if (!palletizingRow.Any()) continue;
  160. var rowIds = new List<int>();
  161. //跟据缓存信息找到对应的可用取货行
  162. var rowList = cacheLines.Select(x =>
  163. {
  164. var b = palletizingRow.Where(w => !rowIds.Contains(w.Id) && x.MatCodeList == w.MatCodeList && x.Quantity == w.QtyMaxCount && w.WarehouseCode == x.WarehouseCode).MinBy(o => o.RowNo);
  165. if (b != null)
  166. {
  167. rowIds.Add(b.Id);
  168. return new
  169. {
  170. CacheLineId = x.Id,
  171. RowId = b.Id,
  172. x.LocationNo,
  173. b.RowNo
  174. };
  175. }
  176. return new
  177. {
  178. CacheLineId = 0,
  179. RowId = 0,
  180. x.LocationNo,
  181. RowNo = 0
  182. };
  183. }).Where(x => x.CacheLineId != 0).OrderBy(x => x.RowNo).Take(2).ToList();
  184. //两个任务取货线体号相同时,只执行一个任务
  185. if (rowList.Count == 2 && rowList[0].LocationNo == rowList[1].LocationNo) rowList = rowList!.Take(1).ToList();
  186. //两个行号,差值大于一时,只执行一个任务
  187. if (rowList.Count == 2 && rowList[0].RowNo + 1 != rowList[1].RowNo) rowList = rowList!.Take(1).ToList();
  188. var palletizingRows = new List<WCS_PalletizingRow>();
  189. foreach (var row in rowList)
  190. {
  191. //锁定缓存线
  192. var cacheLine = db.Queryable<WCS_CacheLine>().Includes(x => x.Locations).Single(x => x.Id == row.CacheLineId);
  193. cacheLine.IsTruss = true;
  194. cacheLine.PalletizingRowId = row.RowId;
  195. db.Updateable(cacheLine).ExecuteCommand();
  196. //解锁原有码垛信息
  197. var oldRow = db.Queryable<WCS_PalletizingRow>().First(x => x.CacheLineId == row.CacheLineId);
  198. if (oldRow != null)
  199. {
  200. oldRow.CacheLineId = 0;
  201. oldRow.LineCode = null;
  202. db.Updateable(oldRow).ExecuteCommand();
  203. }
  204. //锁定现有码垛信息
  205. var wcsRow = db.Queryable<WCS_PalletizingRow>().Includes(x => x.Locs).First(x => x.Id == row.RowId);
  206. wcsRow.CacheLineId = row.CacheLineId;
  207. wcsRow.LineCode = row.LocationNo.ToString();
  208. db.Updateable(wcsRow).ExecuteCommand();
  209. palletizingRows.Add(wcsRow);
  210. }
  211. palletizingRowList = palletizingRows.OrderBy(x => x.RowNo).ToList();
  212. palletizing = palletizingInfo;
  213. }
  214. });
  215. if (palletizingRowList == null || !palletizingRowList.Any()) return;
  216. for (var i = 0; i < palletizingRowList.Count; i++)
  217. {
  218. var palletizingRow = palletizingRowList[i];
  219. var locs = palletizingRow.Locs.OrderBy(x => x.XYNo.ToInt()).ToArray();
  220. var devs = pickUpDevices.FirstOrDefault(x => x.key == palletizingRow.LineCode).Dev.Value
  221. .OrderBy(x => x.Entity.Code).ToArray();
  222. switch (i)
  223. {
  224. case 0:
  225. obj.Data.DestPosition_1 = palletizingRow.LineCode!.ToShort();
  226. obj.Data.TargetPallte1 = palletizing.PalletizingStation!.ToShort();
  227. if (locs.Length >= 1)
  228. {
  229. obj.Data.Task1_1 = devs[0].Data.TaskNumber;
  230. obj.Data.Dest1_1 = locs[0].XYNo.ToShort();
  231. }
  232. if (locs.Length >= 2)
  233. {
  234. obj.Data.Task1_2 = devs[1].Data.TaskNumber;
  235. obj.Data.Dest1_2 = locs[1].XYNo.ToShort();
  236. }
  237. if (locs.Length >= 3)
  238. {
  239. obj.Data.Task1_3 = devs[2].Data.TaskNumber;
  240. obj.Data.Dest1_3 = locs[2].XYNo.ToShort();
  241. }
  242. if (locs.Length >= 4)
  243. {
  244. obj.Data.Task1_4 = devs[3].Data.TaskNumber;
  245. obj.Data.Dest1_4 = locs[3].XYNo.ToShort();
  246. }
  247. if (locs.Length == 5)
  248. {
  249. obj.Data.Task1_5 = devs[4].Data.TaskNumber;
  250. obj.Data.Dest1_5 = locs[4].XYNo.ToShort();
  251. }
  252. obj.Data.TaskSum1 = palletizingRow.QtyMaxCount.ToShort();
  253. obj.Data.PalletizingRowId1 = palletizingRow.Id;
  254. break;
  255. case 1:
  256. obj.Data.DestPosition_2 = palletizingRow.LineCode!.ToShort();
  257. obj.Data.TargetPallte2 = palletizing.PalletizingStation!.ToShort();
  258. if (locs.Length >= 1)
  259. {
  260. obj.Data.Task2_1 = devs[0].Data.TaskNumber;
  261. obj.Data.Dest2_1 = locs[0].XYNo.ToShort();
  262. }
  263. if (locs.Length >= 2)
  264. {
  265. obj.Data.Task2_2 = devs[1].Data.TaskNumber;
  266. obj.Data.Dest2_2 = locs[1].XYNo.ToShort();
  267. }
  268. if (locs.Length >= 3)
  269. {
  270. obj.Data.Task2_3 = devs[2].Data.TaskNumber;
  271. obj.Data.Dest2_3 = locs[2].XYNo.ToShort();
  272. }
  273. if (locs.Length >= 4)
  274. {
  275. obj.Data.Task2_4 = devs[3].Data.TaskNumber;
  276. obj.Data.Dest2_4 = locs[3].XYNo.ToShort();
  277. }
  278. if (locs.Length == 5)
  279. {
  280. obj.Data.Task2_5 = devs[4].Data.TaskNumber;
  281. obj.Data.Dest2_5 = locs[4].XYNo.ToShort();
  282. }
  283. obj.Data.TaskSum2 = palletizingRow.QtyMaxCount.ToShort();
  284. obj.Data.PalletizingRowId2 = palletizingRow.Id;
  285. break;
  286. }
  287. }
  288. obj.Data.VoucherNo++;
  289. }
  290. public override bool Select(Device dev)
  291. {
  292. return dev.Code is /*"Truss1" or*/ "Truss2" or "Truss3";
  293. }
  294. public 桁架()
  295. {
  296. var trussList = Device.All.Where(x => x.HasFlag(DeviceFlags.桁架));
  297. foreach (var truss in trussList)
  298. {
  299. switch (truss.Code)
  300. {
  301. case "Truss1":
  302. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "461"), World), Device.All.Where(x => x.Code is "461" or "462" or "463" or "464" or "465").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  303. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "475"), World), Device.All.Where(x => x.Code is "475" or "476" or "477" or "478" or "479").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  304. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "489"), World), Device.All.Where(x => x.Code is "490" or "491" or "492" or "493" or "489").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  305. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "503"), World), Device.All.Where(x => x.Code is "503" or "504" or "505" or "506" or "507").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  306. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "517"), World), Device.All.Where(x => x.Code is "517" or "518" or "519" or "520" or "521").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  307. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "531"), World), Device.All.Where(x => x.Code is "532" or "533" or "534" or "535" or "531").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  308. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "545"), World), Device.All.Where(x => x.Code is "546" or "547" or "548" or "549" or "545").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  309. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "559"), World), Device.All.Where(x => x.Code is "559" or "560" or "561" or "562" or "563").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  310. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "573"), World), Device.All.Where(x => x.Code is "573" or "574" or "575" or "576" or "577").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  311. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "586"), World), Device.All.Where(x => x.Code is "586" or "587" or "588" or "589" or "590").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  312. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "661"), World), Device.All.Where(x => x.Code is "661" or "662" or "663" or "664" or "665").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  313. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "675"), World), Device.All.Where(x => x.Code is "675" or "676" or "677" or "678" or "679").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  314. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "689"), World), Device.All.Where(x => x.Code is "690" or "691" or "692" or "693" or "689").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  315. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "703"), World), Device.All.Where(x => x.Code is "703" or "704" or "705" or "706" or "707").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  316. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "717"), World), Device.All.Where(x => x.Code is "717" or "718" or "719" or "720" or "721").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  317. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "731"), World), Device.All.Where(x => x.Code is "732" or "733" or "734" or "735" or "731").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  318. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "745"), World), Device.All.Where(x => x.Code is "746" or "747" or "748" or "749" or "745").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  319. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "759"), World), Device.All.Where(x => x.Code is "759" or "760" or "761" or "762" or "763").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  320. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "773"), World), Device.All.Where(x => x.Code is "773" or "774" or "775" or "776" or "777").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  321. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "786"), World), Device.All.Where(x => x.Code is "786" or "787" or "788" or "789" or "790").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  322. break;
  323. case "Truss2":
  324. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "861"), World), Device.All.Where(x => x.Code is "861" or "862" or "863" or "864" or "865").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  325. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "875"), World), Device.All.Where(x => x.Code is "875" or "876" or "877" or "878" or "879").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  326. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "889"), World), Device.All.Where(x => x.Code is "890" or "891" or "892" or "893" or "889").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  327. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "903"), World), Device.All.Where(x => x.Code is "903" or "904" or "905" or "906" or "907").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  328. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "917"), World), Device.All.Where(x => x.Code is "917" or "918" or "919" or "920" or "921").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  329. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "931"), World), Device.All.Where(x => x.Code is "932" or "933" or "934" or "935" or "931").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  330. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "945"), World), Device.All.Where(x => x.Code is "946" or "947" or "948" or "949" or "945").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  331. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "959"), World), Device.All.Where(x => x.Code is "959" or "960" or "961" or "962" or "963").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  332. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "973"), World), Device.All.Where(x => x.Code is "973" or "974" or "975" or "976" or "977").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  333. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "986"), World), Device.All.Where(x => x.Code is "986" or "987" or "988" or "989" or "990").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  334. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1061"), World), Device.All.Where(x => x.Code is "1061" or "1062" or "1063" or "1064" or "1065").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  335. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1075"), World), Device.All.Where(x => x.Code is "1075" or "1076" or "1077" or "1078" or "1079").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  336. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1089"), World), Device.All.Where(x => x.Code is "1090" or "1091" or "1092" or "1093" or "1089").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  337. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1103"), World), Device.All.Where(x => x.Code is "1103" or "1104" or "1105" or "1106" or "1107").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  338. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1117"), World), Device.All.Where(x => x.Code is "1117" or "1118" or "1119" or "1120" or "1121").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  339. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1131"), World), Device.All.Where(x => x.Code is "1132" or "1133" or "1134" or "1135" or "1131").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  340. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1145"), World), Device.All.Where(x => x.Code is "1146" or "1147" or "1148" or "1149" or "1145").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  341. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1159"), World), Device.All.Where(x => x.Code is "1159" or "1160" or "1161" or "1162" or "1163").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  342. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1173"), World), Device.All.Where(x => x.Code is "1173" or "1174" or "1175" or "1176" or "1177").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  343. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1186"), World), Device.All.Where(x => x.Code is "1186" or "1187" or "1188" or "1189" or "1190").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  344. break;
  345. case "Truss3":
  346. //北
  347. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1261"), World), Device.All.Where(x => x.Code is "1261" or "1262" or "1263" or "1264" or "1265").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  348. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1275"), World), Device.All.Where(x => x.Code is "1275" or "1276" or "1277" or "1278" or "1279").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  349. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1289"), World), Device.All.Where(x => x.Code is "1290" or "1291" or "1292" or "1293" or "1289").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  350. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1303"), World), Device.All.Where(x => x.Code is "1303" or "1304" or "1305" or "1306" or "1307").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  351. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1317"), World), Device.All.Where(x => x.Code is "1317" or "1318" or "1319" or "1320" or "1321").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  352. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1331"), World), Device.All.Where(x => x.Code is "1332" or "1333" or "1334" or "1335" or "1331").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  353. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1345"), World), Device.All.Where(x => x.Code is "1346" or "1347" or "1348" or "1349" or "1345").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  354. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1359"), World), Device.All.Where(x => x.Code is "1359" or "1360" or "1361" or "1362" or "1363").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  355. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1373"), World), Device.All.Where(x => x.Code is "1373" or "1374" or "1375" or "1376" or "1377").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  356. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1386"), World), Device.All.Where(x => x.Code is "1386" or "1387" or "1388" or "1389" or "1390").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  357. //南
  358. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1461"), World), Device.All.Where(x => x.Code is "1461" or "1462" or "1463" or "1464" or "1465").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  359. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1475"), World), Device.All.Where(x => x.Code is "1475" or "1476" or "1477" or "1478" or "1479").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  360. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1489"), World), Device.All.Where(x => x.Code is "1490" or "1491" or "1492" or "1493" or "1489").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  361. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1503"), World), Device.All.Where(x => x.Code is "1503" or "1504" or "1505" or "1506" or "1507").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  362. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1517"), World), Device.All.Where(x => x.Code is "1517" or "1518" or "1519" or "1520" or "1521").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  363. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1531"), World), Device.All.Where(x => x.Code is "1532" or "1533" or "1534" or "1535" or "1531").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  364. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1545"), World), Device.All.Where(x => x.Code is "1546" or "1547" or "1548" or "1549" or "1545").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  365. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1559"), World), Device.All.Where(x => x.Code is "1559" or "1560" or "1561" or "1562" or "1563").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  366. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1573"), World), Device.All.Where(x => x.Code is "1573" or "1574" or "1575" or "1576" or "1577").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  367. _pickUpDevices.Add(new Device<IStation524, IStation523>(Device.All.First(x => x.Code == "1586"), World), Device.All.Where(x => x.Code is "1586" or "1587" or "1588" or "1589" or "1590").Select(x => new Device<IStation524, IStation523>(x, World)).ToList());
  368. break;
  369. }
  370. }
  371. }
  372. }
  373. }