WCSApi.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. using DBHelper_SqlSugar;
  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. namespace WCS.Service.WebApi
  10. {
  11. [ApiController]
  12. [Route("[controller]/[action]")]
  13. public class WCSApi : ControllerBase
  14. {
  15. [HttpPost]
  16. public WcsContractApiResponse I_WMS_CreateTasks(List<PushCreateWcsTaskRequest> list)
  17. {
  18. var res = new WcsContractApiResponse();
  19. try
  20. {
  21. Db.Do(db =>
  22. {
  23. foreach (var obj in list)
  24. {
  25. if (obj.TaskType == "3")//移库任务
  26. {
  27. var wmstaskid = int.Parse(obj.WMSTaskNo);
  28. if (db.Default.Queryable<WCS_TASK>().Any(v => v.WMSTASK == wmstaskid))
  29. throw new Exception("任务号" + wmstaskid + "重复下发");
  30. var scid = int.Parse(obj.SRMNo.Last().ToString());
  31. var tunnel = "TY" + obj.StartTunnel;
  32. var task = new WCS_TASK
  33. {
  34. TYPE = TaskType.移库,
  35. STATUS = WCS.Entity.TaskStatus.新建,
  36. DEVICE = "SRM" + obj.SRMNo.Last(),
  37. BARCODE = obj.PalletCode,
  38. ADDRFROM = obj.StartLocation,
  39. ADDRTO = obj.EndLocation,
  40. UPDATETIME = DateTime.Now,
  41. UPDATEUSER = "WMS",
  42. TUNNEL = tunnel,
  43. WMSTASK = int.Parse(obj.WMSTaskNo),
  44. TaskGroupKey = obj.TaskGroupKey
  45. };
  46. db.Default.Insertable(task).ExecuteCommand();
  47. }
  48. else if (obj.TaskType == "2")
  49. { //出库任务
  50. var wmstaskid = int.Parse(obj.WMSTaskNo);
  51. if (db.Default.Queryable<WCS_TASK>().Any(v => v.WMSTASK == wmstaskid))
  52. throw new Exception("任务号" + wmstaskid + "重复下发");
  53. var tunnel = "TY" + obj.SRMNo.Last();
  54. var task = new WCS_TASK
  55. {
  56. TYPE = TaskType.出库,
  57. STATUS = WCS.Entity.TaskStatus.新建,
  58. DEVICE = "SRM" + obj.SRMNo.Last(),
  59. BARCODE = obj.PalletCode,
  60. ADDRFROM = string.Format("{0}-{1}-{2}", obj.StartRow, obj.StartCol, obj.StartLayer),
  61. ADDRTO = obj.EndLocation,
  62. UPDATETIME = DateTime.Now,
  63. UPDATEUSER = "WMS",
  64. TUNNEL = tunnel,
  65. WMSTASK = int.Parse(obj.WMSTaskNo),
  66. ADDRNEXT = obj.EndLocation,
  67. Length = obj.Length,
  68. MaterialCode = obj.MaterialCode,
  69. FLOOR = 1,
  70. };
  71. db.Default.Insertable(task).ExecuteCommand();
  72. }
  73. else if (obj.TaskType == "1")
  74. {//入库任务
  75. var wmstaskid = int.Parse(obj.WMSTaskNo);
  76. if (db.Default.Queryable<WCS_TASK>().Any(v => v.WMSTASK == wmstaskid))
  77. throw new Exception("任务号" + wmstaskid + "重复下发");
  78. if (obj.StartLocation.Contains("_Back_"))
  79. {//生成AGV入库任务
  80. var ws = int.Parse(obj.StartLocation.Split('_')[1]);
  81. var agvtask = new WCS_AGVTask
  82. {
  83. AGVStatus = AGVTaskStatus.新建,
  84. Status = AGVTaskStatus.新建,
  85. Position = obj.StartLocation,
  86. TaskType = AGVTaskType.入库,
  87. CreateTime = DateTime.Now,
  88. UpdateTime = DateTime.Now,
  89. Workshop = ws,
  90. };
  91. if (ws == 13 || ws == 14)
  92. {
  93. agvtask.Station = "2088";
  94. agvtask.Workshop = 1314;
  95. }
  96. else if (ws == 1)
  97. {
  98. agvtask.Station = "2122";
  99. }
  100. else if (ws == 2)
  101. agvtask.Station = "2131";
  102. else if (ws == 3)
  103. agvtask.Station = "2143";
  104. db.Default.Insertable(agvtask).ExecuteCommand();
  105. }
  106. else
  107. {
  108. var task = new WCS_TASK
  109. {
  110. TYPE = TaskType.入库,
  111. STATUS = WCS.Entity.TaskStatus.新建,
  112. BARCODE = obj.PalletCode,
  113. ADDRFROM = obj.StartLocation,
  114. ADDRTO = obj.EndLocation,
  115. UPDATETIME = DateTime.Now,
  116. UPDATEUSER = "WMS",
  117. WMSTASK = int.Parse(obj.WMSTaskNo)
  118. };
  119. db.Default.Insertable(task).ExecuteCommand();
  120. }
  121. }
  122. }
  123. });
  124. res.ResType = true;
  125. }
  126. catch (Exception ex)
  127. {
  128. res.ResMessage = ex.GetBaseException().Message;
  129. }
  130. return res;
  131. }
  132. [HttpPost]
  133. public WcsContractApiResponse I_WMS_CreateAGVTask(PushCreateAGVTaskRequest obj)
  134. {
  135. var res = new WcsContractApiResponse();
  136. try
  137. {
  138. Db.Do(db =>
  139. {
  140. if (obj.Type == 1)
  141. {
  142. var ws = int.Parse(obj.StartPos.Split('_')[1]);
  143. var agvtask = new WCS_AGVTask
  144. {
  145. AGVStatus = AGVTaskStatus.新建,
  146. Status = AGVTaskStatus.新建,
  147. Position = obj.StartPos,
  148. TaskType = AGVTaskType.入库,
  149. CreateTime = DateTime.Now,
  150. UpdateTime = DateTime.Now,
  151. Workshop = ws,
  152. };
  153. if (ws == 13 || ws == 14)
  154. {
  155. agvtask.Station = "2088";
  156. agvtask.Workshop = 1314;
  157. }
  158. else if (ws == 1)
  159. {
  160. agvtask.Station = "2122";
  161. }
  162. else if (ws == 2)
  163. agvtask.Station = "2131";
  164. else if (ws == 3)
  165. agvtask.Station = "2143";
  166. db.Default.Insertable(agvtask).ExecuteCommand();
  167. }
  168. else
  169. throw new Exception($"类型{obj.Type}不支持");
  170. });
  171. res.ResType = true;
  172. }
  173. catch (Exception ex)
  174. {
  175. res.ResMessage = ex.GetBaseException().Message;
  176. }
  177. return res;
  178. }
  179. [HttpPost]
  180. public WcsContractApiResponse I_CancelWCSTaskByCode(string code)
  181. {
  182. var res = new WcsContractApiResponse();
  183. try
  184. {
  185. Db.Do(db =>
  186. {
  187. var task = db.Default.Queryable<WCS_TASK>().First(v => v.BARCODE == code && v.STATUS < WCS.Entity.TaskStatus.已完成 && v.TYPE == TaskType.组盘);
  188. if (task == null)
  189. throw new Exception("WCS任务不存在");
  190. task.STATUS = WCS.Entity.TaskStatus.已取消;
  191. task.UPDATETIME = DateTime.Now;
  192. task.UPDATEUSER = "RF";
  193. db.Default.Updateable(task).ExecuteCommand();
  194. });
  195. res.ResType = true;
  196. }
  197. catch (Exception ex)
  198. {
  199. res.ResMessage = ex.GetBaseException().Message;
  200. }
  201. return res;
  202. }
  203. [HttpPost]
  204. public WcsContractApiResponse I_CancelWCSTaskByID(int wmstaskId)
  205. {
  206. var res = new WcsContractApiResponse();
  207. try
  208. {
  209. Db.Do(db =>
  210. {
  211. var task = db.Default.Queryable<WCS_TASK>().First(v => v.WMSTASK == wmstaskId);
  212. if (task == null)
  213. throw new Exception("WCS任务不存在");
  214. if (task.STATUS != WCS.Entity.TaskStatus.新建)
  215. throw new Exception("WCS任务当前状态不允许取消");
  216. task.STATUS = WCS.Entity.TaskStatus.已取消;
  217. task.UPDATETIME = DateTime.Now;
  218. task.UPDATEUSER = "WMS";
  219. db.Default.Updateable(task).ExecuteCommand();
  220. if (task.TYPE != TaskType.出库 || task.AGVTASKID <= 0) return;
  221. var agvtask = db.Default.Queryable<WCS_AGVTask>().InSingle(task.AGVTASKID);
  222. agvtask.Status = AGVTaskStatus.取消;
  223. agvtask.UpdateTime = DateTime.Now;
  224. db.Default.Updateable(agvtask).ExecuteCommand();
  225. });
  226. res.ResType = true;
  227. }
  228. catch (Exception ex)
  229. {
  230. res.ResMessage = ex.GetBaseException().Message;
  231. }
  232. return res;
  233. }
  234. }
  235. }