WCSApi.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629
  1. using DBHelper;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.EntityFrameworkCore;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using WCS.Core;
  8. using WCS.Entity;
  9. using WCS.Entity.Protocol;
  10. using WCS.Service.Entity;
  11. using WCS.Service.WebApi.ViewModels;
  12. namespace WCS.Service.WebApi
  13. {
  14. [ApiController]
  15. [Route("[controller]/[action]")]
  16. public class WCSApi : ControllerBase
  17. {
  18. [HttpPost]
  19. public WcsContractApiResponse I_WMS_CreateTasks(List<PushCreateWcsTaskRequest> list)
  20. {
  21. var res = new WcsContractApiResponse();
  22. try
  23. {
  24. DB.Do(db =>
  25. {
  26. foreach (var obj in list)
  27. {
  28. if (obj.TaskType == "3")//移库任务
  29. {
  30. var wmstaskid = int.Parse(obj.WMSTaskNo);
  31. if (db.Default.Set<WCS_TASK>().Any(v => v.WMSTASK == wmstaskid))
  32. throw new Exception("任务号" + wmstaskid + "重复下发");
  33. var scid = int.Parse(obj.SRMNo.Last().ToString());
  34. var tunnel = (scid > 3 ? "TM" : "TY") + obj.StartTunnel;
  35. var task = new WCS_TASK
  36. {
  37. TYPE = TaskType.移库,
  38. STATUS = WCS.Entity.TaskStatus.新建,
  39. DEVICE = "SC" + obj.SRMNo.Last(),
  40. BARCODE = obj.PalletCode,
  41. ADDRFROM = obj.StartLocation,
  42. ADDRTO = obj.EndLocation,
  43. UPDATETIME = DateTime.Now,
  44. UPDATEUSER = "WMS",
  45. TUNNEL = tunnel,
  46. WMSTASK = int.Parse(obj.WMSTaskNo),
  47. };
  48. db.Default.Add(task);
  49. db.Default.SaveChanges();
  50. //task.CreateStatusLog(db);
  51. }
  52. else if (obj.TaskType == "2")
  53. { //出库任务
  54. var wmstaskid = int.Parse(obj.WMSTaskNo);
  55. if (db.Default.Set<WCS_TASK>().Any(v => v.WMSTASK == wmstaskid))
  56. throw new Exception("任务号" + wmstaskid + "重复下发");
  57. var scid = int.Parse(obj.SRMNo.Last().ToString());
  58. var tunnel = (scid > 3 ? "TM" : "TY") + obj.StartTunnel;
  59. var task = new WCS_TASK
  60. {
  61. TYPE = TaskType.出库,
  62. STATUS = WCS.Entity.TaskStatus.新建,
  63. DEVICE = "SC" + obj.SRMNo.Last(),
  64. BARCODE = obj.PalletCode,
  65. ADDRFROM = string.Format("{0}-{1}-{2}", obj.StartRow, obj.StartCol, obj.StartLayer),
  66. ADDRTO = obj.EndLocation,
  67. UPDATETIME = DateTime.Now,
  68. UPDATEUSER = "WMS",
  69. TUNNEL = tunnel,
  70. WMSTASK = int.Parse(obj.WMSTaskNo),
  71. ADDRNEXT = obj.EndLocation
  72. };
  73. if (task.ADDRTO == "2122")
  74. task.ADDRNEXT = "2108";
  75. else if (task.ADDRTO == "2131")
  76. task.ADDRNEXT = "2366";
  77. else if (task.ADDRTO == "2143")
  78. task.ADDRNEXT = "2385";
  79. else if (task.ADDRTO == "2086")
  80. task.ADDRNEXT = "2325";
  81. else if (task.ADDRTO == "3001")
  82. task.ADDRNEXT = "3045";
  83. if (task.ADDRTO == "3001")
  84. {
  85. var next = Device.Find(tunnel).GetNext(task.ADDRNEXT);
  86. if (next == null)
  87. throw new Exception("创建失败");
  88. task.SCSTATION = next.CODE;
  89. db.Default.Add(task);
  90. db.Default.SaveChanges();
  91. }
  92. else
  93. {
  94. var next = Device.Find(tunnel).GetNext(task.ADDRTO);
  95. if (next == null)
  96. throw new Exception("创建失败");
  97. task.SCSTATION = next.CODE;
  98. db.Default.Add(task);
  99. db.Default.SaveChanges();
  100. }
  101. //task.CreateStatusLog(db);
  102. }
  103. else if (obj.TaskType == "1")
  104. {//入库任务
  105. var wmstaskid = int.Parse(obj.WMSTaskNo);
  106. if (db.Default.Set<WCS_TASK>().Any(v => v.WMSTASK == wmstaskid))
  107. throw new Exception("任务号" + wmstaskid + "重复下发");
  108. if (obj.StartLocation.Contains("_Back_"))
  109. {//生成AGV入库任务
  110. var ws = int.Parse(obj.StartLocation.Split('_')[1]);
  111. var agvtask = new WCS_AGVTask
  112. {
  113. AGVStatus = AGVTaskStatus.新建,
  114. Status = AGVTaskStatus.新建,
  115. Position = obj.StartLocation,
  116. TaskType = AGVTaskType.入库,
  117. CreateTime = DateTime.Now,
  118. UpdateTime = DateTime.Now,
  119. Workshop = ws,
  120. };
  121. if (ws == 13 || ws == 14)
  122. {
  123. agvtask.Station = "2088";
  124. agvtask.Workshop = 1314;
  125. }
  126. else if (ws == 1)
  127. {
  128. agvtask.Station = "2122";
  129. }
  130. else if (ws == 2)
  131. agvtask.Station = "2131";
  132. else if (ws == 3)
  133. agvtask.Station = "2143";
  134. db.Default.Set<WCS_AGVTask>().Add(agvtask);
  135. db.Default.SaveChanges();
  136. }
  137. else
  138. {
  139. var task = new WCS_TASK
  140. {
  141. TYPE = TaskType.入库,
  142. STATUS = WCS.Entity.TaskStatus.新建,
  143. BARCODE = obj.PalletCode,
  144. ADDRFROM = obj.StartLocation,
  145. ADDRTO = obj.EndLocation,
  146. UPDATETIME = DateTime.Now,
  147. UPDATEUSER = "WMS",
  148. WMSTASK = int.Parse(obj.WMSTaskNo)
  149. };
  150. db.Default.Add(task);
  151. db.Default.SaveChanges();
  152. //task.CreateStatusLog(db);
  153. }
  154. }
  155. }
  156. });
  157. res.ResType = true;
  158. }
  159. catch (Exception ex)
  160. {
  161. res.ResMessage = ex.GetBaseException().Message;
  162. }
  163. return res;
  164. }
  165. [HttpPost]
  166. public WcsContractApiResponse I_WMS_CreateAGVTask(PushCreateAGVTaskRequest obj)
  167. {
  168. var res = new WcsContractApiResponse();
  169. try
  170. {
  171. DB.Do(db =>
  172. {
  173. if (obj.Type == 1)
  174. {
  175. var ws = int.Parse(obj.StartPos.Split('_')[1]);
  176. var agvtask = new WCS_AGVTask
  177. {
  178. AGVStatus = AGVTaskStatus.新建,
  179. Status = AGVTaskStatus.新建,
  180. Position = obj.StartPos,
  181. TaskType = AGVTaskType.入库,
  182. CreateTime = DateTime.Now,
  183. UpdateTime = DateTime.Now,
  184. Workshop = ws,
  185. };
  186. if (ws == 13 || ws == 14)
  187. {
  188. agvtask.Station = "2088";
  189. agvtask.Workshop = 1314;
  190. }
  191. else if (ws == 1)
  192. {
  193. agvtask.Station = "2122";
  194. }
  195. else if (ws == 2)
  196. agvtask.Station = "2131";
  197. else if (ws == 3)
  198. agvtask.Station = "2143";
  199. db.Default.Set<WCS_AGVTask>().Add(agvtask);
  200. db.Default.SaveChanges();
  201. }
  202. else
  203. throw new Exception($"类型{obj.Type}不支持");
  204. });
  205. res.ResType = true;
  206. }
  207. catch (Exception ex)
  208. {
  209. res.ResMessage = ex.GetBaseException().Message;
  210. }
  211. return res;
  212. }
  213. [HttpPost]
  214. public WcsContractApiResponse I_CancelWCSTaskByCode(string code)
  215. {
  216. var res = new WcsContractApiResponse();
  217. try
  218. {
  219. DB.Do(db =>
  220. {
  221. var task = db.Default.Set<WCS_TASK>().Where(v => v.BARCODE == code && v.STATUS < WCS.Entity.TaskStatus.已完成 && v.TYPE == TaskType.组盘).FirstOrDefault();
  222. if (task == null)
  223. throw new Exception("WCS任务不存在");
  224. task.STATUS = WCS.Entity.TaskStatus.已取消;
  225. task.UPDATETIME = DateTime.Now;
  226. task.UPDATEUSER = "RF";
  227. db.Default.SaveChanges();
  228. });
  229. res.ResType = true;
  230. }
  231. catch (Exception ex)
  232. {
  233. res.ResMessage = ex.GetBaseException().Message;
  234. }
  235. return res;
  236. }
  237. [HttpPost]
  238. public WcsContractApiResponse I_CancelWCSTaskByID(int wmstaskId)
  239. {
  240. var res = new WcsContractApiResponse();
  241. try
  242. {
  243. DB.Do(db =>
  244. {
  245. var task = db.Default.Set<WCS_TASK>().Where(v => v.WMSTASK == wmstaskId).FirstOrDefault();
  246. if (task == null)
  247. throw new Exception("WCS任务不存在");
  248. if (task.STATUS != WCS.Entity.TaskStatus.新建)
  249. throw new Exception("WCS任务当前状态不允许取消");
  250. task.STATUS = WCS.Entity.TaskStatus.已取消;
  251. task.UPDATETIME = DateTime.Now;
  252. task.UPDATEUSER = "WMS";
  253. db.Default.SaveChanges();
  254. if (task.TYPE == TaskType.出库 && task.AgvTask > 0)
  255. {
  256. var agvtask = db.Default.Set<WCS_AGVTask>().Find(task.AgvTask);
  257. agvtask.Status = AGVTaskStatus.取消;
  258. agvtask.UpdateTime = DateTime.Now;
  259. db.Default.SaveChanges();
  260. }
  261. });
  262. res.ResType = true;
  263. }
  264. catch (Exception ex)
  265. {
  266. res.ResMessage = ex.GetBaseException().Message;
  267. }
  268. return res;
  269. }
  270. /// <summary>
  271. /// WMS 通过该接口获取码垛位当前各位置对应的托盘码
  272. /// </summary>
  273. /// <returns></returns>
  274. [HttpGet]
  275. public List<KeyValueViewModel<string, string>> I_WMS_GetPalletCode()
  276. {
  277. //找出所有组盘站台信息
  278. var station = Device.Where(v => v.Is(DF.组盘)).ToList();
  279. //找出所有有光电信号站台中的任务号
  280. var taskNumbers = station.Select(v => v.Device<IStation521, IStation520>())
  281. .Where(p => p.Data.TASKNUM != 0 && p.Data.PH_STATUS)
  282. .Select(p => p.Data.TASKNUM);
  283. var result = new List<KeyValueViewModel<string, string>>();
  284. DB.Do(db =>
  285. {
  286. //找到有光电的位置对应的任务
  287. var tasks = db.Default.Set<WCS_TASK>().AsNoTracking().Where(task => taskNumbers.Any(x => task.ID == x)).ToList();
  288. station.ForEach(p =>
  289. {
  290. var value = tasks.FirstOrDefault(task => task.ADDRTO == p.CODE);
  291. result.Add(new KeyValueViewModel<string, string>()
  292. {
  293. Key = p.CODE,
  294. Value = value == null ? null : value.BARCODE,
  295. });
  296. });
  297. });
  298. return result;
  299. }
  300. /// <summary>
  301. /// 通过该接口获取指定条件设备信息
  302. /// </summary>
  303. /// <param name="model">筛选条件</param>
  304. /// <returns></returns>
  305. [HttpPost]
  306. public List<DeviceStatusViewModel> GetDeviceStatus([FromQuery] DeviceStatusViewModel model)
  307. {
  308. var result = new List<DeviceStatusViewModel>();
  309. //找到所有设备的读取协议
  310. var rgv = Device.Where(v => v.IsRGV()).Select(v => v.Device<IRGV521>());
  311. var sc = Device.Where(v => v.IsSC()).Select(v => v.Device<ISC521>());
  312. var conv = Device.Where(v => v.IsConv()).Select(v => v.Device<IStation521>());
  313. var robot = Device.Where(v => v.IsRobot()).Select(v => v.Device<IRobot>());
  314. #region 检索分两部分,设备、任务(数据库)
  315. #region 设备信息
  316. if (!string.IsNullOrEmpty(model.CODE))
  317. {
  318. result.AddRange(GetDeviceStatusWhere(rgv, v => v.Entity.CODE == model.CODE));
  319. result.AddRange(GetDeviceStatusWhere(sc, v => v.Entity.CODE == model.CODE));
  320. result.AddRange(GetDeviceStatusWhere(conv, v => v.Entity.CODE == model.CODE));
  321. result.AddRange(GetDeviceStatusWhere(robot, v => v.Entity.CODE == model.CODE));
  322. }
  323. if (model.TASKNUM > 10000)
  324. {
  325. result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID == model.TASKNUM));
  326. result.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID == model.TASKNUM));
  327. result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.TASKNUM == model.TASKNUM));
  328. result.AddRange(GetDeviceStatusWhere(robot, v => v.Data.TaskID == model.TASKNUM));
  329. }
  330. if (model.REQUEST != null)
  331. {
  332. result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.REQUEST == model.REQUEST));
  333. }
  334. if (model.PH_STATUS != null)
  335. {
  336. result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID == model.TASKNUM));
  337. result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.REQUEST == model.REQUEST));
  338. }
  339. if (!string.IsNullOrEmpty(model.ADDRFROM))
  340. {
  341. result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.StartPosition == short.Parse(model.ADDRFROM)));
  342. result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRFROM.Contains(v.Data.SLine.ToString())
  343. || model.ADDRFROM.Contains(v.Data.SCol.ToString())
  344. || model.ADDRFROM.Contains(v.Data.SLayer.ToString())));
  345. }
  346. if (!string.IsNullOrEmpty(model.ADDRTO))
  347. {
  348. result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.DestPosition == short.Parse(model.ADDRTO)));
  349. result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRTO.Contains(v.Data.ELine.ToString())
  350. || model.ADDRTO.Contains(v.Data.ECol.ToString())
  351. || model.ADDRTO.Contains(v.Data.ELayer.ToString())));
  352. result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.GOODSEND == short.Parse(model.ADDRTO)));
  353. result.AddRange(GetDeviceStatusWhere(robot, v => v.Data.Target == short.Parse(model.ADDRTO)));
  354. }
  355. #endregion 设备信息
  356. #region 任务信息
  357. //获取所有设备上的任务信息
  358. if (model.TYPE != null || !string.IsNullOrEmpty(model.BARCODE))
  359. {
  360. var info = new List<DeviceStatusViewModel>();
  361. var ids = result.Select(v => v.TASKNUM);
  362. info.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID > 10000));
  363. info.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID > 10000));
  364. info.AddRange(GetDeviceStatusWhere(conv, v => v.Data.TASKNUM > 10000));
  365. info.AddRange(GetDeviceStatusWhere(robot, v => v.Data.TaskID > 10000));
  366. result.AddRange(info.Where(v => !ids.Any(b => b == v.TASKNUM)));
  367. }
  368. DB.Do(db =>
  369. {
  370. var ids = result.Select(v => v.TASKNUM);
  371. var tasks = db.Default.Set<WCS_TASK>().AsNoTracking().Where(v => ids.Any(b => b == v.ID)).ToList();
  372. tasks.ForEach(task =>
  373. {
  374. var info = result.Find(v => v.TASKNUM == task.ID);
  375. info.TYPE = task.TYPE;
  376. info.BARCODE = task.BARCODE;
  377. });
  378. });
  379. if (model.TYPE != null)
  380. {
  381. result = result.Where(v => v.TYPE == model.TYPE).ToList();
  382. }
  383. if (!string.IsNullOrEmpty(model.BARCODE))
  384. {
  385. result = result.Where(v => v.BARCODE != null && v.BARCODE.Contains(model.BARCODE)).ToList();
  386. }
  387. #endregion 任务信息
  388. #endregion 检索分两部分,设备、任务(数据库)
  389. return result;
  390. }
  391. /// <summary>
  392. /// 通过该接口获取wcs报警信息
  393. /// </summary>
  394. /// <param name="query"></param>
  395. /// <returns></returns>
  396. [HttpPost]
  397. public List<V_WCSALARM> GetWcsAlarms(ALARMQUERY query)
  398. {
  399. var wcsAlarms = new List<V_WCSALARM>();
  400. query.EQUNO = String.IsNullOrEmpty(query.EQUNO) ? "" : query.EQUNO;
  401. query.ALARMFUNC = String.IsNullOrEmpty(query.ALARMFUNC) ? "" : query.ALARMFUNC;
  402. query.ALARMS = String.IsNullOrEmpty(query.ALARMS) ? "" : query.ALARMS;
  403. query.ALARMTYPE = String.IsNullOrEmpty(query.ALARMTYPE) ? "" : query.ALARMTYPE;
  404. query.WCSTASKNO = String.IsNullOrEmpty(query.WCSTASKNO) ? "" : query.WCSTASKNO;
  405. try
  406. {
  407. DB.Do(db =>
  408. {
  409. var scAlarms = db.Default.Set<WCS_SC537>()
  410. .Where(v => "设备报警".Contains(query.ALARMTYPE))
  411. .Where(v => v.SCAlarm > 0)
  412. .Where(v => v.DEVICECODE.Contains(query.EQUNO))
  413. .Where(v => query.STARTTIME <= v.UPDATETIME && query.ENTTIME >= v.UPDATETIME).ToList()
  414. .Where(v => v.SCAlarm.ToString().Contains(query.ALARMS));
  415. var stationAlarms = db.Default.Set<WCS_STATION523>()
  416. .Where(v => "设备报警".Contains(query.ALARMTYPE))
  417. .Where(v => v.Fault > 0)
  418. .Where(v => v.DEVICECODE.Contains(query.EQUNO))
  419. .Where(v => query.STARTTIME <= v.UPDATETIME && query.ENTTIME >= v.UPDATETIME).ToList()
  420. .Where(v => v.Fault.ToString().Contains(query.ALARMS));
  421. var rgvAlarms = db.Default.Set<WCS_RGV523>()
  422. .Where(v => "设备报警".Contains(query.ALARMTYPE))
  423. .Where(v => v.Fault > 0)
  424. .Where(v => v.DEVICECODE.Contains(query.EQUNO))
  425. .Where(v => query.STARTTIME <= v.UPDATETIME && query.ENTTIME >= v.UPDATETIME).ToList()
  426. .Where(v => v.Fault.ToString().Contains(query.ALARMS));
  427. var exception = db.Default.Set<WCS_EXCEPTION>()
  428. .Where(v => "系统异常".Contains(query.ALARMTYPE))
  429. .Where(v => query.STARTTIME <= v.UPDATETIME && query.ENTTIME >= v.UPDATETIME).ToList()
  430. .Where(v => v.MSG.Contains(query.ALARMS));
  431. foreach (var a in scAlarms)
  432. {
  433. wcsAlarms.Add(new V_WCSALARM
  434. {
  435. EQUNO = a.DEVICECODE,
  436. ALARMS = a.SCAlarm.ToString(),
  437. WCSTASKNO = "",
  438. TIME = a.UPDATETIME,
  439. ALARMTYPE = "设备报警",
  440. ALARMFUNC = ""
  441. });
  442. }
  443. foreach (var a in stationAlarms)
  444. {
  445. wcsAlarms.Add(new V_WCSALARM
  446. {
  447. EQUNO = a.DEVICECODE,
  448. ALARMS = a.Fault.ToString(),
  449. WCSTASKNO = "",
  450. TIME = a.UPDATETIME,
  451. ALARMTYPE = "设备报警",
  452. ALARMFUNC = ""
  453. });
  454. }
  455. foreach (var a in rgvAlarms)
  456. {
  457. wcsAlarms.Add(new V_WCSALARM
  458. {
  459. EQUNO = a.DEVICECODE,
  460. ALARMS = a.Fault.ToString(),
  461. WCSTASKNO = "",
  462. TIME = a.UPDATETIME,
  463. ALARMTYPE = "设备报警",
  464. ALARMFUNC = ""
  465. });
  466. }
  467. foreach (var a in exception)
  468. {
  469. wcsAlarms.Add(new V_WCSALARM
  470. {
  471. EQUNO = "",
  472. ALARMS = a.MSG.ToString(),
  473. WCSTASKNO = "",
  474. TIME = a.UPDATETIME,
  475. ALARMTYPE = "系统异常",
  476. ALARMFUNC = ""
  477. });
  478. }
  479. });
  480. }
  481. catch (Exception ex)
  482. {
  483. throw new Exception(ex.Message);
  484. }
  485. return wcsAlarms;
  486. }
  487. #region 静态方法
  488. /// <summary>
  489. /// 获取RGV设备信息
  490. /// </summary>
  491. /// <param name="soue"></param>
  492. /// <param name="func"></param>
  493. /// <returns></returns>
  494. public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IRGV521>> soue, Func<Device<IRGV521>, bool> func)
  495. {
  496. var result = new List<DeviceStatusViewModel>();
  497. result.AddRange(soue.Where(func).Select(device =>
  498. {
  499. return new DeviceStatusViewModel
  500. {
  501. CODE = device.Entity.CODE,
  502. TASKNUM = device.Data.TaskID,
  503. PH_STATUS = device.Data.PH_Status,
  504. ADDRFROM = device.Data.StartPosition.ToString(),
  505. ADDRTO = device.Data.DestPosition.ToString(),
  506. };
  507. }));
  508. return result;
  509. }
  510. /// <summary>
  511. /// 获取堆垛机设备信息
  512. /// </summary>
  513. /// <param name="soue"></param>
  514. /// <param name="func"></param>
  515. /// <returns></returns>
  516. public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<ISC521>> soue, Func<Device<ISC521>, bool> func)
  517. {
  518. var result = new List<DeviceStatusViewModel>();
  519. result.AddRange(soue.Where(func).Select(device =>
  520. {
  521. var info = new DeviceStatusViewModel
  522. {
  523. CODE = device.Entity.CODE,
  524. TASKNUM = device.Data.TaskID,
  525. ADDRFROM = $"{device.Data.SLine}-{device.Data.SCol}-{device.Data.SLayer}",
  526. ADDRTO = device.Data.ELine.ToString(),
  527. };
  528. if (device.Data.ECol != 0 && device.Data.ELayer != 0)
  529. info.ADDRTO = $"{device.Data.ELine}-{device.Data.ECol}-{device.Data.ELayer}";
  530. return info;
  531. }));
  532. return result;
  533. }
  534. /// <summary>
  535. /// 获取输送机设备信息
  536. /// </summary>
  537. /// <param name="soue"></param>
  538. /// <param name="func"></param>
  539. /// <returns></returns>
  540. public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IStation521>> soue, Func<Device<IStation521>, bool> func)
  541. {
  542. var result = new List<DeviceStatusViewModel>();
  543. result.AddRange(soue.Where(func).Select(device =>
  544. {
  545. return new DeviceStatusViewModel
  546. {
  547. CODE = device.Entity.CODE,
  548. TASKNUM = device.Data.TASKNUM,
  549. REQUEST = device.Data.REQUEST,
  550. PH_STATUS = device.Data.PH_STATUS,
  551. ADDRTO = device.Data.GOODSEND.ToString(),
  552. WEIGTH = device.Data.GOODSCODE / 10
  553. };
  554. }));
  555. return result;
  556. }
  557. /// <summary>
  558. /// 获取机械臂设备信息
  559. /// </summary>
  560. /// <param name="soue"></param>
  561. /// <param name="func"></param>
  562. /// <returns></returns>
  563. public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IRobot>> soue, Func<Device<IRobot>, bool> func)
  564. {
  565. var result = new List<DeviceStatusViewModel>();
  566. result.AddRange(soue.Where(func).Select(device =>
  567. {
  568. return new DeviceStatusViewModel
  569. {
  570. CODE = device.Entity.CODE,
  571. TASKNUM = device.Data.TaskID,
  572. ADDRTO = device.Data.Trigger.ToString(),
  573. };
  574. }));
  575. return result;
  576. }
  577. #endregion 静态方法
  578. }
  579. }