WCSApi.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464
  1. using DBHelper;
  2. using Microsoft.AspNetCore.Mvc;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using WCS.Entity;
  7. using WCS.Entity.Protocol;
  8. using WCS.Service.Entity;
  9. using WCS.Service.Extensions;
  10. namespace WCS.Service.WebApi
  11. {
  12. //[ApiController]
  13. //[Route("[controller]/[action]")]
  14. //public class WCSApi : ControllerBase
  15. //{
  16. // [HttpPost]
  17. // public WcsContractApiResponse I_WMS_CreateTasks(List<PushCreateWcsTaskRequest> list)
  18. // {
  19. // var res = new WcsContractApiResponse();
  20. // try
  21. // {
  22. // DB.Do(db =>
  23. // {
  24. // foreach (var obj in list)
  25. // {
  26. // if (obj.TaskType == "1") //入库任务
  27. // {
  28. // var wmstaskid = int.Parse(obj.WMSTaskNo);
  29. // if (db.Default.Set<WCS_TASK>().Any(v => v.WMSTASK == wmstaskid))
  30. // throw new Exception("任务号" + wmstaskid + "重复下发");
  31. // if (obj.StartLocation.Contains("_Back_"))
  32. // {
  33. // //生成AGV入库任务
  34. // var ws = int.Parse(obj.StartLocation.Split('_')[1]);
  35. // var agvtask = new WCS_AGVTask
  36. // {
  37. // AGVStatus = AGVTaskStatus.新建,
  38. // Status = AGVTaskStatus.新建,
  39. // Position = obj.StartLocation,
  40. // TaskType = AGVTaskType.入库,
  41. // CreateTime = DateTime.Now,
  42. // UpdateTime = DateTime.Now,
  43. // Workshop = ws,
  44. // };
  45. // if (ws == 13 || ws == 14)
  46. // {
  47. // agvtask.Station = "2088";
  48. // agvtask.Workshop = 1314;
  49. // }
  50. // else if (ws == 1)
  51. // {
  52. // agvtask.Station = "2122";
  53. // }
  54. // else if (ws == 2)
  55. // agvtask.Station = "2131";
  56. // else if (ws == 3)
  57. // agvtask.Station = "2143";
  58. // db.Default.Set<WCS_AGVTask>().Add(agvtask);
  59. // db.Default.SaveChanges();
  60. // }
  61. // else
  62. // {
  63. // var task = new WCS_TASK
  64. // {
  65. // TYPE = TaskType.入库,
  66. // STATUS = WCS.Entity.TaskStatus.新建,
  67. // BARCODE = obj.PalletCode,
  68. // ADDRFROM = obj.StartLocation,
  69. // ADDRTO = obj.EndLocation,
  70. // UPDATETIME = DateTime.Now,
  71. // UPDATEUSER = "WMS",
  72. // WMSTASK = int.Parse(obj.WMSTaskNo)
  73. // };
  74. // db.Default.Add(task);
  75. // }
  76. // }
  77. // else if (obj.TaskType == "2")//出库任务
  78. // {
  79. // var wmsTaskId = int.Parse(obj.WMSTaskNo);
  80. // if (db.Default.Set<WCS_TASK>().Any(v => v.WMSTASK == wmsTaskId))
  81. // throw new Exception("任务号" + wmsTaskId + "重复下发");
  82. // var tunnel = "TY" + obj.SRMNo.Last();
  83. // var task = new WCS_TASK
  84. // {
  85. // TYPE = TaskType.出库,
  86. // STATUS = TaskStatus.新建,
  87. // DEVICE = "SRM" + obj.SRMNo.Last(),
  88. // BARCODE = obj.PalletCode,
  89. // ADDRFROM = $"{obj.StartRow}-{obj.StartCol}-{obj.StartLayer}",
  90. // ADDRTO = obj.EndLocation,
  91. // UPDATETIME = DateTime.Now,
  92. // UPDATEUSER = "WMS",
  93. // TUNNEL = tunnel,
  94. // WMSTASK = int.Parse(obj.WMSTaskNo),
  95. // ADDRNEXT = obj.EndLocation,
  96. // Length = obj.Length,
  97. // MaterialCode = obj.MaterialCode,
  98. // FLOOR = obj.EndLocation == "G1340" ? 1 : 2
  99. // };
  100. // task.TaskGetSrmStation();
  101. // db.Default.Add(task);
  102. // }
  103. // else if (obj.TaskType == "3") //移库任务
  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. // var scid = int.Parse(obj.SRMNo.Last().ToString());
  109. // var tunnel = "TY" + obj.StartTunnel;
  110. // var task = new WCS_TASK
  111. // {
  112. // TYPE = TaskType.移库,
  113. // STATUS = WCS.Entity.TaskStatus.新建,
  114. // DEVICE = "SRM" + obj.SRMNo.Last(),
  115. // BARCODE = obj.PalletCode,
  116. // ADDRFROM = $"{obj.StartRow}-{obj.StartCol}-{obj.StartLayer}",
  117. // ADDRTO = $"{obj.EndRow}-{obj.EndCol}-{obj.EndLayer}",
  118. // UPDATETIME = DateTime.Now,
  119. // UPDATEUSER = "WMS",
  120. // TUNNEL = tunnel,
  121. // WMSTASK = int.Parse(obj.WMSTaskNo),
  122. // TaskGroupKey = obj.TaskGroupKey
  123. // };
  124. // db.Default.Add(task);
  125. // }
  126. // else if (obj.TaskType == "6") //倒库任务
  127. // {
  128. // var wmsTaskId = int.Parse(obj.WMSTaskNo);
  129. // if (db.Default.Set<WCS_TASK>().Any(v => v.WMSTASK == wmsTaskId))
  130. // throw new Exception("任务号" + wmsTaskId + "重复下发");
  131. // var srmNo = obj.SRMNo.Last();
  132. // var endSrmNo = obj.EndSRMNo.Last();
  133. // var task = new WCS_TASK
  134. // {
  135. // TYPE = TaskType.倒库,
  136. // STATUS = TaskStatus.新建,
  137. // BARCODE = obj.PalletCode,
  138. // ADDRFROM = $"{obj.StartRow}-{obj.StartCol}-{obj.StartLayer}",
  139. // ADDRTO = $"{obj.EndRow}-{obj.EndCol}-{obj.EndLayer}",
  140. // UPDATETIME = DateTime.Now,
  141. // UPDATEUSER = "WMS",
  142. // TUNNEL = $"TY{srmNo}",
  143. // DEVICE = $"SRM{srmNo}",
  144. // TUNNELDL = $"TY{endSrmNo}",
  145. // DEVICEDL = $"SRM{endSrmNo}",
  146. // WMSTASK = int.Parse(obj.WMSTaskNo),
  147. // ADDRNEXT = obj.EndLocation,
  148. // Length = obj.Length,
  149. // MaterialCode = obj.MaterialCode,
  150. // FLOOR = obj.EndLocation == "G1340" ? 1 : 2,
  151. // TaskGroupKey = obj.TaskGroupKey
  152. // };
  153. // task.TaskGetSrmStation();
  154. // db.Default.Add(task);
  155. // }
  156. // }
  157. // db.Default.SaveChanges();
  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. // /// 通过该接口获取指定条件设备信息
  274. // /// </summary>
  275. // /// <param name="model">筛选条件</param>
  276. // /// <returns></returns>
  277. // //[HttpGet]
  278. // //public List<DeviceStatusViewModel> GetDeviceStatus([FromQuery] DeviceStatusViewModel model)
  279. // //{
  280. // // var result = new List<DeviceStatusViewModel>();
  281. // // //找到所有设备的读取协议
  282. // // var rgv = Device.Where(v => v.IsRGV()).Select(v => v.Device<IRGV521>());
  283. // // var sc = Device.Where(v => v.IsSC()).Select(v => v.Device<ISRM521>());
  284. // // var conv = Device.Where(v => v.IsConv()).Select(v => v.Device<IStation521>());
  285. // // #region 检索分两部分,设备、任务(数据库)
  286. // // #region 设备信息
  287. // // if (!string.IsNullOrEmpty(model.CODE))
  288. // // {
  289. // // result.AddRange(GetDeviceStatusWhere(rgv, v => v.Entity.CODE == model.CODE));
  290. // // result.AddRange(GetDeviceStatusWhere(sc, v => v.Entity.CODE == model.CODE));
  291. // // result.AddRange(GetDeviceStatusWhere(conv, v => v.Entity.CODE == model.CODE));
  292. // // }
  293. // // if (model.TASKNUM > 10000)
  294. // // {
  295. // // result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 == model.TASKNUM));
  296. // // result.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID_1 == model.TASKNUM));
  297. // // result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Tasknum == model.TASKNUM));
  298. // // }
  299. // // if (model.PH_STATUS != null)
  300. // // {
  301. // // result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 == model.TASKNUM));
  302. // // }
  303. // // if (!string.IsNullOrEmpty(model.ADDRFROM))
  304. // // {
  305. // // result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.StartPosition_1 == short.Parse(model.ADDRFROM)));
  306. // // result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRFROM.Contains(v.Data.SLine_1.ToString())
  307. // // || model.ADDRFROM.Contains(v.Data.SCol_1.ToString())
  308. // // || model.ADDRFROM.Contains(v.Data.SLayer_1.ToString())));
  309. // // result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Goodsstart ==short.Parse(model.ADDRFROM)));
  310. // // }
  311. // // if (!string.IsNullOrEmpty(model.ADDRTO))
  312. // // {
  313. // // result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.DestPosition_1 == short.Parse(model.ADDRTO)));
  314. // // result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRTO.Contains(v.Data.ELine_1.ToString())
  315. // // || model.ADDRTO.Contains(v.Data.ECol_1.ToString())
  316. // // || model.ADDRTO.Contains(v.Data.ELayer_1.ToString())));
  317. // // result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Goodsend == short.Parse(model.ADDRTO)));
  318. // // }
  319. // // #endregion 设备信息
  320. // // #region 任务信息
  321. // // //获取所有设备上的任务信息
  322. // // if (model.TYPE != null || !string.IsNullOrEmpty(model.BARCODE))
  323. // // {
  324. // // var info = new List<DeviceStatusViewModel>();
  325. // // var ids = result.Select(v => v.TASKNUM);
  326. // // info.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 > 10000));
  327. // // info.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID_1 > 10000));
  328. // // info.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Tasknum > 10000));
  329. // // result.AddRange(info.Where(v => !ids.Any(b => b == v.TASKNUM)));
  330. // // }
  331. // // DB.Do(db =>
  332. // // {
  333. // // var ids = result.Select(v => v.TASKNUM);
  334. // // var tasks = db.Default.Set<WCS_TASK>().AsNoTracking().Where(v => ids.Any(b => b == v.ID)).ToList();
  335. // // tasks.ForEach(task =>
  336. // // {
  337. // // var info = result.Find(v => v.TASKNUM == task.ID);
  338. // // info.TYPE = task.TYPE;
  339. // // info.BARCODE = task.BARCODE;
  340. // // });
  341. // // });
  342. // // if (model.TYPE != null)
  343. // // {
  344. // // result = result.Where(v => v.TYPE == model.TYPE).ToList();
  345. // // }
  346. // // if (!string.IsNullOrEmpty(model.BARCODE))
  347. // // {
  348. // // result = result.Where(v => v.BARCODE != null && v.BARCODE.Contains(model.BARCODE)).ToList();
  349. // // }
  350. // // #endregion 任务信息
  351. // // #endregion 检索分两部分,设备、任务(数据库)
  352. // // return result;
  353. // //}
  354. // #region 静态方法
  355. // ///// <summary>
  356. // ///// 获取RGV设备信息
  357. // ///// </summary>
  358. // ///// <param name="soue"></param>
  359. // ///// <param name="func"></param>
  360. // ///// <returns></returns>
  361. // //public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IRGV521>> soue, Func<Device<IRGV521>, bool> func)
  362. // //{
  363. // // var result = new List<DeviceStatusViewModel>();
  364. // // result.AddRange(soue.Where(func).Select(device =>
  365. // // {
  366. // // return new DeviceStatusViewModel
  367. // // {
  368. // // CODE = device.Entity.CODE,
  369. // // TASKNUM = device.Data.TaskID_1 ,
  370. // // PH_STATUS = device.Data.SystemStatus.HasFlag(RGVStatus.光电),
  371. // // ADDRFROM = device.Data.StartPosition_1.ToString(),
  372. // // ADDRTO = device.Data.DestPosition_1.ToString(),
  373. // // };
  374. // // }));
  375. // // return result;
  376. // //}
  377. // ///// <summary>
  378. // ///// 获取堆垛机设备信息
  379. // ///// </summary>
  380. // ///// <param name="soue"></param>
  381. // ///// <param name="func"></param>
  382. // ///// <returns></returns>
  383. // //public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<ISRM521>> soue, Func<Device<ISRM521>, bool> func)
  384. // //{
  385. // // var result = new List<DeviceStatusViewModel>();
  386. // // result.AddRange(soue.Where(func).Select(device =>
  387. // // {
  388. // // var info = new DeviceStatusViewModel
  389. // // {
  390. // // CODE = device.Entity.CODE,
  391. // // TASKNUM = device.Data.TaskID_1,
  392. // // ADDRFROM = $"{device.Data.SLine_1}-{device.Data.SCol_1}-{device.Data.SLayer_1}",
  393. // // ADDRTO = device.Data.ELine_1.ToString(),
  394. // // };
  395. // // if (device.Data.ECol_1 != 0 && device.Data.ELayer_1 != 0)
  396. // // info.ADDRTO = $"{device.Data.ELine_1}-{device.Data.ECol_1}-{device.Data.ELayer_1}";
  397. // // return info;
  398. // // }));
  399. // // return result;
  400. // //}
  401. // ///// <summary>
  402. // ///// 获取输送机设备信息
  403. // ///// </summary>
  404. // ///// <param name="soue"></param>
  405. // ///// <param name="func"></param>
  406. // ///// <returns></returns>
  407. // //public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IStation521>> soue, Func<Device<IStation521>, bool> func)
  408. // //{
  409. // // var result = new List<DeviceStatusViewModel>();
  410. // // result.AddRange(soue.Where(func).Select(device =>
  411. // // {
  412. // // return new DeviceStatusViewModel
  413. // // {
  414. // // CODE = device.Entity.CODE,
  415. // // TASKNUM = device.Data.Tasknum,
  416. // // ADDRFROM =device.Data.Goodsstart.ToString(),
  417. // // ADDRTO = device.Data.Goodsend.ToString(),
  418. // // };
  419. // // }));
  420. // // return result;
  421. // //}
  422. // #endregion 静态方法
  423. //}
  424. }