From 5321419f5fddb4e877fe90ccd90ebdc1a115af64 Mon Sep 17 00:00:00 2001 From: 海波 张 <2956280567@qq.com> Date: 星期五, 18 七月 2025 17:29:26 +0800 Subject: [PATCH] 出库修改 --- core/Monitor.cs | 514 +++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 357 insertions(+), 157 deletions(-) diff --git a/core/Monitor.cs b/core/Monitor.cs index 0301f28..fb5cd58 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; @@ -22,6 +23,8 @@ /// </summary> internal class Monitor { + private static object CreateTaskLocker = new object(); + /// <summary> /// 鏍规嵁浣滀笟鍒涘缓瀵瑰簲浠诲姟 /// </summary> @@ -29,12 +32,18 @@ { var db = new SqlHelper<object>().GetInstance(); - // 鑾峰彇鎵�湁绛夊緟涓殑浣滀笟 - var operations = db.Queryable<WmsWork>().Where(p => p.N_B_STATE == 0).ToList(); - foreach (var operation in operations) + lock (CreateTaskLocker) { - TaskHelper.CreateTask(operation); + // 鑾峰彇鎵�湁绛夊緟涓殑浣滀笟 + var operations = db.Queryable<WmsWork>().Where(p => p.N_B_STATE == 0).ToList(); + + foreach (var operation in operations) + { + TaskHelper.CreateTask(operation); + } } + + } @@ -86,11 +95,181 @@ public static void UpdateOutTaskPriority() { - //var ts1 = DateTime.Now.Subtract(datetime).TotalMinutes; + var db = new SqlHelper<object>().GetInstance(); + //var st = Settings.outMinutePriority; + var st = TaskHelper.GetOutMinutePriority(); + + if (st==null) + { + return; + } + + var list = TaskHelper.GetWcsTaskListByState("鎵ц", "agv", "鍑哄簱"); + + foreach (var item in list) + { + var wcsTask = TaskHelper.GetTaskByState("瀹屾垚", "wcs", item.S_OP_CODE, "鍑哄簱"); + if (wcsTask != null) { + 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 locker1 = new object(); + + + /// <summary> + /// agv鍔ㄤ綔缂撳瓨澶勭悊 + /// </summary> + /// <param name="model"></param> + public static void agvActionManage() + { + + var db = new SqlHelper<object>().GetInstance(); + + + try + { + lock (locker1) + { + var operations = db.Queryable<AgvActionState>().OrderBy(a => a.T_CREATE).ToList().Take(50); + foreach (var model in operations) + { + var wmsTask = TaskHelper.GetTask(model.task_no); + LogHelper.Info("agvActionManage--浠诲姟淇℃伅" + JsonConvert.SerializeObject(wmsTask), "agv鍔ㄤ綔缂撳瓨"); + LogHelper.Info("agvActionManage--鍙傛暟淇℃伅" + JsonConvert.SerializeObject(model), "agv鍔ㄤ綔缂撳瓨"); + if (wmsTask != null) + { + if (model.state <= 7) + { + //鏈変换鍔″彿璇锋眰 + switch (model.state) + { + case 1: + TaskHelper.Begin(wmsTask, model.forklift_no); + //鑳庨潰浜や簰 + TaskHelper.TmSafety(wmsTask); + break; + case 3: + TaskHelper.UpdateStatus(wmsTask, "寮�鍙栬揣"); + break; + case 4: + TaskHelper.UpdateStatus(wmsTask, "鍙栬揣瀹屾垚"); + LocationHelper.UnLockLoc(wmsTask.S_START_LOC); + TaskProcess.OperateStatus(wmsTask, 4); + TaskHelper.opMesTask(wmsTask, 1); + break; + case 5: + TaskHelper.UpdateStatus(wmsTask, "寮�鍗歌揣"); + break; + case 6: + TaskHelper.UpdateStatus(wmsTask, "鍗歌揣瀹屾垚"); + LocationHelper.UnLockLoc(wmsTask.S_END_LOC); + TaskProcess.OperateStatus(wmsTask, 6); + + //濡傛灉鏄簩娈典换鍔″垯涓嬪彂绔嬪簱浠诲姟 + var wcsTask = TaskHelper.GetTaskByState("鏈墽琛�, "wcs", wmsTask.S_OP_CODE, "鍏ュ簱"); + if (wcsTask != null) + { + LocationHelper.LockLoc(wcsTask.S_START_LOC, "鍑哄簱閿�, 2); + WcsTask.WcsTaskEntity(wcsTask); + } + break; + case 2: + //绌烘墭鍑烘垨鑰呮弧鎵樺嚭浠诲姟瀹屾垚鍒ゆ柇鏄惁瑕佹彁楂樺叆搴撲紭鍏堢骇 + + LogHelper.Info($"浠诲姟{wmsTask.S_CODE}瀹屾垚锛屽垽鏂叆搴撲紭鍏堢骇", "鍏ュ簱浼樺厛绾�); + TaskProcess.inPri(wmsTask); + TaskHelper.End(wmsTask); + + break; + case 7: + if (!LocationHelper.GetErroArea(wmsTask.S_END_AREA)) { + TaskHelper.opMesTask(wmsTask, 3); + } + + var wcsTask1 = TaskHelper.GetTaskByWorkNo(wmsTask.S_OP_CODE, "wcs"); + if (wcsTask1 != null) + { + //agv鎵ц閫氱煡 wcs鍙栨秷 + WcsTask.WcsCallback(wmsTask, model.state, model.forklift_no.ToString()); + if (wcsTask1.S_B_STATE.Trim() != "鍙栨秷" && wcsTask1.S_B_STATE.Trim() != "澶辫触" && wcsTask1.S_B_STATE.Trim() != "瀹屾垚") + { + TaskHelper.Fail(wcsTask1); + TaskProcess.OperateStatus(wcsTask1, 7); + } + } + + + TaskHelper.Fail(wmsTask); + TaskProcess.OperateStatus(wmsTask, 7); + //鍏ュ簱鎴栬�鍥炲簱浠诲姟鍙栨秷鍒犻櫎鎵樼洏鐗╂枡 + if (wmsTask.S_TYPE.Contains("鍏ュ簱") || wmsTask.S_TYPE.Contains("鍥炲簱")) + { + ContainerHelper.delCntr(wmsTask.S_CNTR_CODE); + ContainerHelper.delCntrItem(wmsTask.S_CNTR_CODE); + ContainerHelper.delCntrLoc(wmsTask.S_CNTR_CODE); + } + else { + //鍑哄簱鍙栨秷鍒ゆ柇鎺ラ┏浣嶆槸鍚︽湁璐э紝鏈夎揣闇�瑙g粦 + if (!WcsTask.WcsCvstate(wmsTask)) + { + LogHelper.Info($"Wcs绔嬪簱鎺ラ┏浣嶆棤璐э紝瑙g粦璐т綅:{wmsTask.S_START_LOC}", "绔嬪簱"); + TaskProcess.OperateStatus(wmsTask, 4); + ContainerHelper.delCntr(wmsTask.S_CNTR_CODE); + ContainerHelper.delCntrItem(wmsTask.S_CNTR_CODE); + } + } + + + + break; + + } + TaskHelper.AddActionRecord(wmsTask.S_CODE, model.state, model.forklift_no, model.ext_data); + } + else + { + //瀹夊叏璇锋眰绛�+ TaskProcess.OperateReq(model.task_no, model.state, model.forklift_no, model.ext_data); + } + db.Deleteable(model).ExecuteCommand(); + } + } + } + } + catch (Exception ex) + { + LogHelper.Info("agvActionManage--寮傚父淇℃伅" + ex.Message, "agv鍔ㄤ綔缂撳瓨"); + throw; + } } + + + + + + + + private static object locker = new object(); /// <summary> /// 鑷姩鍑哄簱绌烘墭 /// </summary> @@ -99,172 +278,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,workFlow.CONNECTION); + + + 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") + { + 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.CONNEC_ROADWAY == start.N_ROADWAY) + { + connection = item.loc.S_CODE; + connectionArea = item.loc.S_AREA_Name; + LogHelper.Info($"ZCSendTask鍑哄簱浠诲姟涓嬪彂瀵绘壘鍒板彲鐢ㄦ帴椹充綅{connection}", "Mes浠诲姟涓嬪彂"); + 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; } + + + + + //璧风偣缁堢偣鏌ユ壘鎴愬姛锛屽垱寤轰綔涓�+ + 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)) + { + if (connection != "") + { + LocationHelper.LockLoc(operation.S_START_LOC, "鍑哄簱閿�, 2); + LocationHelper.LockLoc(operation.S_END_LOC, "鍏ュ簱閿�, 1); + LocationHelper.LockLoc(operation.CONNECTION, "鍏ュ簱閿�, 1); + } + 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