AgvWorkflow.cs 33 KB

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