From 987b9256e007825401cef4fe18f250566eedf3d5 Mon Sep 17 00:00:00 2001 From: 海波 张 <2956280567@qq.com> Date: 星期五, 06 六月 2025 17:28:15 +0800 Subject: [PATCH] 改道优化 --- core/Monitor.cs | 353 +++++++++++++++++++++++++++++++++------------------------- 1 files changed, 199 insertions(+), 154 deletions(-) diff --git a/core/Monitor.cs b/core/Monitor.cs index 0301f28..7f9637f 100644 --- a/core/Monitor.cs +++ b/core/Monitor.cs @@ -1,4 +1,5 @@ -锘縰sing HH.WCS.ZhongCeJinTan.api; +锘縰sing HH.WCS.Mobox3.ZhongCeJinTan.dispatch; +using HH.WCS.ZhongCeJinTan.api; using HH.WCS.ZhongCeJinTan.dispatch; using HH.WCS.ZhongCeJinTan.process; using HH.WCS.ZhongCeJinTan.util; @@ -86,11 +87,34 @@ public static void UpdateOutTaskPriority() { - //var ts1 = DateTime.Now.Subtract(datetime).TotalMinutes; + var db = new SqlHelper<object>().GetInstance(); + var st = Settings.outMinutePriority; + var list = TaskHelper.GetWcsTaskListByState("鎵ц", "agv", "鍑哄簱"); - + foreach (var item in list) + { + var action = db.Queryable<WmsTaskAction>().Where(p => p.S_TASK_CODE==item.S_CODE && p.N_ACTION_CODE == 1).First(); + if (action != null) + { + var action3 = db.Queryable<WmsTaskAction>().Where(p => p.S_TASK_CODE == item.S_CODE && p.N_ACTION_CODE == 3).First(); + if (action3 == null) + { + if (DateTime.Now.Subtract(action.T_CREATE).TotalMinutes > st.Minute) + { + item.N_PRIORITY += st.Priority; + db.Updateable(item).UpdateColumns(it => new { it.N_PRIORITY }).ExecuteCommand(); + NDCApi.ChangeOrderPri(item.S_CODE, item.N_PRIORITY); + } + } + } + } + int sp = st.Minute * 60000; + Thread.Sleep(sp); } + + + private static object locker = new object(); /// <summary> /// 鑷姩鍑哄簱绌烘墭 /// </summary> @@ -99,172 +123,193 @@ try { - var ktTaskList = db.Queryable<MesKtTask>().Where(a => a.Status == "N" ).ToList(); - foreach (var kt in ktTaskList) + lock (locker) { - if (DateTime.Now.Subtract(kt.CreateDate).TotalMinutes < 1) + var ktTaskList = db.Queryable<MesKtTask>().Where(a => a.Status == "N").OrderBy(b => b.CreateDate).ToList(); + foreach (var kt in ktTaskList) { - continue; - } + LogHelper.Info($"绌烘墭鍑哄簱缂撳瓨淇℃伅" + JsonConvert.SerializeObject(kt), "绌烘墭鍑哄簱"); - var workFlow = TaskHelper.selectWorkFlowByType(kt.BUSI_TYPE, kt.TOOLS_TPYE); - - - if (workFlow == null) - { - LogHelper.Info($"绌烘墭鍑哄簱浠诲姟涓嬪彂澶辫触锛屾祦绋嬬紪鍙�{kt.BUSI_TYPE},宸ヨ绫诲瀷{kt.TOOLS_TPYE},娌℃壘鍒板搴斾綔涓氭祦绋�, "绌烘墭鍑哄簱"); - throw new Exception($"BUSI_TYpe:{kt.BUSI_TYPE},娌℃壘鍒板搴斾綔涓氭祦绋�); - } - else - { - LogHelper.Info($"绌烘墭鍑哄簱浣滀笟娴佺▼淇℃伅" + JsonConvert.SerializeObject(workFlow), "绌烘墭鍑哄簱"); - } - - - - //鍑哄簱浠诲姟 - - //鎺ラ┏浣�- var connection = ""; - - //鎺ラ┏浣嶅簱鍖�- var connectionArea = ""; - - - //鏌ユ壘缁欏畾缁堢偣 - var end = LocationHelper.GetLoc(kt.Location_To); - LogHelper.Info($"绌烘墭鍑哄簱浠诲姟涓嬪彂缁堢偣淇℃伅" + JsonConvert.SerializeObject(end), "绌烘墭鍑哄簱"); - - - if (end == null) - { - LogHelper.Info($"绌烘墭鍑哄簱浠诲姟涓嬪彂澶辫触锛岀粓鐐�{kt.Location_To},娌℃壘鍒�, "绌烘墭鍑哄簱"); - throw new Exception($"缁堢偣:{kt.Location_To},娌℃壘鍒�); - } - - - - - - //鏌ユ壘璧风偣 - List<Location> strrtList; - - Location start = null; - - - if (!string.IsNullOrEmpty(workFlow.ZONECODE)) - { - strrtList = LocationHelper.GetZoneLoc(workFlow.ZONECODE); - } - else - { - strrtList = LocationHelper.GetAllLocList2(workFlow.STARTAREA); - } - - - - - //瀵绘壘绔嬪簱鍖虹┖鎵�- start = LocationHelper.FindStartcolByLoclistAndcntr(strrtList, workFlow.STARTAREA); - - - LogHelper.Info($"绌烘墭鍑哄簱浠诲姟涓嬪彂璧风偣淇℃伅" + JsonConvert.SerializeObject(start), "绌烘墭鍑哄簱"); - - if (start == null) - { - LogHelper.Info($"绌烘墭鍑哄簱浠诲姟涓嬪彂澶辫触锛岃捣鐐瑰簱鍖簕workFlow.STARTAREA},娌℃壘鍒拌捣鐐�, "绌烘墭鍑哄簱"); - throw new Exception($"璧风偣搴撳尯{workFlow.STARTAREA},娌℃壘鍒拌捣鐐�); - } - - - - - //鑾峰彇鎵樼洏鐮�- var cntrCode = LocationHelper.GetLocCntrCode(start.S_CODE); - - if (workFlow.SENDWCS == "Y") - { - - //姝e紡浠g爜锛岃皟鐢ㄦ帴鍙e鎵惧彲鐢ㄦ帴椹充綅 - var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION); - - var balanceConnectionList = LocationHelper.GetBalanceConnectionList(connectionList); - foreach (var item in balanceConnectionList) + var tm = DateTime.Now.Subtract(kt.CreateDate).TotalMinutes; + LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱缂撳瓨鏃堕棿闂撮殧淇℃伅锛歿tm}", "绌烘墭鍑哄簱"); + if (tm < 1) { - if (item.loc.N_CURRENT_NUM < 2) + continue; + } + + var workFlow = TaskHelper.selectWorkFlowByType(kt.BUSI_TYPE, kt.TOOLS_TPYE); + + + if (workFlow == null) + { + LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂澶辫触锛屾祦绋嬬紪鍙�{kt.BUSI_TYPE},宸ヨ绫诲瀷{kt.TOOLS_TPYE},娌℃壘鍒板搴斾綔涓氭祦绋�, "绌烘墭鍑哄簱"); + continue; + } + else + { + LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浣滀笟娴佺▼淇℃伅" + JsonConvert.SerializeObject(workFlow), "绌烘墭鍑哄簱"); + } + + + + //鍑哄簱浠诲姟 + + //鎺ラ┏浣�+ var connection = ""; + + //鎺ラ┏浣嶅簱鍖�+ var connectionArea = ""; + + + //鏌ユ壘缁欏畾缁堢偣 + var end = LocationHelper.GetLoc(kt.Location_To); + LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂缁堢偣淇℃伅" + JsonConvert.SerializeObject(end), "绌烘墭鍑哄簱"); + + + if (end == null) + { + LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂澶辫触锛岀粓鐐�{kt.Location_To},娌℃壘鍒�, "绌烘墭鍑哄簱"); + continue; + } + + + + + + //鏌ユ壘璧风偣 + List<Location> strrtList; + + Location start = null; + + + if (!string.IsNullOrEmpty(workFlow.ZONECODE)) + { + strrtList = LocationHelper.GetZoneLoc(workFlow.ZONECODE); + } + else + { + strrtList = LocationHelper.GetAllLocList2(workFlow.STARTAREA); + } + + + + + //瀵绘壘绔嬪簱鍖虹┖鎵�+ start = LocationHelper.FindStartcolByLoclistAndcntr(strrtList, workFlow.STARTAREA); + + + LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂璧风偣淇℃伅" + JsonConvert.SerializeObject(start), "绌烘墭鍑哄簱"); + + if (start == null ) + { + LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂澶辫触锛岃捣鐐瑰簱鍖簕workFlow.STARTAREA},娌℃壘鍒拌捣鐐�, "绌烘墭鍑哄簱"); + continue; + } + if (start.S_LOCK_STATE!="鏃�) + { + LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂澶辫触锛岃捣鐐箋start.S_CODE}鏈夐攣", "绌烘墭鍑哄簱"); + continue; + } + + + + //鑾峰彇鎵樼洏鐮�+ var cntrCode = LocationHelper.GetLocCntrCode(start.S_CODE); + + if (workFlow.SENDWCS == "Y") + { + + //姝e紡浠g爜锛岃皟鐢ㄦ帴鍙e鎵惧彲鐢ㄦ帴椹充綅 + var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION); + + var balanceConnectionList = LocationHelper.GetBalanceConnectionList(connectionList); + foreach (var item in balanceConnectionList) { - connection = item.loc.S_CODE; - connectionArea = item.loc.S_AREA_Name; - LogHelper.Info($"绌烘墭鍑哄簱浠诲姟涓嬪彂瀵绘壘鍒板彲鐢ㄦ帴椹充綅{connection}", "绌烘墭鍑哄簱"); - break; + if (item.loc.N_CURRENT_NUM < 2) + { + connection = item.loc.S_CODE; + connectionArea = item.loc.S_AREA_Name; + LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂瀵绘壘鍒板彲鐢ㄦ帴椹充綅{connection}", "绌烘墭鍑哄簱"); + break; + } + } + + if (connection == "") + { + LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂瀵绘壘鎺ラ┏浣嶅け璐�, "Mes浠荤┖鎵樺嚭搴撳姟涓嬪彂"); + continue; } } - if (connection == "") + + var startTask = TaskHelper.GetTaskByStartLoc(start.S_CODE); + if (startTask != null) { - LogHelper.Info($"绌烘墭鍑哄簱浠诲姟涓嬪彂瀵绘壘鎺ラ┏浣嶅け璐�, "Mes浠荤┖鎵樺嚭搴撳姟涓嬪彂"); - throw new Exception($"绌烘墭鍑哄簱浠诲姟涓嬪彂瀵绘壘鎺ラ┏浣嶅け璐�); + LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂澶辫触锛岃捣鐐箋start.S_CODE}鏈夋墽琛屼腑浠诲姟{startTask.S_CODE}", "绌烘墭鍑哄簱"); + continue; } + + + + LocationHelper.LockLoc(start.S_CODE, "鍑哄簱閿�, 2); + + + + //璧风偣缁堢偣鏌ユ壘鎴愬姛锛屽垱寤轰綔涓�+ + var taskType = int.Parse(workFlow.FLOWCODE); + + var operation = new WmsWork + { + // 浣滀笟鍙�+ S_CODE = kt.task_no, + // 浣滀笟绫诲瀷 + N_TYPE = taskType, + // 浣滀笟绫诲瀷 + S_TYPE = workFlow.FLOWNAME, + // 璧风偣璐т綅 + S_START_LOC = start.S_CODE, + // 璧风偣搴撳尯缂栫爜 + S_START_AREA = start.S_AREA_CODE, + //鎺ラ┏浣�+ CONNECTION = connection, + // 缁堢偣璐т綅 + S_END_LOC = end.S_CODE, + // 缁堢偣搴撳尯缂栫爜 + S_END_AREA = end.S_AREA_CODE, + // 瀹瑰櫒缂栫爜 + S_CNTR_CODE = cntrCode, + // 浣滀笟瀹氫箟鍚嶇О + S_OP_DEF_NAME = workFlow.FLOWNAME, + //浼樺厛绾�+ N_PRIORITY = kt.Priority, + //宸ヨ绫诲瀷 + TOOLSTYPE = kt.TOOLS_TPYE, + //璧风偣搴撳尯鍚嶇О + S_START_AREA_NAME = start.S_AREA_Name, + //璧风偣搴撳尯鍚嶇О + S_END_AREA_NAME = end.S_AREA_Name, + //璧风偣搴撳尯鍚嶇О + CONNECTION_AREA = connectionArea + }; + + //鍒涘缓浣滀笟 + if (WMSHelper.CreateWmsWork(operation) && TaskHelper.ChangeMesKtTask(kt)) + { + + LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浣滀笟鍒涘缓鎴愬姛{operation.S_CODE}", "绌烘墭鍑哄簱"); + } + else + { + LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂鍒涘缓浣滀笟澶辫触", "绌烘墭鍑哄簱"); + continue; + } + } - - - //璧风偣缁堢偣鏌ユ壘鎴愬姛锛屽垱寤轰綔涓�- - var taskType = int.Parse(workFlow.FLOWCODE); - - var operation = new WmsWork - { - // 浣滀笟鍙�- S_CODE = kt.task_no, - // 浣滀笟绫诲瀷 - N_TYPE = taskType, - // 浣滀笟绫诲瀷 - S_TYPE = workFlow.FLOWNAME, - // 璧风偣璐т綅 - S_START_LOC = start.S_CODE, - // 璧风偣搴撳尯缂栫爜 - S_START_AREA = start.S_AREA_CODE, - //鎺ラ┏浣�- CONNECTION = connection, - // 缁堢偣璐т綅 - S_END_LOC = end.S_CODE, - // 缁堢偣搴撳尯缂栫爜 - S_END_AREA = end.S_AREA_CODE, - // 瀹瑰櫒缂栫爜 - S_CNTR_CODE = cntrCode, - // 浣滀笟瀹氫箟鍚嶇О - S_OP_DEF_NAME = workFlow.FLOWNAME, - //浼樺厛绾�- N_PRIORITY = kt.Priority, - //宸ヨ绫诲瀷 - TOOLSTYPE = kt.TOOLS_TPYE, - //璧风偣搴撳尯鍚嶇О - S_START_AREA_NAME = start.S_AREA_Name, - //璧风偣搴撳尯鍚嶇О - S_END_AREA_NAME = end.S_AREA_Name, - //璧风偣搴撳尯鍚嶇О - CONNECTION_AREA = connectionArea - }; - - //鍒涘缓浣滀笟 - if (WMSHelper.CreateWmsWork(operation) && TaskHelper.ChangeMesKtTask(kt)) - { - - LogHelper.Info($"绌烘墭鍑哄簱浣滀笟鍒涘缓鎴愬姛{operation.S_CODE}", "绌烘墭鍑哄簱"); - } - else - { - LogHelper.Info($"绌烘墭鍑哄簱浠诲姟涓嬪彂鍒涘缓浣滀笟澶辫触", "绌烘墭鍑哄簱"); - throw new Exception($"绌烘墭鍑哄簱浠诲姟涓嬪彂鍒涘缓浣滀笟澶辫触"); - } - } - - } catch (Exception ex) { - LogHelper.Info($"绌烘墭鍑哄簱寮傚父淇℃伅" + ex.Message, "绌烘墭鍑哄簱"); } } -- Gitblit v1.9.1