AgvWorkflow.cs 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  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 AgvWorkflow
  13. {
  14. private static int _agvRun = 0;
  15. public static void AgvRun()
  16. {
  17. if (Interlocked.Exchange(ref _agvRun, 1) == 0)
  18. {
  19. Thread.Sleep(10000);
  20. //熟化架缓冲区广电检测生成AGV任务
  21. AgvCallMaturingRack();
  22. //生产线AGV申请WMS生成出库任务
  23. AgvCallOutTask();
  24. //生产线AGV申请WMS生成退料入库任务
  25. AgvCallBackInTask();
  26. Interlocked.Exchange(ref _agvRun, 0);
  27. }
  28. }
  29. private static int _agvUpdateStatus = 0;
  30. public static void AgvUpdateStatus()
  31. {
  32. if (Interlocked.Exchange(ref _agvUpdateStatus, 1) == 0)
  33. {
  34. Thread.Sleep(1000);
  35. //发送任务给AGV
  36. SendTaskToAgv();
  37. //无AGV模式WCS标识AGV任务完成
  38. FinishAgvTaskAgvStatus();
  39. //标识agv任务Wcs完成状态
  40. FinishAgvTaskWcsStatus();
  41. Interlocked.Exchange(ref _agvUpdateStatus, 0);
  42. }
  43. }
  44. /// <summary>
  45. /// 生产线根据光电信号自动生成AGV任务
  46. /// </summary>
  47. public static void AgvCallMaturingRack()
  48. {
  49. try
  50. {
  51. foreach (var item in Current.AgvCachePostionSet)
  52. {
  53. try
  54. {
  55. //if (item.WorkshopNo == "4")
  56. //{
  57. // if (item.CachePosNo.Contains("Empty04")) continue;
  58. //}
  59. //if (item.CachePosNo.Contains("Pvc_5_Empty")) continue;
  60. int task_type = item.CachePosNo.Contains("Empty") ? 3 : 4;
  61. #region 检测光电创建AGV任务
  62. if (Current.AGVConfig.Any(v => item.WorkshopNo==v.WORKSHOP && !v.OUTENABLE))
  63. {
  64. BaseWorkflow.AddLedErrorMsg(item.CachePosNo, $"车间{item.WorkshopNo}出库功能禁用", 0);
  65. }
  66. else if(Current.SysSets.Any(t => t.SET_ID == item.Workshop && t.SET_VALUE == "0"))
  67. {
  68. if (item.CachePH_Status == false && task_type == 3)
  69. {
  70. if (!Current.AgvTaskSet.Any(v => v.Task_PosidTo == item.CachePosNo))
  71. {
  72. //创建AGV任务
  73. var agvtask = new Middle_AGVTask()
  74. {
  75. Task_Type = task_type,
  76. Task_Whid = Current.PvchouseputongCh,
  77. Task_WorkshopNo = item.WorkshopNo,
  78. Task_ProLineNo = item.ProLineNo,
  79. Task_PosidFrom = item.ConvPostionNo,
  80. Task_PosidTo = item.CachePosNo,
  81. Task_CreateDate = DateTime.Now,
  82. Task_CreateUser = "wcs",
  83. Task_UpdateUser = "wcs",
  84. Task_UpdateDate = DateTime.Now
  85. };
  86. SugarBase.DB.Insertable(agvtask).ExecuteCommand();
  87. }
  88. }
  89. }
  90. #endregion;
  91. #region 创建半成品入库AGV任务
  92. if (task_type == 4)
  93. {
  94. //查询半成品熟化架任务
  95. var task = Current.TaskSet.Where(v => v.TASK_POSIDFROM == item.CachePosNo && v.TASK_WKSTATUS <= 1).OrderBy(v => v.TASK_ADDDATETIME).ToList().FirstOrDefault();
  96. if (task == null) continue;
  97. #region 避开指定车间出入库高峰期
  98. //查询指定车间已下发给WCS的AGV任务列表
  99. var agvtaskSet = Current.AgvTaskSet.Where(v => v.Task_WorkshopNo == item.WorkshopNo &&
  100. v.Task_WcsStatus > 0 && v.Task_WcsStatus != 4 && v.Task_WcsStatus != 99 && v.Task_WcsStatus != 106).ToList();
  101. if (item.WorkshopNo == "4")
  102. {
  103. //检测是否存在出库任务
  104. if (Current.TaskSet.Any(v => agvtaskSet.Any(t => t.Task_Id.ToString() == v.TASK_ITEM8) &&
  105. v.TASK_WKSTATUS > 1 && v.TASK_WKSTATUS != 5 && v.TASK_WKSTATUS != 6 && v.TASK_WKSTATUS != 99 && v.TASK_WKSTATUS != 106 &&
  106. v.TASK_COMTYPE == 2 && v.TASK_POSIDNEXT != "1070" && v.TASK_POSIDNEXT != "1071" && v.TASK_POSIDNEXT != "1072"))
  107. {
  108. //存在已经执行中的WCS出库任务
  109. if (item.WorkshopNo != "18")
  110. {
  111. string msg = string.Format("车间[{0}]半成品入库条码[{1}]稍等,为避开高峰期出库任务完成后执行。", item.WorkshopNo, task.TASK_BOXBARCODE);
  112. BaseWorkflow.AddLedErrorMsg(item.ConvPostionNo, msg, 0);
  113. LogMessageHelper.RecordLogMessage(msg);
  114. continue;
  115. }
  116. }
  117. }
  118. else if (item.WorkshopNo == "5")
  119. {
  120. //检测是否存在出库任务
  121. if (Current.TaskSet.Any(v => agvtaskSet.Any(t => t.Task_Id.ToString() == v.TASK_ITEM8) &&
  122. v.TASK_WKSTATUS > 1 && v.TASK_WKSTATUS != 5 && v.TASK_WKSTATUS != 6 && v.TASK_WKSTATUS != 99 && v.TASK_WKSTATUS != 106 &&
  123. v.TASK_COMTYPE == 2 && v.TASK_POSIDNEXT != "1070" && v.TASK_POSIDNEXT != "1071" && v.TASK_POSIDNEXT != "1072" && v.TASK_POSIDNEXT != "1085"))
  124. {
  125. //存在已经执行中的WCS出库任务
  126. if (item.WorkshopNo != "18")
  127. {
  128. string msg = string.Format("车间[{0}]半成品入库条码[{1}]稍等,为避开高峰期出库任务完成后执行。", item.WorkshopNo, task.TASK_BOXBARCODE);
  129. BaseWorkflow.AddLedErrorMsg(item.ConvPostionNo, msg, 0);
  130. LogMessageHelper.RecordLogMessage(msg);
  131. continue;
  132. }
  133. }
  134. }
  135. #endregion;
  136. var agvtaskitem = Current.AgvTaskSet.OrderBy(v => v.Task_UpdateDate).FirstOrDefault(v => v.Task_PosidFrom == item.CachePosNo);
  137. if (item.CachePH_Status)
  138. {
  139. if (agvtaskitem == null)
  140. {
  141. #region 创建AGV任务
  142. int wcsStatus = 1;
  143. if (Current.AGVConfig.Any(v => item.WorkshopNo==v.WORKSHOP && !v.INENABLE))
  144. {
  145. BaseWorkflow.AddLedErrorMsg(item.ConvPostionNo, $"车间{item.WorkshopNo}入库功能禁用", 0);
  146. continue;
  147. }
  148. //if (Current.SysSets.FirstOrDefault(v => v.SET_ID == workshopNo).SET_VALUE.Trim() == "0")
  149. //{
  150. // wcsStatus = 1;
  151. //}
  152. var agvtasks = SugarBase.DB.Queryable<Middle_AGVTask>().Where(v => v.Task_PosidFrom == item.ConvPostionNo && v.Task_WcsStatus != 4 && v.Task_WcsStatus != 99 && v.Task_WcsStatus != 106).ToList();
  153. if (agvtasks.Any(v => !string.IsNullOrWhiteSpace(v.Task_No)))
  154. {
  155. continue;
  156. }
  157. //创建AGV任务
  158. var agvtask = new Middle_AGVTask()
  159. {
  160. Task_No = task.TASK_WMSNO,
  161. Task_BreakTrayNo = task.TASK_BOXBARCODE,
  162. Task_Type = task_type,
  163. Task_Whid = Current.PvchouseputongCh,
  164. Task_WorkshopNo = item.WorkshopNo,
  165. Task_ProLineNo = item.ProLineNo,
  166. Task_PosidFrom = item.CachePosNo,
  167. Task_PosidTo = item.ConvPostionNo,
  168. Task_WcsStatus = wcsStatus,
  169. Task_CreateDate = DateTime.Now,
  170. Task_CreateUser = "wcs",
  171. Task_UpdateUser = "wcs",
  172. Task_UpdateDate = DateTime.Now
  173. };
  174. string result = TryCachHelper.TryTranExecute((db) =>
  175. {
  176. int task_id = db.Insertable(agvtask).ExecuteReturnIdentity();
  177. if (task_id <= 0)
  178. {
  179. throw new Exception(string.Format("WCS任务[{0}]添加agv任务失败", task_id));
  180. }
  181. string task_idStr = task_id.ToString();
  182. //修改任务的状态
  183. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 10, TASK_EDITUSERNO = "WCS", TASK_ITEM8 = task_idStr, TASK_EDITDATETIME = DateTime.Now })
  184. .Where(it => it.TASK_NO == task.TASK_NO)
  185. .ExecuteCommand();
  186. //添加修改明细
  187. string msg = string.Format("任务[{0}]已下发AGV", task.TASK_NO);
  188. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDTO, msg);
  189. });
  190. #endregion;
  191. }
  192. else
  193. {
  194. #region 修改AGV任务状态
  195. if (agvtaskitem.Task_WcsStatus == 0 && agvtaskitem.Task_AgvStatus == 0)
  196. {
  197. string result = TryCachHelper.TryTranExecute((db) =>
  198. {
  199. db.Updateable<Middle_AGVTask>(it => new Middle_AGVTask()
  200. {
  201. Task_WcsStatus = 1,
  202. Task_UpdateUser = "wcs",
  203. Task_UpdateDate = DateTime.Now
  204. }).Where(it => it.Task_Id == agvtaskitem.Task_Id).ExecuteCommand();
  205. string task_idStr = agvtaskitem.Task_Id.ToString();
  206. //修改任务的状态
  207. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 10, TASK_EDITUSERNO = "WCS", TASK_ITEM8 = task_idStr, TASK_EDITDATETIME = DateTime.Now })
  208. .Where(it => it.TASK_NO == task.TASK_NO)
  209. .ExecuteCommand();
  210. //添加修改明细
  211. string msg = string.Format("任务[{0}]已下发AGV", task.TASK_NO);
  212. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDTO, msg);
  213. });
  214. if (string.IsNullOrWhiteSpace(result))
  215. {
  216. LogMessageHelper.RecordLogMessage(string.Format("agvId[{0}]是agv错误插入的任务,WCS修改该任务的状态成功。", agvtaskitem.Task_Id));
  217. }
  218. }
  219. #endregion;
  220. }
  221. }
  222. else
  223. {
  224. #region 修改AGV任务状态
  225. if (agvtaskitem != null && agvtaskitem.Task_WcsStatus == 0 && agvtaskitem.Task_AgvStatus == 0)
  226. {
  227. string result = TryCachHelper.TryTranExecute((db) =>
  228. {
  229. db.Updateable<Middle_AGVTask>(it => new Middle_AGVTask()
  230. {
  231. Task_WcsStatus = 1,
  232. Task_UpdateUser = "wcs",
  233. Task_UpdateDate = DateTime.Now
  234. }).Where(it => it.Task_Id == agvtaskitem.Task_Id).ExecuteCommand();
  235. string task_idStr = agvtaskitem.Task_Id.ToString();
  236. //修改任务的状态
  237. db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 10, TASK_EDITUSERNO = "WCS", TASK_ITEM8 = task_idStr, TASK_EDITDATETIME = DateTime.Now })
  238. .Where(it => it.TASK_NO == task.TASK_NO)
  239. .ExecuteCommand();
  240. //添加修改明细
  241. string msg = string.Format("任务[{0}]已下发AGV", task.TASK_NO);
  242. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDTO, msg);
  243. });
  244. if (string.IsNullOrWhiteSpace(result))
  245. {
  246. LogMessageHelper.RecordLogMessage(string.Format("agvId[{0}]是agv错误插入的任务,WCS修改该任务的状态成功。", agvtaskitem.Task_Id));
  247. }
  248. }
  249. #endregion;
  250. }
  251. }
  252. //if (item.CachePH_Status && task_type == 4)
  253. //{
  254. // //查询半成品熟化架任务
  255. // var task = Current.TaskSet.Where(v => v.TASK_POSIDFROM == item.CachePosNo && v.TASK_WKSTATUS <= 1).OrderBy(v => v.TASK_ADDDATETIME).ToList().FirstOrDefault();
  256. // if (task != null)
  257. // {
  258. // #region 创建AGV任务,修改WCS任务状态
  259. // else
  260. // #endregion;
  261. // }
  262. //}
  263. #endregion;
  264. }
  265. catch (Exception ex)
  266. {
  267. LogMessageHelper.RecordLogMessage(ex);
  268. }
  269. }
  270. }
  271. catch (Exception ex)
  272. {
  273. LogMessageHelper.RecordLogMessage(ex);
  274. }
  275. }
  276. /// <summary>
  277. /// 生产线AGV申请WMS生成出库任务
  278. /// </summary>
  279. public static void AgvCallOutTask()
  280. {
  281. try
  282. {
  283. //查询AGV呼叫任务,申请生成WMS出库任务
  284. var agvTasks = Current.AgvTaskSet.Where(v => (v.Task_WcsStatus == 5 || v.Task_WcsStatus==0) && (v.Task_Type == 1 || v.Task_Type == 3)).OrderBy(v => v.Task_CreateDate).ToList();
  285. foreach (var item in agvTasks)
  286. {
  287. try
  288. {
  289. //if (item.Task_Type == 1 && (item.Task_WorkshopNo == "5" || item.Task_WorkshopNo == "6" || item.Task_WorkshopNo == "7"))
  290. //{
  291. // continue;
  292. //}
  293. if (!SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_ITEM8 == item.Task_Id.ToString()))
  294. {
  295. var param = new GetOutTaskParam();
  296. param.OutId = item.Task_Id.ToString();
  297. param.OutEndPostion = item.Task_PosidTo;
  298. int tasktype = 0;
  299. if (item.Task_Type == 1)
  300. {
  301. tasktype = 1;
  302. }
  303. else if (item.Task_Type == 3)
  304. {
  305. tasktype = 2;
  306. }
  307. param.OutType = tasktype;
  308. param.WareHouseId = Current.Pvchouseputong;
  309. if (item.Task_Type == 1 && item.Task_WorkshopNo != "18")
  310. {
  311. param.Memo1 = "1";
  312. }
  313. BaseWorkflow.GetOutTask(param);
  314. //调用WMS接口生成出库任务
  315. //ThreadHelper.TaskThread(BaseWorkflow.GetOutTask, param, 2000);
  316. }
  317. }
  318. catch (Exception ex)
  319. {
  320. LogMessageHelper.RecordLogMessage(ex);
  321. }
  322. }
  323. //查询18车间的空熟化架入库任务
  324. var agvTaskItems = Current.AgvTaskSet.Where(v => v.Task_WcsStatus == 0 && v.Task_Type == 4 && v.Task_WorkshopNo=="18").OrderBy(v => v.Task_CreateDate).ToList();
  325. foreach (var item in agvTaskItems)
  326. {
  327. SugarBase.DB.Updateable<Middle_AGVTask>(it => new Middle_AGVTask() { Task_WcsStatus = 1, Task_UpdateUser = "wcs", Task_UpdateDate = DateTime.Now })
  328. .Where(it => it.Task_Id == item.Task_Id)
  329. .ExecuteCommand();
  330. }
  331. }
  332. catch (Exception ex)
  333. {
  334. LogMessageHelper.RecordLogMessage(ex);
  335. }
  336. }
  337. /// <summary>
  338. /// 生产线AGV申请WMS生成退料入库任务
  339. /// </summary>
  340. public static void AgvCallBackInTask()
  341. {
  342. try
  343. {
  344. //查询AGV呼叫任务,申请生成WMS出库任务
  345. var agvTasks = Current.AgvTaskSet.Where(v => v.Task_WcsStatus == 0 && v.Task_Type == 2 && v.Task_WorkshopNo.Trim() != "18").OrderBy(v => v.Task_CreateDate).ToList();
  346. foreach (var item in agvTasks)
  347. {
  348. if (item.Task_WorkshopNo.Trim() == "18")
  349. {
  350. }
  351. else
  352. {
  353. if (!Current.TaskSet.Any(v => v.TASK_ITEM8 == item.Task_Id.ToString()))
  354. // if (!Current.TaskSet.Any(v => v.TASK_POSIDTO == item.Task_PosidFrom))
  355. {
  356. var param = new GetOutTaskParam()
  357. {
  358. OutId = item.Task_Id.ToString(),
  359. OutEndPostion = item.Task_PosidFrom,
  360. OutType = item.Task_Type == 2 ? 2 : 0,
  361. WareHouseId = Current.Pvchouseputong
  362. };
  363. //调用WMS接口生成出库任务
  364. ThreadHelper.TaskThread(BaseWorkflow.GetOutTask, param, 2000);
  365. }
  366. }
  367. }
  368. }
  369. catch (Exception ex)
  370. {
  371. LogMessageHelper.RecordLogMessage(ex);
  372. }
  373. }
  374. /// <summary>
  375. /// 半成品熟化架入库
  376. /// </summary>
  377. //public static void AgvCallFullInTask()
  378. //{
  379. // try
  380. // {
  381. // //查询AGV呼叫任务,申请生成WMS出库任务
  382. // var agvTasks = Current.AgvTaskSet.Where(v => v.Task_WcsStatus == 0 && v.Task_Type == 4).OrderBy(v => v.Task_CreateDate).ToList();
  383. // foreach (var item in agvTasks)
  384. // {
  385. // if (!Current.TaskSet.Any(v => v.TASK_POSIDFROM == item.Task_PosidFrom))
  386. // {
  387. // var param = new GetInTaskParam();
  388. // param.ContainerBarCode = string.Empty;
  389. // param.ContainerType = 1;
  390. // param.MatBarCode = string.Empty;
  391. // param.WareHouseId = Current.Pvchouseputong;
  392. // param.EquipmentNo = item.Task_PosidFrom;
  393. // param.EndPostion = "srm";
  394. // ThreadHelper.TaskThread(BaseWorkflow.GetWcsInTask, param, 3000);
  395. // }
  396. // }
  397. // }
  398. // catch (Exception ex)
  399. // {
  400. // LogMessageHelper.RecordLogMessage(ex);
  401. // }
  402. //}
  403. /// <summary>
  404. /// 发送任务给AGV
  405. /// </summary>
  406. public static void SendTaskToAgv()
  407. {
  408. try
  409. {
  410. var outPosNoList_4_5 = new List<string>() { "1097", "1104" };//4#,5#
  411. var tasks = SugarBase.DB.Queryable<WCS_TASK>().Where(v => outPosNoList_4_5.Contains(v.TASK_POSIDCUR)).ToList();
  412. var outPosNoList_6_7 = new List<string>() { "1107", "1112", "1199" };//6#,7#,18#
  413. var tasktemps = SugarBase.DB.Queryable<WCS_TASK>().Where(v => outPosNoList_6_7.Contains(v.TASK_POSIDCUR)).ToList();
  414. tasks.AddRange(tasktemps);
  415. foreach (var item in tasks)
  416. {
  417. try
  418. {
  419. Thread.Sleep(100);
  420. int agv_taskid = 0;
  421. if (!string.IsNullOrWhiteSpace(item.TASK_ITEM8))
  422. {
  423. agv_taskid = Convert.ToInt32(item.TASK_ITEM8);
  424. }
  425. if (agv_taskid == 0) continue;
  426. var agvtask = SugarBase.DB.Queryable<Middle_AGVTask>().First(v => v.Task_Id == agv_taskid);
  427. if (agvtask != null && agvtask.Task_AgvStatus == 0 && (agvtask.Task_WcsStatus == 0 || agvtask.Task_WcsStatus == 5))
  428. {
  429. string task_no = item.TASK_NO.ToString();
  430. int wcsStatus = 5;
  431. if (Current.SysSets.FirstOrDefault(v => v.SET_ID == agvtask.Task_Workshop).SET_VALUE.Trim() == "0")
  432. {
  433. wcsStatus = 1;
  434. //任务下发给AGV
  435. SugarBase.DB.Updateable<Middle_AGVTask>(it => new Middle_AGVTask()
  436. {
  437. Task_No = item.TASK_WMSNO,
  438. Task_WcsStatus = wcsStatus,
  439. Task_BreakTrayNo = item.TASK_BOXBARCODE,
  440. Task_BreakBarCode_1 = item.TASK_ITEM9,
  441. Task_BreakBarCode_2 = item.TASK_ITEM10,
  442. Task_UpdateUser = "wcs",
  443. Task_UpdateDate = DateTime.Now,
  444. Task_Remark = task_no
  445. })
  446. .Where(it => it.Task_Id == agv_taskid)
  447. .ExecuteCommand();
  448. }
  449. }
  450. }
  451. catch (Exception ex)
  452. {
  453. LogMessageHelper.RecordLogMessage(ex);
  454. }
  455. }
  456. }
  457. catch (Exception ex)
  458. {
  459. LogMessageHelper.RecordLogMessage(ex);
  460. }
  461. }
  462. /// <summary>
  463. /// 无AGV模式WCS标识AGV任务完成
  464. /// </summary>
  465. private static void FinishAgvTaskAgvStatus()
  466. {
  467. try
  468. {
  469. var syssets = Current.SysSets.Where(v => v.SET_TYPE == "AgvDisable").ToList();
  470. var agvtask = Current.AgvTaskSet.Where(v => v.Task_AgvStatus < 99 && v.Task_WcsStatus < 99 && syssets.Any(t => t.SET_ID == v.Task_Workshop && t.SET_VALUE.Trim() == "1")).ToList();
  471. foreach (var item in agvtask)
  472. {
  473. try
  474. {
  475. if (string.IsNullOrWhiteSpace(item.Task_No)) continue;
  476. if (string.IsNullOrWhiteSpace(item.Task_BreakTrayNo)) continue;
  477. if (item.Task_Type == 1 | item.Task_Type == 3)
  478. {
  479. var routeitem = Current.EquRouteSet.SingleOrDefault(v => v.ROUTE_SONPOS == item.Task_PosidTo.Trim());
  480. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_WMSNO == item.Task_No && v.TASK_POSIDNEXT == routeitem.ROUTE_STARTPOS);
  481. if (task != null)
  482. {
  483. //标识agv任务agv完成状态
  484. SugarBase.DB.Updateable<Middle_AGVTask>(it => new Middle_AGVTask()
  485. {
  486. Task_AgvStatus = 99,
  487. Task_UpdateUser = "wcs",
  488. Task_UpdateDate = DateTime.Now
  489. })
  490. .Where(it => it.Task_Id == item.Task_Id)
  491. .ExecuteCommand();
  492. }
  493. }
  494. else
  495. {
  496. if (Current.TaskSet.Any(v => v.TASK_BOXBARCODE == item.Task_BreakTrayNo && v.TASK_WMSNO == item.Task_No && v.TASK_WKSTATUS == 2))
  497. {
  498. //标识agv任务agv完成状态
  499. SugarBase.DB.Updateable<Middle_AGVTask>(it => new Middle_AGVTask()
  500. {
  501. Task_AgvStatus = 99,
  502. Task_UpdateUser = "wcs",
  503. Task_UpdateDate = DateTime.Now
  504. })
  505. .Where(it => it.Task_Id == item.Task_Id)
  506. .ExecuteCommand();
  507. }
  508. }
  509. }
  510. catch (Exception ex)
  511. {
  512. LogMessageHelper.RecordLogMessage(ex);
  513. }
  514. }
  515. }
  516. catch (Exception ex)
  517. {
  518. LogMessageHelper.RecordLogMessage(ex);
  519. }
  520. }
  521. /// <summary>
  522. /// 标识agv任务Wcs完成状态
  523. /// </summary>
  524. public static void FinishAgvTaskWcsStatus()
  525. {
  526. try
  527. {
  528. var agvTasks = Current.AgvTaskSet.Where(v => (v.Task_AgvStatus == 99 || v.Task_AgvStatus == 106) && v.Task_WcsStatus < 99).ToList();
  529. foreach (var item in agvTasks)
  530. {
  531. try
  532. {
  533. var wcstask = Current.TaskSet.FirstOrDefault(v => v.TASK_WMSNO == item.Task_No);
  534. if ((!string.IsNullOrWhiteSpace(item.Task_BreakBarCode_1)) &&
  535. (!string.IsNullOrWhiteSpace(item.Task_BreakTrayNo)))
  536. {
  537. //检查是否生成了退料入库任务
  538. if (!Current.TaskSet.Any(v => v.TASK_BOXBARCODE == item.Task_BreakTrayNo && v.TASK_COMTYPE == 1)) continue;
  539. string result = TryCachHelper.TryTranExecute((db) =>
  540. {
  541. //标识agv任务Wcs完成状态
  542. db.Updateable<Middle_AGVTask>(it => new Middle_AGVTask()
  543. {
  544. Task_WcsStatus = item.Task_AgvStatus,
  545. Task_UpdateUser = "wcs",
  546. Task_UpdateDate = DateTime.Now
  547. })
  548. .Where(it => it.Task_Id == item.Task_Id)
  549. .ExecuteCommand();
  550. //标识wcs状态
  551. if (wcstask != null && wcstask.TASK_COMTYPE == 1 && wcstask.TASK_WKSTATUS == 10)
  552. {
  553. db.Updateable<WCS_TASK>(it => new WCS_TASK()
  554. {
  555. TASK_WKSTATUS = 12,
  556. TASK_EDITUSERNO = "wcs",
  557. TASK_EDITDATETIME = DateTime.Now
  558. })
  559. .Where(it => it.TASK_NO == wcstask.TASK_NO)
  560. .ExecuteCommand();
  561. //添加任务明细
  562. string msg = string.Format("入库任务[{0}]AGV完成", wcstask.TASK_NO);
  563. CommonData.AddWCS_TASK_DTL(db, wcstask.TASK_NO, wcstask.TASK_NO, wcstask.TASK_POSIDCUR, wcstask.TASK_POSIDCUR, msg);
  564. }
  565. });
  566. }
  567. else
  568. {
  569. string result = TryCachHelper.TryTranExecute((db) =>
  570. {
  571. //标识agv任务Wcs完成状态
  572. db.Updateable<Middle_AGVTask>(it => new Middle_AGVTask()
  573. {
  574. Task_WcsStatus = item.Task_AgvStatus,
  575. Task_UpdateUser = "wcs",
  576. Task_UpdateDate = DateTime.Now
  577. })
  578. .Where(it => it.Task_Id == item.Task_Id)
  579. .ExecuteCommand();
  580. //标识wcs状态
  581. if (wcstask != null && wcstask.TASK_COMTYPE == 1)
  582. {
  583. db.Updateable<WCS_TASK>(it => new WCS_TASK()
  584. {
  585. TASK_WKSTATUS = 12,
  586. TASK_EDITUSERNO = "wcs",
  587. TASK_EDITDATETIME = DateTime.Now
  588. })
  589. .Where(it => it.TASK_NO == wcstask.TASK_NO)
  590. .ExecuteCommand();
  591. //添加任务明细
  592. string msg = string.Format("入库任务[{0}]AGV完成", wcstask.TASK_NO);
  593. CommonData.AddWCS_TASK_DTL(db, wcstask.TASK_NO, wcstask.TASK_NO, wcstask.TASK_POSIDCUR, wcstask.TASK_POSIDCUR, msg);
  594. }
  595. });
  596. }
  597. }
  598. catch (Exception ex)
  599. {
  600. LogMessageHelper.RecordLogMessage(ex);
  601. }
  602. }
  603. }
  604. catch (Exception ex)
  605. {
  606. LogMessageHelper.RecordLogMessage(ex);
  607. }
  608. }
  609. }
  610. }