From fbb7c2253c86d58583d7e3b0a8a44d0342c43c73 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期五, 25 七月 2025 17:20:52 +0800 Subject: [PATCH] 完善单容器多物料场景的优化重构, 优化ERP回报信息的处理 --- core/WCSCore.cs | 137 ++++++++++++++++++++++++++++++++------------- 1 files changed, 96 insertions(+), 41 deletions(-) diff --git a/core/WCSCore.cs b/core/WCSCore.cs index ca22441..c1b285a 100644 --- a/core/WCSCore.cs +++ b/core/WCSCore.cs @@ -14,8 +14,9 @@ namespace HH.WCS.Mobox3.AnGang.core { - internal class WCSCore - { + internal class WCSCore { + public static string AgvState = string.Empty; + public static ReturnResult OperateAgvTaskStatus(AgvTaskState model) { var result = new ReturnResult(); try { @@ -69,8 +70,9 @@ break; case 4: // 鍙栬揣瀹屾垚 WCSHelper.UpdateStatus(TN_Task, "鍙栬揣瀹屾垚"); // 浠诲姟鐘舵�鏀规垚鍙栬揣瀹屾垚 + TaskProcess.OperateStatus(TN_Task, 4); // 璧风偣瀹瑰櫒璐т綅瑙g粦,瑙i攣璧风偣 - if (TN_Task.S_TYPE == TaskName.浜у搧鍏ュ簱 || TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱) { + if (TN_Task.S_TYPE == TaskName.浜у搧鍏ュ簱 || TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱 || TN_Task.S_TYPE == TaskName.鎸囧畾璐т綅鍏ュ簱 || TN_Task.S_TYPE == TaskName.鐩樼偣鐞嗚揣鍥炲簱) { var captureTask = Task.Run(() => { CapturePic(TN_Task); LogHelper.Info($"{TN_Task}锛氭媿鐓ask缁撴潫"); @@ -85,14 +87,13 @@ }); } - if (TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱) { + if (TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱 || TN_Task.S_TYPE == TaskName.鎸囧畾璐т綅鍏ュ簱 || TN_Task.S_TYPE == TaskName.鐩樼偣鐞嗚揣鍥炲簱) { var weightTask = Task.Run(() => { UpdateWeight(TN_Task); LogHelper.Info("绉伴噸Task缁撴潫"); }); } - - TaskProcess.OperateStatus(TN_Task, 4); // 璧风偣瀹瑰櫒璐т綅瑙g粦,瑙i攣璧风偣 + break; case 5: // 寮�鍗歌揣 WCSHelper.UpdateStatus(TN_Task, "寮�鍗歌揣"); // 浠诲姟鐘舵�鏀规垚寮�鍗歌揣 @@ -103,6 +104,7 @@ break; case 2: // 瀹屾垚 WCSHelper.End(TN_Task); // 浠诲姟鐘舵�鏀规垚缁撴潫 + break; case 7: // 寮傚父 TaskProcess.OperateStatus(TN_Task, 7); // 寮傚父澶勭悊 @@ -126,9 +128,8 @@ return; } - if (db.Updateable<TN_Loc_Container>() - .SetColumns(d => d.S_IMG_URL == filepath) - .Where(d => d.S_CNTR_CODE == model.S_CNTR_CODE).ExecuteCommand() <= 0) { + if (db.Updateable<TN_Loc_Container>().SetColumns(d => d.S_IMG_URL == filepath).Where(d => d.S_CNTR_CODE == model.S_CNTR_CODE).ExecuteCommand() <= 0 && + db.Updateable<TN_CG_Detail>().SetColumns(d => d.S_EXT_ATTR5 == filepath).Where(d => d.S_CNTR_CODE == model.S_CNTR_CODE).ExecuteCommand() <= 0) { // FIX: SNAP LogHelper.Info($"鍥剧墖URL '{filepath}' 鍐欏叆鏁版嵁搴撳け璐�); return; @@ -152,10 +153,10 @@ return; } - var cgDetail = db.Queryable<TN_CG_Detail>() - .Where(d => d.S_CNTR_CODE == tn_task.S_CNTR_CODE).First(); + var cgDetailList = db.Queryable<TN_CG_Detail>() + .Where(d => d.S_CNTR_CODE == tn_task.S_CNTR_CODE).ToList(); - if (cgDetail == null) { + if (cgDetailList.Count == 0) { LogHelper.Info("璁剧疆缁堢偣璐т綅澶辫触锛氬綋鍓嶄换鍔$殑鎵樼洏鍙峰湪鐗╂枡琛ㄤ腑涓嶅瓨鍦�); return; } @@ -164,15 +165,17 @@ if (data.Count == 0) { LogHelper.Info("璁剧疆缁堢偣璐т綅澶辫触锛氭病鏈夋帴鍙楀埌鏉ヨ嚜鍥借嚜AGV鐨勯噸閲忎俊鎭�); - //return; // TODO 姝e紡杩愯鏈夊浗鑷狝GV鐨勬椂鍊欐仮澶�+ //cgDetail.F_QTY = 0; // 涓嶈缃负绌猴紝渚夸簬娴嬭瘯鏃堕鍏堣缃竴涓甯稿� } else { - var weight = float.Parse(data[0].parameter_varchar200_up); - cgDetail.F_QTY = weight; + var weight_str = data[0].parameter_varchar200_up.Split(';')[1].Split('-')[1]; + + var weight = float.Parse(weight_str); + cgDetailList.ForEach(d => d.F_WEIGHT = weight); tn_task.F_WEIGHT = weight; using (var tran = db.Ado.UseTran()) { - if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => it.F_QTY).ExecuteCommand() <= 0) { + if (db.Updateable<TN_CG_Detail>(cgDetailList).UpdateColumns(it => it.F_WEIGHT).ExecuteCommand() <= 0) { tran.RollbackTran(); LogHelper.Info("淇敼鐗╂枡琛ㄩ噸閲忓け璐�); return; @@ -204,20 +207,40 @@ return; } + //row -= 100; // 111-118 => 1-8 + // 鍙綋涔嬪墠鎸囧畾缁堢偣璐ф灦鍚庯紝鎵嶅皾璇曡绠楃粓鐐硅揣浣�- if (cgDetail.F_QTY > 2000) { + if (tn_task.F_WEIGHT > 2000) { // 閲嶉噺瓒呰繃 2t endLoc = null; LogHelper.Info("閲嶉噺瓒呰繃2t锛屼笉鍏佽鍏ュ簱"); - return; + + // 浼犻�缁欏浗鑷狝GV + if (GZRobot.TryGetInteractionInfoId(tn_task.S_CODE, out var id1)) { + if (GZRobot.UpdateInteractInfo(new UpdateInteractInfo { + type_name = "GET_DST", + interaction_info_id = id1, + info_status = "error", + })) { + LogHelper.Info($"鍥借嚜AGV鎺ュ彈瓒呴噸鍙栨秷淇℃伅鎴愬姛", "HosttoagvTask"); + } + else { + LogHelper.Info($"鍥借嚜AGV鎺ュ彈瓒呴噸鍙栨秷淇℃伅澶辫触", "HosttoagvTask"); + } + } + else { + LogHelper.Info($"AGV锛氳幏鍙栦换鍔tn_task.S_CODE}鐨刬nteraction_info_id澶辫触锛�, "HosttoagvTask"); + } + + return; // 瓒呴噸浼氳嚜宸眗eturn锛屽鏋滃浗鑷猘gv娌℃帴鍙楀埌涔熶笉闇�鎻愬墠return } - else if (cgDetail.F_QTY > 1500) { + else if (tn_task.F_WEIGHT > 1500) { // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-2灞傝揣鏋� endLoc = db.Queryable<TN_Location>() .First(a => a.N_ROW == row && a.N_LAYER <= 2 && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y"); } - else if (cgDetail.F_QTY > 0) { + else if (tn_task.F_WEIGHT > 0) { // 閲嶉噺鏈秴杩�.5t锛屽湪鎸囧畾璐ф灦闅忎究閫夋嫨1涓� endLoc = db.Queryable<TN_Location>().Where(a => a.N_ROW == row && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") @@ -226,24 +249,23 @@ else { // 娌℃湁鎺ユ敹鍒伴噸閲忥紝鎴栭噸閲忓嚭閿� endLoc = null; - LogHelper.Info($"閿欒鐨勯噸閲忎俊鎭細{cgDetail.F_QTY}"); + LogHelper.Info($"閿欒鐨勯噸閲忎俊鎭細{tn_task.F_WEIGHT}"); return; } // 濡傛灉娌℃湁绗﹀悎鏉′欢鐨勮揣浣嶏紝缃┖锛岀瓑寰匬DA閲嶆柊纭畾 if (endLoc == null) { - tn_task.S_END_AREA = Settings.Areas[1][0]; // HJQ + tn_task.S_END_AREA = Settings.Areas[AreaIndex.H璐ф灦鍖篯[0]; // HJQ tn_task.S_END_LOC = "0"; // 涓嶉渶瑕佸啀缁橤Z AGV浼犵┖鍊硷紝涓�紑濮嬪氨娌$粰鍏蜂綋璐т綅锛屽彧缁欎簡Area - //var request = new UpdateInteractInfo { // interaction_info_id = 3, // 鏇存敼缁堢偣淇℃伅 // info_status = "active", // return_value = "", //}; - //GZRobot.UpdateInteractInfo(request); + if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC }) .ExecuteCommand() > 0) { //LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿�@@ -258,6 +280,26 @@ tn_task.S_END_LOC = endLoc.S_CODE; LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿�+ + // 浼犻�缁欏浗鑷狝GV + if (GZRobot.TryGetInteractionInfoId(tn_task.S_CODE, out var id2)) { + if (GZRobot.UpdateInteractInfo(new UpdateInteractInfo { + type_name = "GET_DST", + interaction_info_id = id2, + info_status = "invalid", + return_value = LocationHelper.GetAgvSite(tn_task.S_END_LOC), // 鐩墠浣跨敤agvsite + })) { + LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅鎴愬姛", "HosttoagvTask"); + } + else { + LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触", "HosttoagvTask"); + return; + } + } + else { + LogHelper.Info($"AGV锛氳幏鍙栦换鍔tn_task.S_CODE}鐨刬nteraction_info_id澶辫触锛�, "HosttoagvTask"); + return; + } using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC }) @@ -290,10 +332,10 @@ try { - var cgDetail = db.Queryable<TN_CG_Detail>() - .Where(d => d.S_CNTR_CODE == tn_task.S_CNTR_CODE).First(); + var cgDetailList = db.Queryable<TN_CG_Detail>() + .Where(d => d.S_CNTR_CODE == tn_task.S_CNTR_CODE).ToList(); - if (cgDetail == null) { + if (cgDetailList == null) { LogHelper.Info("鏇存柊鐗╂枡閲嶉噺澶辫触锛氬綋鍓嶄换鍔$殑鎵樼洏鍙峰湪鐗╂枡琛ㄤ腑涓嶅瓨鍦�); return; } @@ -304,11 +346,12 @@ LogHelper.Info("鏇存柊鐗╂枡閲嶉噺澶辫触锛氭病鏈夋帴鍙楀埌鏉ヨ嚜鍥借嚜AGV鐨勯噸閲忎俊鎭�); return; } + var weight_str = data[0].parameter_varchar200_up.Split(';')[1].Split('-')[1]; - var weight = float.Parse(data[0].parameter_varchar200_up); - cgDetail.F_QTY = weight; - - if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => it.F_QTY).ExecuteCommand() <= 0) { + var weight = float.Parse(weight_str); + cgDetailList.ForEach(a => a.F_WEIGHT = weight); + + if (db.Updateable<TN_CG_Detail>(cgDetailList).UpdateColumns(it => it.F_WEIGHT).ExecuteCommand() <= 0) { LogHelper.Info("淇敼鐗╂枡琛ㄩ噸閲忓け璐�); return; } @@ -325,24 +368,18 @@ /// <summary> /// 浠诲姟鍒嗗彂锛屾牴鎹皟搴︾被鍨嬪彂缁欎笉鍚岀殑璋冨害绯荤粺 /// </summary> - internal static void Dispatch() - { + internal static void Dispatch() { //鏌ヨ浠诲姟 //鑾峰彇鎵�湁绛夊緟鐨勪换鍔� var list = WCSHelper.GetWaitingTaskList(); LogHelper.Info("绛夊緟浠诲姟淇℃伅" + JsonConvert.SerializeObject(list), "API"); - if (list.Count > 0) - { - list.ForEach(task => - { + if (list.Count > 0) { + list.ForEach(task => { //浣跨敤鑷畾涔変换鍔℃帹閫� TaskProcess.SendTask(task);//璋冨害NDC鎴栨澀濂ユ垨鍥借嚜璁惧 - //TaskProcess.SendGZTask(task);///璋冨害鍥借嚜璁惧 - }); } - else - { + else { LogHelper.Info("鏆傛棤浠诲姟"); } } @@ -356,5 +393,23 @@ // 鐩墠璇ラ」鐩病鏈夌珯鍙板畨鍏ㄤ氦浜掔殑鍔熻兘 return gzResult; } + + public static string agvRealtimeStateReport(agvRealtimeStateReportInfo model) { + var res = string.Empty; + switch (model.agvStatusID) { + case 1: res = "in_system"; break; + case 2: res = "out_system"; break; + case 3: res = "online"; break; + case 4: res = "offline"; break; + case 5: res = "ready"; break; + case 6: res = "not_ready"; break; + case 7: res = "in_dispatch"; break; + case 8: res = "out_dispatch"; break; + case 9: res = "running"; break; + case 10: res = "not_running"; break; + } + AgvState = res; + return res; + } } } -- Gitblit v1.9.1