WCSApi.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631
  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 && scid < 6) ? "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 && scid < 6) ? "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. else if (ws == 22)
  135. agvtask.Station = "3001";
  136. db.Default.Set<WCS_AGVTask>().Add(agvtask);
  137. db.Default.SaveChanges();
  138. }
  139. else
  140. {
  141. var task = new WCS_TASK
  142. {
  143. TYPE = TaskType.入库,
  144. STATUS = WCS.Entity.TaskStatus.新建,
  145. BARCODE = obj.PalletCode,
  146. ADDRFROM = obj.StartLocation,
  147. ADDRTO = obj.EndLocation,
  148. UPDATETIME = DateTime.Now,
  149. UPDATEUSER = "WMS",
  150. WMSTASK = int.Parse(obj.WMSTaskNo)
  151. };
  152. db.Default.Add(task);
  153. db.Default.SaveChanges();
  154. //task.CreateStatusLog(db);
  155. }
  156. }
  157. }
  158. });
  159. res.ResType = true;
  160. }
  161. catch (Exception ex)
  162. {
  163. res.ResMessage = ex.GetBaseException().Message;
  164. }
  165. return res;
  166. }
  167. [HttpPost]
  168. public WcsContractApiResponse I_WMS_CreateAGVTask(PushCreateAGVTaskRequest obj)
  169. {
  170. var res = new WcsContractApiResponse();
  171. try
  172. {
  173. DB.Do(db =>
  174. {
  175. if (obj.Type == 1)
  176. {
  177. var ws = int.Parse(obj.StartPos.Split('_')[1]);
  178. var agvtask = new WCS_AGVTask
  179. {
  180. AGVStatus = AGVTaskStatus.新建,
  181. Status = AGVTaskStatus.新建,
  182. Position = obj.StartPos,
  183. TaskType = AGVTaskType.入库,
  184. CreateTime = DateTime.Now,
  185. UpdateTime = DateTime.Now,
  186. Workshop = ws,
  187. };
  188. if (ws == 13 || ws == 14)
  189. {
  190. agvtask.Station = "2088";
  191. agvtask.Workshop = 1314;
  192. }
  193. else if (ws == 1)
  194. {
  195. agvtask.Station = "2122";
  196. }
  197. else if (ws == 2)
  198. agvtask.Station = "2131";
  199. else if (ws == 3)
  200. agvtask.Station = "2143";
  201. db.Default.Set<WCS_AGVTask>().Add(agvtask);
  202. db.Default.SaveChanges();
  203. }
  204. else
  205. throw new Exception($"类型{obj.Type}不支持");
  206. });
  207. res.ResType = true;
  208. }
  209. catch (Exception ex)
  210. {
  211. res.ResMessage = ex.GetBaseException().Message;
  212. }
  213. return res;
  214. }
  215. [HttpPost]
  216. public WcsContractApiResponse I_CancelWCSTaskByCode(string code)
  217. {
  218. var res = new WcsContractApiResponse();
  219. try
  220. {
  221. DB.Do(db =>
  222. {
  223. var task = db.Default.Set<WCS_TASK>().Where(v => v.BARCODE == code && v.STATUS < WCS.Entity.TaskStatus.已完成 && v.TYPE == TaskType.组盘).FirstOrDefault();
  224. if (task == null)
  225. throw new Exception("WCS任务不存在");
  226. task.STATUS = WCS.Entity.TaskStatus.已取消;
  227. task.UPDATETIME = DateTime.Now;
  228. task.UPDATEUSER = "RF";
  229. db.Default.SaveChanges();
  230. });
  231. res.ResType = true;
  232. }
  233. catch (Exception ex)
  234. {
  235. res.ResMessage = ex.GetBaseException().Message;
  236. }
  237. return res;
  238. }
  239. [HttpPost]
  240. public WcsContractApiResponse I_CancelWCSTaskByID(int wmstaskId)
  241. {
  242. var res = new WcsContractApiResponse();
  243. try
  244. {
  245. DB.Do(db =>
  246. {
  247. var task = db.Default.Set<WCS_TASK>().Where(v => v.WMSTASK == wmstaskId).FirstOrDefault();
  248. if (task == null)
  249. throw new Exception("WCS任务不存在");
  250. if (task.STATUS != WCS.Entity.TaskStatus.新建)
  251. throw new Exception("WCS任务当前状态不允许取消");
  252. task.STATUS = WCS.Entity.TaskStatus.已取消;
  253. task.UPDATETIME = DateTime.Now;
  254. task.UPDATEUSER = "WMS";
  255. db.Default.SaveChanges();
  256. if (task.TYPE == TaskType.出库 && task.AgvTask > 0)
  257. {
  258. var agvtask = db.Default.Set<WCS_AGVTask>().Find(task.AgvTask);
  259. agvtask.Status = AGVTaskStatus.取消;
  260. agvtask.UpdateTime = DateTime.Now;
  261. db.Default.SaveChanges();
  262. }
  263. });
  264. res.ResType = true;
  265. }
  266. catch (Exception ex)
  267. {
  268. res.ResMessage = ex.GetBaseException().Message;
  269. }
  270. return res;
  271. }
  272. /// <summary>
  273. /// WMS 通过该接口获取码垛位当前各位置对应的托盘码
  274. /// </summary>
  275. /// <returns></returns>
  276. [HttpGet]
  277. public List<KeyValueViewModel<string, string>> I_WMS_GetPalletCode()
  278. {
  279. //找出所有组盘站台信息
  280. var station = Device.Where(v => v.Is(DF.组盘)).ToList();
  281. //找出所有有光电信号站台中的任务号
  282. var taskNumbers = station.Select(v => v.Device<IStation521, IStation520>())
  283. .Where(p => p.Data.TASKNUM != 0 && p.Data.PH_STATUS)
  284. .Select(p => p.Data.TASKNUM);
  285. var result = new List<KeyValueViewModel<string, string>>();
  286. DB.Do(db =>
  287. {
  288. //找到有光电的位置对应的任务
  289. var tasks = db.Default.Set<WCS_TASK>().AsNoTracking().Where(task => taskNumbers.Any(x => task.ID == x)).ToList();
  290. station.ForEach(p =>
  291. {
  292. var value = tasks.FirstOrDefault(task => task.ADDRTO == p.CODE);
  293. result.Add(new KeyValueViewModel<string, string>()
  294. {
  295. Key = p.CODE,
  296. Value = value == null ? null : value.BARCODE,
  297. });
  298. });
  299. });
  300. return result;
  301. }
  302. /// <summary>
  303. /// 通过该接口获取指定条件设备信息
  304. /// </summary>
  305. /// <param name="model">筛选条件</param>
  306. /// <returns></returns>
  307. [HttpPost]
  308. public List<DeviceStatusViewModel> GetDeviceStatus([FromQuery] DeviceStatusViewModel model)
  309. {
  310. var result = new List<DeviceStatusViewModel>();
  311. //找到所有设备的读取协议
  312. var rgv = Device.Where(v => v.IsRGV()).Select(v => v.Device<IRGV521>());
  313. var sc = Device.Where(v => v.IsSC()).Select(v => v.Device<ISC521>());
  314. var conv = Device.Where(v => v.IsConv()).Select(v => v.Device<IStation521>());
  315. var robot = Device.Where(v => v.IsRobot()).Select(v => v.Device<IRobot>());
  316. #region 检索分两部分,设备、任务(数据库)
  317. #region 设备信息
  318. if (!string.IsNullOrEmpty(model.CODE))
  319. {
  320. result.AddRange(GetDeviceStatusWhere(rgv, v => v.Entity.CODE == model.CODE));
  321. result.AddRange(GetDeviceStatusWhere(sc, v => v.Entity.CODE == model.CODE));
  322. result.AddRange(GetDeviceStatusWhere(conv, v => v.Entity.CODE == model.CODE));
  323. result.AddRange(GetDeviceStatusWhere(robot, v => v.Entity.CODE == model.CODE));
  324. }
  325. if (model.TASKNUM > 10000)
  326. {
  327. result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID == model.TASKNUM));
  328. result.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID == model.TASKNUM));
  329. result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.TASKNUM == model.TASKNUM));
  330. result.AddRange(GetDeviceStatusWhere(robot, v => v.Data.TaskID == model.TASKNUM));
  331. }
  332. if (model.REQUEST != null)
  333. {
  334. result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.REQUEST == model.REQUEST));
  335. }
  336. if (model.PH_STATUS != null)
  337. {
  338. result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID == model.TASKNUM));
  339. result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.REQUEST == model.REQUEST));
  340. }
  341. if (!string.IsNullOrEmpty(model.ADDRFROM))
  342. {
  343. result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.StartPosition == short.Parse(model.ADDRFROM)));
  344. result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRFROM.Contains(v.Data.SLine.ToString())
  345. || model.ADDRFROM.Contains(v.Data.SCol.ToString())
  346. || model.ADDRFROM.Contains(v.Data.SLayer.ToString())));
  347. }
  348. if (!string.IsNullOrEmpty(model.ADDRTO))
  349. {
  350. result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.DestPosition == short.Parse(model.ADDRTO)));
  351. result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRTO.Contains(v.Data.ELine.ToString())
  352. || model.ADDRTO.Contains(v.Data.ECol.ToString())
  353. || model.ADDRTO.Contains(v.Data.ELayer.ToString())));
  354. result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.GOODSEND == short.Parse(model.ADDRTO)));
  355. result.AddRange(GetDeviceStatusWhere(robot, v => v.Data.Target == short.Parse(model.ADDRTO)));
  356. }
  357. #endregion 设备信息
  358. #region 任务信息
  359. //获取所有设备上的任务信息
  360. if (model.TYPE != null || !string.IsNullOrEmpty(model.BARCODE))
  361. {
  362. var info = new List<DeviceStatusViewModel>();
  363. var ids = result.Select(v => v.TASKNUM);
  364. info.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID > 10000));
  365. info.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID > 10000));
  366. info.AddRange(GetDeviceStatusWhere(conv, v => v.Data.TASKNUM > 10000));
  367. info.AddRange(GetDeviceStatusWhere(robot, v => v.Data.TaskID > 10000));
  368. result.AddRange(info.Where(v => !ids.Any(b => b == v.TASKNUM)));
  369. }
  370. DB.Do(db =>
  371. {
  372. var ids = result.Select(v => v.TASKNUM);
  373. var tasks = db.Default.Set<WCS_TASK>().AsNoTracking().Where(v => ids.Any(b => b == v.ID)).ToList();
  374. tasks.ForEach(task =>
  375. {
  376. var info = result.Find(v => v.TASKNUM == task.ID);
  377. info.TYPE = task.TYPE;
  378. info.BARCODE = task.BARCODE;
  379. });
  380. });
  381. if (model.TYPE != null)
  382. {
  383. result = result.Where(v => v.TYPE == model.TYPE).ToList();
  384. }
  385. if (!string.IsNullOrEmpty(model.BARCODE))
  386. {
  387. result = result.Where(v => v.BARCODE != null && v.BARCODE.Contains(model.BARCODE)).ToList();
  388. }
  389. #endregion 任务信息
  390. #endregion 检索分两部分,设备、任务(数据库)
  391. return result;
  392. }
  393. /// <summary>
  394. /// 通过该接口获取wcs报警信息
  395. /// </summary>
  396. /// <param name="query"></param>
  397. /// <returns></returns>
  398. [HttpPost]
  399. public List<V_WCSALARM> GetWcsAlarms(ALARMQUERY query)
  400. {
  401. var wcsAlarms = new List<V_WCSALARM>();
  402. query.EQUNO = String.IsNullOrEmpty(query.EQUNO) ? "" : query.EQUNO;
  403. query.ALARMFUNC = String.IsNullOrEmpty(query.ALARMFUNC) ? "" : query.ALARMFUNC;
  404. query.ALARMS = String.IsNullOrEmpty(query.ALARMS) ? "" : query.ALARMS;
  405. query.ALARMTYPE = String.IsNullOrEmpty(query.ALARMTYPE) ? "" : query.ALARMTYPE;
  406. query.WCSTASKNO = String.IsNullOrEmpty(query.WCSTASKNO) ? "" : query.WCSTASKNO;
  407. try
  408. {
  409. DB.Do(db =>
  410. {
  411. var scAlarms = db.Default.Set<WCS_SC537>()
  412. .Where(v => "设备报警".Contains(query.ALARMTYPE))
  413. .Where(v => v.SCAlarm > 0)
  414. .Where(v => v.DEVICECODE.Contains(query.EQUNO))
  415. .Where(v => query.STARTTIME <= v.UPDATETIME && query.ENTTIME >= v.UPDATETIME).ToList()
  416. .Where(v => v.SCAlarm.ToString().Contains(query.ALARMS));
  417. var stationAlarms = db.Default.Set<WCS_STATION523>()
  418. .Where(v => "设备报警".Contains(query.ALARMTYPE))
  419. .Where(v => v.Fault > 0)
  420. .Where(v => v.DEVICECODE.Contains(query.EQUNO))
  421. .Where(v => query.STARTTIME <= v.UPDATETIME && query.ENTTIME >= v.UPDATETIME).ToList()
  422. .Where(v => v.Fault.ToString().Contains(query.ALARMS));
  423. var rgvAlarms = db.Default.Set<WCS_RGV523>()
  424. .Where(v => "设备报警".Contains(query.ALARMTYPE))
  425. .Where(v => v.Fault > 0)
  426. .Where(v => v.DEVICECODE.Contains(query.EQUNO))
  427. .Where(v => query.STARTTIME <= v.UPDATETIME && query.ENTTIME >= v.UPDATETIME).ToList()
  428. .Where(v => v.Fault.ToString().Contains(query.ALARMS));
  429. var exception = db.Default.Set<WCS_EXCEPTION>()
  430. .Where(v => "系统异常".Contains(query.ALARMTYPE))
  431. .Where(v => query.STARTTIME <= v.UPDATETIME && query.ENTTIME >= v.UPDATETIME).ToList()
  432. .Where(v => v.MSG.Contains(query.ALARMS));
  433. foreach (var a in scAlarms)
  434. {
  435. wcsAlarms.Add(new V_WCSALARM
  436. {
  437. EQUNO = a.DEVICECODE,
  438. ALARMS = a.SCAlarm.ToString(),
  439. WCSTASKNO = "",
  440. TIME = a.UPDATETIME,
  441. ALARMTYPE = "设备报警",
  442. ALARMFUNC = ""
  443. });
  444. }
  445. foreach (var a in stationAlarms)
  446. {
  447. wcsAlarms.Add(new V_WCSALARM
  448. {
  449. EQUNO = a.DEVICECODE,
  450. ALARMS = a.Fault.ToString(),
  451. WCSTASKNO = "",
  452. TIME = a.UPDATETIME,
  453. ALARMTYPE = "设备报警",
  454. ALARMFUNC = ""
  455. });
  456. }
  457. foreach (var a in rgvAlarms)
  458. {
  459. wcsAlarms.Add(new V_WCSALARM
  460. {
  461. EQUNO = a.DEVICECODE,
  462. ALARMS = a.Fault.ToString(),
  463. WCSTASKNO = "",
  464. TIME = a.UPDATETIME,
  465. ALARMTYPE = "设备报警",
  466. ALARMFUNC = ""
  467. });
  468. }
  469. foreach (var a in exception)
  470. {
  471. wcsAlarms.Add(new V_WCSALARM
  472. {
  473. EQUNO = "",
  474. ALARMS = a.MSG.ToString(),
  475. WCSTASKNO = "",
  476. TIME = a.UPDATETIME,
  477. ALARMTYPE = "系统异常",
  478. ALARMFUNC = ""
  479. });
  480. }
  481. });
  482. }
  483. catch (Exception ex)
  484. {
  485. throw new Exception(ex.Message);
  486. }
  487. return wcsAlarms;
  488. }
  489. #region 静态方法
  490. /// <summary>
  491. /// 获取RGV设备信息
  492. /// </summary>
  493. /// <param name="soue"></param>
  494. /// <param name="func"></param>
  495. /// <returns></returns>
  496. public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IRGV521>> soue, Func<Device<IRGV521>, bool> func)
  497. {
  498. var result = new List<DeviceStatusViewModel>();
  499. result.AddRange(soue.Where(func).Select(device =>
  500. {
  501. return new DeviceStatusViewModel
  502. {
  503. CODE = device.Entity.CODE,
  504. TASKNUM = device.Data.TaskID,
  505. PH_STATUS = device.Data.PH_Status,
  506. ADDRFROM = device.Data.StartPosition.ToString(),
  507. ADDRTO = device.Data.DestPosition.ToString(),
  508. };
  509. }));
  510. return result;
  511. }
  512. /// <summary>
  513. /// 获取堆垛机设备信息
  514. /// </summary>
  515. /// <param name="soue"></param>
  516. /// <param name="func"></param>
  517. /// <returns></returns>
  518. public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<ISC521>> soue, Func<Device<ISC521>, bool> func)
  519. {
  520. var result = new List<DeviceStatusViewModel>();
  521. result.AddRange(soue.Where(func).Select(device =>
  522. {
  523. var info = new DeviceStatusViewModel
  524. {
  525. CODE = device.Entity.CODE,
  526. TASKNUM = device.Data.TaskID,
  527. ADDRFROM = $"{device.Data.SLine}-{device.Data.SCol}-{device.Data.SLayer}",
  528. ADDRTO = device.Data.ELine.ToString(),
  529. };
  530. if (device.Data.ECol != 0 && device.Data.ELayer != 0)
  531. info.ADDRTO = $"{device.Data.ELine}-{device.Data.ECol}-{device.Data.ELayer}";
  532. return info;
  533. }));
  534. return result;
  535. }
  536. /// <summary>
  537. /// 获取输送机设备信息
  538. /// </summary>
  539. /// <param name="soue"></param>
  540. /// <param name="func"></param>
  541. /// <returns></returns>
  542. public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IStation521>> soue, Func<Device<IStation521>, bool> func)
  543. {
  544. var result = new List<DeviceStatusViewModel>();
  545. result.AddRange(soue.Where(func).Select(device =>
  546. {
  547. return new DeviceStatusViewModel
  548. {
  549. CODE = device.Entity.CODE,
  550. TASKNUM = device.Data.TASKNUM,
  551. REQUEST = device.Data.REQUEST,
  552. PH_STATUS = device.Data.PH_STATUS,
  553. ADDRTO = device.Data.GOODSEND.ToString(),
  554. WEIGTH = device.Data.GOODSCODE / 10
  555. };
  556. }));
  557. return result;
  558. }
  559. /// <summary>
  560. /// 获取机械臂设备信息
  561. /// </summary>
  562. /// <param name="soue"></param>
  563. /// <param name="func"></param>
  564. /// <returns></returns>
  565. public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IRobot>> soue, Func<Device<IRobot>, bool> func)
  566. {
  567. var result = new List<DeviceStatusViewModel>();
  568. result.AddRange(soue.Where(func).Select(device =>
  569. {
  570. return new DeviceStatusViewModel
  571. {
  572. CODE = device.Entity.CODE,
  573. TASKNUM = device.Data.TaskID,
  574. ADDRTO = device.Data.Trigger.ToString(),
  575. };
  576. }));
  577. return result;
  578. }
  579. #endregion 静态方法
  580. }
  581. }