BaseWorkflow.cs 72 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467
  1. using SqlSugar;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Threading;
  7. using WCS.Data;
  8. using WCS.Data.Models;
  9. using WCS.Data.Utils;
  10. using WCS.PLC.Model.Equipment;
  11. using static WCS.PLC.Base_Conv;
  12. using static WCS.WMSWorkflow.ApiParam;
  13. namespace WCS.PLC
  14. {
  15. public class BaseWorkflow
  16. {
  17. private static int _putTaskStep = 0;
  18. #region private Method
  19. public static void MoveTaskToDis(WCS_TASK task)
  20. {
  21. TryCachHelper.TryTranExecute((db) =>
  22. {
  23. //添加机械手码垛位置条码信息
  24. var sysset = Current.SysSets.SingleOrDefault(v => v.SET_TYPE == "PalletizingPos" && v.SET_ID == task.TASK_POSIDTO && task.TASK_POSIDFROM != "1390");
  25. if (sysset != null)
  26. {
  27. string time = DateTime.Now.ToString("yyyyMMddhhmmss");
  28. db.Updateable<WCS_SYSSET>(it => new WCS_SYSSET()
  29. {
  30. SET_MEMO = task.TASK_BOXBARCODE,
  31. SET_EDITUSERNO = "wcs",
  32. SET_EDITTIME = time
  33. })
  34. .Where(it => it.SET_ID == sysset.SET_ID).ExecuteCommand();
  35. }
  36. //移动任务到历史列表
  37. var task_dis = ExtendsUtil.Mapper<WCS_TASK_DIS, WCS_TASK>(task);
  38. task_dis.TASK_DELETEUSER = "wcs";
  39. task_dis.TASK_DELETEDATE = db.GetDate();
  40. if (db.Insertable(task_dis).ExecuteCommand() <= 0)
  41. {
  42. throw new Exception(string.Format("任务[{0}]插入历史列表失败", task_dis.TASK_NO));
  43. }
  44. var taskdtlSet = db.Queryable<WCS_TASK_DTL>().Where(v => v.PARENTID == task.TASK_NO).ToList();
  45. foreach (var taskdtl in taskdtlSet)
  46. {
  47. var task_dis_dtl = ExtendsUtil.Mapper<WCS_TASK_DIS_DTL, WCS_TASK_DTL>(taskdtl);
  48. if (db.Insertable(task_dis_dtl).ExecuteCommand() <= 0)
  49. {
  50. throw new Exception(string.Format("任务[{0}]明细插入到历史列表失败", task_dis.TASK_NO));
  51. }
  52. if (db.Deleteable(taskdtl).ExecuteCommand() <= 0)
  53. {
  54. throw new Exception(string.Format("任务[{0}]明细删除失败", task_dis.TASK_NO));
  55. }
  56. }
  57. //删除当前任务
  58. if (db.Deleteable(task).ExecuteCommand() <= 0)
  59. {
  60. throw new Exception(string.Format("任务[{0}]删除失败", task_dis.TASK_NO));
  61. }
  62. });
  63. }
  64. public static void MoveAgvTaskToDis(Middle_AGVTask task)
  65. {
  66. TryCachHelper.TryTranExecute((db) =>
  67. {
  68. //移动任务到历史列表
  69. var task_dis = ExtendsUtil.Mapper<Middle_AGVTask_Dis, Middle_AGVTask>(task);
  70. task_dis.Task_FinishDate = db.GetDate();
  71. if (db.Insertable(task_dis).ExecuteCommand() <= 0)
  72. {
  73. throw new Exception(string.Format("任务[{0}]插入历史列表失败", task_dis.Task_Id));
  74. }
  75. //删除当前任务
  76. if (db.Deleteable(task).ExecuteCommand() <= 0)
  77. {
  78. throw new Exception(string.Format("任务[{0}]删除失败", task_dis.Task_Id));
  79. }
  80. });
  81. }
  82. #endregion private Method
  83. #region public Method
  84. /// <summary>
  85. /// 更新任务进程
  86. /// </summary>
  87. public static void PutTaskStep()
  88. {
  89. if (Interlocked.Exchange(ref _putTaskStep, 1) == 0)
  90. {
  91. try
  92. {
  93. var tasks = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_WKSTATUS >= 1).ToList();
  94. var agvtasks = Current.AgvTaskSet.Where(v => v.Task_WcsStatus == 106 || v.Task_WcsStatus == 99 || v.Task_WcsStatus == 4).ToList();
  95. if (tasks.Count == 0 && agvtasks.Count == 0) return;
  96. var tasks_NoFinish = tasks.Where(v => v.TASK_WKSTATUS < 99 && v.TASK_COMTYPE != 6 && (v.TASK_POSIDTO != "1288") && (v.TASK_POSIDTO != "1293")).ToList();
  97. if (tasks_NoFinish.Count > 0)
  98. {
  99. var PutTaskStepList = Current.WmsInterface.I_WCS_PutTaskStep(tasks_NoFinish);
  100. foreach (var item in PutTaskStepList)
  101. {
  102. var task = tasks.FirstOrDefault(v => v.TASK_WMSNO == item.WMSTaskNum);
  103. if (!item.ResType)
  104. {
  105. string msg = string.Format("任务[{0}]更新进程失败,原因:[{1}]", task.TASK_NO, item.ResMessage);
  106. LogMessageHelper.RecordLogMessage(msg);
  107. }
  108. }
  109. }
  110. var tasks_Finish = tasks.Where(v => v.TASK_WKSTATUS >= 99 && (v.TASK_POSIDTO != "1508") && (v.TASK_POSIDTO != "1509") && (v.TASK_POSIDTO != "1288") && (v.TASK_POSIDTO != "1293")).ToList();
  111. if (tasks_Finish.Count > 0)
  112. {
  113. var PutTaskStepList_finish = Current.WmsInterface.I_WCS_PutTaskStep(tasks_Finish);
  114. foreach (var item in PutTaskStepList_finish)
  115. {
  116. var task = tasks.FirstOrDefault(v => v.TASK_WMSNO == item.WMSTaskNum);
  117. if (item.ResType)
  118. {
  119. if (task.TASK_WKSTATUS >= 99)
  120. {
  121. MoveTaskToDis(task);
  122. }
  123. }
  124. else
  125. {
  126. string msg = string.Format("任务[{0}]更新进程失败,原因:[{1}]", task.TASK_NO, item.ResMessage);
  127. LogMessageHelper.RecordLogMessage(msg);
  128. }
  129. }
  130. }
  131. var task_Finish2 = tasks.FirstOrDefault(v => v.TASK_WKSTATUS >= 99 && v.TASK_POSIDTO == "1508");
  132. if (task_Finish2 != null)
  133. {
  134. var tasks_Finishs = new List<WCS_TASK>();
  135. tasks_Finishs.Add(task_Finish2);
  136. var PutTaskStepList_finish = Current.WmsInterface.I_WCS_PutTaskStep(tasks_Finishs);
  137. foreach (var item in PutTaskStepList_finish)
  138. {
  139. var task = tasks.FirstOrDefault(v => v.TASK_WMSNO == item.WMSTaskNum);
  140. if (item.ResType)
  141. {
  142. if (task.TASK_WKSTATUS >= 99)
  143. {
  144. if (Current.TaskSet.Any(v => v.TASK_BOXBARCODE == task_Finish2.TASK_BOXBARCODE && v.TASK_COMTYPE == 1))
  145. {
  146. MoveTaskToDis(task);
  147. }
  148. }
  149. }
  150. else
  151. {
  152. string msg = string.Format("任务[{0}]更新进程失败,原因:[{1}]", task.TASK_NO, item.ResMessage);
  153. LogMessageHelper.RecordLogMessage(msg);
  154. }
  155. }
  156. }
  157. var task_Finish3 = tasks.FirstOrDefault(v => v.TASK_WKSTATUS >= 99 && v.TASK_POSIDTO == "1509");
  158. if (task_Finish3 != null)
  159. {
  160. var tasks_F = new List<WCS_TASK>();
  161. tasks_F.Add(task_Finish3);
  162. var PutTaskStepList_finish = Current.WmsInterface.I_WCS_PutTaskStep(tasks_F);
  163. foreach (var item in PutTaskStepList_finish)
  164. {
  165. var task = tasks.FirstOrDefault(v => v.TASK_WMSNO == item.WMSTaskNum);
  166. if (item.ResType)
  167. {
  168. if (task.TASK_WKSTATUS >= 99)
  169. {
  170. if (Current.TaskSet.Any(v => v.TASK_BOXBARCODE == task_Finish3.TASK_BOXBARCODE && v.TASK_COMTYPE == 1))
  171. {
  172. MoveTaskToDis(task);
  173. }
  174. }
  175. }
  176. else
  177. {
  178. string msg = string.Format("任务[{0}]更新进程失败,原因:[{1}]", task.TASK_NO, item.ResMessage);
  179. LogMessageHelper.RecordLogMessage(msg);
  180. }
  181. }
  182. }
  183. var tasks_Exception = tasks.Where(v => v.TASK_WKSTATUS >= 99 && (v.TASK_COMTYPE == 6 || v.TASK_POSIDTO == "1288" || v.TASK_POSIDTO == "1293")).ToList();
  184. foreach (var item in tasks_Exception)
  185. {
  186. MoveTaskToDis(item);
  187. }
  188. foreach (var item in agvtasks)
  189. {
  190. if (item.Task_WcsStatus == 99 || item.Task_WcsStatus == 4)
  191. {
  192. //if (item.Task_Type == 3 || (item.Task_Type == 1 && (item.Task_WorkshopNo == "18" || item.Task_WorkshopNo == "4" || item.Task_WorkshopNo == "5")))
  193. if (item.Task_Type == 3 || (item.Task_Type == 1 && item.Task_WorkshopNo == "18"))
  194. {
  195. var wcstask = Current.TaskSet.SingleOrDefault(v => v.TASK_ITEM8 == item.Task_Id.ToString());
  196. if (wcstask == null || wcstask.TASK_WKSTATUS >= 99)
  197. {
  198. if (item.Task_WcsStatus == 99) MoveAgvTaskToDis(item);//任务完成
  199. continue;
  200. }
  201. wcstask.TASK_WKSTATUS = 99;
  202. wcstask.TASK_EDITUSERNO = "wcs";
  203. wcstask.TASK_EDITDATETIME = DateTime.Now;
  204. int updateresult = SugarBase.DB.Updateable(wcstask)
  205. .UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME })
  206. .ExecuteCommand();
  207. if (updateresult <= 0)
  208. {
  209. LogMessageHelper.RecordLogMessage(string.Format("空熟化架呼叫AGV任务[{0}]已完成,完成WCS任务[{1}]失败。", item.Task_Id, wcstask.TASK_NO));
  210. continue;
  211. }
  212. else
  213. {
  214. if (item.Task_WcsStatus == 99) MoveAgvTaskToDis(item);//任务完成
  215. }
  216. }
  217. else if (item.Task_Type == 1 || item.Task_Type == 2 || item.Task_Type == 4)
  218. {
  219. if (item.Task_WcsStatus == 99) MoveAgvTaskToDis(item);//任务完成
  220. }
  221. }
  222. else if (item.Task_WcsStatus == 106 && item.Task_AgvStatus == 106)
  223. {
  224. MoveAgvTaskToDis(item);//任务完成
  225. }
  226. }
  227. }
  228. catch (Exception ex)
  229. {
  230. LogMessageHelper.RecordLogMessage(ex);
  231. }
  232. finally
  233. {
  234. Interlocked.Exchange(ref _putTaskStep, 0);
  235. }
  236. }
  237. }
  238. public static WCS_TASK GetInTask(GetInTaskParam param)
  239. {
  240. WCS_TASK wcstask = null;
  241. try
  242. {
  243. wcstask = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_BOXBARCODE == param.ContainerBarCode);
  244. if (wcstask == null)
  245. {
  246. var reply = Current.WmsInterface.I_WCS_GetInTask(param);
  247. string errormsg = CheckGetInTask(param, reply);
  248. if (string.IsNullOrWhiteSpace(errormsg))
  249. {
  250. //添加wcs任务
  251. wcstask = new WCS_TASK();
  252. wcstask.TASK_WMSNO = reply.WMSTaskNum;
  253. wcstask.TASK_COMTYPE = reply.TaskType;
  254. wcstask.TASK_SYSTYPE = "WMS";
  255. wcstask.TASK_POSIDFROM = param.EquipmentNo;//起点地址
  256. wcstask.TASK_POSIDCUR = param.EquipmentNo;
  257. wcstask.TASK_POSIDNEXT = param.EquipmentNo;
  258. wcstask.TASK_POSIDMOVE = "";
  259. wcstask.TASK_PRIORITY = reply.Priority;
  260. wcstask.TASK_WKSTATUS = 0;
  261. wcstask.TASK_WHID = reply.WareHouseName;
  262. wcstask.TASK_ADDUSERNO = "WMS";
  263. wcstask.TASK_ADDDATETIME = DateTime.Now;
  264. wcstask.TASK_EDITUSERNO = "WMS";
  265. wcstask.TASK_EDITDATETIME = DateTime.Now;
  266. wcstask.TASK_NOTES = "";
  267. wcstask.TASK_RGVNO = "";
  268. wcstask.TASK_BOXBARCODE = param.ContainerBarCode;
  269. wcstask.TASK_WEIGHT = reply.TASK_WEIGHT;
  270. wcstask.TASK_STACKINGTYPE = reply.TASK_STACKINGTYPE;
  271. if (!string.IsNullOrWhiteSpace(reply.Memo1))
  272. {
  273. wcstask.TASK_IsWrapFilm = reply.Memo1.Trim() == "1" ? true : false;
  274. }
  275. if (string.IsNullOrWhiteSpace(param.Memo1))
  276. {
  277. wcstask.TASK_POSIDTO = reply.EndPostion;
  278. wcstask.TASK_SRMNO = reply.EndPostion;
  279. wcstask.PalletizingBoxSize = reply.PalletizingBoxSize;
  280. wcstask.TASK_ORDERTYPE = reply.IsLastBox ? 1 : 0;
  281. }
  282. else if (param.Memo1.Trim() == "1")
  283. {
  284. string srmno = string.Empty;
  285. wcstask.TASK_EndTunnelNum = ConveyorHelper.QueryTunnel(wcstask.TASK_WMSNO, reply.TunnelNum, out srmno);
  286. wcstask.TASK_POSIDTO = srmno;
  287. wcstask.TASK_SRMNO = srmno;
  288. }
  289. else if (param.Memo1.Trim() == "2")
  290. {
  291. wcstask.TASK_POSIDTO = reply.EndPostion;
  292. wcstask.TASK_EndTunnelNum = reply.TunnelNum;
  293. wcstask.TASK_SRMNO = Current.SysSets.Where(v => v.SET_ID.Contains("Tunnel")).FirstOrDefault(v => v.SET_VALUE == reply.TunnelNum).SET_VALUE;
  294. }
  295. else
  296. {
  297. throw new Exception(string.Format("托盘[{0}]调用WMS入库接口传递参数Memo1错误.", param.ContainerBarCode));
  298. }
  299. if (param.EquipmentNo == "1109" || param.EquipmentNo == "1114" || param.EquipmentNo == "1102" || param.EquipmentNo == "1094")
  300. {
  301. wcstask.TASK_MatureType = reply.TASK_MatureType;
  302. wcstask.TASK_MatureTemperat = reply.TASK_MatureTemperat;
  303. wcstask.TASK_MatureDate = reply.TASK_MatureDate;
  304. }
  305. int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
  306. if (id <= 0)
  307. {
  308. throw new Exception(string.Format("WMS任务[{0}]添加WCS任务失败", reply.WMSTaskNum));
  309. }
  310. else
  311. {
  312. wcstask.TASK_NO = id;
  313. }
  314. }
  315. else
  316. {
  317. LogMessageHelper.RecordLogMessage(errormsg);
  318. AddLedErrorMsg(param.EquipmentNo, errormsg, 0);
  319. if (!string.IsNullOrWhiteSpace(param.Memo2))
  320. {
  321. //wms任务异常需要生成退回托盘任务
  322. wcstask = new WCS_TASK()
  323. {
  324. TASK_WMSNO = "wcs_" + DateTime.Now.ToString("yyyyMMddhhmmss"),
  325. TASK_COMTYPE = (int)ComTypeEnum.托盘异常退回,
  326. TASK_SYSTYPE = "WCS",
  327. TASK_POSIDFROM = param.EquipmentNo,//起点地址
  328. TASK_POSIDCUR = param.EquipmentNo,
  329. TASK_POSIDNEXT = param.EquipmentNo,
  330. TASK_POSIDMOVE = "",
  331. TASK_PRIORITY = 1,
  332. TASK_WKSTATUS = 1,
  333. TASK_WHID = string.IsNullOrWhiteSpace(reply.WareHouseName) ? Current.WareNameList[0] : reply.WareHouseName,
  334. TASK_ADDUSERNO = "WCS",
  335. TASK_ADDDATETIME = DateTime.Now,
  336. TASK_EDITUSERNO = "WCS",
  337. TASK_EDITDATETIME = DateTime.Now,
  338. TASK_NOTES = "",
  339. TASK_RGVNO = "",
  340. TASK_BOXBARCODE = param.ContainerBarCode,
  341. TASK_POSIDTO = param.Memo2.Trim()
  342. };
  343. int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
  344. if (id <= 0)
  345. {
  346. throw new Exception(string.Format("WMS任务[{0}]添加WCS任务失败", reply.WMSTaskNum));
  347. }
  348. else
  349. {
  350. wcstask.TASK_NO = id;
  351. }
  352. var task_dtl = new WCS_TASK_DTL()
  353. {
  354. ID = Guid.NewGuid().ToString(),
  355. PARENTID = wcstask.TASK_NO,
  356. TASKNO = wcstask.TASK_NO,
  357. POSIDCUR = param.EquipmentNo,
  358. POSIDNEXT = param.EquipmentNo,
  359. DESCRIPTION = errormsg,
  360. EXECUTEDATE = DateTime.Now
  361. };
  362. SugarBase.DB.Insertable(task_dtl).ExecuteReturnIdentity();
  363. }
  364. }
  365. }
  366. }
  367. catch (Exception ex)
  368. {
  369. LogMessageHelper.RecordLogMessage(ex);
  370. }
  371. return wcstask;
  372. }
  373. public static bool WCS_GetOutTask(GetOutTaskParam param)
  374. {
  375. bool result = false;
  376. WCS_TASK wcstask = null;
  377. try
  378. {
  379. var reply = Current.WmsInterface.I_WCS_GetOutTask(param);
  380. if (reply.ResType)
  381. {
  382. if (!string.IsNullOrWhiteSpace(param.Memo1))
  383. {
  384. if (param.Memo1.Trim() == "1")
  385. {
  386. var agvtask = Current.AgvTaskSet.FirstOrDefault(v => v.Task_Id.ToString() == param.OutId);
  387. if (agvtask != null)
  388. {
  389. DateTime dt = SugarBase.DB.GetDate();
  390. int task_id = Convert.ToInt32(param.OutId);
  391. SugarBase.DB.Updateable<Middle_AGVTask>(it => new Middle_AGVTask()
  392. {
  393. Task_WcsStatus = 5,
  394. Task_UpdateUser = "wcs",
  395. Task_UpdateDate = dt
  396. })
  397. .Where(it => it.Task_Id == task_id).ExecuteCommand();
  398. }
  399. result = true;
  400. return result;
  401. }
  402. }
  403. if (string.IsNullOrWhiteSpace(reply.WMSTaskNum))
  404. {
  405. throw new Exception(string.Format("工位[{0}]申请出库任务反馈WMS任务号不能为空。", param.OutEndPostion));
  406. }
  407. if (reply.TaskType <= 0)
  408. {
  409. throw new Exception(string.Format("工位[{0}]申请出库任务反馈任务类型必须大于零。", param.OutEndPostion));
  410. }
  411. if (string.IsNullOrWhiteSpace(reply.OutWareCellNo))
  412. {
  413. throw new Exception(string.Format("工位[{0}]申请出库任务反馈出库位置不能为空。", param.OutEndPostion));
  414. }
  415. if (string.IsNullOrWhiteSpace(reply.WareHouseName))
  416. {
  417. throw new Exception(string.Format("工位[{0}]申请出库任务反馈仓库不能为空。", param.OutEndPostion));
  418. }
  419. if (string.IsNullOrWhiteSpace(reply.ContainerBarCode))
  420. {
  421. throw new Exception(string.Format("工位[{0}]申请出库任务反馈条码编号不能为空。", param.OutEndPostion));
  422. }
  423. if (reply.TaskType == 2 && string.IsNullOrWhiteSpace(reply.TunnelNum))
  424. {
  425. throw new Exception(string.Format("工位[{0}]申请出库任务反馈巷道号不能为空。", param.OutEndPostion));
  426. }
  427. if (reply.TASK_STACKINGTYPE <= 0 && (param.OutEndPostion == "1251" || param.OutEndPostion == "1261" || param.OutEndPostion == "1226" || param.OutEndPostion == "1234" || param.OutEndPostion == "1257" || param.OutEndPostion == "1252" || param.OutEndPostion == "1231" || param.OutEndPostion == "1258" || param.OutEndPostion == "1278" || param.OutEndPostion == "1283"))
  428. {
  429. throw new Exception(string.Format("工位[{0}]申请出库任务[1]垛型存在问题,传递值必须大于零。", param.OutEndPostion, reply.WMSTaskNum));
  430. }
  431. if (string.IsNullOrWhiteSpace(reply.PalletizingBoxSize) && Convert.ToInt32(reply.PalletizingBoxSize) <= 0 && (param.OutEndPostion == "1251" || param.OutEndPostion == "1261" || param.OutEndPostion == "1226" || param.OutEndPostion == "1234" || param.OutEndPostion == "1257" || param.OutEndPostion == "1252" || param.OutEndPostion == "1231" || param.OutEndPostion == "1258" || param.OutEndPostion == "1278" || param.OutEndPostion == "1283"))
  432. {
  433. throw new Exception(string.Format("工位[{0}]申请出库任务[1]箱子尺寸存在问题,传递值必须大于零。", param.OutEndPostion, reply.WMSTaskNum));
  434. }
  435. var task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_WMSNO == reply.WMSTaskNum);
  436. if (task == null)
  437. {
  438. var agvtask = Current.AgvTaskSet.FirstOrDefault(v => v.Task_Id.ToString() == param.OutId);
  439. string msg = TryCachHelper.TryTranExecute((db) =>
  440. {
  441. if (agvtask != null)
  442. {
  443. DateTime dt = db.GetDate();
  444. int task_id = Convert.ToInt32(param.OutId);
  445. db.Updateable<Middle_AGVTask>(it => new Middle_AGVTask()
  446. {
  447. Task_WcsStatus = 5,
  448. Task_UpdateUser = "wcs",
  449. Task_UpdateDate = dt
  450. })
  451. .Where(it => it.Task_Id == task_id).ExecuteCommand();
  452. }
  453. //添加wcs任务
  454. wcstask = new WCS_TASK();
  455. wcstask.TASK_WMSNO = reply.WMSTaskNum;
  456. wcstask.TASK_COMTYPE = reply.TaskType;
  457. wcstask.TASK_SYSTYPE = "WMS";
  458. wcstask.TASK_POSIDFROM = reply.OutWareCellNo;//起点地址
  459. wcstask.TASK_POSIDCUR = reply.OutWareCellNo;
  460. wcstask.TASK_POSIDNEXT = reply.OutWareCellNo;
  461. wcstask.TASK_POSIDMOVE = "";
  462. wcstask.TASK_PRIORITY = reply.Priority;
  463. wcstask.TASK_WKSTATUS = 0;
  464. wcstask.TASK_WHID = reply.WareHouseName;
  465. wcstask.TASK_ADDUSERNO = "WMS";
  466. wcstask.TASK_ADDDATETIME = DateTime.Now;
  467. wcstask.TASK_EDITUSERNO = "WMS";
  468. wcstask.TASK_EDITDATETIME = DateTime.Now;
  469. wcstask.TASK_NOTES = "";
  470. wcstask.TASK_RGVNO = "";
  471. wcstask.TASK_BOXBARCODE = reply.ContainerBarCode;
  472. wcstask.TASK_POSIDTO = param.OutEndPostion;
  473. wcstask.TASK_PRIORITY = reply.Priority;
  474. wcstask.TASK_ITEM8 = param.OutId;
  475. wcstask.TASK_ITEM9 = reply.Memo4;
  476. wcstask.TASK_ITEM10 = reply.Memo5;
  477. wcstask.PalletizingSonTraySize = reply.PalletizingSonTraySize;
  478. wcstask.PalletizingBoxSize = reply.PalletizingBoxSize;
  479. wcstask.SonTrayColorNo = reply.SonTrayColorNo;
  480. wcstask.TASK_MatureDate = reply.MatureDateLength;
  481. wcstask.TASK_WEIGHT = reply.TASK_WEIGHT;
  482. wcstask.TASK_STACKINGTYPE = reply.TASK_STACKINGTYPE;
  483. if (param.TASK_MatureDate == 12 && wcstask.TASK_MatureDate == 48)
  484. {
  485. wcstask.MatureNum = 4;
  486. }
  487. else
  488. {
  489. wcstask.MatureNum = 1;
  490. }
  491. if (wcstask.TASK_BOXBARCODE.Substring(0, 2) == "SH")
  492. {
  493. wcstask.TASK_ITEM2 = "2";
  494. }
  495. else if (wcstask.TASK_BOXBARCODE.Substring(0, 3) == "TPC")
  496. {
  497. wcstask.TASK_ITEM2 = "1";
  498. }
  499. else
  500. {
  501. wcstask.TASK_ITEM2 = "3";
  502. }
  503. if (string.IsNullOrWhiteSpace(reply.TunnelNum))
  504. {
  505. //wcstask.TASK_SRMNO = reply.EndPostion;
  506. }
  507. else
  508. {
  509. wcstask.TASK_FromTunnelNum = reply.TunnelNum;
  510. wcstask.TASK_SRMNO = Current.SysSets.Where(v => v.SET_ID.Contains("Tunnel")).FirstOrDefault(v => v.SET_VALUE == reply.TunnelNum).SET_TYPE;
  511. }
  512. int id = db.Insertable(wcstask).ExecuteReturnIdentity();
  513. if (id <= 0)
  514. {
  515. throw new Exception(string.Format("WMS任务[{0}]添加WCS任务失败", reply.WMSTaskNum));
  516. }
  517. });
  518. if (string.IsNullOrWhiteSpace(msg))
  519. {
  520. result = true;
  521. }
  522. else
  523. {
  524. throw new Exception(string.Format("WMS任务[{0}]添加WCS任务失败,消息[{1}]", reply.WMSTaskNum, msg));
  525. }
  526. }
  527. //var task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_WMSNO == reply.WMSTaskNum);
  528. //if (task == null)
  529. //{
  530. // //添加wcs任务
  531. // wcstask = new WCS_TASK();
  532. // wcstask.TASK_WMSNO = reply.WMSTaskNum;
  533. // wcstask.TASK_COMTYPE = reply.TaskType;
  534. // wcstask.TASK_SYSTYPE = "WMS";
  535. // wcstask.TASK_POSIDFROM = reply.OutWareCellNo;//起点地址
  536. // wcstask.TASK_POSIDCUR = reply.OutWareCellNo;
  537. // wcstask.TASK_POSIDNEXT = reply.OutWareCellNo;
  538. // wcstask.TASK_POSIDMOVE = "";
  539. // wcstask.TASK_PRIORITY = reply.Priority;
  540. // wcstask.TASK_WKSTATUS = 0;
  541. // wcstask.TASK_WHID = reply.WareHouseName;
  542. // wcstask.TASK_ADDUSERNO = "WMS";
  543. // wcstask.TASK_ADDDATETIME = DateTime.Now;
  544. // wcstask.TASK_EDITUSERNO = "WMS";
  545. // wcstask.TASK_EDITDATETIME = DateTime.Now;
  546. // wcstask.TASK_NOTES = "";
  547. // wcstask.TASK_RGVNO = "";
  548. // wcstask.TASK_BOXBARCODE = reply.ContainerBarCode;
  549. // wcstask.TASK_POSIDTO = param.OutEndPostion;
  550. // wcstask.TASK_PRIORITY = reply.Priority;
  551. // wcstask.TASK_ITEM8 = param.OutId;
  552. // wcstask.TASK_ITEM9 = reply.Memo4;
  553. // wcstask.TASK_ITEM10 = reply.Memo5;
  554. // if (wcstask.TASK_BOXBARCODE.Substring(0, 2) == "SH")
  555. // {
  556. // wcstask.TASK_ITEM2 = "2";
  557. // }
  558. // else if (wcstask.TASK_BOXBARCODE.Substring(0, 3) == "TPC")
  559. // {
  560. // wcstask.TASK_ITEM2 = "1";
  561. // }
  562. // else
  563. // {
  564. // wcstask.TASK_ITEM2 = "3";
  565. // }
  566. // if (string.IsNullOrWhiteSpace(reply.TunnelNum))
  567. // {
  568. // //wcstask.TASK_SRMNO = reply.EndPostion;
  569. // }
  570. // else
  571. // {
  572. // wcstask.TASK_FromTunnelNum = reply.TunnelNum;
  573. // wcstask.TASK_SRMNO = Current.SysSets.Where(v => v.SET_ID.Contains("Tunnel")).FirstOrDefault(v => v.SET_VALUE == reply.TunnelNum).SET_TYPE;
  574. // }
  575. // int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
  576. // if (id <= 0)
  577. // {
  578. // throw new Exception(string.Format("WMS任务[{0}]添加WCS任务失败", reply.WMSTaskNum));
  579. // }
  580. // else
  581. // {
  582. // result = true;
  583. // }
  584. //}
  585. }
  586. else
  587. {
  588. var msg = string.Format("目标位置[{0}]获取出库任务失败,原因:[{1}]", param.OutEndPostion, reply.ResMessage);
  589. throw new Exception(msg);
  590. }
  591. }
  592. catch (Exception ex)
  593. {
  594. AddLedErrorMsg(param.OutEndPostion, ex.Message, 0);
  595. LogMessageHelper.RecordLogMessage(ex);
  596. }
  597. return result;
  598. }
  599. public static WCS_TASK GetExeTask(GetExeTaskParam param)
  600. {
  601. WCS_TASK wcstask = null;
  602. try
  603. {
  604. wcstask = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_BOXBARCODE == param.ContainerBarCode);
  605. if (wcstask == null)
  606. {
  607. var reply = Current.WmsInterface.I_WCS_GetExeTask(param);
  608. string errormsg = CheckGetExeTask(param, reply);
  609. if (string.IsNullOrWhiteSpace(errormsg))
  610. {
  611. //添加wcs任务
  612. wcstask = new WCS_TASK();
  613. wcstask.TASK_WMSNO = reply.WMSTaskNum;
  614. wcstask.TASK_COMTYPE = reply.TaskType;
  615. wcstask.TASK_SYSTYPE = "WMS";
  616. wcstask.TASK_POSIDFROM = param.EquipmentNo;//起点地址
  617. wcstask.TASK_POSIDCUR = param.EquipmentNo;
  618. wcstask.TASK_POSIDNEXT = param.EquipmentNo;
  619. wcstask.TASK_POSIDMOVE = "";
  620. wcstask.TASK_PRIORITY = reply.Priority;
  621. wcstask.TASK_WKSTATUS = 0;
  622. wcstask.TASK_WHID = reply.WareHouseName;
  623. wcstask.TASK_ADDUSERNO = "WMS";
  624. wcstask.TASK_ADDDATETIME = DateTime.Now;
  625. wcstask.TASK_EDITUSERNO = "WMS";
  626. wcstask.TASK_EDITDATETIME = DateTime.Now;
  627. wcstask.TASK_NOTES = "";
  628. wcstask.TASK_RGVNO = "";
  629. wcstask.TASK_BOXBARCODE = param.ContainerBarCode;
  630. wcstask.TASK_WEIGHT = reply.TASK_WEIGHT;
  631. wcstask.TASK_STACKINGTYPE = reply.TASK_STACKINGTYPE;
  632. if (!string.IsNullOrWhiteSpace(reply.Memo1))
  633. {
  634. wcstask.TASK_IsWrapFilm = reply.Memo1.Trim() == "1" ? true : false;
  635. }
  636. if (string.IsNullOrWhiteSpace(param.Memo1))
  637. {
  638. wcstask.TASK_POSIDTO = reply.EndPostion;
  639. wcstask.TASK_SRMNO = reply.EndPostion;
  640. wcstask.PalletizingBoxSize = reply.PalletizingBoxSize;
  641. wcstask.TASK_ORDERTYPE = reply.IsLastBox ? 1 : 0;
  642. }
  643. else if (param.Memo1.Trim() == "1")
  644. {
  645. string srmno = string.Empty;
  646. wcstask.TASK_EndTunnelNum = ConveyorHelper.QueryTunnel(wcstask.TASK_WMSNO, reply.TunnelNum, out srmno);
  647. wcstask.TASK_POSIDTO = srmno;
  648. wcstask.TASK_SRMNO = srmno;
  649. }
  650. else if (param.Memo1.Trim() == "2")
  651. {
  652. wcstask.TASK_POSIDTO = reply.EndPostion;
  653. wcstask.TASK_EndTunnelNum = reply.TunnelNum;
  654. wcstask.TASK_SRMNO = Current.SysSets.Where(v => v.SET_ID.Contains("Tunnel")).FirstOrDefault(v => v.SET_VALUE == reply.TunnelNum).SET_VALUE;
  655. }
  656. else
  657. {
  658. throw new Exception(string.Format("托盘[{0}]调用WMS入库接口传递参数Memo1错误.", param.ContainerBarCode));
  659. }
  660. int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
  661. if (id <= 0)
  662. {
  663. throw new Exception(string.Format("WMS任务[{0}]添加WCS任务失败", reply.WMSTaskNum));
  664. }
  665. else
  666. {
  667. wcstask.TASK_NO = id;
  668. }
  669. }
  670. else
  671. {
  672. LogMessageHelper.RecordLogMessage(errormsg);
  673. AddLedErrorMsg(param.EquipmentNo, errormsg, 0);
  674. if (!string.IsNullOrWhiteSpace(param.Memo2))
  675. {
  676. //wms任务异常需要生成退回托盘任务
  677. wcstask = new WCS_TASK()
  678. {
  679. TASK_WMSNO = "wcs_" + DateTime.Now.ToString("yyyyMMddhhmmss"),
  680. TASK_COMTYPE = (int)ComTypeEnum.托盘异常退回,
  681. TASK_SYSTYPE = "WCS",
  682. TASK_POSIDFROM = param.EquipmentNo,//起点地址
  683. TASK_POSIDCUR = param.EquipmentNo,
  684. TASK_POSIDNEXT = param.EquipmentNo,
  685. TASK_POSIDMOVE = "",
  686. TASK_PRIORITY = 1,
  687. TASK_WKSTATUS = 1,
  688. TASK_WHID = string.IsNullOrWhiteSpace(reply.WareHouseName) ? Current.WareNameList[0] : reply.WareHouseName,
  689. TASK_ADDUSERNO = "WCS",
  690. TASK_ADDDATETIME = DateTime.Now,
  691. TASK_EDITUSERNO = "WCS",
  692. TASK_EDITDATETIME = DateTime.Now,
  693. TASK_NOTES = "",
  694. TASK_RGVNO = "",
  695. TASK_BOXBARCODE = param.ContainerBarCode,
  696. TASK_POSIDTO = param.Memo2.Trim()
  697. };
  698. int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
  699. if (id <= 0)
  700. {
  701. throw new Exception(string.Format("WMS任务[{0}]添加WCS任务失败", reply.WMSTaskNum));
  702. }
  703. else
  704. {
  705. wcstask.TASK_NO = id;
  706. }
  707. var task_dtl = new WCS_TASK_DTL()
  708. {
  709. ID = Guid.NewGuid().ToString(),
  710. PARENTID = wcstask.TASK_NO,
  711. TASKNO = wcstask.TASK_NO,
  712. POSIDCUR = param.EquipmentNo,
  713. POSIDNEXT = param.EquipmentNo,
  714. DESCRIPTION = errormsg,
  715. EXECUTEDATE = DateTime.Now
  716. };
  717. SugarBase.DB.Insertable(task_dtl).ExecuteReturnIdentity();
  718. }
  719. }
  720. }
  721. }
  722. catch (Exception ex)
  723. {
  724. LogMessageHelper.RecordLogMessage(ex);
  725. }
  726. return wcstask;
  727. }
  728. private static string CheckGetInTask(GetInTaskParam param, GetInTaskReply reply)
  729. {
  730. string errorMsg = string.Empty;
  731. if (reply == null)
  732. {
  733. throw new Exception(string.Format("托盘[{0}]调用WMS入库接口,反馈的对象为空。", param.ContainerBarCode));
  734. }
  735. if (reply.ResType)
  736. {
  737. if (string.IsNullOrWhiteSpace(reply.WMSTaskNum))
  738. {
  739. errorMsg = string.Format("托盘[{0}]调用WMS入库接口,反馈的WMS任务号不能为空。", param.ContainerBarCode);
  740. }
  741. else if (string.IsNullOrWhiteSpace(reply.EndPostion))
  742. {
  743. errorMsg = string.Format("托盘[{0}]调用WMS入库接口,反馈的目标地址不能为空。", param.ContainerBarCode);
  744. }
  745. else if (string.IsNullOrWhiteSpace(reply.EndPostion))
  746. {
  747. errorMsg = string.Format("托盘[{0}]调用WMS入库接口,反馈的目标地址不能为空。", param.ContainerBarCode);
  748. }
  749. else if (string.IsNullOrWhiteSpace(reply.WareHouseName))
  750. {
  751. errorMsg = string.Format("托盘[{0}]调用WMS入库接口,反馈的仓库名称不能为空。", param.ContainerBarCode);
  752. }
  753. else if (reply.TASK_WEIGHT < 1 && param.EquipmentNo == "1390")
  754. {
  755. errorMsg = string.Format("料箱[{0}]调用WMS入库接口,反馈的重量要大于0。", param.ContainerBarCode);
  756. }
  757. else if (reply.TASK_STACKINGTYPE < 1 && param.EquipmentNo == "1390")
  758. {
  759. errorMsg = string.Format("料箱[{0}]调用WMS入库接口,反馈的垛型要大于0。", param.ContainerBarCode);
  760. }
  761. //else if (string.IsNullOrWhiteSpace(reply.Memo1) && param.EquipmentNo == "1200" && param.ContainerBarCode.Contains("TPA"))
  762. //{
  763. // errorMsg = string.Format("托盘[{0}]18#调用WMS入库接口,反馈的是否缠膜不能为空。", param.ContainerBarCode);
  764. //}
  765. else if (!string.IsNullOrWhiteSpace(param.Memo1))
  766. {
  767. if (string.IsNullOrWhiteSpace(reply.TunnelNum) || reply.TunnelNum.Trim() == "0")
  768. {
  769. errorMsg = string.Format("托盘[{0}]调用WMS入库接口,没有返回巷道。", param.ContainerBarCode);
  770. }
  771. if (param.Memo1.Trim() == "2")
  772. {
  773. if (reply.EndPostion.Length < 10)
  774. {
  775. errorMsg = string.Format("托盘[{0}]调用WMS入库接口,没有分配货位。", param.ContainerBarCode);
  776. }
  777. }
  778. else if (param.Memo1.Trim() == "1")
  779. {
  780. }
  781. else
  782. {
  783. errorMsg = string.Format("托盘[{0}]调用WMS入库接口传递参数Memo1[{1}]错误.", param.ContainerBarCode, param.Memo1);
  784. }
  785. }
  786. }
  787. else
  788. {
  789. if (reply == null)
  790. {
  791. errorMsg = string.Format("托盘[{0}]调用WMS入库接口,反馈的对象为空。", param.ContainerBarCode);
  792. }
  793. else
  794. {
  795. errorMsg = string.Format("位置[{0}]生产编码[{1}]获取入库任务失败,反馈结果:[{2}]", param.EquipmentNo, param.ContainerBarCode, reply.ResMessage);
  796. }
  797. }
  798. return errorMsg;
  799. }
  800. private static string CheckGetExeTask(GetExeTaskParam param, GetExeTaskReply reply)
  801. {
  802. string errorMsg = string.Empty;
  803. if (reply == null)
  804. {
  805. throw new Exception(string.Format("托盘[{0}]调用WMS入库接口,反馈的对象为空。", param.ContainerBarCode));
  806. }
  807. if (reply.ResType)
  808. {
  809. if (string.IsNullOrWhiteSpace(reply.WMSTaskNum))
  810. {
  811. errorMsg = string.Format("托盘[{0}]调用WMS入库接口,反馈的WMS任务号不能为空。", param.ContainerBarCode);
  812. }
  813. else if (string.IsNullOrWhiteSpace(reply.EndPostion))
  814. {
  815. errorMsg = string.Format("托盘[{0}]调用WMS入库接口,反馈的目标地址不能为空。", param.ContainerBarCode);
  816. }
  817. else if (string.IsNullOrWhiteSpace(reply.EndPostion))
  818. {
  819. errorMsg = string.Format("托盘[{0}]调用WMS入库接口,反馈的目标地址不能为空。", param.ContainerBarCode);
  820. }
  821. else if (string.IsNullOrWhiteSpace(reply.WareHouseName))
  822. {
  823. errorMsg = string.Format("托盘[{0}]调用WMS入库接口,反馈的仓库名称不能为空。", param.ContainerBarCode);
  824. }
  825. else if (reply.TASK_WEIGHT < 1 && param.EquipmentNo == "1390")
  826. {
  827. errorMsg = string.Format("料箱[{0}]调用WMS入库接口,反馈的重量要大于0。", param.ContainerBarCode);
  828. }
  829. else if (reply.TASK_STACKINGTYPE < 1 && param.EquipmentNo == "1390")
  830. {
  831. errorMsg = string.Format("料箱[{0}]调用WMS入库接口,反馈的垛型要大于0。", param.ContainerBarCode);
  832. }
  833. //else if (string.IsNullOrWhiteSpace(reply.Memo1) && param.EquipmentNo == "1200" && param.ContainerBarCode.Contains("TPA"))
  834. //{
  835. // errorMsg = string.Format("托盘[{0}]18#调用WMS入库接口,反馈的是否缠膜不能为空。", param.ContainerBarCode);
  836. //}
  837. else if (!string.IsNullOrWhiteSpace(param.Memo1))
  838. {
  839. if (string.IsNullOrWhiteSpace(reply.TunnelNum) || reply.TunnelNum.Trim() == "0")
  840. {
  841. errorMsg = string.Format("托盘[{0}]调用WMS入库接口,没有返回巷道。", param.ContainerBarCode);
  842. }
  843. if (param.Memo1.Trim() == "2")
  844. {
  845. if (reply.EndPostion.Length < 10)
  846. {
  847. errorMsg = string.Format("托盘[{0}]调用WMS入库接口,没有分配货位。", param.ContainerBarCode);
  848. }
  849. }
  850. else if (param.Memo1.Trim() == "1")
  851. {
  852. }
  853. else
  854. {
  855. errorMsg = string.Format("托盘[{0}]调用WMS入库接口传递参数Memo1[{1}]错误.", param.ContainerBarCode, param.Memo1);
  856. }
  857. }
  858. }
  859. else
  860. {
  861. if (reply == null)
  862. {
  863. errorMsg = string.Format("托盘[{0}]调用WMS入库接口,反馈的对象为空。", param.ContainerBarCode);
  864. }
  865. else
  866. {
  867. errorMsg = string.Format("位置[{0}]生产编码[{1}]获取入库任务失败,反馈结果:[{2}]", param.EquipmentNo, param.ContainerBarCode, reply.ResMessage);
  868. }
  869. }
  870. return errorMsg;
  871. }
  872. /// <summary>
  873. /// 获取入库任务
  874. /// </summary>
  875. /// <param name="param"></param>
  876. public static WCS_TASK GetInTask_2(GetInTaskParam param)
  877. {
  878. WCS_TASK wcstask = null;
  879. try
  880. {
  881. if (!string.IsNullOrWhiteSpace(param.ContainerBarCode))
  882. {
  883. wcstask = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_BOXBARCODE == param.ContainerBarCode);
  884. }
  885. if (wcstask == null)
  886. {
  887. var reply = Current.WmsInterface.I_WCS_GetInTask(param);
  888. if (reply.ResType)
  889. {
  890. if (string.IsNullOrWhiteSpace(reply.EndPostion))
  891. {
  892. throw new Exception(string.Format("托盘[{0}]调用WMS入库接口返回成功,但是没有返回目标地址。", reply.EndPostion));
  893. }
  894. //添加wcs任务
  895. wcstask = new WCS_TASK();
  896. wcstask.TASK_WMSNO = reply.WMSTaskNum;
  897. wcstask.TASK_COMTYPE = reply.TaskType;
  898. wcstask.TASK_SYSTYPE = "WMS";
  899. wcstask.TASK_POSIDFROM = param.EquipmentNo;//起点地址
  900. wcstask.TASK_POSIDCUR = param.EquipmentNo;
  901. wcstask.TASK_POSIDNEXT = param.EquipmentNo;
  902. wcstask.TASK_POSIDMOVE = "";
  903. wcstask.TASK_PRIORITY = reply.Priority;
  904. wcstask.TASK_WKSTATUS = 0;
  905. wcstask.TASK_WHID = reply.WareHouseName;
  906. wcstask.TASK_ADDUSERNO = "WMS";
  907. wcstask.TASK_ADDDATETIME = DateTime.Now;
  908. wcstask.TASK_EDITUSERNO = "WMS";
  909. wcstask.TASK_EDITDATETIME = DateTime.Now;
  910. wcstask.TASK_NOTES = "";
  911. wcstask.TASK_RGVNO = "";
  912. wcstask.TASK_BOXBARCODE = param.ContainerBarCode;
  913. if (string.IsNullOrWhiteSpace(param.Memo1))
  914. {
  915. wcstask.TASK_POSIDTO = reply.EndPostion;
  916. wcstask.TASK_SRMNO = reply.EndPostion;
  917. }
  918. else if (param.Memo1.Trim() == "1")
  919. {
  920. if (string.IsNullOrWhiteSpace(reply.TunnelNum) || reply.TunnelNum.Trim() == "0")
  921. {
  922. throw new Exception(string.Format("托盘[{0}]申请入库没有分配巷道,生成WCS任务失败。", param.ContainerBarCode));
  923. }
  924. else
  925. {
  926. string srmno = string.Empty;
  927. wcstask.TASK_EndTunnelNum = ConveyorHelper.QueryTunnel(wcstask.TASK_WMSNO, param.EquipmentNo, out srmno);
  928. wcstask.TASK_POSIDTO = wcstask.TASK_EndTunnelNum;
  929. wcstask.TASK_SRMNO = srmno;
  930. }
  931. }
  932. else if (param.Memo1.Trim() == "2")
  933. {
  934. wcstask.TASK_POSIDTO = reply.EndPostion;
  935. wcstask.TASK_EndTunnelNum = reply.TunnelNum;
  936. wcstask.TASK_SRMNO = Current.SysSets.Where(v => v.SET_ID.Contains("Tunnel")).FirstOrDefault(v => v.SET_VALUE == reply.TunnelNum).SET_VALUE;
  937. }
  938. else
  939. {
  940. throw new Exception(string.Format("托盘[{0}]调用WMS入库接口传递参数Memo1错误.", param.ContainerBarCode));
  941. }
  942. int id = SugarBase.DB.Insertable(wcstask).ExecuteReturnIdentity();
  943. if (id <= 0)
  944. {
  945. throw new Exception(string.Format("WMS任务[{0}]添加WCS任务失败", reply.WMSTaskNum));
  946. }
  947. else
  948. {
  949. wcstask.TASK_NO = id;
  950. }
  951. }
  952. else
  953. {
  954. string msg = string.Format("位置[{0}]条码[{1}]获取入库任务失败,反馈结果:[{2}]", param.EquipmentNo, param.ContainerBarCode, reply.ResMessage);
  955. LogMessageHelper.RecordLogMessage(msg);
  956. }
  957. }
  958. }
  959. catch (Exception ex)
  960. {
  961. //ThreadHelper.TaskThread(UploadExcTask, new { EquipmentNo = param.EquipmentNo, Alaram = ex.Message });
  962. LogMessageHelper.RecordLogMessage(ex);
  963. }
  964. return wcstask;
  965. }
  966. /// <summary>
  967. /// 上传设备异常信息
  968. /// </summary>
  969. //public static void UploadExcTask(UploadExcTaskParam param)
  970. //{
  971. // try
  972. // {
  973. // Log4netHelper.Logger_Info.InfoFormat(string.Format("开始:输送线[{0}]报警信息[{1}]上传WMS。", param.EquipmentNo, param.ExcMessage));
  974. // var reply = Current.WmsInterface.I_WCS_UploadExcTask(param);
  975. // if (reply.ResType)
  976. // {
  977. // Log4netHelper.Logger_Info.InfoFormat(string.Format("成功:输送线[{0}]报警信息[{1}]上传WMS。", param.EquipmentNo, param.ExcMessage));
  978. // }
  979. // else
  980. // {
  981. // throw new Exception(string.Format("失败:输送线[{0}]报警信息[{1}]上传WMS。原因:[{2}]", param.EquipmentNo, param.ExcMessage, reply.ResMessage));
  982. // }
  983. // }
  984. // catch (Exception ex)
  985. // {
  986. // Log4netHelper.Logger_Error.ErrorFormat(ex.ToString());
  987. // }
  988. // finally
  989. // {
  990. // Log4netHelper.Logger_Info.InfoFormat(string.Format("结束:输送线[{0}]报警信息[{1}]上传WMS。", param.EquipmentNo, param.ExcMessage));
  991. // }
  992. //}
  993. /// <summary>
  994. /// 添加异常信息
  995. /// </summary>
  996. /// <param name="db"></param>
  997. /// <param name="equipmentNo"></param>
  998. /// <param name="alaram"></param>
  999. /// <param name="task_no"></param>
  1000. public static void AddLedErrorMsg(SqlSugarClient db, string equipmentNo, string alaram, int task_no, int alaramCount = 10)
  1001. {
  1002. int wmstask_no = 0;
  1003. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  1004. if (task != null)
  1005. {
  1006. wmstask_no = Convert.ToInt32(task.TASK_WMSNO);
  1007. }
  1008. CommonData.AddLedErrorMsg(db, equipmentNo, alaram, task_no, wmstask_no, alaramCount);
  1009. }
  1010. /// <summary>
  1011. /// 添加异常信息
  1012. /// </summary>
  1013. /// <param name="db"></param>
  1014. /// <param name="equipmentNo"></param>
  1015. /// <param name="alaram"></param>
  1016. /// <param name="task_no"></param>
  1017. public static void AddLedErrorMsg(string equipmentNo, string alaram, int task_no)
  1018. {
  1019. int wmstask_no = 0;
  1020. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_NO == task_no);
  1021. if (task != null)
  1022. {
  1023. wmstask_no = Convert.ToInt32(task.TASK_WMSNO);
  1024. }
  1025. TryCachHelper.TryExecute((db) =>
  1026. {
  1027. CommonData.AddLedErrorMsg(db, equipmentNo, alaram, task_no, wmstask_no);
  1028. });
  1029. }
  1030. private static int _upLoadExcToWMS = 0;
  1031. /// <summary>
  1032. /// 上传设备异常信息
  1033. /// </summary>
  1034. public static void UpLoadExcToWMS()
  1035. {
  1036. if (Interlocked.Exchange(ref _upLoadExcToWMS, 1) == 0)
  1037. {
  1038. string result = TryCachHelper.TryExecute((db) =>
  1039. {
  1040. var ExcMsg = db.Queryable<WCS_LEDALARMSMSG>().First(v => v.LED_ISUPLOADWMSFINISH == false);
  1041. if (ExcMsg != null)
  1042. {
  1043. var param = new UploadExcTaskParam();
  1044. param.OutId = ExcMsg.LED_ID;
  1045. param.EquipmentNo = ExcMsg.LED_CONVYORNO;
  1046. param.WCSTaskNum = ExcMsg.LED_WCSTASK_NO.ToString();
  1047. param.WMSTaskNum = ExcMsg.LED_WMSTASK_NO.ToString();
  1048. param.ExcCode = ExcMsg.LED_ALARMSMSG;
  1049. param.ExcMessage = ExcMsg.LED_ALARMSMSG;
  1050. var reply = Current.WmsInterface.I_WCS_UploadExcTask(param);
  1051. if (reply.ResType)
  1052. {
  1053. //修改上传完成
  1054. db.Updateable<WCS_LEDALARMSMSG>(it => new WCS_LEDALARMSMSG() { LED_ISUPLOADWMSFINISH = true, LED_UPDATETIME = DateTime.Now })
  1055. .Where(it => it.LED_ID == ExcMsg.LED_ID)
  1056. .ExecuteCommand();
  1057. }
  1058. }
  1059. });
  1060. Interlocked.Exchange(ref _upLoadExcToWMS, 0);
  1061. }
  1062. }
  1063. private static int _putDevInfoToWMS = 0;
  1064. /// <summary>
  1065. /// 上传设PLC备信息
  1066. /// </summary>
  1067. public static void PutDevInfoToWMS()
  1068. {
  1069. if (Interlocked.Exchange(ref _putDevInfoToWMS, 1) == 0)
  1070. {
  1071. Thread.Sleep(2000);
  1072. string result = TryCachHelper.TryTranExecute((db) =>
  1073. {
  1074. List<PutDevInfoParam> DevList = new List<PutDevInfoParam>();
  1075. //var EquState = db.Queryable<WCS_EQUIPMENTINFO>().Where(v => v.Equ_Type == "srm").ToList();
  1076. var EquState = Current.PlcSet.Where(v => v.PLC_EQUIPMENTTYPE == "srm" && v.PLC_WCSSYSTEM == Current.WcsSystem).ToList();
  1077. foreach (var item in EquState)
  1078. {
  1079. var srmState = item.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item.PLC_NAME);
  1080. var param = new PutDevInfoParam();
  1081. param.STA_EQUIPMENTNO = item.PLC_NAME;
  1082. if (!string.IsNullOrWhiteSpace(srmState.EquSignal_Srm.SrmFault))
  1083. {
  1084. param.STA_ALARMS = string.Format("设备[{0}][{1}]", item.PLC_NAME, srmState.EquSignal_Srm.SrmFault);
  1085. param.STA_ALARMSMSG = string.Format("设备[{0}][{1}]", item.PLC_NAME, srmState.EquSignal_Srm.SrmFault);
  1086. }
  1087. param.STA_DATA = srmState.EquSignal_Srm.ToJson();
  1088. DevList.Add(param);
  1089. }
  1090. var convStatue = Current.PlcSet.Where(v => v.PLC_EQUIPMENTTYPE != "srm" && v.PLC_WCSSYSTEM == Current.WcsSystem).ToList();
  1091. foreach (var item in convStatue)
  1092. {
  1093. foreach (var equinfo in item.WCS_EquipmentInfoSet)
  1094. {
  1095. var param = new PutDevInfoParam();
  1096. if (equinfo.Equ_Type == EquipmentType.conveyor.ToString())
  1097. {
  1098. param.STA_EQUIPMENTNO = equinfo.Equ_No;
  1099. string alarms = equinfo.EquSignal_Conv.ConvFault.ToString();
  1100. if (string.IsNullOrWhiteSpace(alarms) == false && alarms != "0")
  1101. {
  1102. param.STA_ALARMS = string.Format("设备[{0}][{1}]", equinfo.Equ_No, alarms);
  1103. param.STA_ALARMSMSG = string.Format("设备[{0}][{1}]", equinfo.Equ_No, alarms);
  1104. }
  1105. }
  1106. else if (equinfo.Equ_Type == EquipmentType.rgv.ToString())
  1107. {
  1108. param.STA_EQUIPMENTNO = equinfo.Equ_No;
  1109. string alarmagv = equinfo.EquSignal_Rgv.AlarmFault;
  1110. if (string.IsNullOrWhiteSpace(alarmagv) == false && alarmagv != "0")
  1111. {
  1112. param.STA_ALARMS = string.Format("设备[{0}][{1}]", equinfo.Equ_No, alarmagv);
  1113. param.STA_ALARMSMSG = string.Format("设备[{0}][{1}]", equinfo.Equ_No, alarmagv);
  1114. }
  1115. }
  1116. DevList.Add(param);
  1117. }
  1118. }
  1119. var reply = Current.WmsInterface.I_WCS_PutDevInfo(DevList);
  1120. string resMessage = "接口返回Null";
  1121. if (reply != null) resMessage = reply.ResMessage;
  1122. if (reply == null || reply.ResType == false)
  1123. {
  1124. LogMessageHelper.RecordLogMessage(string.Format("上传设备PLC信息失败,原因:[{0}]。", resMessage));
  1125. }
  1126. });
  1127. Interlocked.Exchange(ref _putDevInfoToWMS, 0);
  1128. }
  1129. }
  1130. /// <summary>
  1131. /// 熟化开始结束时间上传
  1132. /// </summary>
  1133. /// <param name="param"></param>
  1134. /// <returns></returns>
  1135. public static bool GetMatureContinueMode(GetMatureContinueParam param)
  1136. {
  1137. bool result = false;
  1138. try
  1139. {
  1140. var reply = Current.WmsInterface.I_WCS_GetMatureContinueMode(param);
  1141. if (!reply.ResType)
  1142. {
  1143. string error = string.Format("熟化房[{0}]上传失败,原因:[{1}]", param.MatureRoomNo, reply.ResMessage);
  1144. throw new Exception(error);
  1145. }
  1146. else
  1147. {
  1148. #region tion
  1149. //var converywrite = new WCSWriteToConveyorSignal();
  1150. //converywrite.Plc = plc.Plc;
  1151. //converywrite.DBName = plc.WriteDBName;
  1152. //converywrite.ConveyorNo = convNo;
  1153. //converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  1154. //if (judge == 1)//写入开始确认信号
  1155. //{
  1156. // converywrite.Confirm = true;
  1157. //}
  1158. //else if (judge == 2)//写入结束确认信号
  1159. //{
  1160. // converywrite.TaskDelete = true;
  1161. //}
  1162. //WriteTaskToBuffer(converywrite);
  1163. #endregion
  1164. result = true;
  1165. }
  1166. }
  1167. catch (Exception ex)
  1168. {
  1169. result = false;
  1170. LogMessageHelper.RecordLogMessage(ex.Message, ex);
  1171. }
  1172. return result;
  1173. }
  1174. private static bool WriteTaskToBuffer(WCSWriteToConveyorSignal conv)
  1175. {
  1176. List<byte> list = new List<byte>();
  1177. //写入任务号
  1178. list.AddRange(ExtendsUtil.UintToByte((uint)conv.Tasknum).ToList());
  1179. //var codes = Encoding.UTF8.GetBytes(conv.Goodscode);
  1180. //货物条码
  1181. list.AddRange(ExtendsUtil.UintToByte((uint)conv.Goodscode).ToList());
  1182. //货物类型
  1183. list.AddRange(ExtendsUtil.UshortToByte((ushort)conv.Goodstype).ToList());
  1184. //货位尺寸
  1185. list.AddRange(ExtendsUtil.UshortToByte((ushort)conv.Goodssize).ToList());
  1186. //写入起点地址
  1187. list.AddRange(ExtendsUtil.UshortToByte((ushort)conv.Goodsstart).ToList());
  1188. //写入目标地址
  1189. list.AddRange(ExtendsUtil.UshortToByte((ushort)conv.Goodsend).ToList());
  1190. BitArray bit16 = new BitArray(16);
  1191. bit16[9] = conv.Confirm;
  1192. if (conv.Remark == conv.Goodsend.ToString())
  1193. {
  1194. bit16[0] = conv.TrayColor_Three;
  1195. bit16[14] = conv.TrayColor_One;
  1196. bit16[15] = conv.TrayColor_Two;
  1197. }
  1198. bit16[5] = conv.UpMatRequest;
  1199. bit16[6] = conv.Res01;
  1200. bit16[7] = conv.Res02;
  1201. bit16[10] = conv.TaskDelete;//删除任务
  1202. bit16[11] = conv.Notask;
  1203. int BitInfo = ExtendsUtil.BitToInt(bit16);
  1204. list.AddRange(ExtendsUtil.UshortToByte((ushort)BitInfo).ToList());
  1205. if (conv.TASK_WEIGHT > 0)//1390获取重量值
  1206. {
  1207. list.AddRange(ExtendsUtil.UintToByte((uint)conv.TASK_WEIGHT).ToList());
  1208. }
  1209. else
  1210. {
  1211. list.AddRange(ExtendsUtil.UshortToByte((ushort)conv.Res03).ToList());
  1212. }
  1213. if (conv.Plc.Write((ushort)conv.DBName, (ushort)(conv.WriteStartAddress), list.ToArray()))
  1214. {
  1215. Log4netHelper.Logger_Info.InfoFormat(string.Format("输送机[{0}]写入任务[{1}]信息成功。", conv.Goodsstart, conv.Tasknum));
  1216. return true;
  1217. }
  1218. else
  1219. {
  1220. throw new Exception(string.Format("输送机[{0}]写入任务[{1}]信息失败。", conv.Goodsstart, conv.Tasknum));
  1221. }
  1222. }
  1223. /// <summary>
  1224. /// 称重上传
  1225. /// </summary>
  1226. /// <param name="param"></param>
  1227. public static bool GetWeight(GetWeightParam param)
  1228. {
  1229. bool result = true;
  1230. try
  1231. {
  1232. var reply = Current.WmsInterface.I_WCS_GetWeight(param);
  1233. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_WMSNO == param.WMSTaskNum);
  1234. //修改任务,添加重量
  1235. string resultmsg = TryCachHelper.TryTranExecute((db) =>
  1236. {
  1237. db.Updateable<WCS_TASK>(it => new WCS_TASK()
  1238. {
  1239. TASK_GrossWeight = param.Weight
  1240. }).Where(it => it.TASK_NO == task.TASK_NO).ExecuteCommand();
  1241. string msg = string.Format("称重任务[{0}]已称重,重量[{1}]克。", task.TASK_NO, param.Weight);
  1242. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, msg);
  1243. });
  1244. if (!string.IsNullOrWhiteSpace(resultmsg))
  1245. {
  1246. throw new Exception(resultmsg);
  1247. }
  1248. if (!reply.ResType)
  1249. {
  1250. string error = string.Format("任务[{0}]重量[{1}]上传失败,原因:[{2}]", param.WMSTaskNum, param.Weight, reply.ResMessage);
  1251. throw new Exception(error);
  1252. }
  1253. }
  1254. catch (Exception ex)
  1255. {
  1256. result = false;
  1257. LogMessageHelper.RecordLogMessage(ex.Message, ex);
  1258. }
  1259. return result;
  1260. }
  1261. #region WMS接口调用
  1262. private static List<int> AssignSrmTaskNoSet = new List<int>();
  1263. public static void AssignSrm(WCS_TASK task)
  1264. {
  1265. if (AssignSrmTaskNoSet.Contains(task.TASK_NO))
  1266. {
  1267. Log4netHelper.Logger_Info.InfoFormat("任务[{0}]方法[AssignSrm]调用失败,WMS接口[I_WCS_GetTunnelList]调用正在执行中", task.TASK_NO);
  1268. }
  1269. else
  1270. {
  1271. AssignSrmTaskNoSet.Add(task.TASK_NO);
  1272. ConveyorHelper.AssignSrm(task);
  1273. AssignSrmTaskNoSet.Remove(task.TASK_NO);
  1274. }
  1275. }
  1276. private static List<int> PreparatoryAssignSrmTaskNoSet = new List<int>();
  1277. public static void PreparatoryAssignSrmTunnel(WCS_TASK task)
  1278. {
  1279. if (PreparatoryAssignSrmTaskNoSet.Contains(task.TASK_NO))
  1280. {
  1281. Log4netHelper.Logger_Info.InfoFormat("任务[{0}]方法[AssignSrm]调用失败,WMS接口[I_WCS_GetTunnelList]调用正在执行中", task.TASK_NO);
  1282. }
  1283. else
  1284. {
  1285. PreparatoryAssignSrmTaskNoSet.Add(task.TASK_NO);
  1286. ConveyorHelper.PreparatoryAssignSrmTunnel(task);
  1287. PreparatoryAssignSrmTaskNoSet.Remove(task.TASK_NO);
  1288. }
  1289. }
  1290. private static List<string> TrayList = new List<string>();
  1291. public static WCS_TASK GetWcsInTask(GetInTaskParam param)
  1292. {
  1293. WCS_TASK task = null;
  1294. if (TrayList.Contains(param.ContainerBarCode))
  1295. {
  1296. Log4netHelper.Logger_Info.InfoFormat("托盘[{0}]方法[GetInTask]调用失败,WMS接口[I_WCS_GetInTask]调用正在执行中", param.ContainerBarCode);
  1297. }
  1298. else
  1299. {
  1300. TrayList.Add(param.ContainerBarCode);
  1301. task = GetInTask(param);
  1302. TrayList.Remove(param.ContainerBarCode);
  1303. }
  1304. return task;
  1305. }
  1306. private static List<string> TrayList_1 = new List<string>();
  1307. public static WCS_TASK GetWcsExeTask(GetExeTaskParam param)
  1308. {
  1309. WCS_TASK task = null;
  1310. if (TrayList_1.Contains(param.ContainerBarCode))
  1311. {
  1312. Log4netHelper.Logger_Info.InfoFormat("托盘[{0}]方法[GetExeTask]调用失败,WMS接口[I_WCS_GetExeTask]调用正在执行中", param.ContainerBarCode);
  1313. }
  1314. else
  1315. {
  1316. TrayList_1.Add(param.ContainerBarCode);
  1317. task = GetExeTask(param);
  1318. TrayList_1.Remove(param.ContainerBarCode);
  1319. }
  1320. return task;
  1321. }
  1322. private static List<string> AgvTaskNoSet = new List<string>();
  1323. /// <summary>
  1324. /// 获取出库任务
  1325. /// </summary>
  1326. /// <param name="param"></param>
  1327. public static void GetOutTask(GetOutTaskParam param)
  1328. {
  1329. if (AgvTaskNoSet.Contains(param.OutId))
  1330. {
  1331. Log4netHelper.Logger_Info.InfoFormat("呼叫位置[{0}]方法[GetOutTask]调用失败,WMS接口[I_WCS_GetOutTask]调用正在执行中", param.OutEndPostion);
  1332. }
  1333. else
  1334. {
  1335. AgvTaskNoSet.Add(param.OutId);
  1336. WCS_GetOutTask(param);
  1337. AgvTaskNoSet.Remove(param.OutId);
  1338. }
  1339. }
  1340. private static List<string> GetWeightSet = new List<string>();
  1341. public static void ProInGetWeight(GetWeightParam param)
  1342. {
  1343. if (GetWeightSet.Contains(param.WMSTaskNum))
  1344. {
  1345. Log4netHelper.Logger_Info.InfoFormat("任务[{0}]调用方法[GetWeight]调用失败,WMS接口[I_WCS_GetWeight]调用正在执行中", param.WMSTaskNum);
  1346. }
  1347. else
  1348. {
  1349. GetWeightSet.Add(param.WMSTaskNum);
  1350. GetWeight(param);
  1351. GetWeightSet.Remove(param.WMSTaskNum);
  1352. }
  1353. }
  1354. #endregion WMS接口调用
  1355. private static int _putUpdateUnexecuteTask = 0;
  1356. /// <summary>
  1357. /// 更新未执行任务
  1358. /// </summary>
  1359. public static void UpdateUnexecuteTask()
  1360. {
  1361. if (Interlocked.Exchange(ref _putUpdateUnexecuteTask, 1) == 0)
  1362. {
  1363. Thread.Sleep(90000);
  1364. try
  1365. {
  1366. TryCachHelper.TryExecute((db) =>
  1367. {
  1368. //更新每台堆垛机未执行任务数量
  1369. var srmName = db.Queryable<WCS_PLC>().Where(v => v.PLC_EQUIPMENTTYPE == "srm").ToList();
  1370. foreach (var item in srmName)
  1371. {
  1372. var taskSRMCount = db.Queryable<WCS_TASK>().Where(v => (v.TASK_WKSTATUS == 0 || v.TASK_WKSTATUS == 1 || v.TASK_WKSTATUS == 5) && v.TASK_SRMNO == item.PLC_NAME).ToList();
  1373. //更新未执行任务数量
  1374. db.Updateable<WCS_PLC>(it => new WCS_PLC() { PLC_UNEXECUTETASK = taskSRMCount.Count }).Where(it => it.PLC_NAME == item.PLC_NAME).ExecuteCommand();
  1375. }
  1376. var rgvName = db.Queryable<WCS_PLC>().Where(v => v.PLC_EQUIPMENTTYPE == "rgv").ToList();
  1377. foreach (var item in rgvName)
  1378. {
  1379. var OutInMat = db.Queryable<WCS_RGVOutInInfo>().Where(v => v.RGVOUTIN_RGVNO == item.PLC_NAME && (v.RGVOUTIN_OUTINTYPE == "OnMat" || v.RGVOUTIN_OUTINTYPE == "OnUpMat")).Select(v => v.RGVOUTIN_CONVNO).ToList();
  1380. var taskRGVCount = db.Queryable<WCS_TASK>().Where(v => (OutInMat.Contains(v.TASK_POSIDCUR) && v.TASK_POSIDCUR == v.TASK_POSIDNEXT) || (v.TASK_WKSTATUS == 7 && v.TASK_RGVNO == item.PLC_NAME)).ToList();
  1381. db.Updateable<WCS_PLC>(it => new WCS_PLC() { PLC_UNEXECUTETASK = taskRGVCount.Count }).Where(it => it.PLC_NAME == item.PLC_NAME).ExecuteCommand();
  1382. }
  1383. });
  1384. }
  1385. catch (Exception ex)
  1386. {
  1387. LogMessageHelper.RecordLogMessage(ex);
  1388. }
  1389. finally
  1390. {
  1391. Interlocked.Exchange(ref _putUpdateUnexecuteTask, 0);
  1392. }
  1393. }
  1394. }
  1395. #endregion public Method
  1396. }
  1397. }