WCS_ExtendedBLL.cs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using SqlSugar;
  6. using WCS.Data;
  7. using WCS.Data.Models;
  8. using WCS.Data.Utils;
  9. using WCS.PLC;
  10. using WCS.WMSWorkflow;
  11. namespace WCS.Workflow
  12. {
  13. public class WCS_ExtendedBLL : IWCS
  14. {
  15. public static readonly string Conv_1124 = "1124";
  16. public static readonly string Conv_1092 = "1092";//4#车间
  17. public static readonly string Conv_1099 = "1099";//5#车间
  18. public static readonly string Conv_1504 = "1504";//6#车间
  19. public static readonly string Conv_1518 = "1518";//7#车间
  20. public static readonly string Conv_1112 = "1112";
  21. public static readonly string Conv_1115 = "1115";
  22. public static readonly string Conv_1107 = "1107";
  23. public static readonly string Conv_1110 = "1110";
  24. public static readonly string Conv_1114 = "1114";
  25. public static readonly string Conv_1109 = "1109";
  26. public static readonly string Conv_1102 = "1102";
  27. public static readonly string Conv_1105 = "1105";
  28. public static readonly string Conv_1104 = "1104";
  29. public static readonly string Conv_1094 = "1094";
  30. public static readonly string Conv_1098 = "1098";
  31. public static readonly string Conv_1097 = "1097";
  32. public readonly string Conv_1155 = "1155";
  33. public readonly string Conv_1156 = "1156";
  34. public readonly string Conv_1157 = "1157";
  35. public readonly string Conv_1158 = "1158";
  36. public readonly string conveyorplc = "conveyor02";
  37. public readonly string pvc_6_Back = "Pvc_6_Back";
  38. public readonly string pvc_7_Back = "Pvc_7_Back";
  39. public void CoatingRoomTrafficControl(string equNo, string rgvUpPosNo = "", string barcode = "")
  40. {
  41. if (equNo.Contains("rgv"))
  42. {
  43. if (rgvUpPosNo == Conv_1092)//4号车间
  44. {
  45. CheckUpTask_4_5(rgvUpPosNo, Conv_1097, Conv_1094, Conv_1098, equNo, "4");
  46. }
  47. else if (rgvUpPosNo == Conv_1099)//5号车间
  48. {
  49. CheckUpTask_4_5(rgvUpPosNo, Conv_1104, Conv_1102, Conv_1105, equNo, "5");
  50. }
  51. else if (rgvUpPosNo == Conv_1504)//6号车间
  52. {
  53. CheckUpTask_6_7(rgvUpPosNo, Conv_1107, Conv_1109, Conv_1110, equNo, "6", pvc_6_Back);
  54. }
  55. else if (rgvUpPosNo == Conv_1518)//7号车间
  56. {
  57. CheckUpTask_6_7(rgvUpPosNo, Conv_1112, Conv_1114, Conv_1115, equNo, "7", pvc_7_Back);
  58. }
  59. else if (rgvUpPosNo == Conv_1155 || rgvUpPosNo == Conv_1156 || rgvUpPosNo == Conv_1157 || rgvUpPosNo == Conv_1158)//三楼包装出口
  60. {
  61. var conv = ConveyorHelper.GetConveyorSignal(conveyorplc, rgvUpPosNo);
  62. if (conv.DB521_Tasknum > 0 || conv.CvDB51_PH_Status || conv.DB521_Request)
  63. {
  64. throw new Exception(string.Format("三楼包装区RGV[{0}]出口[{1}]存在托盘(任务号,光电信号,请求信号),不能出库到该位置。", equNo, rgvUpPosNo));
  65. }
  66. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_POSIDFROM == rgvUpPosNo && v.TASK_POSIDCUR == rgvUpPosNo))
  67. {
  68. throw new Exception(string.Format("三楼包装区RGV[{0}]出口[{1}]存在入库任务,不能出库到该位置。", equNo, rgvUpPosNo));
  69. }
  70. }
  71. }
  72. else
  73. {
  74. CheckIsExistOutTask(equNo, barcode);
  75. }
  76. }
  77. private void CheckUpTask_4_5(string upPosConvNo, string agvConvPosNo, string scanningConvNo, string cachePosNo, string rgvNo, string workshopNo)
  78. {
  79. //判断出口是否存在入库的任务
  80. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 1 && v.TASK_POSIDNEXT == upPosConvNo))
  81. {
  82. throw new Exception(string.Format("车间[{0}]下料位置[{1}]存在入库任务,RGV[{2}]无法执行到该位置的出库任务", workshopNo, upPosConvNo, rgvNo));
  83. }
  84. var conv = ConveyorHelper.GetConveyorSignal(conveyorplc, upPosConvNo);
  85. //判断下料点是否存在入库任务请求,光电和任务
  86. if (conv.DB521_Request || conv.CvDB51_PH_Status || conv.DB521_Tasknum > 0)
  87. {
  88. throw new Exception(string.Format("车间[{0}]下料位置[{1}]存在电控信号(请求,光电,任务号),RGV[{2}]无法执行到该位置的出库任务", workshopNo, upPosConvNo, rgvNo));
  89. }
  90. var conv_scann = ConveyorHelper.GetConveyorSignal(conveyorplc, scanningConvNo);
  91. //判断扫描位置是否存在光电信号
  92. if (conv_scann.CvDB51_PH_Status || conv_scann.DB521_Request || conv_scann.DB521_Tasknum > 0)
  93. {
  94. throw new Exception(string.Format("车间[{0}]扫码位置[{1}]存在电控信号(请求,光电,任务号),RGV[{2}]无法执行出库任务", workshopNo, scanningConvNo, rgvNo));
  95. }
  96. //判断是否存在原膜托盘的出库任务
  97. var taskSet = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == agvConvPosNo || v.TASK_POSIDNEXT == cachePosNo || v.TASK_POSIDNEXT == upPosConvNo)).ToList();
  98. if (taskSet.Count >= 2 && taskSet.Any(v => v.TASK_BOXBARCODE.Substring(0, 3) == "TPC"))
  99. {
  100. string[] orderArr = new string[] { agvConvPosNo, scanningConvNo, cachePosNo, upPosConvNo };
  101. taskSet = taskSet.OrderByDescending(e =>
  102. {
  103. var index = 0;
  104. index = Array.IndexOf(orderArr, e.TASK_POSIDCUR);
  105. if (index != -1) { return index; }
  106. else { return int.MaxValue; }
  107. }).ToList();
  108. //检测从二个开始任务列表中是否存在TPC托盘
  109. for (int i = 1; i < taskSet.Count; i++)
  110. {
  111. if (taskSet[i].TASK_BOXBARCODE.Substring(0, 3) == "TPC")
  112. {
  113. throw new Exception(string.Format("到车间[{0}]出口[{1}]存在多个任务并且有原膜托盘任务,RGV[{2}]无法执行出库任务", workshopNo, agvConvPosNo, rgvNo));
  114. }
  115. }
  116. }
  117. string Pvc_ = "Pvc_" + workshopNo;
  118. //判断是否存在AGV的入库任务
  119. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 1 && v.TASK_POSIDFROM.Contains(Pvc_) && (v.TASK_WKSTATUS == (int)WkStatus.任务已下发AGV || v.TASK_WKSTATUS == (int)WkStatus.AGV任务完成)))
  120. {
  121. if (taskSet.Count >= 1)
  122. {
  123. throw new Exception(string.Format("车间[{0}]出口[{1}]存在AGV入库任务,RGV[{2}]无法执行出库任务", workshopNo, agvConvPosNo, rgvNo));
  124. }
  125. }
  126. //判断是否存在异常退回的任务
  127. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 6 && v.TASK_POSIDTO == agvConvPosNo))
  128. {
  129. throw new Exception(string.Format("车间[{0}]出口[{1}]存在入库任务,RGV[{2}]无法执行出库任务", workshopNo, agvConvPosNo, rgvNo));
  130. }
  131. }
  132. /// <summary>
  133. /// 检测出库位置状态
  134. /// </summary>
  135. /// <param name="upPosConvNo">RGV下料点</param>
  136. /// <param name="requestagvPos">agv对接工位</param>
  137. /// <param name="requestManualPos">扫描位置</param>
  138. /// <param name="onMatManualPos">出库缓存位置或入库位置</param>
  139. /// <returns></returns>
  140. private void CheckUpTask_6_7(string upPosConvNo, string requestagvPos, string scanningRequestPos, string onMatManualPos, string rgvNo, string workshopNo,string conv_back)
  141. {
  142. string plc_name = "conveyor02";
  143. //查询Agv对接口输送线信息
  144. var conv_agv = ConveyorHelper.GetConveyorSignal(plc_name, requestagvPos);
  145. if (conv_agv.DB521_Request || conv_agv.DB521_Goodsend == Convert.ToInt32(upPosConvNo))
  146. {
  147. throw new Exception(string.Format("车间[{0}]出口[{1}]存在电控信号(请求,目标地址为RGV下料位置),RGV[{2}]无法执行到下料位置[{3}]的出库任务", workshopNo,requestagvPos, rgvNo, upPosConvNo));
  148. }
  149. //查询扫码位置
  150. var conv_scanning = ConveyorHelper.GetConveyorSignal(plc_name, scanningRequestPos);
  151. if (conv_scanning.DB521_Request || conv_scanning.DB521_Goodsend == Convert.ToInt32(upPosConvNo))
  152. {
  153. throw new Exception(string.Format("车间[{0}]扫码入口[{1}]存在电控信号(请求,目标地址为RGV下料位置),RGV[{2}]无法执行到下料位置[{3}]的出库任务", workshopNo, scanningRequestPos, rgvNo, upPosConvNo));
  154. }
  155. //判断出口是否存在入库的任务
  156. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 1 && (v.TASK_POSIDFROM == requestagvPos || v.TASK_POSIDFROM == scanningRequestPos || v.TASK_POSIDFROM == conv_back) && (v.TASK_WKSTATUS <= 1 || v.TASK_POSIDNEXT == upPosConvNo)))
  157. {
  158. throw new Exception(string.Format("车间[{0}]出口[{1}]扫码入口[{2}]存在入库任务,RGV[{3}]无法执行到下料位置[{4}]的出库任务", workshopNo, requestagvPos, scanningRequestPos, rgvNo, upPosConvNo));
  159. }
  160. //判断是否存在原膜托盘的出库任务
  161. var taskSet = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == requestagvPos || v.TASK_POSIDNEXT == onMatManualPos || v.TASK_POSIDNEXT == upPosConvNo)).ToList();
  162. if (taskSet.Count >= 2 && taskSet.Any(v => v.TASK_BOXBARCODE.Substring(0, 3) == "TPC"))
  163. {
  164. //var task_dtl = SugarBase.DB.Queryable<WCS_TASK_DTL>().Where(v => taskSet.Any(t => t.TASK_NO == v.TASKNO)).OrderBy(v => v.EXECUTEDATE).First();
  165. //if (taskSet.First(v => v.TASK_NO == task_dtl.TASKNO).TASK_BOXBARCODE.Substring(0, 3) == "TPC")
  166. //{
  167. // return false;
  168. //}
  169. if (taskSet.Any(v => v.TASK_POSIDNEXT == onMatManualPos))
  170. {
  171. throw new Exception(string.Format("车间[{0}]缓存位置[{1}]存在出库任务,RGV[{2}]无法执行到下料位置[{3}]的出库任务", workshopNo, onMatManualPos, rgvNo, upPosConvNo));
  172. }
  173. }
  174. if (taskSet.Count == 1)
  175. {
  176. //查询人工上熟化架位置是否存在任务
  177. var conv_Manual = ConveyorHelper.GetConveyorSignal(plc_name, onMatManualPos);
  178. if (conv_Manual.DB521_Tasknum > 0 && conv_Manual.DB521_Tasknum < 10000 || conv_Manual.DB521_Request)
  179. {
  180. throw new Exception(string.Format("车间[{0}]人工上料位置[{1}]存在电控信号(请求,任务号),RGV[{2}]无法执行出库任务", workshopNo, onMatManualPos, rgvNo));
  181. }
  182. }
  183. }
  184. /// <summary>
  185. /// 检测是否存在出库任务
  186. /// </summary>
  187. private void CheckIsExistOutTask(string convNo, string barcode = "")
  188. {
  189. if (convNo == Conv_1112)//7#AGV对接工位
  190. {
  191. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1518 || v.TASK_POSIDNEXT == Conv_1115 || v.TASK_POSIDNEXT == Conv_1112) && v.TASK_POSIDCUR != Conv_1115))
  192. {
  193. throw new Exception(string.Format("车间[7]输送线[{0}]请求,存在出库任务,交通管制无法入库,请等待。", convNo));
  194. }
  195. }
  196. else if (convNo == Conv_1107)//6#AGV对接工位
  197. {
  198. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1504 || v.TASK_POSIDNEXT == Conv_1110 || v.TASK_POSIDNEXT == Conv_1107) && v.TASK_POSIDCUR != Conv_1110))
  199. {
  200. throw new Exception(string.Format("车间[6]输送线[{0}]请求,存在出库任务,交通管制无法入库,请等待。", convNo));
  201. }
  202. }
  203. else if (convNo == Conv_1114)//7#扫描位置
  204. {
  205. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1518 || v.TASK_POSIDNEXT == Conv_1115 || v.TASK_POSIDNEXT == Conv_1112) && (v.TASK_POSIDCUR != Conv_1112)))
  206. {
  207. if (Current.TaskSet.Any(v => v.TASK_BOXBARCODE == barcode)) throw new Exception(string.Format("条码[{0}]存在任务,不能生成异常任务", barcode));
  208. //生成退回异常任务
  209. string msg = string.Format("车间[7]输送线[{0}]条码[{1}]无法入库,单通道存在出库任务。", convNo, barcode);
  210. //LogMessageHelper.RecordLogMessage(msg);
  211. string errormsg = TryCachHelper.TryTranExecute((db) =>
  212. {
  213. BaseWorkflow.AddLedErrorMsg(db, Conv_1114, msg, 0);
  214. //wms任务异常需要生成退回托盘任务
  215. var wcstask = new WCS_TASK();
  216. wcstask.TASK_WMSNO = "wcs_" + DateTime.Now.ToString("yyyyMMddhhmmss");
  217. wcstask.TASK_COMTYPE = (int)ComTypeEnum.托盘异常退回;
  218. wcstask.TASK_SYSTYPE = "WCS";
  219. wcstask.TASK_POSIDFROM = Conv_1114;//起点地址
  220. wcstask.TASK_POSIDCUR = Conv_1114;
  221. wcstask.TASK_POSIDNEXT = Conv_1114;
  222. wcstask.TASK_POSIDMOVE = "";
  223. wcstask.TASK_PRIORITY = 1;
  224. wcstask.TASK_WKSTATUS = 1;
  225. wcstask.TASK_WHID = "PVC原膜立库";
  226. wcstask.TASK_ADDUSERNO = "WCS";
  227. wcstask.TASK_ADDDATETIME = DateTime.Now;
  228. wcstask.TASK_EDITUSERNO = "WCS";
  229. wcstask.TASK_EDITDATETIME = DateTime.Now;
  230. wcstask.TASK_NOTES = "";
  231. wcstask.TASK_RGVNO = "";
  232. wcstask.TASK_BOXBARCODE = barcode;
  233. wcstask.TASK_POSIDTO = Conv_1115;
  234. //wcstask.TASK_NOTES = errormsg;
  235. int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
  236. if (id <= 0)
  237. {
  238. throw new Exception(string.Format("条码[{0}]添加WCS任务失败", barcode));
  239. }
  240. else
  241. {
  242. wcstask.TASK_NO = id;
  243. }
  244. CommonData.AddWCS_TASK_DTL(db, wcstask.TASK_NO, wcstask.TASK_NO, wcstask.TASK_POSIDCUR, wcstask.TASK_POSIDTO, msg);
  245. });
  246. if (string.IsNullOrWhiteSpace(errormsg))
  247. {
  248. throw new Exception(msg);
  249. }
  250. else
  251. {
  252. throw new Exception(errormsg);
  253. }
  254. }
  255. }
  256. else if (convNo == Conv_1109)//6#扫描位置
  257. {
  258. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1504 || v.TASK_POSIDNEXT == Conv_1110 || v.TASK_POSIDNEXT == Conv_1107) && (v.TASK_POSIDCUR != Conv_1107)))
  259. {
  260. if (Current.TaskSet.Any(v => v.TASK_BOXBARCODE == barcode)) throw new Exception(string.Format("条码[{0}]存在任务,不能生成异常任务", barcode));
  261. //生成退回异常任务
  262. string msg = string.Format("车间[6]输送线[{0}]条码[{1}]无法入库,单通道存在出库任务。", convNo, barcode);
  263. //LogMessageHelper.RecordLogMessage(msg);
  264. string errormsg = TryCachHelper.TryTranExecute((db) =>
  265. {
  266. BaseWorkflow.AddLedErrorMsg(db, convNo, msg, 0);
  267. //wms任务异常需要生成退回托盘任务
  268. var wcstask = new WCS_TASK();
  269. wcstask.TASK_WMSNO = "wcs_" + DateTime.Now.ToString("yyyyMMddhhmmss");
  270. wcstask.TASK_COMTYPE = (int)ComTypeEnum.托盘异常退回;
  271. wcstask.TASK_SYSTYPE = "WCS";
  272. wcstask.TASK_POSIDFROM = convNo;//起点地址
  273. wcstask.TASK_POSIDCUR = convNo;
  274. wcstask.TASK_POSIDNEXT = convNo;
  275. wcstask.TASK_POSIDMOVE = "";
  276. wcstask.TASK_PRIORITY = 1;
  277. wcstask.TASK_WKSTATUS = 1;
  278. wcstask.TASK_WHID = "PVC原膜立库";
  279. wcstask.TASK_ADDUSERNO = "WCS";
  280. wcstask.TASK_ADDDATETIME = DateTime.Now;
  281. wcstask.TASK_EDITUSERNO = "WCS";
  282. wcstask.TASK_EDITDATETIME = DateTime.Now;
  283. wcstask.TASK_NOTES = "";
  284. wcstask.TASK_RGVNO = "";
  285. wcstask.TASK_BOXBARCODE = barcode;
  286. wcstask.TASK_POSIDTO = Conv_1110;
  287. //wcstask.TASK_NOTES = errormsg;
  288. int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
  289. if (id <= 0)
  290. {
  291. throw new Exception(string.Format("条码[{0}]添加WCS任务失败", barcode));
  292. }
  293. else
  294. {
  295. wcstask.TASK_NO = id;
  296. }
  297. CommonData.AddWCS_TASK_DTL(db, wcstask.TASK_NO, wcstask.TASK_NO, wcstask.TASK_POSIDCUR, wcstask.TASK_POSIDTO, msg);
  298. });
  299. if (string.IsNullOrWhiteSpace(errormsg))
  300. {
  301. throw new Exception(msg);
  302. }
  303. else
  304. {
  305. throw new Exception(errormsg);
  306. }
  307. }
  308. }
  309. else if (convNo == Conv_1115)//7#人工上料位置
  310. {
  311. var tasks_1115 = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1518 || v.TASK_POSIDNEXT == Conv_1115 || v.TASK_POSIDNEXT == Conv_1112) && v.TASK_POSIDCUR != Conv_1112).ToList();
  312. if (tasks_1115.Any(v => (v.TASK_POSIDCUR == Conv_1112 && v.TASK_BOXBARCODE.Contains("SH")) == false))
  313. {
  314. throw new Exception(string.Format("车间[7]输送线[{0}]请求,存在出库任务,交通管制无法入库,请等待。", convNo));
  315. }
  316. }
  317. else if (convNo == Conv_1110)//6#人工上料位置
  318. {
  319. var tasks_1110 = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1504 || v.TASK_POSIDNEXT == Conv_1110 || v.TASK_POSIDNEXT == Conv_1107) &&
  320. (v.TASK_POSIDCUR != Conv_1109)).ToList();
  321. if (tasks_1110.Any(v => (v.TASK_POSIDCUR == Conv_1107 && v.TASK_BOXBARCODE.Contains("SH")) == false))
  322. {
  323. throw new Exception(string.Format("车间[6]输送线[{0}]请求,存在出库任务,交通管制无法入库,请等待。", convNo));
  324. }
  325. }
  326. else if (convNo == Conv_1102)//5#扫描位置
  327. {
  328. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1099 || v.TASK_POSIDNEXT == Conv_1105) && v.TASK_POSIDCUR != Conv_1105))
  329. {
  330. if (Current.TaskSet.Any(v => v.TASK_BOXBARCODE == barcode && v.TASK_WKSTATUS > 1 && v.TASK_WKSTATUS != 12)) throw new Exception(string.Format("条码[{0}]存在任务,不能生成异常任务", barcode));
  331. if(!SugarBase.DB.Queryable<WCS_TASK>().Any(v=>v.TASK_BOXBARCODE==barcode && v.TASK_COMTYPE == 6))
  332. {
  333. //生成退回异常任务
  334. string msg = string.Format("车间[5]输送线[{0}]条码[{1}]无法入库,单通道存在出库任务。", convNo, barcode);
  335. //LogMessageHelper.RecordLogMessage(msg);
  336. string errormsg = TryCachHelper.TryTranExecute((db) =>
  337. {
  338. BaseWorkflow.AddLedErrorMsg(db, convNo, msg, 0);
  339. //wms任务异常需要生成退回托盘任务
  340. var wcstask = new WCS_TASK();
  341. wcstask.TASK_WMSNO = "wcs_" + DateTime.Now.ToString("yyyyMMddhhmmss");
  342. wcstask.TASK_COMTYPE = (int)ComTypeEnum.托盘异常退回;
  343. wcstask.TASK_SYSTYPE = "WCS";
  344. wcstask.TASK_POSIDFROM = convNo;//起点地址
  345. wcstask.TASK_POSIDCUR = convNo;
  346. wcstask.TASK_POSIDNEXT = convNo;
  347. wcstask.TASK_POSIDMOVE = "";
  348. wcstask.TASK_PRIORITY = 1;
  349. wcstask.TASK_WKSTATUS = 1;
  350. wcstask.TASK_WHID = "PVC原膜立库";
  351. wcstask.TASK_ADDUSERNO = "WCS";
  352. wcstask.TASK_ADDDATETIME = DateTime.Now;
  353. wcstask.TASK_EDITUSERNO = "WCS";
  354. wcstask.TASK_EDITDATETIME = DateTime.Now;
  355. wcstask.TASK_NOTES = "";
  356. wcstask.TASK_RGVNO = "";
  357. wcstask.TASK_BOXBARCODE = barcode;
  358. wcstask.TASK_POSIDTO = Conv_1104;
  359. //wcstask.TASK_NOTES = errormsg;
  360. int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
  361. if (id <= 0)
  362. {
  363. throw new Exception(string.Format("条码[{0}]添加WCS任务失败", barcode));
  364. }
  365. else
  366. {
  367. wcstask.TASK_NO = id;
  368. }
  369. CommonData.AddWCS_TASK_DTL(db, wcstask.TASK_NO, wcstask.TASK_NO, wcstask.TASK_POSIDCUR, wcstask.TASK_POSIDTO, msg);
  370. });
  371. if (string.IsNullOrWhiteSpace(errormsg))
  372. {
  373. throw new Exception(msg);
  374. }
  375. else
  376. {
  377. throw new Exception(errormsg);
  378. }
  379. }
  380. }
  381. }
  382. else if (convNo == Conv_1094)//4#扫描位置
  383. {
  384. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1092 || v.TASK_POSIDNEXT == Conv_1098) && v.TASK_POSIDCUR != Conv_1098))
  385. {
  386. if (Current.TaskSet.Any(v => v.TASK_BOXBARCODE == barcode && v.TASK_WKSTATUS > 1 && v.TASK_WKSTATUS != 12)) throw new Exception(string.Format("条码[{0}]存在任务,不能生成异常任务", barcode));
  387. if (!SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_BOXBARCODE == barcode && v.TASK_COMTYPE == 6))
  388. {
  389. //生成退回异常任务
  390. string msg = string.Format("车间[4]输送线[{0}]条码[{1}]无法入库,单通道存在出库任务。", convNo, barcode);
  391. //LogMessageHelper.RecordLogMessage(msg);
  392. string errormsg = TryCachHelper.TryTranExecute((db) =>
  393. {
  394. BaseWorkflow.AddLedErrorMsg(db, convNo, msg, 0);
  395. //wms任务异常需要生成退回托盘任务
  396. var wcstask = new WCS_TASK();
  397. wcstask.TASK_WMSNO = "wcs_" + DateTime.Now.ToString("yyyyMMddhhmmss");
  398. wcstask.TASK_COMTYPE = (int)ComTypeEnum.托盘异常退回;
  399. wcstask.TASK_SYSTYPE = "WCS";
  400. wcstask.TASK_POSIDFROM = convNo;//起点地址
  401. wcstask.TASK_POSIDCUR = convNo;
  402. wcstask.TASK_POSIDNEXT = convNo;
  403. wcstask.TASK_POSIDMOVE = "";
  404. wcstask.TASK_PRIORITY = 1;
  405. wcstask.TASK_WKSTATUS = 1;
  406. wcstask.TASK_WHID = "PVC原膜立库";
  407. wcstask.TASK_ADDUSERNO = "WCS";
  408. wcstask.TASK_ADDDATETIME = DateTime.Now;
  409. wcstask.TASK_EDITUSERNO = "WCS";
  410. wcstask.TASK_EDITDATETIME = DateTime.Now;
  411. wcstask.TASK_NOTES = "";
  412. wcstask.TASK_RGVNO = "";
  413. wcstask.TASK_BOXBARCODE = barcode;
  414. wcstask.TASK_POSIDTO = Conv_1097;
  415. //wcstask.TASK_NOTES = errormsg;
  416. int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
  417. if (id <= 0)
  418. {
  419. throw new Exception(string.Format("条码[{0}]添加WCS任务失败", barcode));
  420. }
  421. else
  422. {
  423. wcstask.TASK_NO = id;
  424. }
  425. CommonData.AddWCS_TASK_DTL(db, wcstask.TASK_NO, wcstask.TASK_NO, wcstask.TASK_POSIDCUR, wcstask.TASK_POSIDTO, msg);
  426. });
  427. if (string.IsNullOrWhiteSpace(errormsg))
  428. {
  429. throw new Exception(msg);
  430. }
  431. else
  432. {
  433. throw new Exception(errormsg);
  434. }
  435. }
  436. }
  437. }
  438. else if (convNo == Conv_1097)//4#AGV对接位置
  439. {
  440. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1092 || v.TASK_POSIDNEXT == Conv_1098 || v.TASK_POSIDNEXT == Conv_1097) && v.TASK_POSIDCUR != Conv_1098 && v.TASK_POSIDCUR != Conv_1104))
  441. {
  442. throw new Exception(string.Format("车间[4]输送线[{0}]请求,存在出库任务,交通管制无法入库,请等待。", convNo));
  443. }
  444. }
  445. else if (convNo == Conv_1104)//5#AGV对接位置
  446. {
  447. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && (v.TASK_POSIDNEXT == Conv_1099 || v.TASK_POSIDNEXT == Conv_1105 || v.TASK_POSIDNEXT == Conv_1104) && v.TASK_POSIDCUR != Conv_1105 && v.TASK_POSIDCUR != Conv_1104))
  448. {
  449. throw new Exception(string.Format("车间[5]输送线[{0}]请求,存在出库任务,交通管制无法入库,请等待。", convNo));
  450. }
  451. }
  452. else if (convNo == Conv_1155 || convNo == Conv_1156 || convNo == Conv_1157 || convNo == Conv_1158)
  453. {
  454. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && v.TASK_POSIDNEXT == convNo))
  455. {
  456. throw new Exception(string.Format("输送线[{0}]条码[{1}]不能入库,存在出库到该位置的任务。", convNo, barcode));
  457. }
  458. }
  459. }
  460. }
  461. }