From de8cd5585ba690902333cf4ce9aa5dbc7eb9acf6 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期三, 28 五月 2025 17:29:33 +0800 Subject: [PATCH] 根据业务重构库区,增加记录表,开始ERP下发反馈逻辑开发 --- core/WCSCore.cs | 218 +++++++++++++++++++++++++++++------------------------- 1 files changed, 116 insertions(+), 102 deletions(-) diff --git a/core/WCSCore.cs b/core/WCSCore.cs index 95eff3f..a9985d1 100644 --- a/core/WCSCore.cs +++ b/core/WCSCore.cs @@ -4,8 +4,8 @@ using System.Text; using System.Threading.Tasks; +using HH.WCS.Mobox3.DSZSH.api; using HH.WCS.Mobox3.DSZSH.device; - using HH.WCS.Mobox3.DSZSH.models; using HH.WCS.Mobox3.DSZSH.process; using HH.WCS.Mobox3.DSZSH.util; @@ -14,7 +14,6 @@ using Newtonsoft.Json; using static HH.WCS.Mobox3.DSZSH.api.ApiModel; - namespace HH.WCS.Mobox3.DSZSH.core { public class WCSCore { @@ -85,9 +84,12 @@ WCSHelper.UpdateStatus(TN_Task, "鍙栬揣瀹屾垚"); // 浠诲姟鐘舵�鏀规垚鍙栬揣瀹屾垚 TaskProcess.OperateStatus(TN_Task, 4); // 璧风偣瀹瑰櫒璐т綅瑙g粦,瑙i攣璧风偣 - if (TN_Task.S_TYPE == TaskName.鎴愬搧鑳跺嚭搴� { + if (TN_Task.S_TYPE == TaskName.C鎴愬搧鑳跺嚭搴� { var nextOutboundTask = Task.Run(() => { UpdateOutboundTaskState(3); + }); + var pickUpReturnErpTask = Task.Run(() => { + PickUpReturnErp(TN_Task); }); } @@ -102,11 +104,11 @@ case 2: // 瀹屾垚 WCSHelper.End(TN_Task); // 浠诲姟鐘舵�鏀规垚缁撴潫 - if (TN_Task.S_TYPE == TaskName.鎶芥_鍑哄簱) { - var checkCompleteTask = Task.Run(() => { - UpdateCheckTaskState(3); - }); - } + //if (TN_Task.S_TYPE == TaskName.鎶芥_鍑哄簱) { + // var checkCompleteTask = Task.Run(() => { + // UpdateCheckTaskState(3); + // }); + //} break; case 7: // 寮傚父 @@ -123,52 +125,108 @@ } public static ReturnResult SafetyInteraction(SafetyInteractionInfo model) { - var gzResult = new ReturnResult(); var db = new SqlHelper<object>().GetInstance(); - ModbusHelper.Relink(); + var info = ""; try { + ModbusHelper.Relink(); + //var loc = db.Queryable<TN_Location>() + // .Where(l => l.S_AGV_SITE == model.station_name && Settings.AreaMap[AreaName.鍖呰鍖篯.Contains(l.S_AREA_CODE)) + // .First(); - var prodLineInfo = Settings.ProductionLines[0]; - var prodLineDevice = new ProductionLineDevice(prodLineInfo.PlcIp, prodLineInfo.PlcPort); + if (!Settings.AgvSite_ProdLineCodeMap.TryGetValue(model.station_name, out int prodIndex)) { + info = $"AGV 绔欑偣{model.station_name}涓嶆槸鍚堟硶鐨勪骇绾挎帴椹充綅绔欑偣"; + LogHelper.Info(info); + return NewReturnResult(1, info); + } + + var prodLineInfo = Settings.ProductionLines[prodIndex]; + + var prodLineDevice = new ProductionLineDevice(prodLineInfo); if (!prodLineDevice.LoadDeviceStateOk()) { - LogHelper.Info("鍔犺浇璁惧淇℃伅澶辫触"); + info = "涓庝骇绾胯澶囬�璁け璐�; + LogHelper.Info(info); + return NewReturnResult(2, info); } - var tn_task = db.Queryable<TN_Task>().First(a => a.S_CODE == model.task_no); - if (tn_task == null) { - LogHelper.Info($"浠诲姟鍙�'{model.task_no}' 涓嶅瓨鍦�); + //var tn_task = db.Queryable<TN_Task>().First(a => a.S_CODE == model.task_no); + //if (tn_task == null) { + // LogHelper.Info($"浠诲姟鍙�'{model.task_no}' 涓嶅瓨鍦�); + //} + //if (prodLineDevice.SystemState == 1) { + // if (prodLineDevice.FullOffline == 1 && tn_task.S_TYPE == TaskName.鎵樼洏_婊℃墭涓嬬嚎鍏ュ簱) { + // prodLineDevice.AgvPicking = 1; + // } + // if (prodLineDevice.AllowAgvPlacePallet == 1 && tn_task.S_TYPE == TaskName.鎵樼洏_绌烘墭涓婄嚎) { + // prodLineDevice.AgvPlacingPallet = 1; + // } + //} + + if (prodLineDevice.SystemState != 1) { + info = $"褰撳墠浜х嚎鏃犳硶涓嶢GV鑱斿姩锛氱姸鎬亄prodLineDevice.SystemState}"; + LogHelper.Info(info); + return NewReturnResult(3, info); } - // 寰呬慨鏀癸細琛ュ厖涓嶅悓鍒嗘敮AGV鍒ゆ柇 - if (prodLineDevice.SystemState == 1) { - if (prodLineDevice.FullOffline == 1 && tn_task.S_TYPE == TaskName.鎵樼洏_婊℃墭涓嬬嚎鍏ュ簱) { - prodLineDevice.AgvPicking = 1; + if (model.apply_code == "5") { // 璇锋眰鍙栬揣 + if (prodLineDevice.FullOffline != 1) { + info = $"褰撳墠杈撻�绾挎弧鏂欎笅绾夸俊鍙蜂笉涓�锛屾棤娉曞彇璐�; + LogHelper.Info(info); + return NewReturnResult(4, info); } - if (prodLineDevice.AllowAgvPlacePallet == 1 && tn_task.S_TYPE == TaskName.鎵樼洏_绌烘墭涓婄嚎) { - prodLineDevice.AgvPlacingPallet = 1; + + if (!prodLineDevice.SetAgvPicking(1)) { + info = $"鍚戣緭閫佺嚎鍐欏叆鍏佽鍙栬揣淇″彿澶辫触"; + LogHelper.Info(info); + return NewReturnResult(5, info); } + + info = $"鍚戣緭閫佺嚎鍐欏叆鍏佽鍙栬揣淇″彿鎴愬姛"; + LogHelper.Info(info); + return NewReturnResult(0, info); + + } + else if (model.apply_code == "1") { // 璇锋眰鍗歌揣 + if (prodLineDevice.AllowAgvPlacePallet != 1) { + info = $"褰撳墠杈撻�绾垮厑璁告斁鎵樼洏淇″彿涓嶄负1锛屾棤娉曟斁璐�; + LogHelper.Info(info); + return NewReturnResult(6, info); + } + + if (!prodLineDevice.SetAgvPlacingPallet(1)) { + info = $"鍚戣緭閫佺嚎鍐欏叆鍏佽鏀捐揣淇″彿澶辫触"; + LogHelper.Info(info); + return NewReturnResult(7, info); + } + + info = $"鍚戣緭閫佺嚎鍐欏叆鍏佽鏀捐揣淇″彿鎴愬姛"; + LogHelper.Info(info); + return NewReturnResult(0, info); + } + else { + info = $"褰撳墠AGV璇锋眰鐮佷笉涓�5鍙栬揣 鎴�1鍗歌揣"; + LogHelper.Info(info); + return NewReturnResult(8, info); } - LogHelper.Info(JsonConvert.SerializeObject(prodLineDevice, Formatting.Indented)); - return gzResult; } catch (Exception ex) { - LogHelper.Info($"鍙戠敓浜嗗紓甯革細{ex.Message}"); - return gzResult; + info = $"鍙戠敓浜嗗紓甯革細{ex.Message}"; + LogHelper.InfoEx(ex); + return NewReturnResult(1, info); } } public static void UpdateOutboundTaskState(int spotStateCode) { - + var taskName = TaskName.C鎴愬搧鑳跺嚭搴� var db = new SqlHelper<object>().GetInstance(); var detail = db.Queryable<TN_Outbound_Detail>() .First(d => d.N_B_STATE == 2); if (detail == null) { - LogHelper.Info("鍑哄簱--AGV鍙栬揣--鏌ヨDetail锛氬綋鍓嶆病鏈�鎵ц涓�鐨凞etail琛紒"); + LogHelper.Info($"{taskName}--AGV鍙栬揣--鏌ヨ鏄庣粏鍗曪細褰撳墠娌℃湁鎵ц涓殑鏄庣粏鍗�); return; } @@ -176,14 +234,14 @@ detail.N_B_STATE = spotStateCode; if (db.Updateable<TN_Outbound_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { tran.RollbackTran(); - LogHelper.Info("鍑哄簱--AGV鍙栬揣锛氫慨鏀笵etail鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); + LogHelper.Info($"{taskName}--AGV鍙栬揣锛氫慨鏀规槑缁嗗崟鐘舵�涓�浠诲姟鎵ц瀹屾垚--澶辫触锛�); return; } var finishedCount = db.Queryable<TN_Outbound_Detail>().Count(d => d.S_OO_NO == detail.S_OO_NO && d.N_B_STATE == 3); var allCount = db.Queryable<TN_Outbound_Detail>().Count(d => d.S_OO_NO == detail.S_OO_NO); - LogHelper.Info($"鍑哄簱--AGV鍙栬揣--缁熻浠诲姟宸插畬鎴愶細{finishedCount} / {allCount}"); + LogHelper.Info($"{taskName}--AGV鍙栬揣--缁熻浠诲姟宸插畬鎴愶細{finishedCount}/{allCount}"); if (finishedCount == allCount) { // 褰撳墠鍑哄簱鍗曚笅鐨勬墍鏈夋槑缁嗗崟锛屼换鍔¢兘宸茬粡瀹屾垚 @@ -192,7 +250,7 @@ .ExecuteCommand() <= 0) { tran.RollbackTran(); - LogHelper.Info("鍑哄簱--AGV鍙栬揣--鎵�湁浠诲姟瀹屾垚鏃讹細淇敼Order鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); + LogHelper.Info($"{taskName}--AGV鍙栬揣--鎵�湁浠诲姟瀹屾垚鏃讹細淇敼鍗曟嵁鐘舵�涓�浠诲姟鎵ц瀹屾垚--澶辫触锛�); return; } } @@ -201,84 +259,40 @@ } } - public static void UpdateCheckTaskState(int spotStateCode) { - var db = new SqlHelper<object>().GetInstance(); - - var detail = db.Queryable<TN_Check_Detail>() - .First(d => d.N_B_STATE == 2); - - if (detail == null) { - LogHelper.Info("鎶芥--AGV浠诲姟瀹屾垚--鏌ヨDetail锛氬綋鍓嶆病鏈�鎵ц涓�鐨凞etail琛紒"); - return; + public static void PickUpReturnErp(TN_Task task) { + var httpH = new HttpHelper(); + var model = new OtherModel.PickUpReturnErpInfo(); + model.LocCode = task.S_START_LOC; + try { + var jsonInfo = JsonConvert.SerializeObject(model); + var result = httpH.WebPost(Settings.ErpApiUrl + "PickUpReturn", jsonInfo); + // TODO } - - using (var tran = db.Ado.UseTran()) { - detail.N_B_STATE = spotStateCode; - if (db.Updateable<TN_Check_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { - tran.RollbackTran(); - LogHelper.Info("鎶芥--AGV浠诲姟瀹屾垚锛氫慨鏀笵etail鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); - return; - } - - var finishedCount = db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 3); - var allCount = db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO); - - LogHelper.Info($"鎶芥--AGV浠诲姟瀹屾垚锛氱粺璁′换鍔″凡瀹屾垚锛歿finishedCount} / {allCount}"); - - if (finishedCount == allCount) { // 褰撳墠order涓嬬殑detail锛屼换鍔¢兘宸茬粡瀹屾垚 - - if (db.Updateable<TN_Check_Order>().SetColumns(it => it.N_B_STATE == 3) - .Where(it => it.S_NO == detail.S_NO) - .ExecuteCommand() <= 0) { - - tran.RollbackTran(); - LogHelper.Info("鎶芥--AGV浠诲姟瀹屾垚--鎵�湁浠诲姟瀹屾垚鏃讹細淇敼Order鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); - return; - } - } - - tran.CommitTran(); + catch (Exception ex) { + LogHelper.InfoEx(ex); } } - public static void UpdateShiftTaskState(int spotStateCode) { - var db = new SqlHelper<object>().GetInstance(); - - var detail = db.Queryable<TN_Shift_Detail>() - .First(d => d.N_B_STATE == 2); - - if (detail == null) { - LogHelper.Info("绉诲簱--AGV浠诲姟瀹屾垚--鏌ヨDetail锛氬綋鍓嶆病鏈�鎵ц涓�鐨凞etail琛紒"); - return; + /// <summary> + /// 浠诲姟鍒嗗彂锛屾牴鎹皟搴︾被鍨嬪彂缁欎笉鍚岀殑璋冨害绯荤粺 + /// </summary> + internal static void Dispatch() { + //鏌ヨ浠诲姟 + //鑾峰彇鎵�湁绛夊緟鐨勪换鍔�+ var list = WCSHelper.GetWaitingTaskList(); + LogHelper.Info("绛夊緟浠诲姟淇℃伅" + JsonConvert.SerializeObject(list), "API"); + if (list.Count > 0) { + list.ForEach(task => { + //浣跨敤鑷畾涔変换鍔℃帹閫�+ TaskProcess.SendTask(task);//璋冨害NDC鎴栨澀濂ユ垨鍥借嚜璁惧 + //TaskProcess.SendGZTask(task);///璋冨害鍥借嚜璁惧 + }); + } + else { + LogHelper.Info("鏆傛棤浠诲姟"); } - detail.N_B_STATE = spotStateCode; - var finishedCount = db.Queryable<TN_Shift_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 3); - var allCount = db.Queryable<TN_Shift_Detail>().Count(d => d.S_NO == detail.S_NO); - - LogHelper.Info($"绉诲簱--AGV浠诲姟瀹屾垚锛氱粺璁′换鍔″凡瀹屾垚锛歿finishedCount} / {allCount}"); - - using (var tran = db.Ado.UseTran()) { - if (db.Updateable<TN_Shift_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { - tran.RollbackTran(); - LogHelper.Info("绉诲簱--AGV浠诲姟瀹屾垚锛氫慨鏀笵etail鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); - return; - } - - if (finishedCount == allCount) { // 褰撳墠order涓嬬殑detail锛屼换鍔¢兘宸茬粡瀹屾垚 - if (db.Updateable<TN_Shift_Order>().SetColumns(it => it.N_B_STATE == 3) - .Where(it => it.S_NO == detail.S_NO) - .ExecuteCommand() <= 0) { - - tran.RollbackTran(); - LogHelper.Info("绉诲簱--AGV浠诲姟瀹屾垚--鎵�湁浠诲姟瀹屾垚鏃讹細淇敼Order鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); - return; - } - } - - tran.CommitTran(); - } } } } -- Gitblit v1.9.1