ConveyorHelper.cs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  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. namespace WCS.PLC
  13. {
  14. public class ConveyorHelper
  15. {
  16. /// <summary>
  17. /// 获取输送线信号
  18. /// </summary>
  19. /// <param name="plc_name"></param>
  20. /// <param name="conveyorNo"></param>
  21. /// <returns></returns>
  22. public static ConvSignal GetConveyorSignal(string plc_name, string conveyorNo)
  23. {
  24. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == plc_name);
  25. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == conveyorNo);
  26. if (conveyor == null)
  27. {
  28. Log4netHelper.Logger_Info.InfoFormat("plc:" + plc_name + "输送线:" + conveyorNo);
  29. return null;
  30. }
  31. return conveyor.EquSignal_Conv;
  32. }
  33. private static List<string> QuerySrmList(List<string> srms)
  34. {
  35. var result = new List<string>();
  36. Dictionary<string, int> dicsrm = new Dictionary<string, int>();
  37. foreach (var item in srms)
  38. {
  39. string srm = string.Format("srm0{0}", item);
  40. int taskcount = Current.TaskSet.Where(v => v.TASK_COMTYPE == 1 && v.TASK_WKSTATUS == 2 && v.TASK_SRMNO == srm).Count();
  41. dicsrm.Add(srm, taskcount);
  42. }
  43. result = dicsrm.OrderBy(v => v.Value).Select(t => t.Key).ToList();
  44. return result;
  45. }
  46. private static Dictionary<string, int> QueryDicList(List<string> srms)
  47. {
  48. Dictionary<string, int> dicsrm = new Dictionary<string, int>();
  49. foreach (var item in srms)
  50. {
  51. string srm = string.Format("srm0{0}", item);
  52. int taskcount = Current.TaskSet.Where(v => v.TASK_COMTYPE == 1 && v.TASK_WKSTATUS == 2 && v.TASK_SRMNO == srm).Count();
  53. dicsrm.Add(srm, taskcount);
  54. }
  55. return dicsrm;
  56. }
  57. /// <summary>
  58. /// 看板提示
  59. /// </summary>
  60. /// <param name="equipmentNo"></param>
  61. /// <param name="alaram"></param>
  62. /// <param name="writeCount"></param>
  63. public static void AddLedAlarmsMsg(string equipmentNo, string alaram, int writeCount = 100)
  64. {
  65. var time = SugarBase.DB.GetDate();//获取当前时间
  66. var alarmsmsgSet = SugarBase.DB.Queryable<WCS_LEDALARMSMSG>().Where(v => v.LED_CONVYORNO == equipmentNo).ToList();
  67. if (alarmsmsgSet.Count() < writeCount)
  68. {
  69. WCS_LEDALARMSMSG updateAlaram = null;
  70. var alarams = alarmsmsgSet.OrderByDescending(v => v.LED_UPDATETIME).ToList();
  71. if (alarams.Count > 0)
  72. {
  73. if (alarams[0].LED_ALARMSMSG == alaram)
  74. {
  75. updateAlaram = alarams[0];
  76. }
  77. }
  78. if (updateAlaram == null)
  79. {
  80. //添加
  81. var alarmsmsg = new WCS_LEDALARMSMSG();
  82. alarmsmsg.LED_ID = Guid.NewGuid().ToString();
  83. alarmsmsg.LED_ADDRESS = string.Empty;
  84. alarmsmsg.LED_CONVYORNO = equipmentNo;
  85. alarmsmsg.LED_NO = "1";
  86. alarmsmsg.LED_ALARMSMSG = alaram;
  87. alarmsmsg.LED_DEFAULTMESSAGE = Current.LED_DEFAULTMESSAGE;
  88. alarmsmsg.LED_UPDATETIME = time;
  89. alarmsmsg.LED_NOTES = string.Empty;
  90. SugarBase.DB.Insertable(alarmsmsg).ExecuteCommand();
  91. }
  92. else if (updateAlaram.LED_UPDATETIME.AddMilliseconds(3) < time)
  93. {
  94. //更新时间大于3秒,更新最新提示
  95. SugarBase.DB.Updateable<WCS_LEDALARMSMSG>(it => new WCS_LEDALARMSMSG() { LED_UPDATETIME = time })
  96. .Where(it => it.LED_ID == updateAlaram.LED_ID)
  97. .ExecuteCommand();
  98. }
  99. }
  100. else
  101. {
  102. var alaitem = alarmsmsgSet.OrderByDescending(v => v.LED_UPDATETIME).ToList()[0];
  103. if (alaitem.LED_ALARMSMSG != alaram)
  104. {
  105. var alaramsmsgitem = alarmsmsgSet.OrderBy(v => v.LED_UPDATETIME).ToList()[0];
  106. //更新最新提示
  107. SugarBase.DB.Updateable<WCS_LEDALARMSMSG>(it => new WCS_LEDALARMSMSG() { LED_ALARMSMSG = alaram, LED_UPDATETIME = time })
  108. .Where(it => it.LED_ID == alaramsmsgitem.LED_ID)
  109. .ExecuteCommand();
  110. }
  111. }
  112. }
  113. /// <summary>
  114. /// 入口是否报警
  115. /// </summary>
  116. public static bool ConvGoodsAlarms(string convNo, ConvSignal cs)
  117. {
  118. var alarmsMsg = new StringBuilder();
  119. if (cs.DB521_Goods_Err)
  120. {
  121. alarmsMsg.Append(string.Format("外形/条码等故障"));
  122. }
  123. if (cs.DB521_F_Outside)
  124. {
  125. if (alarmsMsg.Length > 0)
  126. {
  127. alarmsMsg.Append(";");
  128. }
  129. alarmsMsg.Append(string.Format("前超长故障"));
  130. }
  131. if (cs.DB521_B_Outside)
  132. {
  133. if (alarmsMsg.Length > 0)
  134. {
  135. alarmsMsg.Append(";");
  136. }
  137. alarmsMsg.Append(string.Format("后超长故障"));
  138. }
  139. if (cs.DB521_L_Outside)
  140. {
  141. if (alarmsMsg.Length > 0)
  142. {
  143. alarmsMsg.Append(";");
  144. }
  145. alarmsMsg.Append(string.Format("左超长故障"));
  146. }
  147. if (cs.DB521_R_Outside)
  148. {
  149. if (alarmsMsg.Length > 0)
  150. {
  151. alarmsMsg.Append(";");
  152. }
  153. alarmsMsg.Append(string.Format("右超长故障"));
  154. }
  155. if (cs.DB521_H_Outside)
  156. {
  157. if (alarmsMsg.Length > 0)
  158. {
  159. alarmsMsg.Append(";");
  160. }
  161. alarmsMsg.Append(string.Format("超高故障"));
  162. }
  163. if (cs.DB521_BCR_Noread)
  164. {
  165. if (alarmsMsg.Length > 0)
  166. {
  167. alarmsMsg.Append(";");
  168. }
  169. alarmsMsg.Append(string.Format("条码未读出"));
  170. }
  171. if (cs.DB521_Overload)
  172. {
  173. if (alarmsMsg.Length > 0)
  174. {
  175. alarmsMsg.Append(";");
  176. }
  177. alarmsMsg.Append(string.Format("超重"));
  178. }
  179. if (alarmsMsg.Length > 0)
  180. {
  181. string result = string.Format("输送线[{0}]货物[{1}]", convNo, alarmsMsg.ToString());
  182. Log4netHelper.Logger_Error.ErrorFormat(result);
  183. return true;
  184. }
  185. else
  186. {
  187. return false;
  188. }
  189. }
  190. internal static string QueryTunnel(string wmstaskno, string tunnelNum,out string srmNo)
  191. {
  192. string tunnelNo = string.Empty;
  193. srmNo = string.Empty;
  194. var tunnelList = tunnelNum.Split(',').ToList();
  195. //根据物料缓存状态统计堆垛机入库任务数量
  196. var SrmCacheInfoSet = QuerySrmInConvCacheInfoList(tunnelList);
  197. foreach (var item in tunnelList)
  198. {
  199. var srmitem = SrmCacheInfoSet.FirstOrDefault(v => v.SrmTunnel == item);
  200. if (srmitem.ConvCacheIsAvailable)
  201. {
  202. //var plctemp = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == srmitem.SrmNo);
  203. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.DB521_Auto_status != (int)SrmModeEnum.远程) continue;
  204. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.SrmDB541_Alarm) continue;
  205. tunnelNo = srmitem.SrmTunnel;
  206. srmNo = srmitem.SrmNo;
  207. break;
  208. }
  209. }
  210. if (string.IsNullOrWhiteSpace(tunnelNo))
  211. {
  212. var SrmCacheInfoList = SrmCacheInfoSet.OrderBy(v => v.ConvCacheInTaskCount).ToList();
  213. foreach (var tunnelInfo in SrmCacheInfoList)
  214. {
  215. //var plctemp = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == srm);
  216. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.DB521_Auto_status != (int)SrmModeEnum.远程) continue;
  217. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.SrmDB541_Alarm) continue;
  218. tunnelNo = tunnelInfo.SrmTunnel;
  219. srmNo = tunnelInfo.SrmNo;
  220. break;
  221. }
  222. }
  223. if (string.IsNullOrWhiteSpace(tunnelNo))
  224. {
  225. throw new Exception(string.Format("WMS任务[{0}]分配巷道失败,WMS返回的巷道[{1}]在WCS系统中未找到。", wmstaskno, tunnelNum));
  226. }
  227. return tunnelNo;
  228. }
  229. internal static string AssignSrm(string convNo, string tunnelNum)
  230. {
  231. string srmno = string.Empty;
  232. var routeSet = EquRouteHelper.QueryRoute(convNo, "srm");
  233. var srmList = tunnelNum.Split(',').ToList();
  234. //根据物料缓存状态统计堆垛机入库任务数量
  235. //var dicsrm = QueryDicList(srmList);
  236. var SrmCacheInfoSet = QuerySrmInConvCacheInfoList(srmList);
  237. foreach (var item in srmList)
  238. {
  239. //if (srm == "srm03" || srm == "srm01" || srm == "srm04")
  240. //{
  241. var srmitem = SrmCacheInfoSet.FirstOrDefault(v => v.SrmTunnel == item);
  242. if (srmitem.ConvCacheIsAvailable)
  243. {
  244. var plctemp = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == srmitem.SrmNo);
  245. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.DB521_Auto_status != (int)SrmModeEnum.远程) continue;
  246. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.SrmDB541_Alarm) continue;
  247. var touteTo = routeSet.FirstOrDefault(v => v.ROUTE_SONPOS == srmitem.SrmNo);
  248. if (touteTo == null) continue;
  249. srmno = srmitem.SrmNo;
  250. break;
  251. }
  252. //}
  253. }
  254. if (string.IsNullOrWhiteSpace(srmno))
  255. {
  256. var result = SrmCacheInfoSet.OrderBy(v => v.ConvCacheInTaskCount).Select(t => t.SrmNo).ToList();
  257. foreach (var srm in result)
  258. {
  259. //if (srm == "srm03" || srm == "srm01" || srm == "srm04")
  260. //{
  261. var plctemp = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == srm);
  262. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.DB521_Auto_status != (int)SrmModeEnum.远程) continue;
  263. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.SrmDB541_Alarm) continue;
  264. var touteTo = routeSet.FirstOrDefault(v => v.ROUTE_SONPOS == srm);
  265. if (touteTo == null) continue;
  266. srmno = srm;
  267. break;
  268. //}
  269. }
  270. }
  271. return srmno;
  272. }
  273. internal static List<SrmInConvCacheInfo> QuerySrmInConvCacheInfoList(List<string> tunnels)
  274. {
  275. var srmList = new List<SrmInConvCacheInfo>();
  276. foreach (var tunnel in tunnels)
  277. {
  278. var syssetitem = Current.SysSets.Where(v => v.SET_ID.Contains("Tunnel")).FirstOrDefault(v => v.SET_VALUE == tunnel);
  279. int taskcount = Current.TaskSet.Where(v => v.TASK_COMTYPE == 1 && (v.TASK_WKSTATUS == 2 || v.TASK_WKSTATUS == 5) && v.TASK_EndTunnelNum == tunnel).Count();
  280. if (syssetitem.SET_TYPE == "srm01")
  281. {
  282. srmList.Add(new SrmInConvCacheInfo { SrmTunnel = tunnel, SrmNo = syssetitem.SET_TYPE, ConvCacheCount = 100, ConvCacheInTaskCount = taskcount });
  283. }
  284. else
  285. {
  286. srmList.Add(new SrmInConvCacheInfo { SrmTunnel = tunnel, SrmNo = syssetitem.SET_TYPE, ConvCacheCount = 2, ConvCacheInTaskCount = taskcount });
  287. }
  288. }
  289. return srmList;
  290. }
  291. /// <summary>
  292. /// 分配堆垛机(分配巷道)
  293. /// </summary>
  294. /// <param name="routeSet">路由轨迹清单</param>
  295. /// <param name="converywrite">要写入plc的信息</param>
  296. /// <param name="task_no">任务号</param>
  297. public static void AssignSrm(List<WCS_EQUIPMENTROUTE> routeSet, WCSWriteToConveyorSignal converywrite, int wmstaskNum)
  298. {
  299. var param = new GetTunnelListParam();
  300. param.WMSTaskNum = wmstaskNum.ToString();
  301. //分配巷道
  302. var tunnelListReply = Current.WmsInterface.I_WCS_GetTunnelList(param);
  303. if (tunnelListReply == null)
  304. {
  305. throw new Exception(string.Format("WMS任务[{0}]分配巷道失败,原因[接口返回对象不正确,解析失败]", wmstaskNum));
  306. }
  307. else if (tunnelListReply.ResType)
  308. {
  309. if (string.IsNullOrWhiteSpace(tunnelListReply.TunnelNum))
  310. {
  311. throw new Exception(string.Format("WMS任务[{0}]分配巷道失败,原因[没有返回巷道列表]", wmstaskNum));
  312. }
  313. var srmList = tunnelListReply.TunnelNum.Split(',').ToList();
  314. //根据物料缓存状态统计堆垛机入库任务数量
  315. //var dicsrm = QueryDicList(srmList);
  316. var SrmCacheInfoSet = QuerySrmInConvCacheInfoList(srmList);
  317. foreach (var item in srmList)
  318. {
  319. //string srm = string.Empty;
  320. //if (item.Length == 2)
  321. //{
  322. // srm = string.Format("srm{0}", item);
  323. //}
  324. //else
  325. //{
  326. // srm = string.Format("srm0{0}", item);
  327. //}
  328. //if (srm == "srm03" || srm == "srm01" || srm == "srm04")
  329. //{
  330. var srmitem = SrmCacheInfoSet.FirstOrDefault(v => v.SrmTunnel == item);
  331. if (srmitem.ConvCacheIsAvailable)
  332. {
  333. var plctemp = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == srmitem.SrmNo);
  334. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.DB521_Auto_status != (int)SrmModeEnum.远程) continue;
  335. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.SrmDB541_Alarm) continue;
  336. var touteTo = routeSet.FirstOrDefault(v => v.ROUTE_SONPOS == srmitem.SrmNo);
  337. if (touteTo == null) continue;
  338. converywrite.Goodsend = Convert.ToInt32(touteTo.ROUTE_STARTPOS);
  339. converywrite.Srmno = srmitem.SrmNo;
  340. break;
  341. }
  342. //}
  343. }
  344. if (converywrite.Goodsend <= 0)
  345. {
  346. var result = SrmCacheInfoSet.OrderBy(v => v.ConvCacheInTaskCount).Select(t => t.SrmNo).ToList();
  347. foreach (var srm in result)
  348. {
  349. //if (srm == "srm03" || srm == "srm01" || srm == "srm04")
  350. //{
  351. var plctemp = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == srm);
  352. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.DB521_Auto_status != (int)SrmModeEnum.远程) continue;
  353. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.SrmDB541_Alarm) continue;
  354. var touteTo = routeSet.FirstOrDefault(v => v.ROUTE_SONPOS == srm);
  355. if (touteTo == null) continue;
  356. converywrite.Goodsend = Convert.ToInt32(touteTo.ROUTE_STARTPOS);
  357. converywrite.Srmno = srm;
  358. break;
  359. //}
  360. }
  361. }
  362. }
  363. if (converywrite.Goodsend <= 0)
  364. {
  365. if (tunnelListReply.ResType)
  366. {
  367. throw new Exception(string.Format("WMS任务[{0}]分配巷道失败,原因[WMS接口返回成功,设备信号因素导致失败]", wmstaskNum));
  368. }
  369. else
  370. {
  371. throw new Exception(string.Format("WMS任务[{0}]分配巷道失败,原因[{1}]", wmstaskNum, tunnelListReply.ResMessage));
  372. }
  373. }
  374. else
  375. {
  376. var result = TryCachHelper.TryExecute((db) =>
  377. {
  378. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == converywrite.Tasknum);
  379. db.Updateable<WCS_TASK>(it => new WCS_TASK()
  380. {
  381. TASK_POSIDTO = converywrite.Srmno,
  382. TASK_SRMNO = converywrite.Srmno,
  383. TASK_EDITUSERNO = "WCS",
  384. TASK_EDITDATETIME = DateTime.Now
  385. })
  386. .Where(it => it.TASK_NO == task.TASK_NO)
  387. .ExecuteCommand();
  388. });
  389. if (!string.IsNullOrWhiteSpace(result))
  390. {
  391. throw new Exception(string.Format("WMS任务[{0}]分配巷道更新任务失败,原因[{1}]", wmstaskNum, result));
  392. }
  393. }
  394. }
  395. public static void AssignSrm(WCS_TASK task)
  396. {
  397. try
  398. {
  399. var param = new GetTunnelListParam();
  400. param.WMSTaskNum = task.TASK_WMSNO;
  401. if (task.TASK_POSIDCUR == "1023" || task.TASK_POSIDNEXT == "1023")
  402. {
  403. var plctemp = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == "srm01");
  404. var srm = plctemp.WCS_EquipmentInfoSet.FirstOrDefault().EquSignal_Srm;
  405. if (srm.DB521_ToRowPos == 1 || srm.DB521_ToRowPos == 2)
  406. {
  407. param.Memo1 = "1";
  408. }
  409. else
  410. {
  411. param.Memo1 = "2";
  412. }
  413. }
  414. //分配巷道
  415. var tunnelListReply = Current.WmsInterface.I_WCS_GetTunnelList(param);
  416. if (tunnelListReply == null)
  417. {
  418. throw new Exception(string.Format("WMS任务[{0}]分配巷道失败,原因[接口返回对象不正确,解析失败]", task.TASK_WMSNO));
  419. }
  420. if (tunnelListReply.ResType)
  421. {
  422. if (string.IsNullOrWhiteSpace(tunnelListReply.TunnelNum))
  423. {
  424. throw new Exception(string.Format("WMS任务[{0}]分配巷道失败,原因[没有返回巷道列表]", task.TASK_WMSNO));
  425. }
  426. }
  427. else
  428. {
  429. throw new Exception(string.Format("WMS任务[{0}]分配巷道失败,原因[{1}]", task.TASK_WMSNO, tunnelListReply.ResMessage));
  430. }
  431. string tunnelNo = string.Empty;
  432. string tunnelSrmNo = string.Empty;
  433. var srmList = tunnelListReply.TunnelNum.Split(',').ToList();
  434. //根据物料缓存状态统计堆垛机入库任务数量
  435. var SrmCacheInfoSet = QuerySrmInConvCacheInfoList(srmList);
  436. foreach (var item in srmList)
  437. {
  438. var srmitem = SrmCacheInfoSet.FirstOrDefault(v => v.SrmTunnel == item);
  439. if (srmitem.ConvCacheIsAvailable)
  440. {
  441. //var plctemp = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == srmitem.SrmNo);
  442. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.DB521_Auto_status != (int)SrmModeEnum.远程) continue;
  443. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.SrmDB541_Alarm) continue;
  444. tunnelNo = srmitem.SrmTunnel;
  445. tunnelSrmNo = srmitem.SrmNo;
  446. break;
  447. }
  448. }
  449. if (string.IsNullOrWhiteSpace(tunnelSrmNo))
  450. {
  451. var SrmCacheInfoList = SrmCacheInfoSet.OrderBy(v => v.ConvCacheInTaskCount).ToList();
  452. foreach (var tunnelInfo in SrmCacheInfoList)
  453. {
  454. //var plctemp = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == srm);
  455. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.DB521_Auto_status != (int)SrmModeEnum.远程) continue;
  456. //if (plctemp.WCS_StackerDataSet[0].SrmSignalItem.SrmDB541_Alarm) continue;
  457. tunnelNo = tunnelInfo.SrmTunnel;
  458. tunnelSrmNo = tunnelInfo.SrmNo;
  459. break;
  460. }
  461. }
  462. if (string.IsNullOrWhiteSpace(tunnelSrmNo))
  463. {
  464. throw new Exception(string.Format("WMS任务[{0}]分配巷道失败,WMS返回的巷道[{1}]在WCS系统中未找到。", task.TASK_WMSNO, tunnelListReply.TunnelNum));
  465. }
  466. if (task.TASK_POSIDFROM == "1004")
  467. {
  468. tunnelNo = "1";
  469. }
  470. else if (task.TASK_POSIDFROM == "1013")
  471. {
  472. tunnelNo = "2";
  473. }
  474. var result = TryCachHelper.TryExecute((db) =>
  475. {
  476. db.Updateable<WCS_TASK>(it => new WCS_TASK()
  477. {
  478. TASK_EndTunnelNum = tunnelNo,
  479. TASK_POSIDTO = tunnelSrmNo,
  480. TASK_SRMNO = tunnelSrmNo,
  481. TASK_EDITUSERNO = "WCS",
  482. TASK_EDITDATETIME = DateTime.Now
  483. })
  484. .Where(it => it.TASK_NO == task.TASK_NO)
  485. .ExecuteCommand();
  486. });
  487. if (string.IsNullOrWhiteSpace(result))
  488. {
  489. task.TASK_POSIDTO = tunnelSrmNo;
  490. task.TASK_EndTunnelNum = tunnelNo;
  491. task.TASK_SRMNO = tunnelSrmNo;
  492. }
  493. else
  494. {
  495. throw new Exception(string.Format("WMS任务[{0}]分配巷道更新任务失败,原因[{1}]", task.TASK_WMSNO, result));
  496. }
  497. }
  498. catch (Exception ex)
  499. {
  500. LogMessageHelper.RecordLogMessage(ex);
  501. }
  502. }
  503. /// <summary>
  504. /// 预分配巷道
  505. /// </summary>
  506. public static void PreparatoryAssignSrmTunnel(WCS_TASK task)
  507. {
  508. try
  509. {
  510. var param = new GetTunnelListParam();
  511. param.WMSTaskNum = task.TASK_WMSNO;
  512. //分配巷道
  513. var tunnelListReply = Current.WmsInterface.I_WCS_GetTunnelList(param);
  514. if (tunnelListReply == null)
  515. {
  516. throw new Exception(string.Format("WMS任务[{0}]分配巷道失败,原因[接口返回对象不正确,解析失败]", task.TASK_WMSNO));
  517. }
  518. if (tunnelListReply.ResType)
  519. {
  520. if (string.IsNullOrWhiteSpace(tunnelListReply.TunnelNum))
  521. {
  522. throw new Exception(string.Format("WMS任务[{0}]分配巷道失败,原因[没有返回巷道列表]", task.TASK_WMSNO));
  523. }
  524. }
  525. else
  526. {
  527. throw new Exception(string.Format("WMS任务[{0}]分配巷道失败,原因[{1}]", task.TASK_WMSNO, tunnelListReply.ResMessage));
  528. }
  529. var result = TryCachHelper.TryExecute((db) =>
  530. {
  531. db.Updateable<WCS_TASK>(it => new WCS_TASK()
  532. {
  533. TASK_ITEM7 = tunnelListReply.TunnelNum,
  534. TASK_EDITUSERNO = "WCS",
  535. TASK_EDITDATETIME = DateTime.Now
  536. })
  537. .Where(it => it.TASK_NO == task.TASK_NO)
  538. .ExecuteCommand();
  539. });
  540. if (!string.IsNullOrWhiteSpace(result))
  541. {
  542. throw new Exception(string.Format("WMS任务[{0}]分配巷道更新任务失败,原因[{1}]", task.TASK_WMSNO, result));
  543. }
  544. else
  545. {
  546. task.TASK_ITEM7 = tunnelListReply.TunnelNum;
  547. }
  548. }
  549. catch (Exception ex)
  550. {
  551. LogMessageHelper.RecordLogMessage(ex);
  552. }
  553. }
  554. }
  555. public struct SrmInConvCacheInfo
  556. {
  557. /// <summary>
  558. /// 巷道
  559. /// </summary>
  560. public string SrmTunnel { get; set; }
  561. /// <summary>
  562. /// 堆垛机
  563. /// </summary>
  564. public string SrmNo { get; set; }
  565. /// <summary>
  566. /// 输送线缓存数量
  567. /// </summary>
  568. public int ConvCacheCount { get; set;}
  569. /// <summary>
  570. /// 缓存中的入库任务数量
  571. /// </summary>
  572. public int ConvCacheInTaskCount { get; set; }
  573. /// <summary>
  574. /// 输送线缓存区是否够用
  575. /// </summary>
  576. public bool ConvCacheIsAvailable
  577. {
  578. get
  579. {
  580. return ConvCacheCount > ConvCacheInTaskCount;
  581. }
  582. }
  583. }
  584. }