WCSApi.cs 11 KB

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