WCS_ExtendedBLL.cs 28 KB

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