WCSApi.cs 27 KB

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