From ae6a8a95861a75ee580c75451f57e0504d2c367a Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期一, 09 六月 2025 17:16:49 +0800 Subject: [PATCH] 针对ERP提供的字段,完善部分出库逻辑 --- core/WCSCore.cs | 198 +++++++++++++++++++++++++++--------------------- 1 files changed, 111 insertions(+), 87 deletions(-) diff --git a/core/WCSCore.cs b/core/WCSCore.cs index 5fbf07f..77251ee 100644 --- a/core/WCSCore.cs +++ b/core/WCSCore.cs @@ -4,6 +4,7 @@ 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; @@ -83,10 +84,13 @@ 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); + //}); } break; @@ -106,6 +110,10 @@ // }); //} + var recordTask = Task.Run(() => { + RecordTaskTable(TN_Task); + }); + break; case 7: // 寮傚父 TaskProcess.OperateStatus(TN_Task, 7); // 寮傚父澶勭悊 @@ -120,6 +128,78 @@ return true; } + private static void RecordTaskTable(TN_Task task) { + var db = new SqlHelper<object>().GetInstance(); + var info = ""; + + try { + var cgDetail = new TN_CG_Detail(); // 濡傛灉娌℃湁淇℃伅锛岄粯璁ゅ氨鏄┖鍊硷紝鍙互鐩存帴濉叆锛屼笉闇�鍒ゆ柇 + + //var emptyTask = false; // 绌烘墭/绌虹浠诲姟 + if (task.S_TYPE != TaskName.H濂借繍绠盻绌虹涓婄嚎 && task.S_TYPE != TaskName.H濂借繍绠盻绌虹鍏ュ簱 && + task.S_TYPE != TaskName.T鎵樼洏_绌烘墭涓婄嚎 && task.S_TYPE != TaskName.T鎵樼洏_绌烘墭鍏ュ簱) { + // 闈炵┖鎵�绌虹浠诲姟锛堢┖鎵�绌虹浠诲姟鏃犳硶鍦–GDetail鏌ュ埌鐗╂枡淇℃伅锛�+ //emptyTask= true; + cgDetail = db.Queryable<TN_CG_Detail>() + .Where(d => d.S_CNTR_CODE == task.S_CNTR_CODE) + .First(); + + if (cgDetail == null) { + info = $"浠诲姟{task.S_CODE}瀹屾垚锛岃褰曞嚭鍏ュ簱瀛樺湪闂锛氭棤娉曞湪瀹瑰櫒璐у搧鏄庣粏琛ㄤ腑鎵惧埌鎵樼洏{task.S_CNTR_CODE}瀵瑰簲鐨勭墿鏂�; + LogHelper.Info(info); + //return; + cgDetail = new TN_CG_Detail() ; + cgDetail.S_ITEM_CODE = "寮傚父"; + } + } + + var isInbound = false; // 鍏ュ簱绫诲瀷鐨勪换鍔★紙鍖呮嫭绉诲簱绫讳换鍔★級 + var inboundTasks = new List<string> { + TaskName.H濂借繍绠盻婊$涓嬬嚎鍏ュ簱, TaskName.H濂借繍绠盻绌虹鍏ュ簱, TaskName.T鎵樼洏_婊℃墭涓嬬嚎鍏ュ簱, TaskName.T鎵樼洏_绌烘墭鍏ュ簱, + TaskName.C鎶芥_鍚堟牸鍥炲簱, TaskName.C鎶芥_涓嶅悎鏍肩Щ搴� TaskName.Y绉诲簱 + }; + if (inboundTasks.Contains(task.S_TYPE)) { + isInbound= true; + } + + var record = new TN_Record_Table { + S_ITEM_CODE = cgDetail.S_ITEM_CODE, + S_BATCH_NO = cgDetail.S_BATCH_NO, + S_ITEM_NAME = cgDetail.S_ITEM_NAME, + S_LOC_CODE = isInbound ? task.S_END_LOC : task.S_START_LOC, // 鍏ュ簱璁板綍缁堢偣璐т綅锛屽嚭搴撹褰曡捣鐐硅揣浣�+ S_CNTR_CODE = task.S_CNTR_CODE, + S_ITEM_SPEC = cgDetail.S_ITEM_SPEC, + S_NET_WEIGHT = cgDetail.S_NET_WEIGHT, + S_QUALITY_GRADE = cgDetail.S_QUALITY_GRADE, + S_STANDARD = cgDetail.S_STANDARD, + S_TASK_NO = task.S_CODE, + T_RECORD_TIME = DateTime.Now, + S_TYPE = task.S_TYPE, + S_BS_CODE = task.S_BS_TYPE, + N_QTY = cgDetail.N_ITEM_NUM, + }; + + // 鏁版嵁搴撴搷浣�+ + if (db.Insertable<TN_Record_Table>(record).ExecuteCommand() <= 0) { + info = "鎻掑叆鍑哄叆搴撹褰曡〃澶辫触锛� + JsonConvert.SerializeObject(record); + LogHelper.Info(info); + return; + } + + info = "鎻掑叆鍑哄叆搴撹褰曡〃鎴愬姛"; + LogHelper.Info(info); + } + catch (Exception ex) { + LogHelper.InfoEx(ex); + } + } + + /// <summary> + /// AGV浜х嚎瀹夊叏浜や簰閫昏緫瀹炵幇 + /// </summary> + /// <param name="model"></param> + /// <returns></returns> public static ReturnResult SafetyInteraction(SafetyInteractionInfo model) { var db = new SqlHelper<object>().GetInstance(); var info = ""; @@ -127,9 +207,19 @@ try { ModbusHelper.Relink(); - var prodLineInfo = Settings.ProductionLines[0]; + //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 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()) { info = "涓庝骇绾胯澶囬�璁け璐�; LogHelper.Info(info); @@ -155,7 +245,7 @@ return NewReturnResult(3, info); } - if (model.apply_code == "5") { + if (model.apply_code == "5") { // 璇锋眰鍙栬揣 if (prodLineDevice.FullOffline != 1) { info = $"褰撳墠杈撻�绾挎弧鏂欎笅绾夸俊鍙蜂笉涓�锛屾棤娉曞彇璐�; LogHelper.Info(info); @@ -173,7 +263,7 @@ return NewReturnResult(0, info); } - else if (model.apply_code == "1") { + else if (model.apply_code == "1") { // 璇锋眰鍗歌揣 if (prodLineDevice.AllowAgvPlacePallet != 1) { info = $"褰撳墠杈撻�绾垮厑璁告斁鎵樼洏淇″彿涓嶄负1锛屾棤娉曟斁璐�; LogHelper.Info(info); @@ -191,7 +281,7 @@ return NewReturnResult(0, info); } else { - info = $"褰撳墠杈撻�绾垮厑璁�; + info = $"褰撳墠AGV璇锋眰鐮佷笉涓�5鍙栬揣 鎴�1鍗歌揣"; LogHelper.Info(info); return NewReturnResult(8, info); } @@ -205,13 +295,14 @@ } 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; } @@ -219,14 +310,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) { // 褰撳墠鍑哄簱鍗曚笅鐨勬墍鏈夋槑缁嗗崟锛屼换鍔¢兘宸茬粡瀹屾垚 @@ -235,7 +326,7 @@ .ExecuteCommand() <= 0) { tran.RollbackTran(); - LogHelper.Info("鍑哄簱--AGV鍙栬揣--鎵�湁浠诲姟瀹屾垚鏃讹細淇敼Order鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); + LogHelper.Info($"{taskName}--AGV鍙栬揣--鎵�湁浠诲姟瀹屾垚鏃讹細淇敼鍗曟嵁鐘舵�涓�浠诲姟鎵ц瀹屾垚--澶辫触锛�); return; } } @@ -244,83 +335,17 @@ } } - 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(); - } - } - - 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; - } - - 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(); + catch (Exception ex) { + LogHelper.InfoEx(ex); } } @@ -337,7 +362,6 @@ //浣跨敤鑷畾涔変换鍔℃帹閫� TaskProcess.SendTask(task);//璋冨害NDC鎴栨澀濂ユ垨鍥借嚜璁惧 //TaskProcess.SendGZTask(task);///璋冨害鍥借嚜璁惧 - }); } else { -- Gitblit v1.9.1